2021-04-20 11:16:34 +02:00
< ? php
namespace App\Http\Controllers\Api\v1 ;
2021-08-05 12:06:24 +02:00
use App\Calendrier ;
use App\Campagne ;
2021-04-20 19:51:30 +02:00
use App\Http\Requests\Customers\StoreRequest ;
use App\Http\Resources\CustomersResource ;
2021-04-20 11:16:34 +02:00
use App\Http\Resources\StatusResource ;
2021-04-20 19:51:30 +02:00
use App\Models\Customers ;
2021-04-20 11:16:34 +02:00
use App\Http\Controllers\Controller ;
2021-08-05 12:06:24 +02:00
use App\Http\Requests\Customers\MurRequest ;
use App\Http\Resources\CouponsResource ;
use App\Traits\CouponTrait ;
2021-04-20 19:51:30 +02:00
use Illuminate\Support\Facades\Log ;
2021-08-05 12:06:24 +02:00
use Illuminate\Support\Facades\Request ;
2021-04-20 11:16:34 +02:00
class CustomerController extends Controller
{
2021-08-05 12:06:24 +02:00
use CouponTrait ;
2021-04-20 11:16:34 +02:00
/**
* Display a listing of the resource .
*
* @ return StatusResource
*/
public function index ()
{
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
}
/**
* Show the form for creating a new resource .
*
* @ return StatusResource
*/
public function create ()
{
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
}
/**
* Store a newly created resource in storage .
*
2021-04-20 19:51:30 +02:00
* @ param StoreRequest $request
* @ return CustomersResource | StatusResource
2021-04-20 11:16:34 +02:00
*/
2021-04-20 19:51:30 +02:00
public function store ( StoreRequest $request )
2021-04-20 11:16:34 +02:00
{
2021-06-29 16:04:22 +02:00
$datas = $request -> validated ();
2021-04-20 19:51:30 +02:00
try {
2021-06-29 16:04:22 +02:00
$customer = Customers :: where ([
2021-08-13 11:48:06 +02:00
[ 'hashcode' , $datas [ 'hashcode' ]],
2021-06-29 16:04:22 +02:00
[ 'email' , $datas [ 'email' ]]
]) -> firstOrNew ();
$customer -> fill ( $datas );
2021-04-20 19:51:30 +02:00
$customer -> saveOrFail ();
return new CustomersResource ( $customer );
2021-04-27 17:29:47 +02:00
} catch ( \Throwable $e ) {
2021-04-20 19:51:30 +02:00
Log :: critical ( $e -> getMessage ());
return new StatusResource ([ 'status' => 'KO' , 'code' => '500' , 'message' => 'Server Error.' ]);
}
2021-04-20 11:16:34 +02:00
}
/**
* Display the specified resource .
*
2025-04-03 09:30:16 +02:00
* @ param integer $id
2021-04-20 11:16:34 +02:00
* @ return StatusResource
*/
public function show ( $id )
{
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
}
/**
* Show the form for editing the specified resource .
*
2025-04-03 09:30:16 +02:00
* @ param integer $id
2021-04-20 11:16:34 +02:00
* @ return StatusResource
*/
public function edit ( $id )
{
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
}
/**
* Update the specified resource in storage .
*
2021-06-29 16:04:22 +02:00
* @ param Request $request
* @ return StatusResource
2021-04-20 11:16:34 +02:00
*/
2021-06-29 16:04:22 +02:00
public function update ( Request $request )
2021-04-20 11:16:34 +02:00
{
2021-06-29 16:04:22 +02:00
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
2021-04-20 11:16:34 +02:00
}
/**
* Remove the specified resource from storage .
*
2025-04-03 09:30:16 +02:00
* @ param integer $id
2021-04-20 11:16:34 +02:00
* @ return StatusResource
*/
public function destroy ( $id )
{
return new StatusResource ([ 'status' => 'KO' , 'code' => '501' , 'message' => 'Not Implemented' ]);
}
2021-08-05 12:06:24 +02:00
public function mur ( MurRequest $request )
{
$datas = $request -> validated ();
2021-08-13 11:48:06 +02:00
$customer = Customers :: where ( 'hashcode' , $datas [ 'hashcode' ]) -> first ();
2021-08-05 12:06:24 +02:00
$campagne = Campagne :: find ( $datas [ 'refcamp' ]);
if ( $campagne -> camp_published === 0 ) {
return new StatusResource ([ 'status' => 'KO' , 'code' => 404 , 'message' => 'Campaign not found.' ]);
}
$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 ) {
if ( strtotime ( date ( 'Y-m-d H:i:s' )) > strtotime ( $calendar -> calendrier_startdate ) && strtotime ( date ( 'Y-m-d H:i:s' )) < strtotime ( $calendar -> calendrier_enddate )) {
$pub = true ;
}
}
if ( ! $pub ) {
$coupons -> forget ( $key );
continue ;
}
}
// Available for user
$coupon -> isUsed = $this -> isUsed ( $coupon , $campagne , $customer );
$montantTotal += $coupon -> coupon_value ;
if ( ! $coupon -> isUsed ) {
$montantDispo += $coupon -> coupon_value ;
}
2025-04-03 09:30:16 +02:00
} //end foreach
2021-08-05 12:06:24 +02:00
return new StatusResource ([
'status' => " OK " ,
'name' => $campagne -> camp_name ,
'limited_printing' => $campagne -> camp_limitedPrinting ,
'total' => count ( $coupons ),
'available_amount' => $montantDispo ,
'total_amount' => $montantTotal ,
'coupons' => CouponsResource :: collection ( $coupons )
]);
}
2021-04-20 11:16:34 +02:00
}