407 lines
14 KiB
PHP
407 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Campagne;
|
|
use App\Site;
|
|
use App\Coupon;
|
|
use App\Contact;
|
|
use App\Mur;
|
|
use App\Panier;
|
|
use App\PanierContent;
|
|
use App\Notification;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\File;
|
|
use App\Traits\CouponTrait;
|
|
use Response;
|
|
|
|
|
|
class CampagneController extends Controller
|
|
{
|
|
//use BarcodeGenerator;
|
|
use CouponTrait;
|
|
/**
|
|
* 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.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
|
|
$campagne = new Campagne();
|
|
$campagne->camp_name = $request->input('camp_name');
|
|
$campagne->camp_type = $request->input('camp_type');
|
|
$campagne->camp_published = $request->input('camp_published');
|
|
if (null !== $request->input('camp_limitedPrinting')) {
|
|
$campagne->camp_limitedPrinting = $request->input('camp_limitedPrinting');
|
|
}
|
|
$campagne->camp_siteId = session()->get('site')->site_id;
|
|
|
|
$site = session()->get('site');
|
|
|
|
if ($site->campagnes()->save($campagne)) {
|
|
//File::makeDirectory(public_path('/landings/' . $campagne->camp_id));
|
|
if($campagne->camp_type == 0){
|
|
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));
|
|
}
|
|
|
|
}
|
|
|
|
return redirect(route('campagne.edit', ['campagne' => $campagne]));
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param \App\Campagne $campagne
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit(Campagne $campagne)
|
|
{
|
|
$site = Site::findOrFail(session()->get('site')->id)->first();
|
|
|
|
$couponsLinked = $campagne->coupons()->get();
|
|
$campid = $campagne->camp_id;
|
|
|
|
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function($q) use ($campid){
|
|
$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.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Campagne $campagne
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Request $request, Campagne $campagne)
|
|
{
|
|
$site = Site::findOrFail(session()->get('site')->id)->first();
|
|
|
|
$couponsLinked = $campagne->coupons()->get();
|
|
$campid = $campagne->camp_id;
|
|
|
|
$couponsNotLinked = Coupon::whereDoesntHave('campagnes', function($q) use ($campid){
|
|
$q->where('campagne_id', $campid);
|
|
})->where('coupon_siteId', session()->get('site')->id)->get();
|
|
|
|
if(!isset($request->camp_limitedPrinting)){
|
|
$campagne->camp_limitedPrinting = 0;
|
|
$campagne->save();
|
|
}
|
|
|
|
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');
|
|
}
|
|
|
|
return redirect()->route('campagne.edit', ['campagne' => $campagne]);
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param \App\Campagne $campagne
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy(Campagne $campagne)
|
|
{
|
|
$campagne->camp_published = 0;
|
|
$campagne->save();
|
|
//File::deleteDirectory(public_path('/landings/' . $campagne->camp_id));
|
|
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);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param \Illuminate\Http\Request $request
|
|
*
|
|
* @return array
|
|
*/
|
|
public function saveNotification(Request $request)
|
|
{
|
|
$notification = new Notification();
|
|
$notification->notif_name = $request->input('notif_name');
|
|
$notification->notif_email = $request->input('notif_email');
|
|
$notification->notif_campId = $request->input('notif_campId');
|
|
$notification->save();
|
|
return redirect()->back();
|
|
}
|
|
|
|
/**
|
|
* @param \App\Notification $notification
|
|
*
|
|
* @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
|
|
*/
|
|
// public function deleteCoupon($id)
|
|
// {
|
|
// $coupon = Coupon::find($id);
|
|
// if ($notification->delete()) {
|
|
// return redirect()->back();
|
|
// } else {
|
|
// session()->flash('delete_nok', 'Erreur lors de la suppression');
|
|
// return redirect()->back();
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
public function getDetail(Request $request){
|
|
|
|
$error = false;
|
|
|
|
// ---- Contrôle des paramètres
|
|
if(isset($request->refcamp) && $request->refcamp != ""){
|
|
$refcamp = $request->refcamp;
|
|
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
|
|
if(!$campagne){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 103,
|
|
'Message' => 'La campagne n\'existe pas'
|
|
]);
|
|
}
|
|
}else{
|
|
$error = true;
|
|
}
|
|
if(isset($request->refsite) && $request->refsite != ""){
|
|
$refsite = $request->refsite;
|
|
$site = Site::where(['site_id' => $refsite])->first();
|
|
if(!$site){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 102,
|
|
'Message' => 'Le site n\'existe pas'
|
|
]);
|
|
};
|
|
}else{
|
|
$error = true;
|
|
}
|
|
|
|
if($campagne->camp_siteId != $site->site_id){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 108,
|
|
'Message' => 'Pas de campagne pour ce site'
|
|
]);
|
|
}
|
|
|
|
if($error){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 101,
|
|
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
|
|
]);
|
|
}
|
|
|
|
$enligne = ($campagne->camp_published == 1)? "oui" : "non";
|
|
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;
|
|
}
|
|
$data = Array (
|
|
'Site' => $site->site_nom,
|
|
'Ref campagne' => $campagne->camp_id,
|
|
'Nom campagne' =>$campagne->camp_name,
|
|
"En ligne" => $enligne,
|
|
"Type" => $type,
|
|
);
|
|
|
|
|
|
$coupons = $campagne->coupons()->get();
|
|
|
|
if($coupons->count() > 0){
|
|
foreach($coupons as $coupon){
|
|
//var_dump($coupon->coupon_id);
|
|
// ---- 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');
|
|
$diffusePanier = $diffusePanier01 + $diffusePanier02;
|
|
|
|
if(!$diffusePanier) $diffusePanier = 0;
|
|
$diffuse = $diffuseMur + $diffusePanier;
|
|
|
|
// ---- Calcul de la quantité restante
|
|
$qRestante = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon);
|
|
// ---- En ligne oui/non
|
|
$enligne = ($coupon->coupon_published == 1)? "oui" : "non";
|
|
|
|
// ---- Calcul de la date de fin de diffusion
|
|
$dateFinDiffusion = "n/c";
|
|
if($coupon->coupon_maxdatediffusion != null ){
|
|
$dateFinDiffusion = date("d/m/Y", strtotime($coupon->coupon_maxdatediffusion));
|
|
}
|
|
|
|
// ---- Calcul de la date de fin de validité
|
|
$dateFinValidite = "n/c";
|
|
if($coupon->coupon_maxdatevalidity != null ){
|
|
$dateFinValidite = date("d/m/Y", strtotime($coupon->coupon_maxdatevalidity));
|
|
}
|
|
|
|
$codeTraitement = Array (
|
|
"Code traitement" => $coupon->coupon_code,
|
|
"Nom" => $coupon->coupon_name,
|
|
"Nb à diffuser" => $this->getFullQuantity($coupon),
|
|
"Nb diffusé" => $diffuse,
|
|
"Quantité restante" => $qRestante,
|
|
"Valeur faciale" => $coupon->coupon_value."€",
|
|
"En ligne" => $enligne,
|
|
"Date de fin de diffusion" => $dateFinDiffusion,
|
|
"Date de fin de validité" => $dateFinValidite,
|
|
);
|
|
$data['Coupons'][] = $codeTraitement;
|
|
}
|
|
}
|
|
return Response::json([
|
|
'Statut' => 'OK',
|
|
'Détails Campagne' => $data
|
|
]);
|
|
}
|
|
|
|
public function getDiffCamp(Request $request) {
|
|
$error = false;
|
|
// ---- Contrôle des paramètres
|
|
if(isset($request->refcamp) && $request->refcamp != ""){
|
|
$refcamp = $request->refcamp;
|
|
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
|
|
if(!$campagne){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 103,
|
|
'Message' => 'La campagne n\'existe pas'
|
|
]);
|
|
}
|
|
}else{
|
|
$error = true;
|
|
}
|
|
if(isset($request->refsite) && $request->refsite != ""){
|
|
$refsite = $request->refsite;
|
|
$site = Site::where(['site_id' => $refsite])->first();
|
|
if(!$site){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 102,
|
|
'Message' => 'Le site n\'existe pas'
|
|
]);
|
|
};
|
|
}else{
|
|
$error = true;
|
|
}
|
|
|
|
if(isset($request->refadherent) && $request->refadherent != ""){
|
|
$refadherent = $request->refadherent;
|
|
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
|
|
if (!$contact) {
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 104,
|
|
'Message' => 'Le contact n\'existe pas'
|
|
]);
|
|
}
|
|
}else{
|
|
$error = true;
|
|
}
|
|
|
|
if($error){
|
|
return Response::json([
|
|
'Statut' => 'KO',
|
|
'Code' => 101,
|
|
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
|
|
]);
|
|
}
|
|
|
|
$data = Array (
|
|
'Statut' => 'OK',
|
|
'Site' => $site->site_nom,
|
|
'Ref campagne' => $campagne->camp_id,
|
|
'Nom campagne' =>$campagne->camp_name,
|
|
"Ref contact" => $refadherent,
|
|
"Email contact" => $contact->contact_email,
|
|
);
|
|
|
|
$coupons = $campagne->coupons()->get();
|
|
|
|
if($coupons->count() > 0){
|
|
foreach($coupons as &$coupon){
|
|
|
|
if($this->isAvailable($coupon, $campagne, $contact)) {
|
|
$dispo = 1;
|
|
} else {
|
|
$dispo = 0;
|
|
}
|
|
$codeTraitement = Array (
|
|
"Code traitement" => $coupon->coupon_code,
|
|
"Nom" => $coupon->coupon_name,
|
|
"Nb disponible" => $dispo,
|
|
);
|
|
$data['Codes traitement'][] = $codeTraitement;
|
|
}
|
|
}
|
|
return Response::json($data);
|
|
}
|
|
}
|