ldc-mesbr-app/app/Http/Controllers/CampagneController.php

405 lines
14 KiB
PHP
Raw Normal View History

2019-01-15 14:17:15 +01:00
<?php
namespace App\Http\Controllers;
use App\Campagne;
use App\Site;
use App\Coupon;
2019-03-07 12:38:56 +01:00
use App\Contact;
2019-01-29 12:26:00 +01:00
use App\Mur;
use App\PanierContent;
2019-01-15 14:17:15 +01:00
use App\Notification;
use Illuminate\Http\Request;
2019-02-13 16:37:14 +01:00
use Illuminate\Support\Facades\File;
2019-02-26 08:57:56 +01:00
use App\Traits\CouponTrait;
2019-01-29 12:26:00 +01:00
use Response;
2019-01-15 14:17:15 +01:00
class CampagneController extends Controller
{
2025-04-03 09:30:16 +02:00
// use BarcodeGenerator;
2019-02-26 08:57:56 +01:00
use CouponTrait;
2021-04-27 17:29:47 +02:00
2019-01-15 14:17:15 +01:00
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get();
return view('campagne.index')->with('campagnes', $campagnes);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('campagne.create');
}
/**
* Store a newly created resource in storage.
*
2025-04-03 09:30:16 +02:00
* @param \Illuminate\Http\Request $request
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
2021-04-27 17:29:47 +02:00
2025-04-03 09:30:16 +02:00
$campagne = new Campagne();
$campagne->camp_name = $request->input('camp_name');
$campagne->camp_type = $request->input('camp_type');
2019-01-15 14:17:15 +01:00
$campagne->camp_published = $request->input('camp_published');
if (null !== $request->input('camp_limitedPrinting')) {
$campagne->camp_limitedPrinting = $request->input('camp_limitedPrinting');
}
2019-04-03 11:10:50 +02:00
$campagne->camp_siteId = session()->get('site')->site_id;
2019-04-03 11:26:50 +02:00
$site = session()->get('site');
2019-01-15 14:17:15 +01:00
if ($site->campagnes()->save($campagne)) {
2025-04-03 09:30:16 +02:00
// File::makeDirectory(public_path('/landings/' . $campagne->camp_id));
2021-04-27 17:29:47 +02:00
if ($campagne->camp_type == 0) {
2019-02-13 16:37:14 +01:00
File::copyDirectory(resource_path('/views/template/mur'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 1) {
File::copyDirectory(resource_path('/views/template/panier'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 2) {
File::copyDirectory(resource_path('/views/template/murnoselection'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type == 3) {
File::copyDirectory(resource_path('/views/template/panierselection'), public_path('/landings/' . $campagne->camp_id));
}
2019-01-15 14:17:15 +01:00
}
return redirect(route('campagne.edit', ['campagne' => $campagne]));
}
/**
* Show the form for editing the specified resource.
*
2025-04-03 09:30:16 +02:00
* @param \App\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function edit(Campagne $campagne)
{
$site = Site::findOrFail(session()->get('site')->id)->first();
$couponsLinked = $campagne->coupons()->get();
2025-04-03 09:30:16 +02:00
$campid = $campagne->camp_id;
2019-01-15 14:17:15 +01:00
2021-04-27 17:29:47 +02:00
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campid) {
2019-01-15 14:17:15 +01:00
$q->where('campagne_id', $campid);
})->where('coupon_siteId', session()->get('site')->id)->get();
return view('campagne.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked, 'couponsLinked' => $couponsLinked]);
}
/**
* Update the specified resource in storage.
*
2025-04-03 09:30:16 +02:00
* @param \Illuminate\Http\Request $request
* @param \App\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Campagne $campagne)
2021-04-27 17:29:47 +02:00
{
2019-02-13 16:37:14 +01:00
$site = Site::findOrFail(session()->get('site')->id)->first();
$couponsLinked = $campagne->coupons()->get();
2025-04-03 09:30:16 +02:00
$campid = $campagne->camp_id;
2019-02-13 16:37:14 +01:00
2021-04-27 17:29:47 +02:00
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campid) {
2019-02-13 16:37:14 +01:00
$q->where('campagne_id', $campid);
})->where('coupon_siteId', session()->get('site')->id)->get();
2021-04-27 17:29:47 +02:00
if (!isset($request->camp_limitedPrinting)) {
2019-02-26 11:32:45 +01:00
$campagne->camp_limitedPrinting = 0;
$campagne->save();
}
2019-01-15 14:17:15 +01:00
if ($campagne->update($request->all())) {
session()->flash('update_ok', 'La campagne a bien été modifiée');
} else {
session()->flash('update_nok', 'Erreur lors de l\'enregistrement');
}
2019-02-28 17:05:24 +01:00
return redirect()->route('campagne.edit', ['campagne' => $campagne]);
2019-01-15 14:17:15 +01:00
}
/**
* Remove the specified resource from storage.
*
2025-04-03 09:30:16 +02:00
* @param \App\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function destroy(Campagne $campagne)
2021-04-27 17:29:47 +02:00
{
2019-02-13 16:37:14 +01:00
$campagne->camp_published = 0;
$campagne->save();
2025-04-03 09:30:16 +02:00
// File::deleteDirectory(public_path('/landings/' . $campagne->camp_id));
2019-01-15 14:17:15 +01:00
if ($campagne->delete()) {
return redirect(route('campagne.index'));
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('campagne.edit')->with('campagne', $campagne);
}
}
/**
2025-04-03 09:30:16 +02:00
* @param \Illuminate\Http\Request $request
*
* @return array
*/
2019-01-15 14:17:15 +01:00
public function saveNotification(Request $request)
{
2025-04-03 09:30:16 +02:00
$notification = new Notification();
$notification->notif_name = $request->input('notif_name');
$notification->notif_email = $request->input('notif_email');
2019-01-15 14:17:15 +01:00
$notification->notif_campId = $request->input('notif_campId');
$notification->save();
return redirect()->back();
}
/**
2025-04-03 09:30:16 +02:00
* @param \App\Notification $notification
2019-01-15 14:17:15 +01:00
*
* @return array
*/
public function deleteNotification($id)
{
$notification = Notification::find($id);
if ($notification->delete()) {
return redirect()->back();
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return redirect()->back();
}
}
/**
* @param \App\Coupon $coupon
*
* @return array
*/
2019-02-13 16:37:14 +01:00
// public function deleteCoupon($id)
// {
2025-04-03 09:30:16 +02:00
// $coupon = Coupon::find($id);
// if ($notification->delete()) {
// return redirect()->back();
// } else {
// session()->flash('delete_nok', 'Erreur lors de la suppression');
// return redirect()->back();
// }
2019-02-13 16:37:14 +01:00
// }
2021-04-27 17:29:47 +02:00
public function getDetail(Request $request)
{
2019-01-29 12:26:00 +01:00
$error = false;
// ---- Contrôle des paramètres
2021-04-27 17:29:47 +02:00
if (isset($request->refcamp) && $request->refcamp != "") {
2025-04-03 09:30:16 +02:00
$refcamp = $request->refcamp;
2019-01-29 12:26:00 +01:00
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
2021-04-27 17:29:47 +02:00
if (!$campagne) {
2019-01-29 12:26:00 +01:00
return Response::json([
'Statut' => 'KO',
2019-02-26 08:57:56 +01:00
'Code' => 103,
2019-01-29 12:26:00 +01:00
'Message' => 'La campagne n\'existe pas'
]);
}
2021-04-27 17:29:47 +02:00
} else {
2019-01-29 12:26:00 +01:00
$error = true;
}
2021-04-27 17:29:47 +02:00
if (isset($request->refsite) && $request->refsite != "") {
2019-01-29 12:26:00 +01:00
$refsite = $request->refsite;
2025-04-03 09:30:16 +02:00
$site = Site::where(['site_id' => $refsite])->first();
2021-04-27 17:29:47 +02:00
if (!$site) {
2019-01-29 12:26:00 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
]);
};
2021-04-27 17:29:47 +02:00
} else {
2019-01-29 12:26:00 +01:00
$error = true;
}
2021-04-27 17:29:47 +02:00
if ($campagne->camp_siteId != $site->site_id) {
2019-01-29 12:26:00 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 108,
'Message' => 'Pas de campagne pour ce site'
]);
}
2021-04-27 17:29:47 +02:00
if ($error) {
2019-01-29 12:26:00 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
2021-04-27 17:29:47 +02:00
$enligne = ($campagne->camp_published == 1) ? "oui" : "non";
2019-01-29 12:26:00 +01:00
switch ($campagne->camp_type) {
case 0:
$type = "mur";
break;
case 1:
$type = "panier";
break;
case 2:
$type = "mur sans sélection";
break;
case 3:
$type = "panier avec sélection";
break;
}
2021-04-27 17:29:47 +02:00
$data = array (
2019-01-29 12:26:00 +01:00
'Site' => $site->site_nom,
'Ref campagne' => $campagne->camp_id,
2021-04-27 17:29:47 +02:00
'Nom campagne' => $campagne->camp_name,
2019-01-29 12:26:00 +01:00
"En ligne" => $enligne,
"Type" => $type,
);
2021-04-27 17:29:47 +02:00
2019-01-29 12:26:00 +01:00
$coupons = $campagne->coupons()->get();
2021-04-27 17:29:47 +02:00
if ($coupons->count() > 0) {
foreach ($coupons as $coupon) {
2025-04-03 09:30:16 +02:00
// var_dump($coupon->coupon_id);
2019-01-29 12:26:00 +01:00
// ---- Calcul du nombre de BR consommé
$diffuseMur = Mur::where(['mur_campId' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count();
$diffusePanier01 = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id])->sum('panier_content_quantity');
$diffusePanier02 = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id])->sum('panier_content_printed');
2025-04-03 09:30:16 +02:00
$diffusePanier = $diffusePanier01 + $diffusePanier02;
2019-01-29 12:26:00 +01:00
2021-04-27 17:29:47 +02:00
if (!$diffusePanier) {
$diffusePanier = 0;
}
2019-01-29 12:26:00 +01:00
$diffuse = $diffuseMur + $diffusePanier;
// ---- Calcul de la quantité restante
2019-02-26 08:57:56 +01:00
$qRestante = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon);
2019-01-29 12:26:00 +01:00
// ---- En ligne oui/non
2021-04-27 17:29:47 +02:00
$enligne = ($coupon->coupon_published == 1) ? "oui" : "non";
2019-01-29 12:26:00 +01:00
// ---- Calcul de la date de fin de diffusion
$dateFinDiffusion = "n/c";
2021-04-27 17:29:47 +02:00
if ($coupon->coupon_maxdatediffusion != null) {
2019-02-28 17:05:24 +01:00
$dateFinDiffusion = date("d/m/Y", strtotime($coupon->coupon_maxdatediffusion));
2019-01-29 12:26:00 +01:00
}
// ---- Calcul de la date de fin de validité
$dateFinValidite = "n/c";
2021-04-27 17:29:47 +02:00
if ($coupon->coupon_maxdatevalidity != null) {
2019-01-29 12:26:00 +01:00
$dateFinValidite = date("d/m/Y", strtotime($coupon->coupon_maxdatevalidity));
}
2025-04-03 09:30:16 +02:00
$codeTraitement = array (
2019-01-29 12:26:00 +01:00
"Code traitement" => $coupon->coupon_code,
"Nom" => $coupon->coupon_name,
2019-02-26 08:57:56 +01:00
"Nb à diffuser" => $this->getFullQuantity($coupon),
2019-01-29 12:26:00 +01:00
"Nb diffusé" => $diffuse,
"Quantité restante" => $qRestante,
2021-04-27 17:29:47 +02:00
"Valeur faciale" => $coupon->coupon_value . "€",
2019-01-29 12:26:00 +01:00
"En ligne" => $enligne,
"Date de fin de diffusion" => $dateFinDiffusion,
"Date de fin de validité" => $dateFinValidite,
);
$data['Coupons'][] = $codeTraitement;
2025-04-03 09:30:16 +02:00
}//end foreach
}//end if
2019-01-29 12:26:00 +01:00
return Response::json([
'Statut' => 'OK',
'Détails Campagne' => $data
]);
}
2019-03-07 12:25:05 +01:00
2021-04-27 17:29:47 +02:00
public function getDiffCamp(Request $request)
{
2019-03-07 12:40:14 +01:00
$error = false;
2019-03-07 12:25:05 +01:00
// ---- Contrôle des paramètres
2021-04-27 17:29:47 +02:00
if (isset($request->refcamp) && $request->refcamp != "") {
2025-04-03 09:30:16 +02:00
$refcamp = $request->refcamp;
2019-03-07 12:25:05 +01:00
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
2021-04-27 17:29:47 +02:00
if (!$campagne) {
2019-03-07 12:25:05 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
2021-04-27 17:29:47 +02:00
} else {
2019-03-07 12:25:05 +01:00
$error = true;
}
2021-04-27 17:29:47 +02:00
if (isset($request->refsite) && $request->refsite != "") {
2019-03-07 12:25:05 +01:00
$refsite = $request->refsite;
2025-04-03 09:30:16 +02:00
$site = Site::where(['site_id' => $refsite])->first();
2021-04-27 17:29:47 +02:00
if (!$site) {
2019-03-07 12:25:05 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
]);
};
2021-04-27 17:29:47 +02:00
} else {
2019-03-07 12:25:05 +01:00
$error = true;
}
2021-04-27 17:29:47 +02:00
if (isset($request->refadherent) && $request->refadherent != "") {
2019-03-07 12:25:05 +01:00
$refadherent = $request->refadherent;
2025-04-03 09:30:16 +02:00
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
2019-03-07 12:25:05 +01:00
if (!$contact) {
return Response::json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
2021-04-27 17:29:47 +02:00
} else {
2019-03-07 12:25:05 +01:00
$error = true;
}
2021-04-27 17:29:47 +02:00
if ($error) {
2019-03-07 12:25:05 +01:00
return Response::json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
2019-03-07 12:36:18 +01:00
2021-04-27 17:29:47 +02:00
$data = array (
2019-03-07 12:36:18 +01:00
'Statut' => 'OK',
'Site' => $site->site_nom,
'Ref campagne' => $campagne->camp_id,
2021-04-27 17:29:47 +02:00
'Nom campagne' => $campagne->camp_name,
2019-03-07 12:36:18 +01:00
"Ref contact" => $refadherent,
"Email contact" => $contact->contact_email,
);
$coupons = $campagne->coupons()->get();
2021-04-27 17:29:47 +02:00
if ($coupons->count() > 0) {
foreach ($coupons as &$coupon) {
if ($this->isAvailable($coupon, $campagne, $contact)) {
2019-03-07 12:36:18 +01:00
$dispo = 1;
} else {
$dispo = 0;
}
2025-04-03 09:30:16 +02:00
$codeTraitement = array (
2019-03-07 12:36:18 +01:00
"Code traitement" => $coupon->coupon_code,
"Nom" => $coupon->coupon_name,
"Nb disponible" => $dispo,
);
$data['Codes traitement'][] = $codeTraitement;
}
}
return Response::json($data);
2019-03-07 12:25:05 +01:00
}
2019-01-15 14:17:15 +01:00
}