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

416 lines
15 KiB
PHP
Raw Permalink Normal View History

2019-01-15 14:17:15 +01:00
<?php
namespace App\Http\Controllers;
use App\Models\Campagne;
use App\Models\Site;
use App\Models\Coupon;
use App\Models\Contact;
use App\Enums\CampaignTypes;
use App\Http\Requests\Campaign\AddCouponsCampaign;
use App\Http\Requests\Campaign\DeleteCampaign;
use App\Http\Requests\Campaign\RemoveCouponCampaign;
use App\Http\Requests\Campaign\RemoveNotifCampaign;
use App\Http\Requests\Campaign\ShowDemoCampaign;
use App\Http\Requests\Campaign\StoreCampaign;
use App\Http\Requests\Campaign\StoreNotifCampaign;
use App\Http\Requests\Campaign\UpdateCampaign;
use App\Models\Mur;
use App\Models\PanierContent;
use App\Models\Notification;
use App\Models\Panier;
2019-01-15 14:17:15 +01:00
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-15 14:17:15 +01:00
class CampagneController extends Controller
{
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()
{
// TODO : Revoir le passage du site id ?
$siteId = session()->get('site')->site_id;
$campagnes = Campagne::where('camp_siteId', $siteId)->get();
return view('campagnes.index')->with('campagnes', $campagnes);
2019-01-15 14:17:15 +01:00
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('campagnes.create');
2019-01-15 14:17:15 +01:00
}
/**
* Store a newly created resource in storage.
*
* @param StoreCampaign $request
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function store(StoreCampaign $request)
2019-01-15 14:17:15 +01:00
{
// TODO : Revoir le passage du site
2019-04-03 11:26:50 +02:00
$site = session()->get('site');
2019-01-15 14:17:15 +01:00
$campagne = new Campagne();
$campagne->fill(array_merge($request->validated(), ['camp_siteId' => $site->site_id]));
$campagne->save();
2019-01-15 14:17:15 +01:00
if ($site->campagnes()->save($campagne)) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
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->equals(CampaignTypes::panier())) {
2019-02-13 16:37:14 +01:00
File::copyDirectory(resource_path('/views/template/panier'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type->equals(CampaignTypes::murss())) {
2019-02-13 16:37:14 +01:00
File::copyDirectory(resource_path('/views/template/murnoselection'), public_path('/landings/' . $campagne->camp_id));
} elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) {
2019-02-13 16:37:14 +01:00
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.
*
* @param \App\Models\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function edit(Campagne $campagne)
{
// TODO : Revoir le passage du site id
$siteId = session()->get('site')->id;
2019-01-15 14:17:15 +01:00
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campagne) {
$q->where('campagne_id', $campagne->camp_id);
})->where('coupon_siteId', $siteId)->where('coupon_published', 1)->get();
2019-01-15 14:17:15 +01:00
return view('campagnes.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked]);
2019-01-15 14:17:15 +01:00
}
/**
* Update the specified resource in storage.
*
* @param UpdateCampaign $request
* @param \App\Models\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function update(UpdateCampaign $request, Campagne $campagne)
2021-04-27 17:29:47 +02:00
{
$campagne->fill($request->validated());
2019-02-13 16:37:14 +01:00
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;
}
if ($campagne->save()) {
session()->flash('update_ok', __('La campagne a bien été modifiée'));
2019-01-15 14:17:15 +01:00
} else {
session()->flash('update_nok', __("Erreur lors de l'enregistrement"));
2019-01-15 14:17:15 +01:00
}
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.
*
* @param DeleteCampaign $request
* @param \App\Models\Campagne $campagne
2019-01-15 14:17:15 +01:00
* @return \Illuminate\Http\Response
*/
public function destroy(DeleteCampaign $request, Campagne $campagne)
2021-04-27 17:29:47 +02:00
{
2019-02-13 16:37:14 +01:00
$campagne->camp_published = 0;
$campagne->save();
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('campagnes.edit')->with('campagne', $campagne);
2019-01-15 14:17:15 +01:00
}
}
// ---- Ajoute des coupons à une campagne
public function addCoupons(AddCouponsCampaign $request, Campagne $campaign)
{
$coupons = Coupon::find($request->ids);
$campaign->coupons()->attach($coupons);
return json_encode($coupons);
}
// ---- Efface des coupons d'une campagne
public function removeCoupon(RemoveCouponCampaign $request, Campagne $campaign, Coupon $coupon)
{
$campaign->coupons()->detach($coupon);
return json_encode($coupon);
}
/**
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function saveNotification(StoreNotifCampaign $request, Campagne $campaign)
2019-01-15 14:17:15 +01:00
{
$notification = new Notification();
$notification->fill(array_merge($request->validated(), ['notif_campId' => $campaign->camp_id]));
2019-01-15 14:17:15 +01:00
$notification->save();
2019-01-15 14:17:15 +01:00
return redirect()->back();
}
/**
* @param RemoveNotifCampaign $request
* @param \App\Models\Notification $notification
2019-01-15 14:17:15 +01:00
*
* @return array
*/
public function deleteNotification(RemoveNotifCampaign $request, Notification $notification)
2019-01-15 14:17:15 +01:00
{
if ($notification->delete()) {
return redirect()->back();
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return redirect()->back();
}
}
// ---- Montre les campagnes avec un compte de démo
public function showDemo(ShowDemoCampaign $request, Campagne $campaign)
{
$siteId = $campaign->camp_siteId;
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
if (!isset($demoContact)) {
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refadherent' => 'DEMO',
'prenom' => 'Compte',
'nom' => 'Démonstration',
'email' => 'demo@demo.fr',
'code_postal' => '72000',
'commune' => 'Le Mans',
'pays' => 250
]);
$contact = new \App\Http\Controllers\ContactController();
$res = $contact->updateContact($req);
$demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first();
}
if ($campaign->camp_type->equals(CampaignTypes::mur()) || $campaign->camp_type->equals(CampaignTypes::murss())) {
// ---- DEMONSTRATION POUR LES MURS
$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['refcamp' => $campaign->camp_id, 'refadherent' => 'DEMO', 'admin' => 1]);
// ---- EFFACER LES CONTROLES SI EXISTANT
$mur = new \App\Http\Controllers\MurController();
$res = $mur->deleteControlContact($myRequest);
// ---- RETOURNE l'URL
$url = "/?refsite=" . $siteId . "&refcamp=" . $campaign->camp_id . "&hash=" . $demoContact->contact_hash;
return json_encode($url);
} else {
// ---- DEMONSTRATION POUR LES PANIERS
$panier = Panier::where(['panier_campId' => $campaign->camp_id, 'panier_contactId' => $demoContact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
$url = "/?basketid=" . $panier->panier_ref;
} else {
// --- Pas de panier Création d'un nouveau
// --- Récuperation des coupons de la campagne
$coupons = $campaign->coupons()->get();
foreach ($coupons as $key => $coupon) {
if (!$this->isAvailableToPrint($coupon, $campaign)) {
$coupons->forget($key);
}
}
$couponsTotal = count($coupons);
$couponsAdded = 0;
$basketContent = "";
foreach ($coupons as $coupon) {
$basketContent .= "(1)" . $coupon->coupon_code;
$couponsAdded++;
if ($couponsAdded != $couponsTotal) {
$basketContent .= ",";
}
}
// --- création de l'objet request
$req = new \Illuminate\Http\Request();
$req->setMethod('POST');
$req->request->add([
'refsite' => $siteId,
'refcamp' => $campaign->camp_id,
'refadherent' => $demoContact->contact_ref,
'nom' => $demoContact->contact_nom,
'prenom' => $demoContact->contact_prenom,
'email' => $demoContact->contact_email,
'code_postal' => $demoContact->contact_cp,
'commune' => $demoContact->contact_ville,
'pays' => $demoContact->contact_country,
'panier' => $basketContent,
'admin' => 1
]);
$panier = new \App\Http\Controllers\PanierController();
$res = $panier->updateBasket($req);
$url = "/?basketid=" . $res->original['Panier']->Panier;
}
return json_encode($url);
}
}
// ---- Dépublie une campagne
public function togglePublish(Request $request, Campagne $campaign, int $state)
{
$campaign->camp_published = $state;
$campaign->save();
return json_encode($campaign);
}
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) {
return response()->json([
2019-01-29 12:26:00 +01:00
'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) {
return response()->json([
2019-01-29 12:26:00 +01:00
'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) {
return response()->json([
2019-01-29 12:26:00 +01:00
'Statut' => 'KO',
'Code' => 108,
'Message' => 'Pas de campagne pour ce site'
]);
}
2021-04-27 17:29:47 +02:00
if ($error) {
return response()->json([
2019-01-29 12:26:00 +01:00
'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 CampaignTypes::mur():
2019-01-29 12:26:00 +01:00
$type = "mur";
break;
case CampaignTypes::panier():
2019-01-29 12:26:00 +01:00
$type = "panier";
break;
case CampaignTypes::murss():
2019-01-29 12:26:00 +01:00
$type = "mur sans sélection";
break;
case CampaignTypes::paniers():
2019-01-29 12:26:00 +01:00
$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) {
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
return response()->json([
2019-01-29 12:26:00 +01:00
'Statut' => 'OK',
'Détails Campagne' => $data
]);
}
2019-01-15 14:17:15 +01:00
}