ldc-mesbr-app/app/Http/Controllers/CampagneController.php
2019-03-07 12:38:56 +01:00

405 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');
}
$site = Site::findOrFail(session()->get('site')->id)->first();
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_updatedate != 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) {
// ---- 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);
}
}