diff --git a/.composer/.htaccess b/.composer/.htaccess new file mode 100644 index 0000000..14249c5 --- /dev/null +++ b/.composer/.htaccess @@ -0,0 +1 @@ +Deny from all \ No newline at end of file diff --git a/app/Campagne.php b/app/Campagne.php index 8c127f1..6837a45 100644 --- a/app/Campagne.php +++ b/app/Campagne.php @@ -2,12 +2,33 @@ namespace App; +use App\Enums\CampaignTypes; +use App\Models\Basket; +use App\Models\PrintedWalls; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Kwaadpepper\Enum\Traits\CastsEnums; class Campagne extends Model { use SoftDeletes; + use CastsEnums; + + public $enumCasts = [ + 'camp_type' => CampaignTypes::class + ]; + + /** + * @var array + */ + protected $fillable = [ + 'camp_siteId', + 'camp_name', + 'camp_type', + 'camp_limitedPrinting', + 'camp_published' + ]; /** * @var string @@ -86,13 +107,20 @@ class Campagne extends Model } /** - * @var array + * printedWalls relation + * @return HasMany */ - protected $fillable = [ - 'camp_siteId', - 'camp_name', - 'camp_type', - 'camp_limitedPrinting', - 'camp_published' - ]; + public function printedWalls() + { + return $this->hasMany(PrintedWalls::class, 'camp_id'); + } + + /** + * Basket model relation + * @return HasMany + */ + public function baskets() + { + return $this->hasMany(Basket::class); + } } diff --git a/app/Coupon.php b/app/Coupon.php index cab9d0b..fb7ef67 100644 --- a/app/Coupon.php +++ b/app/Coupon.php @@ -2,6 +2,7 @@ namespace App; +use App\Models\BasketContent; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -34,6 +35,40 @@ class Coupon extends Model */ protected $primaryKey = 'coupon_id'; + /** + * @var array + */ + protected $fillable = [ + 'coupon_code', + 'coupon_norme', + 'coupon_gs1code', + 'coupon_name', + 'coupon_value', + 'coupon_enablelimitquantity', + 'coupon_limitquantity', + 'coupon_enablelimitperiod', + 'coupon_limitperiod', + 'coupon_validity', + 'coupon_mindatediffusion', + 'coupon_maxdatediffusion', + 'coupon_maxdatevalidity', + 'coupon_thumbnail1', + 'coupon_thumbnail2', + 'coupon_thumbnail3', + 'coupon_thumbnail4', + 'coupon_image', + 'coupon_published', + 'coupon_logo_image', + 'coupon_rcs', + 'coupon_decoration_image', + 'coupon_validity_text', + 'coupon_site_contact', + 'coupon_legal_mentions', + 'coupon_legal_mentions_splitted', + 'coupon_seuil_alert', + 'coupon_treatment_center' + ]; + /** * OneToMany * Coupon -> Calendrier @@ -88,36 +123,11 @@ class Coupon extends Model } /** - * @var array + * BasketContent model relation + * @return HasMany */ - protected $fillable = [ - 'coupon_code', - 'coupon_norme', - 'coupon_gs1code', - 'coupon_name', - 'coupon_value', - 'coupon_enablelimitquantity', - 'coupon_limitquantity', - 'coupon_enablelimitperiod', - 'coupon_limitperiod', - 'coupon_validity', - 'coupon_mindatediffusion', - 'coupon_maxdatediffusion', - 'coupon_maxdatevalidity', - 'coupon_thumbnail1', - 'coupon_thumbnail2', - 'coupon_thumbnail3', - 'coupon_thumbnail4', - 'coupon_image', - 'coupon_published', - 'coupon_logo_image', - 'coupon_rcs', - 'coupon_decoration_image', - 'coupon_validity_text', - 'coupon_site_contact', - 'coupon_legal_mentions', - 'coupon_legal_mentions_splitted', - 'coupon_seuil_alert', - 'coupon_treatment_center' - ]; + public function basketContents() + { + return $this->hasMany(BasketContent::class); + } } diff --git a/app/Enums/CampaignTypes.php b/app/Enums/CampaignTypes.php new file mode 100644 index 0000000..3c05ef7 --- /dev/null +++ b/app/Enums/CampaignTypes.php @@ -0,0 +1,39 @@ + 0, + 'panier' => 1, + 'murss' => 2, + 'paniers' => 3, + ]; + } + + protected static function labels(): array + { + return [ + 'mur' => trans('Mur'), + 'panier' => trans('Panier'), + 'murss' => trans('Mur sans sélection'), + 'paniers' => trans('Panier Sélectionnable'), + ]; + } +} diff --git a/app/Enums/Countries.php b/app/Enums/Countries.php new file mode 100644 index 0000000..276ea17 --- /dev/null +++ b/app/Enums/Countries.php @@ -0,0 +1,32 @@ + 250, + 'belgique' => 56, + 'luxembourg' => 442, + ]; + } + + protected static function labels(): array + { + return [ + 'france' => 'France', + 'belgique' => 'Belgique', + 'luxembourg' => 'Luxembourg', + ]; + } +} diff --git a/app/Enums/UserRoles.php b/app/Enums/UserRoles.php new file mode 100644 index 0000000..7eee8cd --- /dev/null +++ b/app/Enums/UserRoles.php @@ -0,0 +1,32 @@ + 'superadmin', + 'admin' => 'admin', + 'marketing' => 'marketing' + ]; + } + + protected static function labels(): array + { + return [ + 'superadmin' => trans('Super-Admin'), + 'admin' => trans('Admin'), + 'marketing' => trans('Marketing') + ]; + } +} diff --git a/app/Http/Controllers/AjaxController.php b/app/Http/Controllers/AjaxController.php index 5b814ad..d2597d3 100644 --- a/app/Http/Controllers/AjaxController.php +++ b/app/Http/Controllers/AjaxController.php @@ -2,10 +2,8 @@ namespace App\Http\Controllers; -use App\Campagne; use App\Coupon; -use App\Contact; -use App\Panier; +use App\Enums\CampaignTypes; use App\PanierContent; use App\Statistique; use App\Mur; @@ -13,42 +11,14 @@ use App\Log; use Illuminate\Http\Request; use App\Traits\GenerateBR; use App\Traits\CouponTrait; -use App\Http\Controllers; -use Carbon\Carbon; class AjaxController extends Controller { use GenerateBR; use CouponTrait; - // ---- Ajoute des coupons à une campagne - public function add_coupons_ajax(Request $request) - { - $camp_id = $request->input('campid'); - $campagne = Campagne::where('camp_id', $camp_id)->first(); - $ids = $request->input('ids'); - - $coupons = Coupon::find($ids); - $campagne->coupons()->attach($coupons); - - return json_encode($coupons); - } - - // ---- Efface des coupons d'une campagne - public function remove_coupons_ajax(Request $request) - { - $camp_id = $request->input('campid'); - $campagne = Campagne::where('camp_id', $camp_id)->first(); - $coupon_id = $request->input('couponid'); - $coupon = Coupon::find($coupon_id); - - $campagne->coupons()->detach($coupon_id); - - return json_encode($coupon); - } - // ---- Dépublie un coupon - public function unpublish_coupons_ajax(Request $request) + public function unpublishCouponsAjax(Request $request) { $coupon_id = $request->input('couponid'); $coupon = Coupon::find($coupon_id); @@ -59,7 +29,7 @@ class AjaxController extends Controller } // ---- Publie un coupon - public function publish_coupons_ajax(Request $request) + public function publishCouponsAjax(Request $request) { $coupon_id = $request->input('couponid'); $coupon = Coupon::find($coupon_id); @@ -69,31 +39,8 @@ class AjaxController extends Controller return json_encode($coupon); } - // ---- Dépublie une campagne - public function unpublish_camp_ajax(Request $request) - { - $campid = $request->input('campid'); - $campagne = Campagne::find($campid); - $campagne->camp_published = 0; - $campagne->save(); - - return json_encode($campagne); - } - - // ---- Publie une campagne - public function publish_camp_ajax(Request $request) - { - $campid = $request->input('campid'); - $campagne = Campagne::find($campid); - $campagne->camp_published = 1; - $campagne->save(); - - return json_encode($campagne); - } - - // ---- Impression des BR - public function impression_ajax(Request $request) + public function impressionAjax(Request $request) { if ($request->session()->has('coupons')) { @@ -132,7 +79,7 @@ class AjaxController extends Controller $coupons = ''; $coupons .= ''; html += ''; @@ -34,7 +33,7 @@ $('#addCoupons').on('click', function(event){ $('#addCoupons').parent().find('.inputGroup input').each(function(event){ if($(this).val() == coupon.coupon_id){ $(this).parent('.inputGroup').remove(); - } + } }) $.fancybox.close(); }); @@ -43,7 +42,7 @@ $('#addCoupons').on('click', function(event){ console.log(e.responseText); } }); -}) +}) @@ -59,21 +58,18 @@ $('body').on('click', '.delete-coupon', function(event){ callback : function (value) { if (value) { event.preventDefault(); - + $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('#csrf').val() } }); $.ajax({ - url: '/remove-coupons-ajax', + url: '/bo/campagne/'+ campid +'/remove-coupon/' + couponid, type: 'POST', - data: { - couponid: couponid, - campid: campid - }, + data: {}, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { trLinked.remove(); var html = "
"; html += ""; @@ -87,7 +83,7 @@ $('body').on('click', '.delete-coupon', function(event){ }); } } - }); + }); }) @@ -114,14 +110,14 @@ $('body').on('click', '.unpublish', function(event){ couponid: couponid }, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { element.empty().html('') } }); } } }); - + }) $('body').on('click', '.publish', function(event){ @@ -147,14 +143,14 @@ $('body').on('click', '.publish', function(event){ couponid: couponid }, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { element.empty().html('') } }); } } }); - + }) @@ -175,20 +171,18 @@ $('body').on('click', '.unpublishcamp', function(event){ } }); $.ajax({ - url: '/unpublish-camp-ajax', + url: '/bo/campagne/'+ campid +'/toggle-publish/0', type: 'POST', - data: { - campid: campid - }, + data: {}, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { element.empty().html('') } }); } } }); - + }) $('body').on('click', '.publishcamp', function(event){ @@ -208,18 +202,16 @@ $('body').on('click', '.publishcamp', function(event){ } }); $.ajax({ - url: '/publish-camp-ajax', + url: '/bo/campagne/'+ campid +'/toggle-publish/1', type: 'POST', - data: { - campid: campid - }, + data: {}, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { element.empty().html('') } }); } } }); - -}) \ No newline at end of file + +}) diff --git a/resources/views/campagne/create.blade.php b/resources/views/campagne/create.blade.php deleted file mode 100644 index b3e8ef3..0000000 --- a/resources/views/campagne/create.blade.php +++ /dev/null @@ -1,33 +0,0 @@ -@extends('layouts.main') - -@section('content') -

Nouvelle campagne

-
- {!! Form::open(['route' => 'campagne.store']) !!} -
-
- {!! Form::label('camp_name', 'Nom') !!} - {!! Form::input('text', 'camp_name', null, ['required']) !!} -
-
- {!! Form::label('camp_type', 'Type') !!} - {!! Form::select('camp_type', ['Mur', 'Panier', 'Mur sans sélection', 'Panier Sélectionnable']) !!} -
-
-
-
- {!! Form::label('camp_published', 'Publier') !!} - {!! Form::select('camp_published', ['Non', 'Oui']) !!} -
-
- {!! Form::label('camp_limitedPrinting', 'Limiter les impressions à 1 BR à la fois') !!} - {!! Form::checkbox('camp_limitedPrinting', 1, false, array('id'=>'camp_limitedPrinting')) !!} - {!! Form::label('camp_limitedPrinting', '') !!} -
-
-
- {!! Form::submit('Enregistrer') !!} -
- {!! Form::close() !!} -
-@endsection diff --git a/resources/views/campagne/edit.blade.php b/resources/views/campagne/edit.blade.php deleted file mode 100644 index 343f568..0000000 --- a/resources/views/campagne/edit.blade.php +++ /dev/null @@ -1,117 +0,0 @@ -@extends('layouts.main') - -@section('content') -

Editer la campagne

-
- {!! Form::model($campagne, ['route' => ['campagne.update', $campagne]]) !!} - @method('PUT') -
-
- {!! Form::label('camp_name', 'Nom') !!} - {!! Form::input('text', 'camp_name', null, ['required']) !!} -
-
- {!! Form::label('camp_type', 'Type') !!} - {!! Form::select('camp_type', ['Mur', 'Panier', 'Mur sans sélection', 'Panier Sélectionnable']) !!} -
-
-
-
- {!! Form::label('camp_published', 'Publier') !!} - {!! Form::select('camp_published', ['Non', 'Oui']) !!} -
-
- {!! Form::label('camp_limitedPrinting', 'Limiter les impressions à 1 BR à la fois') !!} - {!! Form::checkbox('camp_limitedPrinting', 1, ($campagne->camp_limitedPrinting ==1?true:null), array('id'=>'camp_limitedPrinting')) !!} - {!! Form::label('camp_limitedPrinting', '') !!} -
-
-
- {!! Form::submit('Mettre à jour') !!} -
- {!! Form::close() !!} -
-
-

Coupons de la campagne

- -
'; - if ($campagne->camp_type == 0) { + if ($campagne->camp_type->equals(CampaignTypes::mur())) { // ---- POUR LES MURS if (!isset($couponsToPrint)) { die(); @@ -167,7 +114,7 @@ class AjaxController extends Controller $stat->save(); }//end if }//end foreach - } elseif ($campagne->camp_type == 1) { + } elseif ($campagne->camp_type->equals(CampaignTypes::panier())) { // ---- POUR LES PANIERS if (!isset($panier)) { die(); @@ -235,7 +182,7 @@ class AjaxController extends Controller $panier->panier_pending = 1; } $panier->save(); - } elseif ($campagne->camp_type == 2) { + } elseif ($campagne->camp_type->equals(CampaignTypes::murss())) { // ---- POUR LES MURS SANS SELECTION $nbCoupon = 0; $cps = $campagne->coupons()->get(); @@ -266,7 +213,7 @@ class AjaxController extends Controller $stat->save(); }//end if }//end foreach - } elseif ($campagne->camp_type == 3) { + } elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) { // ---- POUR LES PANIERS AVEC SELECTION if (!isset($couponsToPrint)) { die(); @@ -339,12 +286,12 @@ class AjaxController extends Controller $contact = $request->session()->get('contact'); } - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { + if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) { if (!isset($contact)) { die(); } return redirect(url('/') . '/?refsite=' . $campagne->camp_siteId . '&refcamp=' . $campagne->camp_id . '&hash=' . $contact->contact_hash); - } elseif ($campagne->camp_type == 1 || $campagne->camp_type == 3) { + } elseif ($campagne->camp_type->equals(CampaignTypes::panier()) || $campagne->camp_type->equals(CampaignTypes::paniers())) { if ($request->session()->has('panier')) { $panier = $request->session()->get('panier'); } else { @@ -353,289 +300,4 @@ class AjaxController extends Controller return redirect(url('/') . '/?basketid=' . $panier->panier_ref); } } - - // ---- Charge les widget d'assistance - public function load_widget(Request $request) - { - if (isset($request->camp_id)) { - $camp_id = $request->camp_id; - } else { - die; - } - - if (isset($request->contact_hash)) { - $contact_hash = $request->contact_hash; - } else { - die; - } - - $campagne = Campagne::where(['camp_id' => $camp_id])->first(); - $contact = Contact::where(['contact_hash' => $contact_hash])->first(); - $coupons = $campagne->coupons; - - foreach ($coupons as $key => $coupon) { - if (!$this->isAvailableToPrint($coupon, $campagne)) { - $coupons->forget($key); - } - } - - $allLogs = Log::where(['log_refsite' => $campagne->camp_siteId, 'log_contactId' => $contact->contact_id, 'log_statut' => 'OK'])->orderBy('created_at', 'DESC')->get(); - $logs = array(); - foreach ($allLogs as &$l) { - $params = json_decode($l->log_params); - if ($l->log_action == 3 || $l->log_action == 1) { - $l->log_message = json_decode($l->log_message, true); - } - if (intval($params->refcamp) == $camp_id) { - array_push($logs, $l); - } - } - - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { -// ---- Pour les types murs - foreach ($coupons as &$coupon) { - $coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact); - } - unset($coupon); - - // Montant total et Nombre réductions disponible - $montantDispo = 0; - $montantTotal = 0; - $nbCoupon = 0; - foreach ($coupons as $coupon) { - $montantTotal += $coupon->coupon_value; - if ($coupon->isAvailable == true) { - $montantDispo += $coupon->coupon_value; - $nbCoupon++; - } - } - - if (sizeof($coupons) == $nbCoupon) { - $reset = false; - } else { - $reset = true; - } - - $campagne->url = url('/') . "/?refsite=" . $campagne->camp_siteId . "&refcamp=" . $camp_id . "&hash=" . $contact->contact_hash; - - $returnHTML = view('widgets.mur') - ->with([ - 'campagne' => $campagne, - 'reset' => $reset, - 'montantTotal' => $montantTotal, - 'montantDispo' => $montantDispo, - 'logs' => $logs, - 'contact' => $contact]) - ->renderSections()['widget']; - - return json_encode(array('success' => true, 'html' => $returnHTML)); - } else { -// ---- Pour les types paniers - $panier = Panier::where(['panier_campId' => $campagne->camp_id, 'panier_contactId' => $contact->contact_id, 'panier_pending' => 1])->first(); - if ($panier) { - $panier_ref = $panier->panier_ref; - foreach ($coupons as &$coupon) { - $paniercontent = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id, 'panier_content_panierId' => $panier->panier_id])->first(); - if ($paniercontent) { - $coupon->qty = $paniercontent->panier_content_quantity; - } else { - $coupon->qty = 0; - } - } - $campagne->url = url('/') . "/?basketid=" . $panier_ref; - unset($coupon); - } else { - $panier_ref = ""; - foreach ($coupons as &$coupon) { - $coupon->qty = 0; - } - $campagne->url = "Pas d'url disponible (panier non créé)"; - } - - $returnHTML = view('widgets.panier') - ->with([ - 'campagne' => $campagne, - 'contact' => $contact, - 'panier' => $panier_ref, - 'logs' => $logs, - 'coupons' => $coupons - ]) - ->renderSections()['widget']; - return json_encode(array('success' => true, 'html' => $returnHTML)); - }//end if - } - - // ---- Montre les campagnes avec un compte de démo - public function show_demo(Request $request) - { - if (isset($request->camp_id)) { - $camp_id = $request->camp_id; - } else { - die; - } - - $campagne = Campagne::where(['camp_id' => $camp_id])->first(); - $siteId = $campagne->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 Controllers\ContactController(); - $res = $contact->updateContact($req); - $demoContact = Contact::where(['contact_siteId' => $siteId, 'contact_ref' => 'DEMO'])->first(); - } - - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { - // ---- DEMONSTRATION POUR LES MURS - $myRequest = new \Illuminate\Http\Request(); - $myRequest->setMethod('POST'); - $myRequest->request->add(['refcamp' => $camp_id, 'refadherent' => 'DEMO', 'admin' => 1]); - - // ---- EFFACER LES CONTROLES SI EXISTANT - $mur = new Controllers\MurController(); - $res = $mur->deleteControlContact($myRequest); - - // ---- RETOURNE l'URL - $url = "/?refsite=" . $siteId . "&refcamp=" . $camp_id . "&hash=" . $demoContact->contact_hash; - return json_encode($url); - } else { - // ---- DEMONSTRATION POUR LES PANIERS - $panier = Panier::where(['panier_campId' => $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 = $campagne->coupons()->get(); - - foreach ($coupons as $key => $coupon) { - if (!$this->isAvailableToPrint($coupon, $campagne)) { - $coupons->forget($key); - } - } - - $couponsTotal = sizeof($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' => $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 Controllers\PanierController(); - $res = $panier->updateBasket($req); - $url = "/?basketid=" . $res->original['Panier']->Panier; - }//end if - return json_encode($url); - }//end if - } - - // ---- MAINTENANCE : CLEAN DE LA BDD - // ---- Fonction de récap des contacts que l'on va effacer - public function get_clean_contacts_detail(Request $request) - { - $contacts = Contact::where('contact_updatedate', '<', Carbon::now()->subMonth())->get(); - $date = Carbon::now(); - $contact_count = 0; - foreach ($contacts as $contact) { - $paniers = $contact->paniers()->get(); - $canbeDeleted = true; - foreach ($paniers as $panier) { - if ($panier->panier_pending == 1) { - $canbeDeleted = false; - } - } - if ($canbeDeleted) { - $contact_count++; - // $testcontact .= $contact->contact_id.", "; - } - } - return json_encode(['date' => $date, 'contact_count' => $contact_count]); - } - - // ---- Fonction de nettoyage de la base contact - public function clean_contacts(Request $request) - { - $contacts = Contact::where('contact_updatedate', '<', Carbon::now()->subMonth())->get(); - $testcontact = ""; - foreach ($contacts as $contact) { - $paniers = $contact->paniers()->get(); - $canbeDeleted = true; - foreach ($paniers as $panier) { - if ($panier->panier_pending == 1) { - $canbeDeleted = false; - } - } - $murs = $contact->murs()->get(); - if (isset($murs) && !empty($murs)) { - $canbeDeleted = false; - } - if ($canbeDeleted) { - $contact->delete(); - $testcontact .= $contact->contact_id . ", "; - } - } - return json_encode($testcontact); - } - - // ---- Fonction de nettoyage de la base mur - public function clean_walls(Request $request) - { - $murs = Mur::where('mur_createdate', '<', Carbon::now()->subYear())->where(['mur_deleted' => 1])->get(); - $testmur = ""; - foreach ($murs as $mur) { - $mur->delete(); - $testmur .= $mur->mur_id . ", "; - } - return json_encode($testmur); - } - - // ---- Fonction de nettoyage de la base panier et panierContent - public function clean_baskets(Request $request) - { - $paniers = Panier::where('panier_createdate', '<', Carbon::now()->subMonth(2))->where(['panier_pending' => 0])->get(); - $testpanier = ""; - foreach ($paniers as $panier) { - $testpanier .= $panier->panier_id . ": "; - $panierContents = $panier->panierContents()->get(); - foreach ($panierContents as $panierContent) { - $testpanier .= $panierContent->panier_content_id . ', '; - $panierContent->delete(); - } - $panier->delete(); - } - return json_encode($testpanier); - } } diff --git a/app/Http/Controllers/Api/v1/CouponsController.php b/app/Http/Controllers/Api/v1/CouponsController.php index 01b0dee..1b9852f 100644 --- a/app/Http/Controllers/Api/v1/CouponsController.php +++ b/app/Http/Controllers/Api/v1/CouponsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1; use App\Campagne; use App\Coupon; +use App\Enums\CampaignTypes; use App\Http\Controllers\Controller; use App\Http\Requests\Coupons\PrintRequest; use App\Http\Resources\StatusResource; @@ -58,7 +59,7 @@ class CouponsController extends Controller // TODO : Vérifier si les coupons sont dans la campagne // TODO : Logs $coupons = []; - if ($campagne->camp_type == 0) { + if ($campagne->camp_type->equals(CampaignTypes::mur())) { // ---- POUR LES MURS foreach ($couponsToPrint as $key => $coupon_code) { $cp = Coupon::where(['coupon_code' => $coupon_code])->first(); diff --git a/app/Http/Controllers/Api/v1/CustomerController.php b/app/Http/Controllers/Api/v1/CustomerController.php index d3e29cd..56d7b1f 100644 --- a/app/Http/Controllers/Api/v1/CustomerController.php +++ b/app/Http/Controllers/Api/v1/CustomerController.php @@ -4,20 +4,25 @@ namespace App\Http\Controllers\Api\v1; use App\Calendrier; use App\Campagne; +use App\Enums\CampaignTypes; use App\Http\Requests\Customers\StoreRequest; use App\Http\Resources\CustomersResource; use App\Http\Resources\StatusResource; use App\Models\Customers; use App\Http\Controllers\Controller; +use App\Http\Requests\Customers\BasketRequest; use App\Http\Requests\Customers\MurRequest; +use App\Http\Requests\Customers\PrintBasketRequest; use App\Http\Resources\CouponsResource; use App\Traits\CouponTrait; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Request; +use LDC\LDCCRM\CrmApiV2; class CustomerController extends Controller { use CouponTrait; + use GenerateBR; /** * Display a listing of the resource. @@ -107,12 +112,22 @@ class CustomerController extends Controller return new StatusResource(['status' => 'KO', 'code' => '501', 'message' => 'Not Implemented']); } + /** + * Recupere le contenu d'un mur pour une campagne et un user + * @param MurRequest $request + * @return StatusResource + * @throws ValidationException + */ public function mur(MurRequest $request) { $datas = $request->validated(); $customer = Customers::where('hashcode', $datas['hashcode'])->first(); $campagne = Campagne::find($datas['refcamp']); + + if (!$campagne->camp_type->equals(CampaignTypes::mur())) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not mur.']); + } if ($campagne->camp_published === 0) { return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']); } @@ -158,4 +173,140 @@ class CustomerController extends Controller 'coupons' => CouponsResource::collection($coupons) ]); } + + /** + * Recupere le contenu d'un panier pour une campagne et un user + * @param BasketRequest $request + * @return StatusResource + * @throws ValidationException + */ + public function basket(BasketRequest $request) + { + $montantDispo = 0; + $montantTotal = 0; + $nbCoupons = 0; + $couponTotal = 0; + $coupons = []; + + $datas = $request->validated(); + + $customer = Customers::where('hashcode', $datas['hashcode'])->first(); + $campagne = Campagne::find($datas['refcamp']); + + if (!$campagne->camp_type->equals(CampaignTypes::panier())) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not basket.']); + } + if ($campagne->camp_published === 0) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']); + } + $basket = $customer->baskets()->where('campagne_id', $campagne->camp_id)->first(); + if (is_null($basket)) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Basket not found.']); + } + + foreach ($basket->contents as $content) + { + $published = true; + $nbCoupons += $content->quantity; + $couponTotal += $content->printed; + $montantTotal += ($content->coupon->coupon_value * $content->printed); + $coupon = $content->coupon()->whereRaw("coupon_published = 1 AND (coupon_mindatediffusion IS NULL OR coupon_mindatediffusion <= NOW()) AND (coupon_maxdatediffusion IS NULL OR coupon_maxdatediffusion >= NOW()) AND (coupon_maxdatevalidity IS NULL OR coupon_maxdatevalidity >= NOW())")->first(); + if (!is_null($coupon)) + { + // ---- Contrôle des calendriers de diffusion + $calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get(); + if (!$calendars->isEmpty()) { + $published = false; + foreach ($calendars as $calendar) { + if (strtotime(date('Y-m-d H:i:s')) > strtotime($calendar->calendrier_startdate) && strtotime(date('Y-m-d H:i:s')) < strtotime($calendar->calendrier_enddate)) { + $published = true; + } + } + } + if ($published){ + $montantDispo += ($coupon->coupon_value * $content->quantity); + $montantTotal += ($coupon->coupon_value * $content->quantity); + $couponTotal += $content->quantity; + $coupons = array_merge($coupons, [ + 'quantity' => $content->quantity, + 'coupon' => new CouponsResource($coupon) + ]); + } + } + } + + return new StatusResource([ + 'status' => "OK", + 'name' => $campagne->camp_name, + 'limited_printing' => $campagne->camp_limitedPrinting, + 'available_coupon' => $nbCoupons, + 'available_amount' => $montantDispo, + 'total_coupon' => $couponTotal, + 'total_amount' => $montantTotal, + 'coupons' => $coupons + ]); + } + + public function printBasket(PrintBasketRequest $request) + { + $datas = $request->validated(); + + $customer = Customers::where('hashcode', $datas['hashcode'])->first(); + $campagne = Campagne::find($datas['refcamp']); + + if (!$campagne->camp_type->equals(CampaignTypes::panier())) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign is not basket.']); + } + if ($campagne->camp_published === 0) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']); + } + if ($campagne->site->crm_token === null) { + return new StatusResource(['status' => 'KO', 'code' => 500, 'message' => 'CRM Token is missing for site_id : ' . $campagne->site->site_id]); + } + if ($campagne->site->crm_password === null) { + return new StatusResource(['status' => 'KO', 'code' => 500, 'message' => 'CRM Password is missing for site_id : ' . $campagne->site->site_id]); + } + $basket = $customer->baskets()->where('campagne_id', $campagne->camp_id)->first(); + if (is_null($basket)) { + return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Basket not found.']); + } + $crm = new CrmApiV2(config('crm.CRM_ENDPOINT'), $campagne->site->crm_token, $campagne->site->crm_password); + try { + /** + * @var \LDC\LDCCRM\Models\Customer + */ + $crmInfos = $crm->getCustomer($customer->hashcode); + } catch (\Exception $e) { + Log::critical($e->getMessage()); + return new StatusResource(['status' => 'KO', 'code' => 422, 'message' => 'Customer not found.']); + } + if (is_null($crmInfos)) { + return new StatusResource(['status' => 'KO', 'code' => 422, 'message' => 'Customer not found.']); + } + + foreach ($basket->contents as $content) + { + $published = true; + $coupon = $content->coupon()->whereRaw("coupon_published = 1 AND (coupon_mindatediffusion IS NULL OR coupon_mindatediffusion <= NOW()) AND (coupon_maxdatediffusion IS NULL OR coupon_maxdatediffusion >= NOW()) AND (coupon_maxdatevalidity IS NULL OR coupon_maxdatevalidity >= NOW())")->first(); + $b64img = $this->printCoupon($coupon, $customer, $crmInfos); + if (!is_null($coupon)) + { + // ---- Contrôle des calendriers de diffusion + $calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get(); + if (!$calendars->isEmpty()) { + $published = false; + foreach ($calendars as $calendar) { + if (strtotime(date('Y-m-d H:i:s')) > strtotime($calendar->calendrier_startdate) && strtotime(date('Y-m-d H:i:s')) < strtotime($calendar->calendrier_enddate)) { + $published = true; + } + } + } + if ($published){ + // TODO : Print coupon + $b64img = $this->printCoupon($coupon, $customer, $crmInfos); + dd($b64img); + } + } + } + } } diff --git a/app/Http/Controllers/Api/v1/MurController.php b/app/Http/Controllers/Api/v1/MurController.php index b502130..4b19eec 100644 --- a/app/Http/Controllers/Api/v1/MurController.php +++ b/app/Http/Controllers/Api/v1/MurController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1; use App\Calendrier; use App\Campagne; +use App\Enums\CampaignTypes; use App\Http\Controllers\Controller; use App\Http\Requests\Murs\MursShowRequest; use App\Http\Resources\CouponsResource; @@ -22,7 +23,7 @@ class MurController extends Controller if ($campagne->camp_published === 0) { return new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Campaign not found.']); } - if ($campagne->camp_type !== 0) { + if ($campagne->camp_type->equals(CampaignTypes::mur())) { return new StatusResource(['status' => 'KO', 'code' => 403, 'message' => 'Campaign type error.']); } diff --git a/app/Http/Controllers/BrandChangeController.php b/app/Http/Controllers/BrandChangeController.php new file mode 100644 index 0000000..7f0c307 --- /dev/null +++ b/app/Http/Controllers/BrandChangeController.php @@ -0,0 +1,22 @@ +site_id); + session()->put('site', $site); + return redirect()->back(); + } +} diff --git a/app/Http/Controllers/CampagneController.php b/app/Http/Controllers/CampagneController.php index 9fb08b8..9b052c2 100644 --- a/app/Http/Controllers/CampagneController.php +++ b/app/Http/Controllers/CampagneController.php @@ -6,17 +6,25 @@ use App\Campagne; use App\Site; use App\Coupon; use App\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\Mur; use App\PanierContent; use App\Notification; +use App\Panier; use Illuminate\Http\Request; use Illuminate\Support\Facades\File; use App\Traits\CouponTrait; -use Response; class CampagneController extends Controller { - // use BarcodeGenerator; use CouponTrait; /** @@ -26,8 +34,11 @@ class CampagneController extends Controller */ public function index() { - $campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get(); - return view('campagne.index')->with('campagnes', $campagnes); + // 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); } /** @@ -37,38 +48,32 @@ class CampagneController extends Controller */ public function create() { - return view('campagne.create'); + return view('campagnes.create'); } /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param StoreCampaign $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(StoreCampaign $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; - + // TODO : Revoir le passage du site $site = session()->get('site'); + $campagne = new Campagne(); + $campagne->fill(array_merge($request->validated(), ['camp_siteId' => $site->site_id])); + $campagne->save(); + if ($site->campagnes()->save($campagne)) { - // File::makeDirectory(public_path('/landings/' . $campagne->camp_id)); - if ($campagne->camp_type == 0) { + if ($campagne->camp_type->equals(CampaignTypes::mur())) { File::copyDirectory(resource_path('/views/template/mur'), public_path('/landings/' . $campagne->camp_id)); - } elseif ($campagne->camp_type == 1) { + } elseif ($campagne->camp_type->equals(CampaignTypes::panier())) { File::copyDirectory(resource_path('/views/template/panier'), public_path('/landings/' . $campagne->camp_id)); - } elseif ($campagne->camp_type == 2) { + } elseif ($campagne->camp_type->equals(CampaignTypes::murss())) { File::copyDirectory(resource_path('/views/template/murnoselection'), public_path('/landings/' . $campagne->camp_id)); - } elseif ($campagne->camp_type == 3) { + } elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) { File::copyDirectory(resource_path('/views/template/panierselection'), public_path('/landings/' . $campagne->camp_id)); } } @@ -84,45 +89,35 @@ class CampagneController extends Controller */ public function edit(Campagne $campagne) { - $site = Site::findOrFail(session()->get('site')->id)->first(); + // TODO : Revoir le passage du site id + $siteId = session()->get('site')->id; - $couponsLinked = $campagne->coupons()->get(); - $campid = $campagne->camp_id; + $couponsNotLinked = Coupon::whereDoesntHave('campagnes', function ($q) use ($campagne) { + $q->where('campagne_id', $campagne->camp_id); + })->where('coupon_siteId', $siteId)->where('coupon_published', 1)->get(); - $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]); + return view('campagnes.edit', ['campagne' => $campagne, 'coupons' => $couponsNotLinked]); } /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request + * @param UpdateCampaign $request * @param \App\Campagne $campagne * @return \Illuminate\Http\Response */ - public function update(Request $request, Campagne $campagne) + public function update(UpdateCampaign $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(); + $campagne->fill($request->validated()); 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'); + if ($campagne->save()) { + session()->flash('update_ok', __('La campagne a bien été modifiée')); } else { - session()->flash('update_nok', 'Erreur lors de l\'enregistrement'); + session()->flash('update_nok', __("Erreur lors de l'enregistrement")); } return redirect()->route('campagne.edit', ['campagne' => $campagne]); @@ -131,45 +126,60 @@ class CampagneController extends Controller /** * Remove the specified resource from storage. * + * @param DeleteCampaign $request * @param \App\Campagne $campagne * @return \Illuminate\Http\Response */ - public function destroy(Campagne $campagne) + public function destroy(DeleteCampaign $request, 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); + return view('campagnes.edit')->with('campagne', $campagne); } } - /** - * @param \Illuminate\Http\Request $request - * - * @return array - */ - public function saveNotification(Request $request) + // ---- Ajoute des coupons à une campagne + public function addCoupons(AddCouponsCampaign $request, Campagne $campaign) { - $notification = new Notification(); - $notification->notif_name = $request->input('notif_name'); - $notification->notif_email = $request->input('notif_email'); - $notification->notif_campId = $request->input('notif_campId'); + $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) + { + $notification = new Notification(); + $notification->fill(array_merge($request->validated(), ['notif_campId' => $campaign->camp_id])); $notification->save(); + return redirect()->back(); } /** + * @param RemoveNotifCampaign $request * @param \App\Notification $notification * * @return array */ - public function deleteNotification($id) + public function deleteNotification(RemoveNotifCampaign $request, Notification $notification) { - $notification = Notification::find($id); if ($notification->delete()) { return redirect()->back(); } else { @@ -178,21 +188,107 @@ class CampagneController extends Controller } } - /** - * @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(); - // } - // } + // ---- 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); + + dd($res->original, $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); + } + public function getDetail(Request $request) { @@ -203,7 +299,7 @@ class CampagneController extends Controller $refcamp = $request->refcamp; $campagne = Campagne::where(['camp_id' => $refcamp])->first(); if (!$campagne) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -216,7 +312,7 @@ class CampagneController extends Controller $refsite = $request->refsite; $site = Site::where(['site_id' => $refsite])->first(); if (!$site) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site n\'existe pas' @@ -227,7 +323,7 @@ class CampagneController extends Controller } if ($campagne->camp_siteId != $site->site_id) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 108, 'Message' => 'Pas de campagne pour ce site' @@ -235,7 +331,7 @@ class CampagneController extends Controller } if ($error) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -244,16 +340,16 @@ class CampagneController extends Controller $enligne = ($campagne->camp_published == 1) ? "oui" : "non"; switch ($campagne->camp_type) { - case 0: + case CampaignTypes::mur(): $type = "mur"; break; - case 1: + case CampaignTypes::panier(): $type = "panier"; break; - case 2: + case CampaignTypes::murss(): $type = "mur sans sélection"; break; - case 3: + case CampaignTypes::paniers(): $type = "panier avec sélection"; break; } @@ -314,7 +410,7 @@ class CampagneController extends Controller $data['Coupons'][] = $codeTraitement; }//end foreach }//end if - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Détails Campagne' => $data ]); @@ -328,7 +424,7 @@ class CampagneController extends Controller $refcamp = $request->refcamp; $campagne = Campagne::where(['camp_id' => $refcamp])->first(); if (!$campagne) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -341,7 +437,7 @@ class CampagneController extends Controller $refsite = $request->refsite; $site = Site::where(['site_id' => $refsite])->first(); if (!$site) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site n\'existe pas' @@ -355,7 +451,7 @@ class CampagneController extends Controller $refadherent = $request->refadherent; $contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first(); if (!$contact) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 104, 'Message' => 'Le contact n\'existe pas' @@ -366,7 +462,7 @@ class CampagneController extends Controller } if ($error) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -399,6 +495,6 @@ class CampagneController extends Controller $data['Codes traitement'][] = $codeTraitement; } } - return Response::json($data); + return response()->json($data); } } diff --git a/app/Http/Controllers/ChangeMarqueController.php b/app/Http/Controllers/ChangeMarqueController.php deleted file mode 100644 index d6d54e4..0000000 --- a/app/Http/Controllers/ChangeMarqueController.php +++ /dev/null @@ -1,24 +0,0 @@ -input('site_id'); - $currentRoute = $request->input('current_route'); - $site = \App\Site::findOrFail($siteId); - session()->put('site', $site); - - return redirect('/bo/' . $currentRoute); - } -} diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php index f1410ea..03bc677 100644 --- a/app/Http/Controllers/ContactController.php +++ b/app/Http/Controllers/ContactController.php @@ -5,11 +5,21 @@ namespace App\Http\Controllers; use App\Contact; use App\Site; use App\Campagne; -use Response; +use App\Enums\CampaignTypes; +use App\Http\Requests\Contact\LoadWidgetContact; +use App\Http\Requests\Contact\SearchContact; +use App\Http\Requests\Contact\StoreContact; +use App\Http\Requests\Contact\UpdateContact; +use App\Log; +use App\Panier; +use App\PanierContent; +use App\Traits\CouponTrait; use Illuminate\Http\Request; class ContactController extends Controller { + use CouponTrait; + /** * Display a listing of the resource. * @@ -17,46 +27,34 @@ class ContactController extends Controller */ public function index(Request $request) { - $contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get(); - - return view('contact.index')->with('contacts', $contacts)->with('search', false); + return view('contact.index')->with('search', false); } - public function search_contact(Request $request) + public function search_contact(SearchContact $request) { - session()->put('active_route', 'contact'); - $page = $request->input('page'); - $name = $request->input('searchName'); - $firstname = $request->input('searchFirstname'); - $email = $request->input('searchEmail'); - $cp = $request->input('searchCp'); - $ville = $request->input('searchVille'); - $country = $request->input('searchCountry'); + session()->put('active_route', 'contact'); - if (isset($name) || isset($firstname) || isset($email) || isset($cp) || isset($ville) || isset($country)) { - $contacts = Contact::where('contact_siteId', session()->get('site')->site_id) - ->searchFirstname($firstname) - ->searchName($name) - ->searchEmail($email) - ->searchCp($cp) - ->searchVille($ville) - ->searchCountry($country) - ->paginate(2, ['*'], 'page', $page); - $searchData = array( - 'name' => $name, - 'firstname' => $firstname, - 'email' => $email, - 'cp' => $cp, - 'ville' => $ville, - 'pays' => $country - ); - return view('contact.index')->with('contacts', $contacts)->with('search', true)->with('searchData', $searchData); - } else { - $contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get(); + $contacts = Contact::where('contact_siteId', session()->get('site')->site_id) + ->searchFirstname($request->searchFirstname) + ->searchName($request->searchName) + ->searchEmail($request->searchEmail) + ->searchCp($request->searchCp) + ->searchVille($request->searchVille) + ->searchCountry($request->searchCountry) + ->orderBy('contact_createdate', 'DESC') + ->paginate(15, ['*'], 'page', $request->page); - return view('contact.index')->with('contacts', $contacts)->with('search', false); - }//end if + $searchData = array( + 'name' => $request->searchName, + 'firstname' => $request->searchFirstname, + 'email' => $request->searchEmail, + 'cp' => $request->searchCp, + 'ville' => $request->searchVille, + 'pays' => $request->searchCountry + ); + + return view('contact.index')->with('contacts', $contacts)->with('search', true)->with('searchData', $searchData); } /** @@ -72,46 +70,22 @@ class ContactController extends Controller /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param StoreContact $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(StoreContact $request) { - $validatedData = $request->validate([ - 'contact_ref' => 'required|unique:contact', - 'contact_nom' => 'required', - 'contact_prenom' => 'required', - 'contact_email' => 'required', - 'contact_cp' => 'required', - 'contact_ville' => 'required', - 'contact_country' => 'required' - ]); - - $contact = new Contact(); - $contact->contact_nom = $request->input('contact_nom'); - $contact->contact_prenom = $request->input('contact_prenom'); - $contact->contact_ref = $request->input('contact_ref'); - $contact->contact_email = $request->input('contact_email'); - $contact->contact_cp = $request->input('contact_cp'); - $contact->contact_ville = $request->input('contact_ville'); - $contact->contact_country = $request->input('contact_country'); - $contact->contact_hash = strtoupper(md5(uniqid(time(), true))); - - // $site = Site::findOrFail(session()->get('site')->id)->first(); + // TODO : Revoir le passage du site $site = session()->get('site'); + $contact = new Contact(); + $contact->fill($request->validated()); $contact->contact_siteId = $site->site_id; - $contact->save(); - $contacts = Contact::where('contact_siteId', session()->get('site')->site_id)->orderBy('contact_createdate', 'DESC')->take(10)->get(); - $campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get(); - - return view('contact.edit', ['contact' => $contact, 'created' => true, 'contacts' => $contacts, 'campagnes' => $campagnes]); + return redirect()->route('contact.edit', ['contact' => $contact]); } - - /** * Show the form for editing the specified resource. * @@ -125,47 +99,26 @@ class ContactController extends Controller return view('contact.edit', ['contact' => $contact, 'campagnes' => $campagnes]); } - /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request - * @param \App\Contact $contact + * @param UpdateContact $request + * @param \App\Contact $contact * @return \Illuminate\Http\Response */ - public function update(Request $request, Contact $contact) + public function update(UpdateContact $request, Contact $contact) { - $validatedData = $request->validate([ - 'contact_ref' => 'required', - 'contact_nom' => 'required', - 'contact_prenom' => 'required', - 'contact_email' => 'required', - 'contact_cp' => 'required', - 'contact_ville' => 'required', - 'contact_country' => 'required' - ]); - - $campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get(); - if ($contact->update($request->all())) { - session()->flash('update_ok', 'La campagne a bien été modifiée'); + $contact->fill($request->validated()); + if ($contact->save()) { + session()->flash('update_ok', __('La campagne a bien été modifiée')); } else { - session()->flash('update_nok', 'Erreur lors de l\'enregistrement'); + session()->flash('update_nok', "Erreur lors de l'enregistrement"); } - return redirect()->route('contact.edit', ['contact' => $contact]); } public function updateContact(Request $request) { - if (isset($request->admin)) { - $source = 'ADMIN'; - } else { - $source = 'API'; - } - // ---- INIT du log - // $log = new Log(); - // $log->log_action = config('constants.updatecontact'); - // $log->log_source = $source; $error = false; // ---- Contrôle des paramètres if (isset($request->refadherent) && $request->refadherent != "") { @@ -215,11 +168,7 @@ class ContactController extends Controller } if ($error) { - // $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]); - // $log->log_statut = 'NOK'; - // $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; - // $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -258,12 +207,7 @@ class ContactController extends Controller $contact->contact_hash = strtoupper(md5(uniqid(time(), true))); } } else { - // $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]); - // $log->log_refsite = $request->refsite; - // $log->log_statut = 'NOK'; - // $log->log_message = "Le site spécifié n'existe pas"; - // $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site spécifié n\'existe pas' @@ -272,21 +216,114 @@ class ContactController extends Controller }//end if if ($contact->save()) { - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'contact' => $contact ]); } else { - // $log->log_params = json_encode(['refadherent' => $request->refadherent, 'refsite'=>$request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune]); - // $log->log_refsite = $request->refsite; - // $log->log_statut = 'NOK'; - // $log->log_message = "Une erreur est survenue"; - // $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 109, 'Message' => 'Une erreur est survenue' ]); } } + + public function loadWidget(LoadWidgetContact $request, Contact $contact) + { + $camp_id = $request->camp_id; + $campagne = Campagne::where(['camp_id' => $camp_id])->first(); + $coupons = $campagne->coupons; + + foreach ($coupons as $key => $coupon) { + if (!$this->isAvailableToPrint($coupon, $campagne)) { + $coupons->forget($key); + } + } + + $allLogs = Log::where(['log_refsite' => $campagne->camp_siteId, 'log_contactId' => $contact->contact_id, 'log_statut' => 'OK'])->orderBy('created_at', 'DESC')->get(); + $logs = array(); + foreach ($allLogs as &$l) { + $params = json_decode($l->log_params); + if ($l->log_action == 3 || $l->log_action == 1) { + $l->log_message = json_decode($l->log_message, true); + } + if (intval($params->refcamp) == $camp_id) { + array_push($logs, $l); + } + } + + // ---- Pour les types murs + if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) { + foreach ($coupons as &$coupon) { + $coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact); + } + unset($coupon); + + // Montant total et Nombre réductions disponible + $montantDispo = 0; + $montantTotal = 0; + $nbCoupon = 0; + foreach ($coupons as $coupon) { + $montantTotal += $coupon->coupon_value; + if ($coupon->isAvailable == true) { + $montantDispo += $coupon->coupon_value; + $nbCoupon++; + } + } + + if (count($coupons) === $nbCoupon) { + $reset = false; + } else { + $reset = true; + } + + $campagne->url = url('/') . "/?refsite=" . $campagne->camp_siteId . "&refcamp=" . $camp_id . "&hash=" . $contact->contact_hash; + + $returnHTML = view('widgets.mur') + ->with([ + 'campagne' => $campagne, + 'reset' => $reset, + 'montantTotal' => $montantTotal, + 'montantDispo' => $montantDispo, + 'logs' => $logs, + 'contact' => $contact]) + ->renderSections()['widget']; + + return json_encode(array('success' => true, 'html' => $returnHTML)); + } else { + // ---- Pour les types paniers + $panier = Panier::where(['panier_campId' => $campagne->camp_id, 'panier_contactId' => $contact->contact_id, 'panier_pending' => 1])->first(); + if ($panier) { + $panier_ref = $panier->panier_ref; + foreach ($coupons as &$coupon) { + $paniercontent = PanierContent::where(['panier_content_couponId' => $coupon->coupon_id, 'panier_content_panierId' => $panier->panier_id])->first(); + if ($paniercontent) { + $coupon->qty = $paniercontent->panier_content_quantity; + } else { + $coupon->qty = 0; + } + } + $campagne->url = url('/') . "/?basketid=" . $panier_ref; + unset($coupon); + } else { + $panier_ref = ""; + foreach ($coupons as &$coupon) { + $coupon->qty = 0; + } + $campagne->url = "Pas d'url disponible (panier non créé)"; + } + + $returnHTML = view('widgets.panier') + ->with([ + 'campagne' => $campagne, + 'contact' => $contact, + 'panier' => $panier_ref, + 'logs' => $logs, + 'coupons' => $coupons + ]) + ->renderSections()['widget']; + return json_encode(array('success' => true, 'html' => $returnHTML)); + } + } } diff --git a/app/Http/Controllers/CouponController.php b/app/Http/Controllers/CouponController.php index 1eb0b1a..29c0377 100644 --- a/app/Http/Controllers/CouponController.php +++ b/app/Http/Controllers/CouponController.php @@ -9,9 +9,10 @@ use App\Site; use App\Campagne; use App\Mouvement; use App\Calendrier; +use App\Http\Requests\Coupons\StoreCoupons; +use App\Http\Requests\Coupons\UpdateCoupons; use App\Traits\GenerateBR; use App\Traits\CouponTrait; -use Validator; class CouponController extends Controller { @@ -25,23 +26,16 @@ class CouponController extends Controller */ public function index() { - $campIds = Campagne::where('camp_siteId', session()->get('site')->site_id) - ->get() - ->pluck('camp_id') - ->flatten() - ->toArray(); - - $coupons = Coupon::where('coupon_siteId', session()->get('site')->id)->get(); - + // TODO : Revoir le passage du site + $site = session()->get('site'); + $coupons = Coupon::where('coupon_siteId', $site->id)->get(); foreach ($coupons as $coupon) { // ---- Calcul de la quantité mise à disposition grace aux fonctions dans CouponTrait.php $coupon->coupon_quantity = $this->getFullQuantity($coupon); // ---- Calcul de la quantité restante toutes campagnes comprises grace aux fonctions dans CouponTrait.php - $coupon->coupon_left = 0; -// $coupon->coupon_quantity - $this->getUsedQuantity($coupon); + $coupon->coupon_left = $coupon->coupon_quantity - $this->getUsedQuantity($coupon); } - - return view('coupon.index', ['coupons' => $coupons, 'camps' => $campIds]); + return view('coupon.index', ['coupons' => $coupons]); } /** @@ -51,51 +45,32 @@ class CouponController extends Controller */ public function create() { + // TODO : Revoir le passage du site + $site = session()->get('site'); + $campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get() ->pluck('camp_name', 'camp_id'); - $site = Site::where(['id' => session()->get('site')->id])->first(); + $site = Site::findOrFail($site->id); return view('coupon.create')->with('campagnes', $campagnes)->with('site', $site); } /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param StoreCoupons $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(StoreCoupons $request) { - $data = $request->all(); - - $v = Validator::make($data, [ - 'coupon_validity_text' => 'required', - 'coupon_legal_mentions' => 'required', - 'coupon_decoration_image' => 'required|image|mimes:jpeg,png', - 'coupon_logo_image' => 'required|image|mimes:jpeg,png', - 'coupon_rcs' => 'required', - 'coupon_site_contact' => 'required', - ]); - - $v->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) { - return isset($input->coupon_norme); - }); - - if ($v->fails()) { - return redirect('bo/coupon/' . $coupon->coupon_id . '/edit') - ->withErrors($v) - ->withInput(); - } - - + $site_id = $request->site_id; $datas = $this->saveImg($request); + $coupon = new Coupon(); + $coupon->fill($datas); - $coupon = new Coupon(); - $coupon->coupon_code = $datas['coupon_code']; - $coupon->coupon_name = $datas['coupon_name']; - $coupon->coupon_value = $datas['coupon_value']; + // TODO : A revoir au moment ou on enlevera les images mobiles if (isset($datas['coupon_thumbnail1'])) { $coupon->coupon_thumbnail1 = $datas['coupon_thumbnail1']; } @@ -111,46 +86,21 @@ class CouponController extends Controller if (isset($datas['coupon_image'])) { $coupon->coupon_image = $datas['coupon_image']; } - if (isset($datas['coupon_norme'])) { - $coupon->coupon_norme = $datas['coupon_norme']; - $coupon->coupon_gs1code = $datas['coupon_gs1code']; - } - if (isset($datas['coupon_enablelimitquantity'])) { - $coupon->coupon_enablelimitquantity = $datas['coupon_enablelimitquantity']; - $coupon->coupon_limitquantity = $datas['coupon_limitquantity']; - } - if (isset($datas['coupon_enablelimitperiod'])) { - $coupon->coupon_enablelimitperiod = $datas['coupon_enablelimitperiod']; - $coupon->coupon_limitperiod = $datas['coupon_limitperiod']; - } - if (isset($datas['coupon_published'])) { - $coupon->coupon_published = $datas['coupon_published']; - } else { + + //TODO : Voir si on peut mettre le set a 0 dans la request + if (!isset($datas['coupon_published'])) { $coupon->coupon_published = 0; } - if (isset($datas['coupon_legal_mentions_splitted'])) { - $coupon->coupon_legal_mentions_splitted = $datas['coupon_legal_mentions_splitted']; - } else { + if (!isset($datas['coupon_legal_mentions_splitted'])) { $coupon->coupon_legal_mentions_splitted = 0; } - $coupon->coupon_validity = $datas['coupon_validity']; - $coupon->coupon_mindatediffusion = $datas['coupon_mindatediffusion']; - $coupon->coupon_maxdatediffusion = $datas['coupon_maxdatediffusion']; - $coupon->coupon_maxdatevalidity = $datas['coupon_maxdatevalidity']; - $coupon->coupon_validity_text = $datas['coupon_validity_text']; - $coupon->coupon_legal_mentions = $datas['coupon_legal_mentions']; - if (isset($datas['coupon_decoration_image'])) { - $coupon->coupon_decoration_image = $datas['coupon_decoration_image']; - } - if (isset($datas['coupon_logo_image'])) { - $coupon->coupon_logo_image = $datas['coupon_logo_image']; - } - $coupon->coupon_rcs = $datas['coupon_rcs']; - $coupon->coupon_site_contact = $datas['coupon_site_contact']; - $coupon->coupon_seuil_alert = $datas['coupon_seuil_alert']; + $br_path = $this->generateBase($request, $coupon); + $coupon->coupon_image = $br_path; + $coupon->coupon_siteId = $site_id; + $coupon->save(); - $site = Site::find($request->input('site_id')); + $site = Site::findOrFail($site_id); $site->coupons()->save($coupon); @@ -160,15 +110,6 @@ class CouponController extends Controller $coupon->mouvements()->save($mouvement); } - if (isset($datas['mouvementNbre'])) { - foreach ($datas['mouvementNbre'] as $key => $value) { - $mouvement = new Mouvement(); - $mouvement->mouvement_nombre = $value; - $mouvement->mouvement_created_at = $datas['mouvementDate'][$key]; - $coupon->mouvements()->save($mouvement); - } - } - if (isset($datas['startdate'])) { foreach ($datas['startdate'] as $key => $value) { $calendar = new Calendrier(); @@ -178,22 +119,7 @@ class CouponController extends Controller } } - $br_path = $this->generateBase($request, $coupon); - $coupon->coupon_image = $br_path; - $coupon->save(); - - return view('coupon.edit', ['coupon' => $coupon]); - } - - /** - * Display the specified resource. - * - * @param \App\Coupon $coupon - * @return \Illuminate\Http\Response - */ - public function show(Coupon $coupon) - { - return view('coupon.show', ['coupon' => $coupon]); + return redirect()->route('coupon.edit', ['coupon' => $coupon]); } /** @@ -210,33 +136,13 @@ class CouponController extends Controller /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request + * @param UpdateCoupons $request * @param \App\Coupon $coupon * @return \Illuminate\Http\Response */ - public function update(Request $request, Coupon $coupon) + public function update(UpdateCoupons $request, Coupon $coupon) { - - $data = $request->all(); - - $v = Validator::make($data, [ - 'coupon_decoration_image' => 'image|mimes:jpeg,png', - 'coupon_logo_image' => 'image|mimes:jpeg,png', - ]); - - $v->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) { - if (isset($input->coupon_gs1code_image_hidden)) { - return false; - } - return isset($input->coupon_norme); - }); - - if ($v->fails()) { - return redirect('bo/coupon/' . $coupon->coupon_id . '/edit') - ->withErrors($v) - ->withInput(); - } - + //TODO : Voir si on peut mettre le set a 0 dans la request if (!isset($request->coupon_enablelimitquantity)) { $coupon->coupon_enablelimitquantity = 0; } @@ -252,11 +158,17 @@ class CouponController extends Controller if (!isset($request->coupon_legal_mentions_splitted)) { $coupon->coupon_legal_mentions_splitted = 0; } - if ($coupon->update($this->saveImg($request))) { - $datas = $this->saveImg($request); + + $datas = $this->saveImg($request); + // On sauvegarde les informations + if ($coupon->update($datas)) { + // Si l'update est OK on met à jour l'image du BR $br_path = $this->generateBase($request, $coupon); $coupon->coupon_image = $br_path; - $coupon->update($this->saveImg($request)); + $coupon->save(); + + // Si on ajoute des BR + // TODO : Gestion de l'erreur si on ajoute une ligne vide if (isset($datas['mouvementNbre'])) { foreach ($datas['mouvementNbre'] as $key => $value) { $mouvement = new Mouvement(); @@ -265,6 +177,8 @@ class CouponController extends Controller $coupon->mouvements()->save($mouvement); } } + // Si on ajoute une plage de diffusion + // TODO : Gestion de l'erreur si on ajoute une ligne vide if (isset($datas['startdate'])) { $coupon->calendriers()->delete(); foreach ($datas['startdate'] as $key => $value) { @@ -295,10 +209,10 @@ class CouponController extends Controller $coupon->coupon_published = 0; $coupon->save(); if ($coupon->delete()) { - return redirect(route('coupon.index')); + return redirect()->route('coupon.index'); } else { session()->flash('delete_nok', 'Erreur lors de la suppression'); - return view('coupon.edit')->with('coupon', $coupon); + return back(); } } @@ -311,8 +225,6 @@ class CouponController extends Controller { $datas = collect($request->all()); - $imgs = collect(array()); - foreach ($datas as $key => $item) { if ($key == 'coupon_image' || $key == 'coupon_gs1code' || $key == 'coupon_decoration_image' || $key == 'coupon_logo_image' || (substr($key, 7, 9) == 'thumbnail' && strlen($key) < 18)) { if (isset($item)) { diff --git a/app/Http/Controllers/CustomersController.php b/app/Http/Controllers/CustomersController.php new file mode 100644 index 0000000..2811c80 --- /dev/null +++ b/app/Http/Controllers/CustomersController.php @@ -0,0 +1,33 @@ +email; + + $site->load("campagnes"); + + if ($email) { + $customer = Customers::where('email', $email)->first(); + if ($customer) { + $publishedCampaign = $site->campagnes->where('camp_published', 1)->pluck('camp_id'); + + $campaigns = Campagne::where('camp_published', 1)->whereHas('printedWalls', function ($q) use ($customer, $publishedCampaign) { + $q->where('customer_id', $customer->id)->whereIn('camp_id', $publishedCampaign); + })->get(); + } + } + + return view('customers.index', compact('site', 'customer', 'campaigns', 'email')); + } +} diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php index 9d15242..e2029da 100644 --- a/app/Http/Controllers/ExportController.php +++ b/app/Http/Controllers/ExportController.php @@ -9,6 +9,7 @@ use App\Traits\CouponTrait; use App\Traits\GraphTrait; use App\Site; use App\Coupon; +use App\Http\Requests\Export\PDFExport; use Datetime; use Illuminate\Http\Request; @@ -34,11 +35,12 @@ class ExportController extends Controller } // ------ AJAX Export - public function export_coupons(Request $request) + public function exportCoupons(PDFExport $request) { - $ids = $request->input('ids'); - $startdate = date('Y-m-d', strtotime($request->input('startdate'))); - $enddate = date('Y-m-d', strtotime($request->input('enddate'))); + $ids = $request->ids; + $startdate = $request->startdate; + $enddate = $request->enddate; + $coupons = Coupon::find($ids); $labels = $this->getLabelsForStats($startdate, $enddate); @@ -47,8 +49,7 @@ class ExportController extends Controller foreach ($coupons as $coupon) { $cpName = str_replace(' ', '', $coupon->coupon_name); - $now = strtotime(now()); - $full_path = 'export/' . $cpName . '_' . $now . '.pdf'; + $full_path = 'export/' . $cpName . '_' . date('d_m_Y') . '.pdf'; $dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon); $coupon->couponQuantity = $this->getFullQuantity($coupon); $coupon->couponFullPrinted = $this->getUsedQuantity($coupon); @@ -71,12 +72,10 @@ class ExportController extends Controller $myPicture->drawScale(array("DrawSubTicks" => true, 'LabelSkip' => 1, 'LabelRotation' => 25, "Mode" => SCALE_MODE_START0, "CycleBackground" => true,"GridR" => 102,"GridG" => 102,"GridB" => 102)); $myPicture->setShadow(true, array("X" => 1,"Y" => 1,"R" => 0,"G" => 0,"B" => 0,"Alpha" => 10)); $myPicture->drawLineChart(array("DisplayColor" => DISPLAY_AUTO)); - $LabelSettings = array("NoTitle" => true); $myPicture->Render('export/temp.png'); $view = view('export.template')->with(['src' => 'export/temp.png', 'coupon' => $coupon, 'startdate' => $startdate, 'enddate' => $enddate])->render(); - // var_dump($view); $pdf->loadHTML($view); $pdf->save($full_path); array_push($paths, $full_path); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php deleted file mode 100644 index c4b2fb8..0000000 --- a/app/Http/Controllers/HomeController.php +++ /dev/null @@ -1,35 +0,0 @@ -middleware('auth'); - } - - /** - * Show the application dashboard. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - $test = Campagne::find(102); - - Debugbar::info($test); - - return view('home')->with([ - 'test' => $test, - ]); - } -} diff --git a/app/Http/Controllers/MaintenanceController.php b/app/Http/Controllers/MaintenanceController.php index 4b45cfc..6a76194 100644 --- a/app/Http/Controllers/MaintenanceController.php +++ b/app/Http/Controllers/MaintenanceController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Http\Requests\Users\StoreUsers; +use App\Http\Requests\Users\UpdateUsers; use App\Site; use App\User; use App\Log; @@ -15,15 +17,8 @@ class MaintenanceController extends Controller { $users = User::all(); - foreach ($users as &$user) { - $sites = $user->sites()->get(); - $user->linkedSites = ""; - foreach ($sites as $site) { - $user->linkedSites .= '

' . $site->site_nom . '

'; - } - } $dates = array(date('m/Y')); - for ($i = 1; $i < 12; $i++) { + for ($i = 1; $i < 6; $i++) { $datebefore = date("m/Y", strtotime("-" . $i . " months")); array_push($dates, $datebefore); } @@ -33,14 +28,6 @@ class MaintenanceController extends Controller array_push($count, [$month, $logs]); } - // $logArray = array(); - // foreach ($logs as $logMonth) { - // $count = count($logMonth); - // foreach ($logMonth as $log) { - // $date = Carbon::parse($log->created_at)->format('m/Y'); - // } - // array_push($logArray, [$date, $count]); - // } return view('maintenance.index')->with(['users' => $users, 'logs' => $count]); } @@ -50,38 +37,17 @@ class MaintenanceController extends Controller return view('user.create')->with(['sites' => $sites]); } - public function userstore(Request $request) + public function userstore(StoreUsers $request) { - - $validatedData = $request->validate([ - 'email' => 'required|unique:users|email', - 'name' => 'required', - 'password' => 'required' - ]); - - $nom = $request->name; - $email = $request->email; - $password = $request->password; - $role = $request->roles; - - $user = new User(); - $user->name = $nom; - $user->email = $email; - $user->password = Hash::make($password); - $user->roles = $role; + $user = new User(); + $user->fill($request->validated()); + $user->password = Hash::make($request->password); $user->save(); - // MAJ des sites liés - if (isset($request->site)) { - $siteids = $request->site; - $sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray(); - $user->sites()->sync($sites); - } + $sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray(); + $user->sites()->sync($sites); - - $sites = Site::all(); - $usersites = $user->sites()->get()->pluck('site_id')->toArray(); - return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]); + return redirect()->route('maintenance.user.edit', ['user' => $user]); } public function useredit(User $user) @@ -91,55 +57,32 @@ class MaintenanceController extends Controller return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]); } - public function userdestroy(User $user) + public function userupdate(UpdateUsers $request, User $user) { - if ($user->delete()) { - return redirect(route('maintenance.show')); - } else { - session()->flash('delete_nok', 'Erreur lors de la suppression'); - return view('maintenance.user.edit')->with('user', $user); - } - } - - public function userupdate(Request $request, User $user) - { - // MAJ du User - $user->name = $request->name; - $user->email = $request->email; - $user->roles = $request->roles; + //MAJ du User + $user->fill($request->validated()); $user->save(); - // MAJ des sites liés - $siteids = $request->site; - $sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray(); + //MAJ des sites liés + $sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray(); $user->sites()->sync($sites); - $marques = Auth::user()->sites; + $marques = Auth::user()->sites; $submarques = $marques->map(function ($marque) { return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']); }); session()->put('marques', $submarques); + return redirect()->route('maintenance.show'); + } - $users = User::all(); - - foreach ($users as &$user) { - $sites = $user->sites()->get(); - $user->linkedSites = ""; - foreach ($sites as $site) { - $user->linkedSites .= '

' . $site->site_nom . '

'; - } + public function userdestroy(User $user) + { + if ($user->delete()) { + return redirect()->route('maintenance.show'); + } else { + session()->flash('delete_nok', 'Erreur lors de la suppression'); + return view('maintenance.user.edit')->with('user', $user); } - $dates = array('02/2019'); - for ($i = 1; $i < 12; $i++) { - $datebefore = date("m/Y", strtotime("-" . $i . " months")); - array_push($dates, $datebefore); - } - $count = array(); - foreach ($dates as $month) { - $logs = Log::where(['log_statut' => 'NOK'])->whereMonth('created_at', $month)->count(); - array_push($count, [$month, $logs]); - } - return view('maintenance.index')->with(['users' => $users, 'logs' => $count]); } } diff --git a/app/Http/Controllers/MouvementController.php b/app/Http/Controllers/MouvementController.php deleted file mode 100644 index 427d5a0..0000000 --- a/app/Http/Controllers/MouvementController.php +++ /dev/null @@ -1,28 +0,0 @@ -mouvement_type = $request->input('mouvement_type'); - $mouvement->mouvement_nombre = $request->input('mouvement_nombre'); - $mouvement->mouvement_commentaire = $request->input('mouvement_commentaire'); - - $coupon = Coupon::find($request->input('coupon_id')); - - $coupon->mouvements()->save($mouvement); - } -} diff --git a/app/Http/Controllers/MurController.php b/app/Http/Controllers/MurController.php index 94bb192..1c6283a 100644 --- a/app/Http/Controllers/MurController.php +++ b/app/Http/Controllers/MurController.php @@ -9,7 +9,6 @@ use App\Mur; use App\Log; use App\Traits\CouponTrait; use App\Traits\ThanksTrait; -use Response; class MurController extends Controller { @@ -28,7 +27,7 @@ class MurController extends Controller if (!isset($datas['refsite'])) { abort(404); } - if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type != 0 && $campagne->camp_type != 2)) { + if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type->value != 0 && $campagne->camp_type->value != 2)) { abort(404); } @@ -123,7 +122,7 @@ class MurController extends Controller $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -138,7 +137,7 @@ class MurController extends Controller $log->log_statut = 'NOK'; $log->log_message = "La campagne n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -156,7 +155,7 @@ class MurController extends Controller $log->log_message = "Le contact n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 104, 'Message' => 'Le contact n\'existe pas' @@ -173,7 +172,7 @@ class MurController extends Controller $log->log_statut = 'OK'; $log->log_message = $mur . " enregistrements ont été mis à jour."; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Message' => $mur . " enregistrements ont été mis à jour." ]); @@ -184,7 +183,7 @@ class MurController extends Controller $log->log_statut = 'OK'; $log->log_message = 'Aucun contrôle à effacer'; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 110, 'Message' => 'Aucun contrôle à effacer' @@ -201,7 +200,7 @@ class MurController extends Controller if (isset($request->refcamp) && $request->refcamp != "") { $refcamp = $request->refcamp; } else { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -211,7 +210,7 @@ class MurController extends Controller // ------ Recuperation de la campagne $camp = Campagne::where(['camp_id' => $refcamp])->first(); if (!$camp) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -221,7 +220,7 @@ class MurController extends Controller // ------ Récupération des coupons de la campagne $coupons = $camp->coupons()->where(['coupon_published' => 1])->get(); if (count($coupons) == 0) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 105, 'Message' => 'La campagne est vide' @@ -237,7 +236,7 @@ class MurController extends Controller $montantTotal = number_format($montantTotal, 2, ",", " "); $montantTotal = str_pad($montantTotal, 6, "0", STR_PAD_LEFT); - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Message' => $montantTotal ]); @@ -265,7 +264,7 @@ class MurController extends Controller } if ($error) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -275,7 +274,7 @@ class MurController extends Controller $campagne = Campagne::where(['camp_id' => $refcamp])->where('camp_type', 'IN', array(0,2))->first(); if (!$campagne) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -284,7 +283,7 @@ class MurController extends Controller $contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first(); if (!$contact) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 104, 'Message' => 'Le contact n\'existe pas' @@ -308,7 +307,7 @@ class MurController extends Controller $montantDispo = number_format($montantDispo, 2, ",", " "); $montantDispo = str_pad($montantDispo, 6, "0", STR_PAD_LEFT); - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Message' => $montantDispo ]); diff --git a/app/Http/Controllers/PanierController.php b/app/Http/Controllers/PanierController.php index 5bbed0a..de7eead 100644 --- a/app/Http/Controllers/PanierController.php +++ b/app/Http/Controllers/PanierController.php @@ -7,12 +7,12 @@ use App\Panier; use App\Campagne; use App\Coupon; use App\Contact; +use App\Enums\CampaignTypes; use App\Site; use App\Log; use App\PanierContent; use App\Traits\CouponTrait; use App\Traits\ThanksTrait; -use Response; class PanierController extends Controller { @@ -40,7 +40,7 @@ class PanierController extends Controller } session()->put('campagne', $campagne); - if ($campagne->camp_type == 1) { + if ($campagne->camp_type->equals(CampaignTypes::panier())) { $coupons = $this->getCouponsPublished($campagne); } else { $panierContents = $this->getPanierContentPublished($panier); @@ -97,7 +97,7 @@ class PanierController extends Controller $log->log_message = "Le panier n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 106, 'Message' => 'Le panier n\'existe pas' @@ -115,7 +115,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -136,7 +136,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -148,7 +148,7 @@ class PanierController extends Controller foreach ($coupons as $code => $qty) { array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]); } - if (sizeof($coupons) == 0) { + if (count($coupons) == 0) { die(); } } else { @@ -156,7 +156,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -196,7 +196,7 @@ class PanierController extends Controller $log->log_message = "Le coupon ne correspond pas aux coupons liés a la campagne"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 110, 'Message' => 'Le coupon ne correspond pas aux coupons liés a la campagne' @@ -254,12 +254,12 @@ class PanierController extends Controller $response->panierContent = $panCont; - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Panier' => $response ]); } else { - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Panier' => $panier ]); @@ -269,7 +269,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Le panier n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 106, 'Message' => 'Le panier n\'existe pas' @@ -280,7 +280,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Le panier n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 106, 'Message' => 'Le panier n\'existe pas' @@ -292,13 +292,13 @@ class PanierController extends Controller if (isset($request->refcamp) && $request->refcamp != "") { $refcamp = $request->refcamp; $campagne = Campagne::where(['camp_id' => $refcamp])->first(); - if (!$campagne || $campagne->camp_published == 0 || ($campagne->camp_type != 1 && $campagne->camp_type != 3)) { + if (!$campagne || $campagne->camp_published == 0 || ($campagne->camp_type->value != 1 && $campagne->camp_type->value != 3)) { $log->log_params = json_encode(['refcamp' => $refcamp]); $log->log_statut = 'NOK'; $log->log_message = "La campagne n'existe pas ou n'est pas un panier"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas ou n\'est pas un panier' @@ -320,7 +320,7 @@ class PanierController extends Controller if (isset($request->refsite) && $request->refsite != "") { $refsite = $request->refsite; if ($refsite != $campagne->camp_siteId) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne ne correspond à aucune campagnes du site' @@ -381,7 +381,7 @@ class PanierController extends Controller } } } - if (sizeof($coupons) == 0) { + if (count($coupons) == 0) { die(); } } else { @@ -403,7 +403,7 @@ class PanierController extends Controller $log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 101, 'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents' @@ -442,7 +442,7 @@ class PanierController extends Controller $log->log_message = "Le site spécifié n'existe pas"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site spécifié n\'existe pas' @@ -454,7 +454,7 @@ class PanierController extends Controller $log->log_statut = 'NOK'; $log->log_message = "Une erreur est survenue"; $log->save(); - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 109, 'Message' => 'Une erreur est survenue' @@ -551,12 +551,12 @@ class PanierController extends Controller $response->panierContent = $panCont; - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Panier' => $response ]); } else { - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Panier' => $panier ]); @@ -570,7 +570,7 @@ class PanierController extends Controller if (isset($request->basketid) && $request->basketid != "") { $basketid = $request->basketid; } else { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 106, 'Message' => 'Le panier n\'existe pas' @@ -579,7 +579,7 @@ class PanierController extends Controller $panier = Panier::where('panier_ref', $basketid)->first(); if (!$panier) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 106, 'Message' => 'Le panier n\'existe pas' @@ -594,7 +594,7 @@ class PanierController extends Controller $contact = $panier->contact()->where(['contact_id' => $panier->panier_contactId])->first(); if (!$contact) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 104, 'Message' => 'Le contact n\'existe pas' @@ -603,7 +603,7 @@ class PanierController extends Controller $campagne = $panier->campagne()->where(['camp_id' => $panier->panier_campId])->first(); if (!$campagne) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 103, 'Message' => 'La campagne n\'existe pas' @@ -612,7 +612,7 @@ class PanierController extends Controller $site = $campagne->site()->first(); if ($site === null) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 102, 'Message' => 'Le site n\'existe pas' @@ -621,7 +621,7 @@ class PanierController extends Controller $allPanierContent = $panier->panierContents()->get(); if ($allPanierContent->count() == 0) { - return Response::json([ + return response()->json([ 'Statut' => 'KO', 'Code' => 108, 'Message' => 'Le panier n\'a pas de coupons liés' @@ -649,7 +649,7 @@ class PanierController extends Controller $response->panierContent = $panCont; - return Response::json([ + return response()->json([ 'Statut' => 'OK', 'Informations Panier' => $response ]); diff --git a/app/Http/Controllers/StatistiqueController.php b/app/Http/Controllers/StatistiqueController.php index 3df7c33..a2e9f59 100644 --- a/app/Http/Controllers/StatistiqueController.php +++ b/app/Http/Controllers/StatistiqueController.php @@ -25,20 +25,6 @@ class StatistiqueController extends Controller if (isset($site->campagnes)) { $campagnes = $site->campagnes; foreach ($campagnes as $campagne) { - switch ($campagne->camp_type) { - case 0: - $campagne->camp_type = "Mur"; - break; - case 1: - $campagne->camp_type = "Panier"; - break; - case 2: - $campagne->camp_type = "Mur sans sélection"; - break; - case 3: - $campagne->camp_type = "Panier Sélectionnable"; - break; - } $coupons = $campagne->coupons; foreach ($coupons as $coupon) { $coupon->quantity = $this->getFullQuantity($coupon); @@ -62,20 +48,6 @@ class StatistiqueController extends Controller { $count = 0; $colors = config('constants.colors'); - switch ($campagne->camp_type) { - case 0: - $campagne->camp_type = "Mur"; - break; - case 1: - $campagne->camp_type = "Panier"; - break; - case 2: - $campagne->camp_type = "Mur sans sélection"; - break; - case 3: - $campagne->camp_type = "Panier Sélectionnable"; - break; - } $coupons = $campagne->coupons; foreach ($coupons as $coupon) { @@ -92,7 +64,7 @@ class StatistiqueController extends Controller return view('stats.detail')->with(['campagne' => $campagne, 'startdate' => $startdate, 'enddate' => $enddate]); } - public function load_stats(Request $request) + public function loadStats(Request $request) { $campid = $request->campid; $startdate = $request->startdate; diff --git a/app/Http/Requests/BrandChange/InvokeBrandChange.php b/app/Http/Requests/BrandChange/InvokeBrandChange.php new file mode 100644 index 0000000..29dbc2f --- /dev/null +++ b/app/Http/Requests/BrandChange/InvokeBrandChange.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'site_id' => 'exists:site,id|required' + ]; + } +} diff --git a/app/Http/Requests/Campaign/AddCouponsCampaign.php b/app/Http/Requests/Campaign/AddCouponsCampaign.php new file mode 100644 index 0000000..70cb340 --- /dev/null +++ b/app/Http/Requests/Campaign/AddCouponsCampaign.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'ids' => 'required' + ]; + } +} diff --git a/app/Http/Requests/Campaign/DeleteCampaign.php b/app/Http/Requests/Campaign/DeleteCampaign.php new file mode 100644 index 0000000..ea20b3f --- /dev/null +++ b/app/Http/Requests/Campaign/DeleteCampaign.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/Campaign/RemoveCouponCampaign.php b/app/Http/Requests/Campaign/RemoveCouponCampaign.php new file mode 100644 index 0000000..03fea9c --- /dev/null +++ b/app/Http/Requests/Campaign/RemoveCouponCampaign.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/Campaign/RemoveNotifCampaign.php b/app/Http/Requests/Campaign/RemoveNotifCampaign.php new file mode 100644 index 0000000..58940b0 --- /dev/null +++ b/app/Http/Requests/Campaign/RemoveNotifCampaign.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/Campaign/ShowDemoCampaign.php b/app/Http/Requests/Campaign/ShowDemoCampaign.php new file mode 100644 index 0000000..d937afd --- /dev/null +++ b/app/Http/Requests/Campaign/ShowDemoCampaign.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/Campaign/StoreCampaign.php b/app/Http/Requests/Campaign/StoreCampaign.php new file mode 100644 index 0000000..6853f6a --- /dev/null +++ b/app/Http/Requests/Campaign/StoreCampaign.php @@ -0,0 +1,35 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'camp_name' => 'min:5|required', + 'camp_type' => 'integer|required', + 'camp_published' => 'integer|required', + 'camp_limitedPrinting' => 'sometimes|integer|required' + ]; + } +} diff --git a/app/Http/Requests/Campaign/StoreNotifCampaign.php b/app/Http/Requests/Campaign/StoreNotifCampaign.php new file mode 100644 index 0000000..f997d4d --- /dev/null +++ b/app/Http/Requests/Campaign/StoreNotifCampaign.php @@ -0,0 +1,39 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'notif_name' => 'min:5|required', + 'notif_email' => [ + 'required', + Rule::unique('notification')->where(function ($query) { + return $query->where('notif_campId', $this->campaign->camp_id); + }), + ] + ]; + } +} diff --git a/app/Http/Requests/Campaign/UpdateCampaign.php b/app/Http/Requests/Campaign/UpdateCampaign.php new file mode 100644 index 0000000..0dea541 --- /dev/null +++ b/app/Http/Requests/Campaign/UpdateCampaign.php @@ -0,0 +1,35 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'camp_name' => 'min:5|required', + 'camp_type' => 'integer|required', + 'camp_published' => 'integer|required', + 'camp_limitedPrinting' => 'sometimes|integer|required' + ]; + } +} diff --git a/app/Http/Requests/Contact/LoadWidgetContact.php b/app/Http/Requests/Contact/LoadWidgetContact.php new file mode 100644 index 0000000..78dfea1 --- /dev/null +++ b/app/Http/Requests/Contact/LoadWidgetContact.php @@ -0,0 +1,32 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'camp_id' => 'required|exists:campagne,camp_id' + ]; + } +} diff --git a/app/Http/Requests/Contact/SearchContact.php b/app/Http/Requests/Contact/SearchContact.php new file mode 100644 index 0000000..33f0c14 --- /dev/null +++ b/app/Http/Requests/Contact/SearchContact.php @@ -0,0 +1,38 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'page' => 'sometimes|integer|nullable', + 'searchName' => 'sometimes|alpha|max:50|nullable', + 'searchFirstname' => 'sometimes|alpha|max:50|nullable', + 'searchEmail' => 'sometimes|email|max:100|nullable', + 'searchCp' => 'sometimes|integer|max:10|nullable', + 'searchVille' => 'sometimes|alpha|max:50|nullable', + 'searchCountry' => 'sometimes|integer|nullable', + ]; + } +} diff --git a/app/Http/Requests/Contact/StoreContact.php b/app/Http/Requests/Contact/StoreContact.php new file mode 100644 index 0000000..d13e5ff --- /dev/null +++ b/app/Http/Requests/Contact/StoreContact.php @@ -0,0 +1,38 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'contact_ref' => 'required|unique:contact', + 'contact_nom' => 'min:3|max:50|required', + 'contact_prenom' => 'min:3|max:50|required', + 'contact_email' => 'email|required', + 'contact_cp' => 'max:10|required', + 'contact_ville' => 'max:50|required', + 'contact_country' => 'integer|required' + ]; + } +} diff --git a/app/Http/Requests/Contact/UpdateContact.php b/app/Http/Requests/Contact/UpdateContact.php new file mode 100644 index 0000000..8665ed5 --- /dev/null +++ b/app/Http/Requests/Contact/UpdateContact.php @@ -0,0 +1,42 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'contact_ref' => [ + 'required', + Rule::unique('contact')->ignore($this->contact->contact_id, 'contact_id'), + ], + 'contact_nom' => 'min:3|max:50|required', + 'contact_prenom' => 'min:3|max:50|required', + 'contact_email' => 'email|required', + 'contact_cp' => 'max:10|required', + 'contact_ville' => 'max:50|required', + 'contact_country' => 'integer|required' + ]; + } +} diff --git a/app/Http/Requests/Coupons/StoreCoupons.php b/app/Http/Requests/Coupons/StoreCoupons.php new file mode 100644 index 0000000..10ebf7d --- /dev/null +++ b/app/Http/Requests/Coupons/StoreCoupons.php @@ -0,0 +1,75 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'coupon_code' => [ + 'required', + Rule::unique('coupon', 'coupon_code') + ], + 'coupon_name' => 'string|required', + 'coupon_value' => 'numeric|required', + 'coupon_validity_text' => 'required', + 'coupon_legal_mentions' => 'required', + 'coupon_decoration_image' => 'required|image|mimes:jpeg,png', + 'coupon_logo_image' => 'required|image|mimes:jpeg,png', + 'coupon_rcs' => 'required', + 'coupon_site_contact' => 'required', + 'coupon_seuil_alert' => 'integer|required', + + 'coupon_enablelimitperiod' => 'sometimes|integer|required', + 'coupon_enablelimitquantity' => 'sometimes|integer|required', + 'coupon_mindatediffusion' => 'nullable', + 'coupon_maxdatediffusion' => 'nullable', + 'coupon_validity' => 'integer|required', + 'coupon_maxdatevalidity' => 'nullable', + + 'coupon_legal_mentions_splitted' => 'sometimes|integer|required', + ]; + } + + /** + * Configure the validator instance. + * + * @param \Illuminate\Validation\Validator $validator + * @return void + */ + public function withValidator($validator) + { + $validator->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) { + return isset($input->coupon_norme); + }); + + $validator->sometimes('coupon_limitquantity', 'integer|required', function ($input) { + return !is_null($input->coupon_enablelimitquantity); + }); + + $validator->sometimes('coupon_limitperiod', 'integer|required', function ($input) { + return !is_null($input->coupon_enablelimitperiod); + }); + } +} diff --git a/app/Http/Requests/Coupons/UpdateCoupons.php b/app/Http/Requests/Coupons/UpdateCoupons.php new file mode 100644 index 0000000..d0808ee --- /dev/null +++ b/app/Http/Requests/Coupons/UpdateCoupons.php @@ -0,0 +1,82 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'coupon_code' => [ + 'required', + Rule::unique('coupon', 'coupon_code')->ignore($this->coupon->coupon_id, 'coupon_id') + ], + 'coupon_name' => 'string|required', + 'coupon_value' => 'numeric|required', + 'coupon_seuil_alert' => 'integer|required', + 'coupon_enablelimitperiod' => 'sometimes|integer|required', + 'coupon_enablelimitquantity' => 'sometimes|integer|required', + 'coupon_mindatediffusion' => 'nullable', + 'coupon_maxdatediffusion' => 'nullable', + 'coupon_validity' => 'integer|required', + 'coupon_maxdatevalidity' => 'nullable', + + 'coupon_treatment_center' => 'integer|required', + 'coupon_validity_text' => 'required', + 'coupon_legal_mentions' => 'required', + + 'coupon_rcs' => 'required', + 'coupon_site_contact' => 'email|required', + + 'coupon_norme' => 'sometimes|integer|required', + 'coupon_published' => 'sometimes|integer|required', + 'coupon_legal_mentions_splitted' => 'sometimes|integer|required', + 'coupon_decoration_image' => 'image|mimes:jpeg,png', + 'coupon_logo_image' => 'image|mimes:jpeg,png', + ]; + } + + /** + * Configure the validator instance. + * + * @param \Illuminate\Validation\Validator $validator + * @return void + */ + public function withValidator($validator) + { + $validator->sometimes('coupon_gs1code', 'required|image|mimes:jpeg', function ($input) { + if (isset($input->coupon_gs1code_image_hidden)) { + return false; + } + return isset($input->coupon_norme); + }); + + $validator->sometimes('coupon_limitquantity', 'integer|required', function ($input) { + return !is_null($input->coupon_enablelimitquantity); + }); + + $validator->sometimes('coupon_limitperiod', 'integer|required', function ($input) { + return !is_null($input->coupon_enablelimitperiod); + }); + } +} diff --git a/app/Http/Requests/Customers/BasketRequest.php b/app/Http/Requests/Customers/BasketRequest.php new file mode 100644 index 0000000..706ad6e --- /dev/null +++ b/app/Http/Requests/Customers/BasketRequest.php @@ -0,0 +1,45 @@ + 'string|exists:campagne,camp_id|required', + 'hashcode' => 'string|exists:customers,hashcode|required' + ]; + } + + protected function failedValidation(Validator $validator) + { + if ($this->wantsJson()) { + throw new HttpResponseException(response()->json(new StatusResource([ + 'status' => 'KO', + 'code' => 422, + 'message' => $validator->errors()->messages() + ]), 422)); + } + } +} diff --git a/app/Http/Requests/Customers/PrintBasketRequest.php b/app/Http/Requests/Customers/PrintBasketRequest.php new file mode 100644 index 0000000..d9db769 --- /dev/null +++ b/app/Http/Requests/Customers/PrintBasketRequest.php @@ -0,0 +1,52 @@ + 'string|exists:campagne,camp_id|required', + 'hashcode' => 'string|exists:customers,hashcode|required' + ]; + } + + /** + * failedValidation + * @param Validator $validator + * @return void + * @throws BindingResolutionException + * @throws HttpResponseException + */ + protected function failedValidation(Validator $validator) + { + if ($this->wantsJson()) { + throw new HttpResponseException(response()->json(new StatusResource([ + 'status' => 'KO', + 'code' => 422, + 'message' => $validator->errors()->messages() + ]), 422)); + } + } +} diff --git a/app/Http/Requests/Customers/SearchCustomers.php b/app/Http/Requests/Customers/SearchCustomers.php new file mode 100644 index 0000000..25357d2 --- /dev/null +++ b/app/Http/Requests/Customers/SearchCustomers.php @@ -0,0 +1,33 @@ +roles, [UserRoles::superadmin()->value, UserRoles::admin()->value]); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'email' => 'sometimes|email|required' + ]; + } +} diff --git a/app/Http/Requests/Export/PDFExport.php b/app/Http/Requests/Export/PDFExport.php new file mode 100644 index 0000000..82f938e --- /dev/null +++ b/app/Http/Requests/Export/PDFExport.php @@ -0,0 +1,34 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'ids' => 'required', + 'startdate' => 'date|required', + 'enddate' => 'date|required' + ]; + } +} diff --git a/app/Http/Requests/Users/StoreUsers.php b/app/Http/Requests/Users/StoreUsers.php new file mode 100644 index 0000000..e0f7cb9 --- /dev/null +++ b/app/Http/Requests/Users/StoreUsers.php @@ -0,0 +1,36 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'email' => 'required|unique:users|email', + 'name' => 'required', + 'password' => 'min:8|required', + 'site' => 'required', + 'roles' => 'required' + ]; + } +} diff --git a/app/Http/Requests/Users/UpdateUsers.php b/app/Http/Requests/Users/UpdateUsers.php new file mode 100644 index 0000000..eaf7b34 --- /dev/null +++ b/app/Http/Requests/Users/UpdateUsers.php @@ -0,0 +1,39 @@ +roles === UserRoles::superadmin()->value || Auth::user()->roles === UserRoles::admin()->value); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'email' => [ + 'required', + Rule::unique('users')->ignore($this->user->id) + ], + 'name' => 'required', + 'site' => 'required', + 'roles' => 'required' + ]; + } +} diff --git a/app/Http/Resources/CouponsResource.php b/app/Http/Resources/CouponsResource.php index ede0c41..2df0b81 100644 --- a/app/Http/Resources/CouponsResource.php +++ b/app/Http/Resources/CouponsResource.php @@ -14,7 +14,7 @@ class CouponsResource extends JsonResource */ public function toArray($request) { - return [ + $coupon = [ 'code' => $this->coupon_code, 'name' => $this->coupon_name, 'value' => $this->coupon_value, @@ -25,6 +25,13 @@ class CouponsResource extends JsonResource 'mobile_image_unavailable' => $this->returnUrl($this->coupon_thumbnail4), 'validity_text' => $this->coupon_validity_text ]; + + if (isset($this->isUsed)){ + return array_merge($coupon, [ + 'used' => $this->isUsed, + ]); + } + return $coupon; } private function returnUrl($assets) diff --git a/app/Models/Basket.php b/app/Models/Basket.php new file mode 100644 index 0000000..84daa62 --- /dev/null +++ b/app/Models/Basket.php @@ -0,0 +1,41 @@ +belongsTo(Customers::class); + } + + /** + * Campagne model relation + * @return BelongsTo + */ + public function campagne() + { + return $this->belongsTo(Campagne::class); + } + + /** + * BasketContent model relation + * @return HasMany + */ + public function contents() + { + return $this->hasMany(BasketContent::class); + } +} diff --git a/app/Models/BasketContent.php b/app/Models/BasketContent.php new file mode 100644 index 0000000..258f408 --- /dev/null +++ b/app/Models/BasketContent.php @@ -0,0 +1,31 @@ +hasOne(Basket::class); + } + + /** + * Coupon model relation + * @return HasOne + */ + public function coupon() + { + return $this->hasOne(Coupon::class, 'coupon_id', 'coupon_id'); + } +} diff --git a/app/Models/Customers.php b/app/Models/Customers.php index cfcaf1f..f64ddf6 100644 --- a/app/Models/Customers.php +++ b/app/Models/Customers.php @@ -70,4 +70,13 @@ class Customers extends Model { return $this->hasMany(PrintedWalls::class, 'customer_id', 'id'); } + + /** + * Basket model relation + * @return HasMany + */ + public function baskets() + { + return $this->hasMany(Basket::class, 'customer_id', 'id'); + } } diff --git a/app/Notification.php b/app/Notification.php index 5a9cecf..674bea6 100644 --- a/app/Notification.php +++ b/app/Notification.php @@ -21,6 +21,8 @@ class Notification extends Model */ public $timestamps = false; + protected $fillable = ['notif_name', 'notif_email', 'notif_campId']; + /** * ManyToOne * Notification -> Campagne diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 84c0428..7971bf7 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -12,7 +12,7 @@ class AuthServiceProvider extends ServiceProvider * @var array */ protected $policies = [ - 'App\Model' => 'App\Policies\ModelPolicy', + // 'App\Model' => 'App\Policies\ModelPolicy', ]; /** diff --git a/app/Traits/CouponTrait.php b/app/Traits/CouponTrait.php index 4644353..68e1c20 100644 --- a/app/Traits/CouponTrait.php +++ b/app/Traits/CouponTrait.php @@ -6,8 +6,10 @@ use App\Campagne; use App\Coupon; use App\Contact; use App\Calendrier; +use App\Enums\CampaignTypes; use App\Models\Customers; use App\Models\PrintedWalls; +use App\Mouvement; use App\Mur; use App\Panier; use App\PanierContent; @@ -147,22 +149,28 @@ trait CouponTrait public function isAvailableToPrint(Coupon $coupon, Campagne $campagne) { - $availableToPrint = true; - // ---- Contrôle de la publication - if ($coupon->coupon_published == 0) { - $availableToPrint = false; + /** + * Contrôle de la publication de la campagne + */ + if ($campagne->camp_published === 0) { + return false; + } + + // ---- Contrôle de la publication du coupon + if ($coupon->coupon_published === 0) { + return false; } // ---- Contrôle la date de début de diffusion - if ($coupon->coupon_mindatediffusion != null) { + if ($coupon->coupon_mindatediffusion !== null) { if (strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)) { - $availableToPrint = false; + return false; } } // ---- Contrôle la date de validité - if ($coupon->coupon_maxdatediffusion != null) { + if ($coupon->coupon_maxdatediffusion !== null) { if (strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)) { - $availableToPrint = false; + return false; } } @@ -176,31 +184,25 @@ trait CouponTrait } } if (!$pub) { - $availableToPrint = false; + return false; } } - if ($campagne->camp_published == 0) { - $availableToPrint = false; - } - - return $availableToPrint; + return true; } public function isPausedToPrint(Coupon $coupon, Campagne $campagne) { - $availableToPrint = true; - // ---- Contrôle la date de début de diffusion - if ($coupon->coupon_mindatediffusion != null) { + if ($coupon->coupon_mindatediffusion !== null) { if (strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)) { - $availableToPrint = false; + return false; } } // ---- Contrôle la date de validité - if ($coupon->coupon_maxdatediffusion != null) { + if ($coupon->coupon_maxdatediffusion !== null) { if (strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)) { - $availableToPrint = false; + return false; } } @@ -214,11 +216,11 @@ trait CouponTrait } } if (!$pub) { - $availableToPrint = false; + return false; } } - return $availableToPrint; + return true; } @@ -263,28 +265,22 @@ trait CouponTrait public function getFullQuantity(Coupon $coupon) { - $mouvements = $coupon->mouvements()->get(); - $nombre = array(); - foreach ($mouvements as $mouvement) { - array_push($nombre, $mouvement->mouvement_nombre); - } - return array_sum($nombre); + return (int)Mouvement::where('mouvement_couponId', $coupon->coupon_id)->sum('mouvement_nombre'); } public function getUsedQuantity(Coupon $coupon) { $countPrinted = 0; - $couponId = $coupon->coupon_id; - $campagnes = $coupon->campagnes()->get(); - foreach ($campagnes as $campagne) { - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { -// Murs - $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->get(); - $countPrinted = $countPrinted + count($murs); + foreach ($coupon->campagnes as $campagne) { + if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) { + // Murs + $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count(); + $countPrinted += $murs; } else { -// Paniers - $campagneId = $campagne->camp_id; - $countPrinted = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function ($query) use ($campagneId) { + // Paniers + // TODO : Revoir la requete + $campagneId = $campagne->camp_id; + $countPrinted = PanierContent::where('panier_content_couponId', $coupon->coupon_id)->whereHas('panier', function ($query) use ($campagneId) { $query->where('panier_campId', $campagneId); })->sum('panier_content_printed'); } @@ -295,17 +291,15 @@ trait CouponTrait public function getDiffusedQuantity(Coupon $coupon) { $countPrinted = 0; - $couponId = $coupon->coupon_id; - $campagnes = $coupon->campagnes()->get(); - foreach ($campagnes as $campagne) { - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { -// Murs - $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->get(); - $countPrinted = $countPrinted + count($murs); + foreach ($coupon->campagnes as $campagne) { + if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) { + // Murs + $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count(); + $countPrinted += $murs; } else { -// Paniers + // Paniers $campagneId = $campagne->camp_id; - $panierContents = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function ($query) use ($campagneId) { + $panierContents = PanierContent::where('panier_content_couponId', $coupon->coupon_id)->whereHas('panier', function ($query) use ($campagneId) { $query->where('panier_campId', $campagneId); })->get(); $panierContentCountPrinted = $panierContents->sum('panier_content_printed'); @@ -323,7 +317,7 @@ trait CouponTrait $enddate = date('Y-m-d H:i:s', strtotime($enddate)); $campagnes = $coupon->campagnes()->get(); foreach ($campagnes as $campagne) { - if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { + if ($campagne->camp_type->equals(CampaignTypes::mur()) || $campagne->camp_type->equals(CampaignTypes::murss())) { // Murs $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->whereBetween('mur_createdate', [$startdate, $enddate])->get(); $countPrinted = $countPrinted + count($murs); diff --git a/app/Traits/GenerateBR.php b/app/Traits/GenerateBR.php index 9c50be4..45a80e2 100644 --- a/app/Traits/GenerateBR.php +++ b/app/Traits/GenerateBR.php @@ -18,8 +18,8 @@ trait GenerateBR $hand_picture = 'build/assets/images/coupons/hand.png'; $mask_img = 'build/assets/images/coupons/mask.png'; - if (null !== $request->input('site_id')) { - $site = Site::where(['id' => $request->input('site_id')])->first(); + if (!is_null($request->site_id)) { + $site = Site::where(['id' => $request->site_id])->first(); } else { $site = $coupon->site()->first(); } @@ -31,32 +31,10 @@ trait GenerateBR $mask = imagecreatefrompng($mask_img); list($maskWidth, $maskHeight) = getimagesize($mask_img); - // ---- Contact distributeur - $text = $coupon->coupon_site_contact; - if (strlen($text) < 30) { - $ImageFond = imagecreate(165, 27); - $box1 = imagettfbbox(8, 0, $arial, $text); - $white = imagecolorallocate($ImageFond, 255, 255, 255); - $black = imagecolorallocate($ImageFond, 0, 0, 0); - $this->imagettftextSp($ImageFond, 8, 0, 5, 23, $black, $arial, $text, 0.01); - imagecolortransparent($ImageFond, $white); - imagecopy($mask, $ImageFond, 743, 365, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); - } else { - $ImageFond = imagecreate(195, 27); - $box1 = imagettfbbox(7, 0, $arial, $text); - $white = imagecolorallocate($ImageFond, 255, 255, 255); - $black = imagecolorallocate($ImageFond, 0, 0, 0); - $this->imagettftextSp($ImageFond, 7, 0, 5, 23, $black, $arial, $text, 0); - imagecolortransparent($ImageFond, $white); - imagecopy($mask, $ImageFond, 713, 365, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); - } - - // ----- Mentions légales + RCS if ($coupon->coupon_legal_mentions_splitted == 0) { $txt_mentions = $coupon->coupon_legal_mentions . " " . $coupon->coupon_rcs; $ImageMentionFond = imagecreate(415, 100); - $boxMentions = imagettfbbox(7, 0, $arial, $txt_mentions); $white = imagecolorallocate($ImageMentionFond, 255, 255, 255); imagefilledrectangle($ImageMentionFond, 0, 0, 414, 99, $white); $black = imagecolorallocate($ImageMentionFond, 0, 0, 0); @@ -66,8 +44,17 @@ trait GenerateBR $this->imagettftextSp($ImageMentionFond, 7, 0, 15, $y, $black, $arial, $line, 0.01); $y = $y + 9; } - - // imagecolortransparent($ImageMentionFond, $white); + $this->imagettftextSp( + $ImageMentionFond, + 7, + 0, + 15, + $y, + $black, + $arialbd, + sprintf("%s : %s", __('Renseignements'), $coupon->coupon_site_contact), + 0.01 + ); imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond)); } @@ -86,9 +73,9 @@ trait GenerateBR $black = imagecolorallocate($ImageFond, 0, 0, 0); $blue = imagecolorallocate($ImageFond, 8, 169, 223); $grey = imagecolorallocate($ImageFond, 219, 219, 221); - $this->imagettftext_contour($ImageFond, 95, 0, 5, 110, $grey, $impact, $textMontant, $blue, 3, 3, 3, 3); - $this->imagettftext_contour($ImageFond, 50, 0, 220, 55, $grey, $arial, $textEuro, $blue, 2, 2, 2, 2); - $this->imagettftext_contour($ImageFond, 16, 0, 0, 150, $grey, $impact, $libReduc, $blue, 1, 1, 1, 1); + $this->imagettftextContour($ImageFond, 95, 0, 5, 110, $grey, $impact, $textMontant, $blue, 3, 3, 3, 3); + $this->imagettftextContour($ImageFond, 50, 0, 220, 55, $grey, $arial, $textEuro, $blue, 2, 2, 2, 2); + $this->imagettftextContour($ImageFond, 16, 0, 0, 150, $grey, $impact, $libReduc, $blue, 1, 1, 1, 1); imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 360, 10, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); @@ -107,13 +94,11 @@ trait GenerateBR $textFiliLines = explode("\r\n", $textFili); $ImageFond = imagecreate(402, 240); $white = imagecolorallocate($ImageFond, 255, 255, 255); - $blackOpac = imagecolorallocatealpha($ImageFond, 0, 0, 0, 20); $y = 0; foreach ($textFiliLines as $textFiliLine) { $y = $y + 20; $this->imagettftextSp($ImageFond, 11, 25, -100, $y, $black, $arial, $textFiliLine, 0.01); } - // imagettftext($ImageFond , 11 , 25, -100, 11, $blackOpac, $arial, $textReduc); imagecolortransparent($ImageFond, $white); imagecopymerge($mask, $ImageFond, 349, 1, 0, 0, imagesx($ImageFond), imagesy($ImageFond), 30); @@ -159,7 +144,7 @@ trait GenerateBR imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 360, 170, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); }//end if - // imagettftext($ImageFond , 12 , 0, 0, 14, $black, $arialbd, $textReduc); + // ---- Copie le produit dans le mask $size = getimagesize($product_image); switch ($size['mime']) { @@ -221,7 +206,7 @@ trait GenerateBR - function imagettftext_contour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut = 1, $contour_bas = 1, $contour_gauche = 1, $contour_droite = 1) + function imagettftextContour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut = 1, $contour_bas = 1, $contour_gauche = 1, $contour_droite = 1) { $coords_x = array(); $coords_y = array(); @@ -417,6 +402,7 @@ trait GenerateBR // imagecolortransparent($ImageMentionFond, $white); imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond)); } else { + // FIXME : Semble non utilise ici // FR $txt_mentions = $legalMentions[0] . " " . $coupon->coupon_rcs; $ImageMentionFond = imagecreate(415, 100); @@ -438,7 +424,15 @@ trait GenerateBR // ---- Inscription de l'utilisateur et de la ville $libelle = "OFFRE RÉSERVÉE À"; - $user = $crmInfos->firstname . " " . $crmInfos->lastname . "\r\n" . $crmInfos->postcode . " " . $crmInfos->city; + $user = sprintf( + "%s %s\r\n%s\r\n%s %s\r\n%s", + $crmInfos->firstname, + $crmInfos->lastname, + $crmInfos->address, + $crmInfos->postcode, + $crmInfos->city, + sprintf("id %s", $crmInfos->crm_id) + ); $ImageFond = imagecreate(120, 40); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); @@ -447,7 +441,7 @@ trait GenerateBR imagettftext($ImageFond, 8, 0, (120 / 2) - (abs($box2[4]) - abs($box2[6])) / 2, 10, $black, $arialbd, $libelle); imagettftext($ImageFond, 8, 0, (120 / 2) - (abs($box1[4]) - abs($box1[6])) / 2, 25, $black, $arial, $user); imagecolortransparent($ImageFond, $white); - imagecopy($mask, $ImageFond, 770, 50, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); + imagecopy($mask, $ImageFond, 770, 40, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); // ---- Inscription de la date de validité $libelle = "Valable jusqu'au :"; @@ -467,6 +461,21 @@ trait GenerateBR imagecolortransparent($ImageFond, $white); imagecopy($mask, $ImageFond, 780, 142, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); + // Right barcode + $codeBarre = "0000000000001"; // FIXME : put real id here + $generator = new \Picqer\Barcode\BarcodeGeneratorPNG(); + $base64 = $generator->getBarcode($codeBarre, $generator::TYPE_CODE_128_A, 2, 46); + $barcodeImage = imagecreatefromstring($base64); + imagecopy($mask, $barcodeImage, 540, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage)); + // Text + $ImageFond = imagecreate(380, 15); + $white = imagecolorallocate($ImageFond, 255, 255, 255); + $black = imagecolorallocate($ImageFond, 0, 0, 0); + imagettftext($ImageFond, 11, 0, 0, 14, $black, $arial, $codeBarre); + imagecopy($mask, $ImageFond, 795, 390, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); + // End text + // End right barcode + // ---- Création code barre if ($customer->country !== 250) { $textReduc = "Traitement ScanCoupon/HighCo Data Benelux"; @@ -486,7 +495,7 @@ trait GenerateBR imagecopy($mask, $ImageFond, 52, 322, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); } - + // Left barcode if ($customer->country !== 250) { $codeBarre = imagecreatefromjpeg($coupon->coupon_gs1code); imageresolution($codeBarre, 72); @@ -506,22 +515,18 @@ trait GenerateBR imagecopy($mask, $test, 60, 250, 0, 0, imagesx($test), imagesy($test)); } else { - $codeBarre = $coupon->coupon_code . strtoupper($customer->crm_id); - $codeBarrePrint = $codeBarre; - if (strpos($customer->crm_id, "@") !== false) { - $codeBarre = $coupon->coupon_code . strtolower($customer->crm_id); - $codeBarrePrint = $coupon->coupon_code . ".@."; - } + $codeBarre = $coupon->coupon_code; $generator = new \Picqer\Barcode\BarcodeGeneratorPNG(); - $base64 = $generator->getBarcode($codeBarrePrint, $generator::TYPE_CODE_128_A, 2, 46); + $base64 = $generator->getBarcode($codeBarre, $generator::TYPE_CODE_128_A, 2, 46); $barcodeImage = imagecreatefromstring($base64); - imagecopy($mask, $barcodeImage, 52, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage)); + imagecopy($mask, $barcodeImage, 10, 342, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage)); $ImageFond = imagecreate(380, 15); $white = imagecolorallocate($ImageFond, 255, 255, 255); $black = imagecolorallocate($ImageFond, 0, 0, 0); imagettftext($ImageFond, 11, 0, 0, 14, $black, $arial, $codeBarre); imagecopy($mask, $ImageFond, 52, 390, 0, 0, imagesx($ImageFond), imagesy($ImageFond)); }//end if + // End left barcode ob_start(); imagejpeg($mask, null, 100); diff --git a/composer.json b/composer.json index b6736ae..751bea0 100644 --- a/composer.json +++ b/composer.json @@ -14,11 +14,12 @@ "barryvdh/laravel-dompdf": "^0.9.0", "doctrine/dbal": "^2.8", "fideloper/proxy": "^4.0", + "kwaadpepper/enum": "^2.0", "laravel/framework": "^8.0", "laravel/tinker": "^2.0", "laravel/ui": "^3.0", "laravelcollective/html": "6.*", - "ldc/ldccrmv2client": "^3.0", + "ldc/ldccrmv2client": "^3.0.5", "picqer/php-barcode-generator": "^0.3.0", "sentry/sentry-laravel": "^4.13", "szymach/c-pchart": "^3.0", diff --git a/config/app.php b/config/app.php index 0195c29..4b01574 100644 --- a/config/app.php +++ b/config/app.php @@ -213,6 +213,9 @@ return [ 'Html' => Collective\Html\HtmlFacade::class, 'Debugbar' => Barryvdh\Debugbar\Facade::class, 'PDF' => Barryvdh\DomPDF\Facade::class, + 'CampaignTypes' => \App\Enums\CampaignTypes::class, + 'Countries' => \App\Enums\Countries::class, + 'UserRoles' => \App\Enums\UserRoles::class, ], ]; diff --git a/package.json b/package.json index 8444e3b..305947a 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,8 @@ "sweetalert": "^2.0.8", "vue": "^2.5.7", "webpack-cli": "^6.0.1" + }, + "dependencies": { + "node-sass": "^6.0.1" } } diff --git a/resources/assets/images/coupons/mask.png b/resources/assets/images/coupons/mask.png index 34c6d6f..b3d79b6 100755 Binary files a/resources/assets/images/coupons/mask.png and b/resources/assets/images/coupons/mask.png differ diff --git a/resources/js/ajax.js b/resources/js/ajax.js index f9fed68..961ae6a 100644 --- a/resources/js/ajax.js +++ b/resources/js/ajax.js @@ -6,7 +6,7 @@ $('#addCoupons').on('click', function(event){ if($(this).is(':checked')){ ids.push($(this).val()); } - + }) $.ajaxSetup({ headers: { @@ -15,14 +15,13 @@ $('#addCoupons').on('click', function(event){ }); $.ajax({ - url: '/add-coupons-ajax', + url: '/bo/campagne/'+ campid +'/add-coupons', type: 'POST', data: { - ids: ids , - campid: campid + ids: ids }, dataType: 'JSON', - success: function (reponse) { + success: function (reponse) { $.each(reponse, function(index, coupon){ var html = '
'+coupon.coupon_code+'
- - - - - - @foreach($couponsLinked as $coupon) - - - - - - @endforeach -
CodeNom
{{ $coupon->coupon_code }}{{ $coupon->coupon_name }}camp_id}} data-couponid={{$coupon->coupon_id}}>
- @if(count($couponsLinked) == 0) -

Pas de coupons liés

- @endif - - - -
-

Notifications par mail

-
- {!! Form::open(['action' => 'CampagneController@saveNotification']) !!} -
-
- {!! Form::label('notif_name', 'Nom') !!} - {!! Form::input('text', 'notif_name', null, ['required']) !!} - {{ Form::hidden('notif_campId', $campagne->camp_id) }} -
-
-
- {!! Form::label('notif_email', 'Email') !!} - {!! Form::input('text', 'notif_email', null, ['required']) !!} -
-
- - {!! Form::submit('Ajouter') !!} -
-
- {!! Form::close() !!} -
- - - - - - - - - - - @foreach($campagne->notifications as $n) - - - - - - - @endforeach - -
{{__('No') }}{{__('Nom') }}{{__('Email') }}
{{ $n->notif_id }}{{ $n->notif_name }}{{ $n->notif_email }}
-
- -{!! Form::open(['id' => 'delete-hidden']) !!} - @method('DELETE') -{!! Form::close() !!} -@endsection diff --git a/resources/views/campagnes/create.blade.php b/resources/views/campagnes/create.blade.php new file mode 100644 index 0000000..5f6c97c --- /dev/null +++ b/resources/views/campagnes/create.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.main') + +@section('content') +

+ + + + {{ __('Nouvelle campagne') }} +

+
+ @if ($errors->any()) +
+ +
+ @endif +
+ @csrf +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + + +
+
+
+ +
+
+
+@endsection diff --git a/resources/views/campagnes/edit.blade.php b/resources/views/campagnes/edit.blade.php new file mode 100644 index 0000000..5da7161 --- /dev/null +++ b/resources/views/campagnes/edit.blade.php @@ -0,0 +1,147 @@ +@extends('layouts.main') + +@section('content') +

+ + + + {{ __('Editer la campagne') }} +

+ +
+ @if ($errors->any()) +
+ +
+ @endif +
+ @csrf + @method('PUT') +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + camp_limitedPrinting === 1 ? 'checked="checked"' : '' }} name="camp_limitedPrinting" type="checkbox" value="{{ $campagne->camp_limitedPrinting }}"> + +
+
+
+ +
+
+
+
+

+ + {{ __('Coupons de la campagne') }} +

+ + + + + + + + @foreach($campagne->coupons as $coupon) + + + + + + @endforeach +
{{ __('Code') }}{{ __('Nom') }}
{{ $coupon->coupon_code }}{{ $coupon->coupon_name }}camp_id}} data-couponid={{$coupon->coupon_id}}>
+ @if(count($campagne->coupons) === 0) +

{{ __('Pas de coupons liés') }}

+ @endif + + +
+
+

{{ __('Notifications par mail') }}

+
+
+ @csrf +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+
+ + + + + + + + + + + @foreach($campagne->notifications as $n) + + + + + + + @endforeach + +
{{__('No') }}{{__('Nom') }}{{__('Email') }}
{{ $n->notif_id }}{{ $n->notif_name }}{{ $n->notif_email }}
+
+ +
+ @csrf + @method('DELETE') +
+@endsection diff --git a/resources/views/campagne/index.blade.php b/resources/views/campagnes/index.blade.php similarity index 57% rename from resources/views/campagne/index.blade.php rename to resources/views/campagnes/index.blade.php index 7788bcf..6af8ba4 100644 --- a/resources/views/campagne/index.blade.php +++ b/resources/views/campagnes/index.blade.php @@ -1,7 +1,16 @@ @extends('layouts.main') @section('content') -

Campagnes Ajouter

+

+ + + + {{ __('Campagnes') }} + + + {{ __('Ajouter') }} + +

@@ -19,49 +28,52 @@ - + @if ( $c->camp_published === 1) @else @endif - - + + @endforeach
{{ $c->camp_id }} {{ $c->camp_name }}{{ $c->camp_createdate }}{{ date('d/m/Y H:i', strtotime($c->camp_createdate)) }} + @if ( $c->camp_published === 1) + + @endif + + @if ($c->camp_published === 0) + + @endif +
-
-
- -
-{!! Form::open(['id' => 'delete-hidden']) !!} +
+ @csrf @method('DELETE') -{!! Form::close() !!} +
+ @endsection @section('scripts') @endsection -@if(isset($created) && $created) - @section('scripts') - - @endsection - @endif diff --git a/resources/views/contact/index.blade.php b/resources/views/contact/index.blade.php index 404f0eb..9755fa8 100644 --- a/resources/views/contact/index.blade.php +++ b/resources/views/contact/index.blade.php @@ -2,46 +2,69 @@ @section('content') -

Recherche de contacts Ajouter

+

+ + {{ __('Recherche de contacts') }} + + + {{ __('Ajouter') }} + +

+ @if ($errors->any()) +
+ +
+ @endif
- +
- +
- +
- +
- +
- +
- +
@@ -50,28 +73,17 @@
- - - - - - + + + + + + @foreach ($contacts as $contact) @php - switch ($contact->contact_country) { - case 250: - $contact->contact_country = 'France'; - break; - case 56: - $contact->contact_country = 'Belgique'; - break; - case 442: - $contact->contact_country = 'Luxembourg'; - break; - default: - $contact->contact_country = 'France'; - break; + if (!in_array($contact->contact_country, Countries::toValues())) { + $contact->contact_country = 250; } @endphp @@ -80,7 +92,7 @@ - + @endforeach diff --git a/resources/views/coupon/create.blade.php b/resources/views/coupon/create.blade.php index 5ff0f60..9084c7d 100644 --- a/resources/views/coupon/create.blade.php +++ b/resources/views/coupon/create.blade.php @@ -11,186 +11,192 @@ @endif
-

Nouveau Coupon

- {!! Form::open(['route' => 'coupon.store', 'enctype' => 'multipart/form-data']) !!} +

+ + {{ __('Nouveau Coupon') }} +

+
+ @csrf
- {!! Form::label('coupon_code', 'Code de traitement *') !!} - {!! Form::input('text', 'coupon_code', null, ['required']) !!} + +
- {!! Form::label('coupon_name', 'Nom interne *') !!} - {!! Form::input('text', 'coupon_name', null, ['required']) !!} + +
- {!! Form::label('coupon_value', 'Valeur faciale *') !!} - {!! Form::number('coupon_value', null, ['step' => '0.05', 'required']) !!} + +
- {!! Form::label('initial_quantity', 'Quantité initiale *') !!} - {!! Form::text('initial_quantity', null, ['required']) !!} + +
- {!! Form::label('coupon_norme', 'Activer la Norme GS1') !!} - {!! Form::checkbox('coupon_norme', 1, false, array('id'=>'coupon_norme')) !!} - {!! Form::label('coupon_norme', 'Activer') !!} + + +
- {!! Form::label('coupon_seuil_alert', 'Seuil d\'alerte *') !!} - {!! Form::number('coupon_seuil_alert', 100, ['required']) !!} + +
- {!! Form::label('coupon_enablelimitquantity', 'Activer La limite de quantité') !!} - {!! Form::checkbox('coupon_enablelimitquantity', 1, false, array('id'=>'coupon_enablelimitquantity')) !!} - {!! Form::label('coupon_enablelimitquantity', 'Activer') !!} + + +
- {!! Form::label('coupon_enablelimitperiod', 'Activer la limite sur une période') !!} - {!! Form::checkbox('coupon_enablelimitperiod', 1, false, array('id'=>'coupon_enablelimitperiod')) !!} - {!! Form::label('coupon_enablelimitperiod', 'Activer') !!} + + +
- {!! Form::label('coupon_limitquantity', 'Limiter la diffusion à') !!} + - {!! Form::number('coupon_limitquantity', null, ['class'=>'small']) !!} coupons + {{ __('coupons') }}
- {!! Form::label('coupon_limitperiod', 'Limiter la diffusion à une offre tous les') !!} + - {!! Form::number('coupon_limitperiod', null, ['class'=>'small']) !!} jours + {{ __('jours') }}
-

Validité

+

{{ __('Validité') }}

- {!! Form::label('coupon_mindatediffusion', 'Date de début de diffusion') !!} - {!! Form::date('coupon_mindatediffusion') !!} + +
- {!! Form::label('coupon_maxdatediffusion', 'Date de fin de diffusion') !!} - {!! Form::date('coupon_maxdatediffusion') !!} + +
-
- {!! Form::label('coupon_validity', 'Durée de validité à l\'impression') !!} - - {!! Form::number('coupon_validity', 30, ['class'=>'small', 'required']) !!} jours - -
+ + + {{ __('jours') }} + +
- {!! Form::label('coupon_maxdatevalidity', 'Date de fin de validité') !!} - {!! Form::date('coupon_maxdatevalidity') !!} + +
-

Calendrier de diffusion

+

{{ __('Calendrier de diffusion') }}

-

Vignettes

+

{{ __('Vignettes') }}

- {!! Form::label('coupon_thumbnail1', 'Vignette Desktop active') !!} - {!! Form::file('coupon_thumbnail1', ['class' => 'input-file']) !!} + +
- {!! Form::label('coupon_thumbnail2', 'Vignette Desktop grise') !!} - {!! Form::file('coupon_thumbnail2', ['class' => 'input-file']) !!} + +
- {!! Form::label('coupon_thumbnail3', 'Vignette Mobile active') !!} - {!! Form::file('coupon_thumbnail3', ['class' => 'input-file']) !!} + +
- {!! Form::label('coupon_thumbnail4', 'Vignette Mobile grise') !!} - {!! Form::file('coupon_thumbnail4', ['class' => 'input-file']) !!} + +
-

Informations pour génération

- {{ __('Informations pour génération') }} +
- {!! Form::label('coupon_treatment_center', 'Centre de traitement *') !!} - {!! Form::select('coupon_treatment_center', ['HighCo', 'Sogec']) !!} + +
- {!! Form::label('coupon_legal_mentions_splitted', 'Activer les mentions internationnales') !!} - {!! Form::checkbox('coupon_legal_mentions_splitted', 1, false) !!} - {!! Form::label('coupon_legal_mentions_splitted', 'Activer') !!} + + +
- {!! Form::label('coupon_validity_text', 'Texte de validité *') !!} - {!! Form::textarea('coupon_validity_text', null, ['required']) !!} + +
- {!! Form::label('coupon_legal_mentions', 'Mentions légales *') !!} - {!! Form::textarea('coupon_legal_mentions', $mentions, ['required']) !!} + +
- {!! Form::label('coupon_decoration_image', 'Image de décoration *') !!} - (280x260px ou 280x160px si GS1) - Formats : JPG ou PNG + + {{ __('280x260px ou 280x160px si GS1') }} + {{ __('Formats : JPG ou PNG') }}
- {!! Form::file('coupon_decoration_image', ['class' => 'input-file', 'required', 'accept' => '.jpg,.jpeg,.png']) !!} +
- {!! Form::label('coupon_logo_image', 'Logo à afficher *') !!} - 135x70px - Formats : JPG ou PNG + + {{ __('135x70px') }} + {{ __('Formats : JPG ou PNG') }}
- {!! Form::file('coupon_logo_image', ['class' => 'input-file', 'required']) !!} +
- {!! Form::label('coupon_rcs', 'RCS du site *') !!} - {!! Form::text('coupon_rcs', $site->site_rcs, ['required']) !!} + +
- {!! Form::label('coupon_site_contact', 'Contact mail *') !!} - {!! Form::text('coupon_site_contact', $site->site_contact, ['required']) !!} + +
- {!! Form::label('coupon_gs1code', 'Image du code barre GS1 *') !!} - Formats : JPG + + {{ __('Formats : JPG') }}
- {!! Form::file('coupon_gs1code', ['class' => 'input-file']) !!} +
- {!! Form::label('coupon_published', 'Publié ?') !!} - {!! Form::checkbox('coupon_published', 1, false, array('id'=>'coupon_published')) !!} - {!! Form::label('coupon_published', 'Activer') !!} + + +
- - {!! Form::hidden('site_id', session()->get('site')->id) !!} + +
- Les champs avec un * sont obligatoires - {!! Form::submit('Créer coupon') !!} + {{ __('Les champs avec un * sont obligatoires') }} +
- {!! Form::close() !!} + @endsection diff --git a/resources/views/coupon/edit.blade.php b/resources/views/coupon/edit.blade.php index 4dc75b9..47991dc 100644 --- a/resources/views/coupon/edit.blade.php +++ b/resources/views/coupon/edit.blade.php @@ -11,90 +11,94 @@ @endif
-

Editer le Coupon

- {!! Form::model($coupon, ['route' => ['coupon.update', $coupon], 'enctype' => 'multipart/form-data']) !!} +

+ + {{ __('Editer le Coupon')}} +

+
+ @csrf @method('PUT')
- {!! Form::label('coupon_code', 'Code de traitement *') !!} - {!! Form::input('text', 'coupon_code', $coupon->coupon_code, ['required']) !!} + +
- {!! Form::label('coupon_name', 'Nom interne *') !!} - {!! Form::input('text', 'coupon_name', $coupon->coupon_name, ['required']) !!} + +
- {!! Form::label('coupon_value', 'Valeur faciale *') !!} - {!! Form::number('coupon_value', null, ['step' => '0.05', 'required']) !!} + +
- {!! Form::label('coupon_norme', 'Activer la Norme GS1') !!} - {!! Form::checkbox('coupon_norme', 1, ($coupon->coupon_norme ==1?true:null), array('id'=>'coupon_norme')) !!} - {!! Form::label('coupon_norme', 'Activer') !!} + + coupon_norme === 1 ? 'checked' : null) }}> +
- {!! Form::label('coupon_seuil_alert', 'Seuil d\'alerte *') !!} - {!! Form::number('coupon_seuil_alert', $coupon->coupon_seuil_alert, ['required']) !!} + +
- +
- {!! Form::label('coupon_enablelimitquantity', 'Activer La limite de quantité') !!} - {!! Form::checkbox('coupon_enablelimitquantity', 1, ($coupon->coupon_enablelimitquantity ==1?true:null), array('id'=>'coupon_enablelimitquantity')) !!} - {!! Form::label('coupon_enablelimitquantity', 'Activer') !!} + + coupon_enablelimitquantity === 1 ? 'checked' : null) }}> +
- {!! Form::label('coupon_enablelimitperiod', 'Activer la limite sur une période') !!} - {!! Form::checkbox('coupon_enablelimitperiod', 1, ($coupon->coupon_enablelimitperiod ==1?true:null), array('id'=>'coupon_enablelimitperiod')) !!} - {!! Form::label('coupon_enablelimitperiod', 'Activer') !!} + + coupon_enablelimitperiod === 1 ? 'checked' : null) }}> +
- {!! Form::label('coupon_limitquantity', 'Limiter la diffusion à') !!} + - {!! Form::number('coupon_limitquantity', null, ['class'=>'small']) !!} coupons + {{ __('coupons') }}
- {!! Form::label('coupon_limitperiod', 'Limiter la diffusion à une offre tous les') !!} + - {!! Form::number('coupon_limitperiod', null, ['class'=>'small']) !!} jours + {{ __('jours') }}
-

Validité

+

{{ __('Validité') }}

- {!! Form::label('coupon_mindatediffusion', 'Date de début de diffusion') !!} - {!! Form::date('coupon_mindatediffusion') !!} + +
- {!! Form::label('coupon_maxdatediffusion', 'Date de fin de diffusion') !!} - {!! Form::date('coupon_maxdatediffusion') !!} + +
- {!! Form::label('coupon_validity', 'Durée de validité à l\'impression') !!} + - {!! Form::number('coupon_validity', null, ['class'=>'small', 'required']) !!} jours + {{ __('jours') }}
- {!! Form::label('coupon_maxdatevalidity', 'Date de fin de validité') !!} - {!! Form::date('coupon_maxdatevalidity') !!} + +
-

Calendrier de diffusion

+

{{ __('Calendrier de diffusion') }}

@foreach ($coupon->calendriers()->get() as $calendrier)
@@ -103,12 +107,12 @@
@endforeach
-

Mouvements

+

{{ __('Mouvements') }}

RefNomEmailCode PostalVillePays{{ __('Ref') }}{{ __('Nom') }}{{ __('Email') }}{{ __('Code Postal') }}{{ __('Ville') }}{{ __('Pays') }}
{{ $contact->contact_email }} {{ $contact->contact_cp }} {{ $contact->contact_ville }}{{ $contact->contact_country }}{{ Countries::make($contact->contact_country)->label }}
- - + + @foreach ($coupon->mouvements()->get() as $mouvement) @@ -126,136 +130,138 @@
DateQuantité{{ __('Date') }}{{ __('Quantité') }}
-

Vignettes

+

{{ __('Vignettes') }}

- {!! Form::label('coupon_thumbnail1', 'Vignette Desktop active') !!} - {!! Form::file('coupon_thumbnail1', ['class' => 'input-file']) !!} + + @if($coupon->coupon_thumbnail1 != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_thumbnail1_hidden', $coupon->coupon_thumbnail1) !!} +
- {!! Form::label('coupon_thumbnail2', 'Vignette Desktop grise') !!} - {!! Form::file('coupon_thumbnail2', ['class' => 'input-file']) !!} + + @if($coupon->coupon_thumbnail2 != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_thumbnail2_hidden', $coupon->coupon_thumbnail2) !!} +
- {!! Form::label('coupon_thumbnail3', 'Vignette Mobile active') !!} - {!! Form::file('coupon_thumbnail3', ['class' => 'input-file']) !!} + + @if($coupon->coupon_thumbnail3 != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_thumbnail3_hidden', $coupon->coupon_thumbnail3) !!} +
- {!! Form::label('coupon_thumbnail4', 'Vignette Mobile grise') !!} - {!! Form::file('coupon_thumbnail4', ['class' => 'input-file']) !!} + + @if($coupon->coupon_thumbnail4 != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_thumbnail4_hidden', $coupon->coupon_thumbnail4) !!} +
-

Informations pour génération

+

{{ __('Informations pour génération') }}

- {!! Form::label('coupon_treatment_center', 'Centre de traitement *') !!} - {!! Form::select('coupon_treatment_center', ['HighCo', 'Sogec']) !!} + +
- {!! Form::label('coupon_legal_mentions_splitted', 'Activer les mentions internationnales') !!} - {!! Form::checkbox('coupon_legal_mentions_splitted', 1, ($coupon->coupon_legal_mentions_splitted ==1?true:null)) !!} - {!! Form::label('coupon_legal_mentions_splitted', 'Activer') !!} + + coupon_legal_mentions_splitted === 1 ? 'checked' : null) }}> +
- {!! Form::label('coupon_validity_text', 'Texte de validité *') !!} - {!! Form::textarea('coupon_validity_text', null, ['required']) !!} + +
- {!! Form::label('coupon_legal_mentions', 'Mentions légales *') !!} - {!! Form::textarea('coupon_legal_mentions', null, ['required']) !!} + +
- {!! Form::label('coupon_decoration_image', 'Image de décoration *') !!} - 280x260px ou 280x160px si GS1 - Formats : JPG ou PNG + + {{ __('280x260px ou 280x160px si GS1') }} + {{ __('Formats : JPG ou PNG') }}
- - {!! Form::file('coupon_decoration_image', ['class' => 'input-file', 'accept' => '.jpg,.jpeg,.png']) !!} + @if($coupon->coupon_decoration_image != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_decoration_image_hidden', $coupon->coupon_decoration_image) !!} +
- {!! Form::label('coupon_logo_image', 'Logo à afficher *') !!} - 135x70px - Formats : JPG ou PNG + + {{ __('135x70px') }} + {{ __('Formats : JPG ou PNG') }}
- {!! Form::file('coupon_logo_image', ['class' => 'input-file']) !!} + @if($coupon->coupon_logo_image != "")
{{ $coupon->coupon_name }}
@endif - {!! Form::input('hidden', 'coupon_logo_image_hidden', $coupon->coupon_logo_image) !!} +
- {!! Form::label('coupon_rcs', 'RCS du site *') !!} - {!! Form::text('coupon_rcs', null, ['required']) !!} + +
- {!! Form::label('coupon_site_contact', 'Contact mail *') !!} - {!! Form::text('coupon_site_contact', null, ['required']) !!} + +
- {!! Form::label('coupon_gs1code', 'Image du code barre GS1 *') !!} - Formats : JPG + + {{ __('Formats : JPG') }}
- {!! Form::file('coupon_gs1code', ['class' => 'input-file']) !!} + @if($coupon->coupon_gs1code != "")
{{ $coupon->coupon_name }}
- {!! Form::input('hidden', 'coupon_gs1code_image_hidden', $coupon->coupon_gs1code, array('id'=>'coupon_gs1code_image_hidden')) !!} + @endif - +
- {!! Form::label('coupon_published', 'Publié ?') !!} - {!! Form::checkbox('coupon_published', 1, ($coupon->coupon_published ==1?true:null), array('id'=>'coupon_published')) !!} - {!! Form::label('coupon_published', 'Activer') !!} + + coupon_published === 1 ? 'checked' : null) }}> +
-

Bon généré :

+

{{ __('Bon généré') }} :

@if($coupon->coupon_image != "")
@@ -263,12 +269,13 @@
@endif
- {!! Form::hidden('site_id', session()->get('site')->id) !!} + +
- {!! Form::submit('Mettre à jour') !!} +
- - {!! Form::close() !!} + + @endsection diff --git a/resources/views/coupon/index.blade.php b/resources/views/coupon/index.blade.php index 1f7ea7e..1469dd2 100644 --- a/resources/views/coupon/index.blade.php +++ b/resources/views/coupon/index.blade.php @@ -1,7 +1,14 @@ @extends('layouts.main') @section('content') -

Coupons Ajouter

+

+ + {{ __('Coupons') }} + + + {{ __('Ajouter') }} + +

@@ -38,9 +45,10 @@ @endforeach
- +
-{!! Form::open(['id' => 'delete-hidden']) !!} +
+ @csrf @method('DELETE') -{!! Form::close() !!} +
@endsection diff --git a/resources/views/customers/index.blade.php b/resources/views/customers/index.blade.php new file mode 100644 index 0000000..6ce22c4 --- /dev/null +++ b/resources/views/customers/index.blade.php @@ -0,0 +1,81 @@ +@extends('layouts.main') + +@section('content') + +

+ + {{ __('Customers') }} {{ $site->site_nom }} +

+@if ($errors->any()) +
+ +
+@endif +
+
+
+ @csrf + + +
+
+ @if (!is_null($email)) + + + + + + + + @if (!count($campaigns)) + + + + @else + + + + + + @endif + +
{{ __('Email') }}{{ __('Pays') }}
{{ __('Aucun résultat.') }}
{{ $customer->email }}{{ Countries::make($customer->country)->label }}Détails
+ @dump($campaigns) + @foreach ($campaigns as $campaign) +
+

{{ $campaign->camp_name }}

+

Type : {{ $campaign->camp_type->label }}

+
+
+

Pas de contrôle à réinitialiser

+
+
+
+ @endforeach + @endif + {{--
+
+

Mur BR Le Gaulois

+

Type : Mur

+
+
+

Pas de contrôle à réinitialiser

+
+
+
+
+

OP Gauloisirs

+

Type : Panier

+
+
+ +
+
+
+
--}} +
+@endsection diff --git a/resources/views/export/index.blade.php b/resources/views/export/index.blade.php index 651ea18..2d487c3 100644 --- a/resources/views/export/index.blade.php +++ b/resources/views/export/index.blade.php @@ -1,29 +1,28 @@ @extends('layouts.main') @section('content') -

Export des données coupons

+

+ + {{ __('Export des données coupons') }} +

-

Période :

+

{{ __('Période') }} :

- - Exporter les données + + {{ __('Exporter les données') }}
@foreach ($sites as $site) -

{{ $site->site_nom }} ({{ $site->site_id }})

- @if (isset($site->coupons) && $site->coupons->count()>0) @foreach ($site->coupons as $coupon)
@endforeach - @endif - @endforeach
- Exporter les données + {{ __('Exporter les données') }}
@@ -38,15 +37,19 @@ if($(this).is(':checked')){ ids.push($(this).val()); } - - }) + + }); + if (ids.length === 0) { + alert('{{ __('Vous devez sélectionner au moins un coupon.') }}'); + return; + } $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('#csrf').val() } }); $.ajax({ - url: '/exportCoupon', + url: '/bo/export/coupon', type: 'POST', data: { ids: ids, @@ -54,11 +57,11 @@ enddate: $('#enddate').val(), }, dataType: 'JSON', - success: function (response) { + success: function (response) { $.each(response, function(index, element){ $('.dl-pdf').attr("href", '/'+element); $('.dl-pdf').get(0).click(); - }) + }) }, error: function (e) { console.log(e.responseText); @@ -67,4 +70,4 @@ }) -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/export/template.blade.php b/resources/views/export/template.blade.php index bd02a21..f9ee366 100644 --- a/resources/views/export/template.blade.php +++ b/resources/views/export/template.blade.php @@ -10,17 +10,17 @@

MesBR.eu

{{ $coupon->coupon_name }}

-

Diffusions du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}

+

{{ __('Diffusions du') }} {{ date('d/m/Y', strtotime($startdate)) }} {{ __('au') }} {{ date('d/m/Y', strtotime($enddate)) }}

-

Détail du coupon

+

{{ __('Détail du coupon') }}

- - - - - - + + + + + + @@ -30,17 +30,17 @@ @if($coupon->coupon_mindatediffusion != null) @else - + @endif @if($coupon->coupon_maxdatediffusion != null) @else - + @endif
NomCodeQuantité totaleQté totale diffuséeDate de début de diffusionDate de fin de diffusion{{ __('Nom') }}{{ __('Code') }}{{ __('Quantité totale') }}{{ __('Qté totale diffusée') }}{{ __('Date de début de diffusion') }}{{ __('Date de fin de diffusion') }}
{{ $coupon->coupon_name }}{{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}n/c{{ __('n/c') }}{{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}n/c{{ __('n/c') }}
-

Graphique de diffusion sur la période du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}

-

Nombre de coupons diffusés : {{ $coupon->couponPrinted }}

+

{{ __('Graphique de diffusion sur la période du') }} {{ date('d/m/Y', strtotime($startdate)) }} {{ __('au') }} {{ date('d/m/Y', strtotime($enddate)) }}

+

{{ __('Nombre de coupons diffusés') }} : {{ $coupon->couponPrinted }}

diff --git a/resources/views/layouts/header.blade.php b/resources/views/layouts/header.blade.php index 44f9e40..d146f40 100644 --- a/resources/views/layouts/header.blade.php +++ b/resources/views/layouts/header.blade.php @@ -3,11 +3,11 @@

Mes BR

- +
Logo Marque @@ -16,15 +16,15 @@
- + diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php index ebe0389..7b45de5 100644 --- a/resources/views/layouts/menu.blade.php +++ b/resources/views/layouts/menu.blade.php @@ -7,6 +7,7 @@ Campagnes Coupons Contacts + {{ __('Customers') }} @endif @if(Auth::user()->roles == "superadmin") Maintenance diff --git a/resources/views/maintenance/index.blade.php b/resources/views/maintenance/index.blade.php index c9c76b8..1c5d9aa 100644 --- a/resources/views/maintenance/index.blade.php +++ b/resources/views/maintenance/index.blade.php @@ -2,21 +2,24 @@ @section('content') -

Maintenance

+

+ + {{ __('Maintenance') }} +

-
Gestion des utilisateurs
- Ajouter +
{{ __('Gestion des utilisateurs') }}
+ {{ __('Ajouter') }}
@if (isset($users) && count($users) > 0) - - - - + + + + @foreach ($users as $user) @@ -24,8 +27,12 @@ - - @if (Auth::user()->id == $user->id) + + @if (Auth::user()->id === $user->id) @else @@ -41,53 +48,14 @@
NomEmailRôleSite liés{{ __('Nom') }}{{ __('Email') }}{{ __('Rôle') }}{{ __('Site liés') }}
{{ $user->name }} {{ $user->email }} {{ $user->roles }}{!! $user->linkedSites !!} + @foreach ($user->sites as $site) +

{{ $site->site_nom }}

+ @endforeach +
- {!! Form::open(['id' => 'delete-hidden']) !!} - @method('DELETE') - {!! Form::close() !!} +
+ @csrf + @method('DELETE') +
@endif
-
-
Nettoyage de la base
-
-

Nettoyer les murs (datant de plus d'un an)

-
-
-
-
-
-
-
- Nettoyer -
-
-
-

Nettoyer les paniers (qui ont été imprimés et datant de plus de deux mois)

-
-
-
-
-
-
-
- Nettoyer -
-
-
-

Nettoyer les contacts (qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois)

-
-
-
-
-
-
-
- Nettoyer -
-
- -
-
Erreur d'appels :
+
{{ __("Erreur d'appels") }} :
@endsection @@ -113,7 +81,7 @@ data: { labels: labels, datasets: [{ - label: 'Nombres d\'erreurs API', + label: '{{ __("Erreurs") }}',, data: errorCount, backgroundColor: 'rgba(255, 0, 0, 0.2)', borderColor: 'rgba(255,0,0,1)', @@ -132,164 +100,5 @@ } } }); - - - - $.ajaxSetup({ - headers: { - 'X-CSRF-TOKEN': $('#csrf').val() - } - }); - - - $('.clean-app').on('click', '.clean-contacts', function(event) { - event.preventDefault(); - let loader = $(this).parent().find('.loader-mini'); - loader.show(); - $.fancyConfirm({ - title: " Nettoyage", - message: "Êtes-vous sûr de vouloir nettoyer la base des contacts qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois ?", - okButton: 'Supprimer', - noButton: 'Annuler', - callback: function(value) { - if (value) { - $.ajax({ - url: '/displayCleanContacts', - type: 'POST', - data: {}, - dataType: 'JSON', - success: function(response) { - $.fancyConfirm({ - title: " Nettoyage", - message: "Vous allez supprimer " + response.contact_count + - " contacts qui ont plus d'un mois et qui n'ont pas de panier ni de murs en cours, Êtes-vous sûr ?", - okButton: 'Supprimer', - noButton: "Annuler", - callback: function(value) { - if (value) { - $.ajax({ - url: '/cleanContacts', - type: 'POST', - data: {}, - dataType: 'JSON', - success: function(response) { - $.fancyInfo({ - title: " Succès", - message: "Le nettoyage des contacts a bien été effectué.", - okButton: 'Valider', - noButton: "", - callback: function( - value) { - if ( - value) {} else { - loader - .hide(); - } - } - }); - loader.hide(); - }, - error: function(e) { - console.log(e.responseText); - } - }); - } else { - loader.hide(); - } - } - }); - loader.hide(); - }, - error: function(e) { - console.log(e.responseText); - } - }); - } else { - loader.hide(); - } - } - }); - - }) - - $('.clean-app').on('click', '.clean-walls', function(event) { - event.preventDefault(); - let loader = $(this).parent().find('.loader-mini'); - loader.show(); - $.fancyConfirm({ - title: " Nettoyage", - message: "Êtes-vous sûr de vouloir nettoyer la base des mur imprimés ?", - okButton: 'Supprimer', - noButton: 'Annuler', - callback: function(value) { - if (value) { - $.ajax({ - url: '/cleanWalls', - type: 'POST', - data: {}, - dataType: 'JSON', - success: function(response) { - $.fancyInfo({ - title: " Succès", - message: "Le nettoyage des murs a bien été effectué.", - okButton: 'Valider', - noButton: "", - callback: function(value) { - - } - }); - loader.hide(); - }, - error: function(e) { - console.log(e.responseText); - } - }); - } else { - loader.hide(); - } - } - }); - - }) - - $('.clean-app').on('click', '.clean-baskets', function(event) { - event.preventDefault(); - let loader = $(this).parent().find('.loader-mini'); - loader.show(); - $.fancyConfirm({ - title: " Nettoyage", - message: "Êtes-vous sûr de vouloir nettoyer la base des panier imprimés ?", - okButton: 'Supprimer', - noButton: 'Annuler', - callback: function(value) { - if (value) { - $.ajax({ - url: '/cleanBaskets', - type: 'POST', - data: {}, - dataType: 'JSON', - success: function(response) { - $.fancyInfo({ - title: " Succès", - message: "Le nettoyage des paniers a bien été effectué.", - okButton: 'Valider', - noButton: "", - callback: function(value) { - - } - }); - loader.hide(); - }, - error: function(e) { - console.log(e.responseText); - } - }); - } else { - loader.hide(); - } - } - }); - - }) @endsection diff --git a/resources/views/stats/detail.blade.php b/resources/views/stats/detail.blade.php index e84f784..22ad13e 100644 --- a/resources/views/stats/detail.blade.php +++ b/resources/views/stats/detail.blade.php @@ -28,7 +28,7 @@ Type - {{ $campagne->camp_type }} + {{ $campagne->camp_type->label }} Impression limité diff --git a/resources/views/stats/index.blade.php b/resources/views/stats/index.blade.php index 195ce15..828a847 100644 --- a/resources/views/stats/index.blade.php +++ b/resources/views/stats/index.blade.php @@ -19,10 +19,10 @@ @else - @endif + @endif

{{ $campagne->camp_name }} ({{ $campagne->camp_id }})

-

{{ $campagne->camp_type }}

+

{{ $campagne->camp_type->label }}

{{ $campagne->coupons->count() }} Coupon(s) Des coupons de cette campagne ne sont plus imprimables.

{{ date('d/m/Y', strtotime($campagne->camp_createdate)) }}

@if (isset($campagne->coupons) && $campagne->coupons->count()>0)@endif

@@ -64,7 +64,7 @@ @else @endif - @endif + @endif {{--

{{$coupon->remain}}/{{$coupon->quantity}}

--}} @@ -73,11 +73,14 @@ @endif + {{-- LA CA MARCHE --}} + {{-- @dd('erherh') --}} @endforeach + {{-- LA C PT --}} @else
Pas de campagnes pour ce site
@endif - + @endforeach diff --git a/resources/views/user/create.blade.php b/resources/views/user/create.blade.php index 706510c..5b1e8da 100644 --- a/resources/views/user/create.blade.php +++ b/resources/views/user/create.blade.php @@ -1,7 +1,10 @@ @extends('layouts.main') @section('content') -

Nouvel utilisateur

+

+ + {{ __('Nouvel utilisateur') }} +

@if ($errors->any())
@endif
- {!! Form::open(['route' => 'maintenance.user.create-submit', 'enctype' => 'multipart/form-data', 'autocomplete' => 'off']) !!} +
+ @csrf
-
- {!! Form::label('name', 'Nom *') !!} - {!! Form::text('name', null, ['required']) !!} -
-
- {!! Form::label('email', 'Email *') !!} - {!! Form::input('text', 'email', null, ['required']) !!} -
+
+ +
-
-
- {!! Form::label('password', 'Mot de passe *') !!} - {!! Form::password('password', $attributes = ['autocomplete' => 'new-password', 'required' => 'required', 'minlength' => 6]) !!} -
-
- {!! Form::label('roles', 'Rôle') !!} - {!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!} -
+
+ +
-

Sites liés

-
- @foreach($sites as $site) -
- - - -
- @endforeach -
-
- Les champs avec un * sont obligatoires - {!! Form::submit('Enregistrer') !!}
- {!! Form::close() !!} +
+
+ + +
+
+ + +
+
+

{{ __('Sites liés') }}

+
+ @foreach($sites as $site) +
+ + + +
+ @endforeach +
+
+ {{ __('Les champs avec un * sont obligatoires') }} + +
+
@endsection diff --git a/resources/views/user/edit.blade.php b/resources/views/user/edit.blade.php index 01ab698..15824cf 100644 --- a/resources/views/user/edit.blade.php +++ b/resources/views/user/edit.blade.php @@ -1,27 +1,44 @@ @extends('layouts.main') @section('content') -

Editer l'utilisateur

+

+ + {{ __("Editer l'utilisateur") }} +

+@if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+@endif
- {!! Form::model($user, ['route' => ['maintenance.user.edit-submit', $user], 'enctype' => 'multipart/form-data']) !!} +
+ @csrf @method('PUT')
- {!! Form::label('name', 'Nom') !!} - {!! Form::text('name', null, ['required']) !!} + +
- {!! Form::label('email', 'Email') !!} - {!! Form::input('text', 'email', null, ['required']) !!} + +
- {!! Form::label('roles', 'Rôle') !!} - {!! Form::select('roles', array('superadmin' => 'Super Administrateur', 'admin' => 'Administrateur', 'marketing' => 'Marketing')) !!} + +
-

Sites liés

+

{{ __('Sites liés') }}

@foreach($sites as $site)
@@ -32,8 +49,8 @@ @endforeach
- {!! Form::submit('Enregistrer') !!} +
- {!! Form::close() !!} +
@endsection diff --git a/routes/api.php b/routes/api.php index 75b24a4..b409639 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,8 @@ Route::prefix('v1') ->group(function () { Route::get('/customer/mur', 'Api\v1\CustomerController@mur'); + Route::get('/customer/basket', 'Api\v1\CustomerController@basket'); + Route::get('/customer/basket/print', 'Api\v1\CustomerController@printBasket'); Route::resource('customer', 'Api\v1\CustomerController'); Route::get('/mur', 'Api\v1\MurController@show'); Route::get('/coupons/print', 'Api\v1\CouponsController@print'); diff --git a/routes/web.php b/routes/web.php index 2e457e3..0d63bf0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -13,10 +13,20 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function Route::get('/statistiques/{campagne}', 'StatistiqueController@statdetail')->name('camp.stats'); // ---- Routes pour les ressources en CRUD Route::resource('coupon', 'CouponController')->except(['show'])->middleware('admin'); + // Routes campagne + Route::post('/campagne/{campaign}/add-coupons', 'CampagneController@addCoupons'); + Route::post('/campagne/{campaign}/remove-coupon/{coupon}', 'CampagneController@removeCoupon'); + Route::post('/campagne/{campaign}/new-notification', 'CampagneController@saveNotification')->name('campaign.new-notif'); + Route::delete('/campagne/delete-notification/{notification}', 'CampagneController@deleteNotification')->name('campaign.delete-notif'); + Route::post('/campagne/{campaign}/showDemo', 'CampagneController@showDemo'); + Route::post('/campagne/{campaign}/toggle-publish/{state}', 'CampagneController@togglePublish'); Route::resource('campagne', 'CampagneController')->except(['show'])->middleware('admin'); + + // Routes contact + Route::get('/contact/search', 'ContactController@search')->name('contact.search'); + Route::post('/contact/{contact}/load-widget', 'ContactController@loadWidget'); Route::resource('contact', 'ContactController')->except(['show', 'destroy'])->middleware('admin'); Route::resource('site', 'SiteController')->except(['destroy', 'show'])->middleware('admin'); - Route::resource('mouvement', 'MouvementController')->only(['store'])->middleware('admin'); // ----- Routes de la partie maintenance Route::group(['middleware' => ['superadmin']], function () { Route::get('maintenance', 'MaintenanceController@show')->middleware('superadmin')->name('maintenance.show'); @@ -34,44 +44,23 @@ Route::group(['prefix' => 'bo', 'middleware' => ['auth', 'saveroute']], function // ---- Logout Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout'); // ---- Route de changement de site - Route::post('/change_marque', 'ChangeMarqueController')->name('change_marque'); - // ---- Routes pour la gestion des mails d'alerte - Route::post('new-notification', array('uses' => 'CampagneController@saveNotification')); - Route::delete('delete-notification/{id}', array('uses' => 'CampagneController@deleteNotification')) - ->name('campagne.deleteNotif'); + Route::post('/brand-change', 'BrandChangeController')->name('brand-change'); // ---- Route Export PDF - Route::get('export', 'ExportController@show')->name('export.coupons'); + Route::get('/export', 'ExportController@show')->name('export.coupons'); + Route::post('/export/coupon', 'ExportController@exportCoupons'); + + // VB : V2 + Route::resource('{site}/customer', 'CustomersController'); }); // ---- Routes Ajax: -// ---- Ajout/Suppression de coupons dans une campagne -Route::post('/add-coupons-ajax', 'AjaxController@add_coupons_ajax'); -Route::post('/remove-coupons-ajax', 'AjaxController@remove_coupons_ajax'); // ---- Publier/Depublier des coupons -Route::post('/unpublish-coupons-ajax', 'AjaxController@unpublish_coupons_ajax'); -Route::post('/publish-coupons-ajax', 'AjaxController@publish_coupons_ajax'); -// ---- Publier/Depublier des campagnes -Route::post('/unpublish-camp-ajax', 'AjaxController@unpublish_camp_ajax'); -Route::post('/publish-camp-ajax', 'AjaxController@publish_camp_ajax'); +Route::post('/unpublish-coupons-ajax', 'AjaxController@unpublishCouponsAjax'); +Route::post('/publish-coupons-ajax', 'AjaxController@publishCouponsAjax'); // ---- Impressions de coupons -Route::post('/ajx_impression', 'AjaxController@impression_ajax'); -// ---- Recherche Contact -Route::any('bo/contact/search', 'ContactController@search_contact')->name('contact.search'); -// ---- Chargement des widget par contacts -Route::post('/loadWidget', 'AjaxController@load_widget'); -// ---- Visualisation des campagnes avec un compte démo -Route::post('/showDemo', 'AjaxController@show_demo'); -// ---- Maintenance : Nettoyer les contacts -Route::post('/displayCleanContacts', 'AjaxController@get_clean_contacts_detail'); -Route::post('/cleanContacts', 'AjaxController@clean_contacts'); -// ---- Maintenance : Nettoyer les murs -Route::post('/cleanWalls', 'AjaxController@clean_walls'); -// ---- Maintenance : Nettoyer les paniers -Route::post('/cleanBaskets', 'AjaxController@clean_baskets'); +Route::post('/ajx_impression', 'AjaxController@impressionAjax'); // ---- Statistiques -Route::post('/loadStat', 'StatistiqueController@load_stats'); -// ---- Export Coupons -Route::post('/exportCoupon', 'ExportController@export_coupons'); +Route::post('/loadStat', 'StatistiqueController@loadStats');