ldc-mesbr-app/app/Http/Controllers/Fo/BasketController.php
2026-10-28 13:10:33 +01:00

88 lines
3 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Models\Calendrier;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\Basket\PrintRequest;
use App\Models\Basket;
use App\Traits\GenerateBR;
use PDF;
use Illuminate\Http\Request;
use LDC\LDCCRM\CrmApiV4;
class BasketController extends Controller
{
use GenerateBR;
// FIXME: Docblock
public function show(Request $request, Basket $basket)
{
$totalQuantity = $basket->contents->sum(fn($content) => $content->quantity - $content->printed);
if (!$totalQuantity) {
return view('fo.basket.empty', compact('basket'));
}
return view('fo.basket.show', compact('basket', 'totalQuantity'));
}
// FIXME: Docblock
public function print(PrintRequest $request, Basket $basket)
{
$campagne = $basket->campagne;
$crm = new CrmApiV4(config('services.crm.endpoint'), $campagne->site->crm_token, $campagne->site->crm_password);
/**
* @var \LDC\LDCCRM\Models\Customer
*/
$crmInfos = $crm->getCustomer($basket->customer->hashcode);
throw_if(is_null($crmInfos), \Exception::class, 'Customer not found.');
$coupons = [];
$currentDateTime = date('Y-m-d H:i:s');
foreach ($basket->contents as $content) {
$coupon = $content->coupon()->whereRaw(
"coupon_published = 1 AND
(coupon_mindatediffusion IS NULL OR coupon_mindatediffusion <= NOW()) AND
(coupon_maxdatediffusion IS NULL OR coupon_maxdatediffusion >= NOW()) AND
(coupon_maxdatevalidity IS NULL OR coupon_maxdatevalidity >= NOW())"
)->first();
if ($coupon !== null) {
$calendars = Calendrier::where('calendrier_couponId', $coupon->coupon_id)->get();
$published = true;
if (!$calendars->isEmpty()) {
$published = false;
foreach ($calendars as $calendar) {
if ($currentDateTime > $calendar->calendrier_startdate && $currentDateTime < $calendar->calendrier_enddate) {
$published = true;
break; // Exit loop early as condition is met
}
}
}
if ($published) {
$qtyToPrint = $content->quantity - $content->printed;
for ($i = 0; $i < $qtyToPrint; $i++) {
$coupons[] = $this->printCoupon($coupon, $basket->customer, $crmInfos, $campagne);
}
$content->printed = $content->quantity;
$content->save();
}
}
}
if (empty($coupons)) {
return to_route('fo.basket.show', $basket);
}
// $coupons contains all printed coupons
$pdf = PDF::loadView('pdf.coupons', ['coupons' => $coupons]);
return $pdf->download(sprintf("coupons_%s_%s_%s.pdf", $crmInfos->firstname, $crmInfos->lastname, date('d-m-Y_H-i-s')));
}
}