2021-04-27 17:29:47 +02:00
< ? php
namespace App\Http\Controllers\Api\v1 ;
2025-11-12 16:35:16 +01:00
use App\Models\Calendrier ;
use App\Models\Campagne ;
2025-08-05 14:47:02 +02:00
use App\Enums\CampaignTypes ;
2021-04-27 17:29:47 +02:00
use App\Http\Controllers\Controller ;
2021-08-05 12:06:24 +02:00
use App\Http\Requests\Murs\MursShowRequest ;
2021-04-27 17:29:47 +02:00
use App\Http\Resources\CouponsResource ;
use App\Http\Resources\StatusResource ;
use App\Traits\CouponTrait ;
class MurController extends Controller
{
use CouponTrait ;
2021-08-05 12:06:24 +02:00
public function show ( MursShowRequest $request )
2021-04-27 17:29:47 +02:00
{
$datas = $request -> validated ();
$campagne = Campagne :: find ( $datas [ 'refcamp' ]);
if ( $campagne -> camp_published === 0 ) {
return new StatusResource ([ 'status' => 'KO' , 'code' => 404 , 'message' => 'Campaign not found.' ]);
}
2025-08-14 17:05:09 +02:00
if ( ! $campagne -> camp_type -> equals ( CampaignTypes :: mur ())) {
2021-08-05 12:06:24 +02:00
return new StatusResource ([ 'status' => 'KO' , 'code' => 403 , 'message' => 'Campaign type error.' ]);
}
2021-04-27 17:29:47 +02:00
$coupons = $campagne -> coupons () -> 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()) " ) -> get ();
$montantDispo = 0 ;
$montantTotal = 0 ;
// TODO : Improve
foreach ( $coupons as $key => $coupon ) {
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier :: where ([ 'calendrier_couponId' => $coupon -> coupon_id ]) -> get ();
if ( ! $calendars -> isEmpty ()) {
$pub = false ;
foreach ( $calendars as $calendar ) {
2026-06-11 16:51:49 +02:00
if ( $calendar -> isPublished ()) {
2021-04-27 17:29:47 +02:00
$pub = true ;
}
}
if ( ! $pub ) {
$coupons -> forget ( $key );
continue ;
}
}
$montantTotal += $coupon -> coupon_value ;
if ( ! $coupon -> isUsed ) {
$montantDispo += $coupon -> coupon_value ;
}
2025-04-03 09:30:16 +02:00
} //end foreach
2021-04-27 17:29:47 +02:00
return new StatusResource ([
'status' => " OK " ,
2021-08-05 12:06:24 +02:00
'name' => $campagne -> camp_name ,
'limited_printing' => $campagne -> camp_limitedPrinting ,
2021-04-27 17:29:47 +02:00
'total' => count ( $coupons ),
'available_amount' => $montantDispo ,
'total_amount' => $montantTotal ,
'coupons' => CouponsResource :: collection ( $coupons )
]);
}
}