101 lines
3.8 KiB
PHP
101 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Bo;
|
|
|
|
use App\Enums\NotificationType;
|
|
use App\Events\NewNotification;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Ranges;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Reductions;
|
|
use Carbon\Carbon;
|
|
|
|
class ReductionsController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$r = Reductions::where('end_date_broadcast', '>', Carbon::now())->paginate();
|
|
$ranges = Ranges::with('products')->get();
|
|
return view('bo.reductions.index', compact('r', 'ranges'));
|
|
}
|
|
|
|
public function saveDatas(Request $request)
|
|
{
|
|
$reductionId = $request->reductionId;
|
|
$products = $request->products;
|
|
$ranges = $request->ranges;
|
|
$notification = $request->notification === null ? 0 : 1;
|
|
|
|
$reduction = Reductions::find($reductionId);
|
|
$reduction->ranges()->sync($ranges);
|
|
foreach ($ranges as $rangeId) {
|
|
$range = $reduction->ranges()->where('range_id', $rangeId)->first();
|
|
foreach ($products as $product) {
|
|
if (in_array($product, $range->products()->pluck('id')->toArray())) {
|
|
array_splice($products, array_search($product, $products), 1);
|
|
}
|
|
}
|
|
}
|
|
$reduction->products()->sync($products);
|
|
$reduction->notification = $notification;
|
|
$reduction->save();
|
|
if ($notification === 1) {
|
|
event(new NewNotification(NotificationType::reduction(), route('club.reductions'), $reduction));
|
|
}
|
|
|
|
return "Traitement terminé";
|
|
}
|
|
|
|
/**
|
|
* Permet la mise à jour des bons de réductions depuis MesBR manuellement dans le BO
|
|
*/
|
|
public function updateBr()
|
|
{
|
|
// On commence par supprimer les réductions dont la date de fin est dépassée
|
|
Reductions::where('end_date_broadcast', '<', Carbon::now())->delete();
|
|
|
|
// On récupère les réductions depuis MesBR
|
|
/** @var \App\Lib\MesBR */
|
|
$mesBR = app('mesBr');
|
|
$reductions = $mesBR->getDetailCampaign();
|
|
|
|
// Mise à jour et ajout des coupons en BDD
|
|
$detailCampagne = $reductions->{'Détails Campagne'};
|
|
if (isset($detailCampagne->Coupons)) {
|
|
foreach ($detailCampagne->Coupons as $coupon) {
|
|
$reduction = Reductions::where('code', $coupon->{'Code traitement'})->first();
|
|
if (!$reduction) {
|
|
$reduction = new Reductions();
|
|
$reduction->code = $coupon->{'Code traitement'};
|
|
}
|
|
$reduction->wording = $coupon->{'Nom'};
|
|
$reduction->number_broadcast = $coupon->{'Nb à diffuser'};
|
|
$reduction->number_broadcasted = $coupon->{'Nb diffusé'};
|
|
$reduction->face_value = floatval($coupon->{'Valeur faciale'});
|
|
$reduction->status = $coupon->{'En ligne'} == "oui" ? 1 : 0;
|
|
|
|
if (
|
|
isset($coupon->{'Date de fin de diffusion'}) &&
|
|
$coupon->{'Date de fin de diffusion'} != "01/01/1970"
|
|
) {
|
|
$endDatetime = Carbon::createFromFormat(
|
|
'Y-m-d',
|
|
date('Y-m-d', strtotime(str_replace("/", "-", $coupon->{'Date de fin de diffusion'})))
|
|
);
|
|
} else {
|
|
$endDatetime = Carbon::createFromFormat('Y-m-d', date('Y-m-d', strtotime("2099-12-30")));
|
|
}
|
|
|
|
// Ne pas enregistrer les reductions dont la date de fin est déjà passée
|
|
if ($endDatetime < Carbon::now()) {
|
|
continue;
|
|
}
|
|
|
|
$reduction->end_date_broadcast = $endDatetime;
|
|
$reduction->save();
|
|
}
|
|
}
|
|
|
|
return redirect()->route('bo.reductions.index');
|
|
}
|
|
}
|