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 = '
';
- 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+' | ';
@@ -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']) !!}
-
-@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')
-
-
-
- {!! 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() !!}
-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- -
Pas de coupons liés - @endif - - -
-
-
-{!! 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')
+Notifications par mail-
- {!! Form::open(['action' => 'CampagneController@saveNotification']) !!}
-
-
-
- {!! Form::close() !!}
-
- {!! 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') !!}
-
-
+ + + + {{ __('Nouvelle campagne') }} ++
+ @if ($errors->any())
+
+@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')
+
+
+ @endif
+
+
+ + + + {{ __('Editer la campagne') }} ++ +
+ @if ($errors->any())
+
+
+
+ @endif
+
+
+
++ + {{ __('Coupons de la campagne') }} ++ +
{{ __('Pas de coupons liés') }} + @endif + + +
+
+
+
+@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')
-{{ __('Notifications par mail') }}+
+
+
+
Campagnes Ajouter++ + + + {{ __('Campagnes') }} + + + {{ __('Ajouter') }} + +
-
-
-{!! Form::open(['id' => 'delete-hidden']) !!}
+
+
@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())
+
@@ -50,28 +73,17 @@
+
+ @endif
+ + {{ __('Customers') }} {{ $site->site_nom }} ++@if ($errors->any()) +
+
+@endif
+
+
+@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')
-
+
+
+ @if (!is_null($email))
+
+
+ @endforeach
+ @endif
+ {{-- {{ $campaign->camp_name }}+Type : {{ $campaign->camp_type->label }} + +
+ --}}
+
+
+ Mur BR Le Gaulois+Type : Mur + +
+
+ OP Gauloisirs+Type : Panier + +Export des données coupons++ + {{ __('Export des données coupons') }} +@foreach ($sites as $site) -{{ $site->site_nom }} ({{ $site->site_id }})- @if (isset($site->coupons) && $site->coupons->count()>0) @foreach ($site->coupons as $coupon)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') }}
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 }} | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||