Merge branch 'trunk'

This commit is contained in:
Vincent BRIDIER 2025-11-13 08:32:31 +01:00
commit f2f8c37069
193 changed files with 6570 additions and 5405 deletions

View file

@ -7,7 +7,7 @@ APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_HOST=dev-mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
@ -20,8 +20,8 @@ SESSION_DRIVER=file
SESSION_LIFETIME=120
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_HOST=dev-mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

7
.gitignore vendored
View file

@ -27,3 +27,10 @@ npm-debug.log
yarn-error.log
.npmrc
/tests/coverage
/.npm
.zshrc
/.composer

View file

@ -1,4 +1,4 @@
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-7.3:latest
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-7.3:060825-070701
COPY --chown=www-data:www-data . /app/srcs
USER root
RUN chmod -R 755 /app/srcs/storage

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# MesBR
## Tests unitaires
```bash
cp .env .env.testing
// Update db vars
php artisan test
```
## Gestion du Legacy
Au moment de la suppression du legacy, ne pas oublier de refaire les factory au propre pour les models

View file

@ -0,0 +1,49 @@
<?php
namespace App\Console\Commands;
use App\Jobs\ArchiveStatsJob;
use App\Models\ArchiveSite;
use App\Models\ArchiveStat;
use App\Models\Statistique;
use Illuminate\Console\Command;
class ArchiveStatsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'uwil:stats:archive';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Archives mesbr stats';
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{
$baseArchiveStatCount = ArchiveStat::count();
$baseStatCount = Statistique::count();
(new ArchiveStatsJob())->handle();
$this->info(sprintf(
'%s archive(s) created',
ArchiveStat::count() - $baseArchiveStatCount
));
$this->info(sprintf(
'%s stat(s) deleted',
$baseStatCount - Statistique::count()
));
$this->info('Stats archived 👌');
}
}

View file

@ -0,0 +1,89 @@
<?php
namespace App\Console\Commands;
use App\Models\Contact;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CustomersClaims extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'customers:claims';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$siteId = 'LGL89';
$claims = [
'natacha.larche@orange.fr' => '01/10/2025',
'delphine.byon@hotmail.fr' => '30/09/2025',
'aurel_del@hotmail.fr' => '27/09/2025',
'katy.lancelot@orange.fr' => '26/09/2025'
];
$emails = array_keys($claims);
// On récupère les contact dont l'identifiant est un ID de CRM
$contacts = Contact::whereIn('contact_email', $emails)
->where('contact_siteId', '=', $siteId)
->get();
$toAdd = [];
// Pour chaque contact
foreach ($contacts as $contact) {
$claimDate = Carbon::createFromFormat('d/m/Y', $claims[$contact->contact_email])->format('Y-m-d');
// On vient chercher les paniers dont la date de création est >= à la date de la récla
$paniers = $contact->paniers()->where('panier_createdate', '>=', $claimDate)->get();
foreach ($paniers as $panier) {
foreach ($panier->panierContents as $content) {
$contactEmail = $contact->contact_email;
$campId = $panier->panier_campId;
$couponId = $content->panier_content_couponId;
if (!isset($toAdd[$contactEmail][$campId])) {
$toAdd[$contactEmail][$campId] = [];
}
if (!isset($toAdd[$contactEmail][$campId][$couponId])) {
$toAdd[$contactEmail][$campId][$couponId] = 0;
}
$toAdd[$contactEmail][$campId][$couponId] += $content->panier_content_printed;
}
}
}
dd($toAdd);
return 0;
}
}

View file

@ -4,10 +4,12 @@ namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Site;
use App\Campagne;
use App\User;
use App\Notification;
use App\Models\Site;
use App\Models\Campagne;
use App\Jobs\ArchiveStatsJob;
use App\Jobs\CleanOldDatasJob;
use App\Models\User;
use App\Models\Notification;
use App\Mail\AlertBr;
use App\Mail\AlertBrAdmin;
use Illuminate\Support\Facades\Mail;
@ -23,7 +25,9 @@ class Kernel extends ConsoleKernel
* @var array
*/
protected $commands = [
];
\App\Console\Commands\CustomersClaims::class,
\App\Console\Commands\ArchiveStatsCommand::class,
];
/**
* Define the application's command schedule.
@ -33,6 +37,12 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
// Archive stats every day at 2:00 AM (to prevent time difference between the server and the reality).
$schedule->job(ArchiveStatsJob::class)->dailyAt('2:00');
// Clean datas older than 3 years every day at midnight.
$schedule->job(CleanOldDatasJob::class)->daily();
// ---- Commande d'alerte appelé tt les jours de la semaine a 7h00
$schedule->call(function () {
$sites = Site::all();
@ -40,7 +50,7 @@ class Kernel extends ConsoleKernel
$couponDiffusionGlobal = array();
$sendGlobal = false;
foreach ($sites as $site) {
// ---- Pour chaque site
// ---- Pour chaque site
$campagnes = Campagne::where(['camp_siteId' => $site->site_id])->get();
foreach ($campagnes as $campagne) {
$sendMail = false;
@ -54,16 +64,16 @@ class Kernel extends ConsoleKernel
$coupon->coupon_left = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon);
if ($coupon->coupon_left < $coupon->coupon_seuil_alert) {
array_push($couponSeuil, $coupon);
array_push($couponSeuilGlobal, [$site->site_nom , $coupon]);
array_push($couponSeuilGlobal, [$site->site_nom, $coupon]);
$sendGlobal = true;
$couponAlert = true;
}
// --- Check MaxDateDiffusion
if ($coupon->coupon_maxdatediffusion != null && strtotime($coupon->coupon_maxdatediffusion) < (time() + (30 * 24 * 60 * 60))) {
// Fin de diffusion dans moins de 30jours
// Fin de diffusion dans moins de 30jours
array_push($couponDiffusion, $coupon);
array_push($couponDiffusionGlobal, [$site->site_nom , $coupon]);
array_push($couponDiffusionGlobal, [$site->site_nom, $coupon]);
$sendGlobal = true;
$couponAlert = true;
}
@ -80,14 +90,14 @@ class Kernel extends ConsoleKernel
}
$sendMail = true;
}
}//end if
}//end foreach
} //end if
} //end foreach
if ($sendMail) {
Mail::to($users)->send(new AlertBr($couponSeuil, $couponDiffusion, $site->site_nom));
}
}//end foreach
}//end foreach
} //end foreach
} //end foreach
if ($sendGlobal) {
$superadmins = array();
$admins = User::where(['roles' => 'superadmin'])->get();
@ -100,59 +110,5 @@ class Kernel extends ConsoleKernel
Mail::to($superadmins)->send(new AlertBrAdmin($couponSeuilGlobal, $couponDiffusionGlobal));
}
})->weekdays()->at('7:00');
// ---- Sauvegarde des stats tous les jours a 23:45
// $schedule->call(function () {
// $campagnes = Campagne::all();
// foreach ($campagnes as $campagne) {
// $last_stat = Statistique::where(['stat_campId' => $campagne->camp_id])->orderBy('created_at', 'DESC')->first();
// if(isset($last_stat->created_at)){
// $dateStart = $last_stat->created_at;
// } else {
// $dateStart = Carbon::now()->setTime(0,0,0)->subMonth()->format('Y-m-d H:i:s');
// }
// $coupons = $campagne->coupons()->get();
// foreach ($coupons as $coupon) {
// if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { //Calcul des BR consommé pour les murs
// $counts = Mur::selectRaw('count(*) as count, DATE_FORMAT(mur_createdate, "%Y-%m-%d") as date')
// ->where(['mur_couponId' => $coupon->coupon_id, 'mur_campid' => $campagne->camp_id])
// ->whereBetween('mur_createdate', [$dateStart, Carbon::now()->setTime(23,59,59)->format('Y-m-d H:i:s')])
// ->groupBy(DB::raw("DATE_FORMAT(mur_createdate, '%Y-%m-%d')"))
// ->pluck('count', 'date');
// foreach($counts as $date => $count){
// $stat = new Statistique();
// $stat->stat_campId = $campagne->camp_id;
// $stat->stat_couponId = $coupon->coupon_id;
// $stat->stat_couponPrinted = $count;
// $stat->created_at = $date;
// $stat->save();
// }
// }
// else { //Calcul des BR consommé pour les paniers
// $count = 0;
// $paniers = Panier::where('panier_campId', $campagne->camp_id)->where(function($query) use ($dateStart){
// $query->whereBetween('panier_createdate', [$dateStart, Carbon::now()->setTime(23,59,59)->format('Y-m-d H:i:s')])
// ->orWhereBetween('panier_updatedate', [$dateStart, Carbon::now()->setTime(23,59,59)->format('Y-m-d H:i:s')]);
// })->get();
// foreach ($paniers as $panier) {
// $panierContentCount = $panier->panierContents()->where(['panier_content_couponId' => $coupon->coupon_id])->sum('panier_content_printed');
// $count = $count + $panierContentCount;
// }
// }
// }
// }
// })->everyFifteenMinutes();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self mur()
* value 0 Mur (POUR LES MURS)
* @method static self panier()
* value 1 Panier (POUR LES PANIERS)
* @method static self murss()
* value 2 Mur sans sélection (POUR LES MURS SANS SELECTION)
* @method static self paniers()
* value 3 Panier Sélectionnable (POUR LES PANIERS AVEC SELECTION)
*/
class CampaignTypes extends BaseEnum
{
protected static function values(): array
{
return [
'mur' => 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'),
];
}
}

32
app/Enums/Countries.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self france()
* @method static self belgique()
* @method static self luxembourg()
*/
class Countries extends BaseEnum
{
protected static function values(): array
{
return [
'france' => 250,
'belgique' => 56,
'luxembourg' => 442,
];
}
protected static function labels(): array
{
return [
'france' => 'France',
'belgique' => 'Belgique',
'luxembourg' => 'Luxembourg',
];
}
}

32
app/Enums/LogActions.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self updatebasket()
* @method static self impression()
* @method static self updatecontact()
*/
class LogActions extends BaseEnum
{
protected static function values(): array
{
return [
'updatebasket' => 1,
'impression' => 3,
'updatecontact' => 4,
];
}
protected static function labels(): array
{
return [
'updatebasket' => 'Mise à jour du panier',
'impression' => 'Impression',
'updatecontact' => 'Mise à jour du contact',
];
}
}

32
app/Enums/UserRoles.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnum;
/**
* @method static self superadmin()
* @method static self admin()
* @method static self marketing()
*/
class UserRoles extends BaseEnum
{
protected static function values(): array
{
return [
'superadmin' => 'superadmin',
'admin' => 'admin',
'marketing' => 'marketing'
];
}
protected static function labels(): array
{
return [
'superadmin' => trans('Super-Admin'),
'admin' => trans('Admin'),
'marketing' => trans('Marketing')
];
}
}

View file

@ -2,19 +2,16 @@
namespace App\Http\Controllers;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Panier;
use App\PanierContent;
use App\Statistique;
use App\Mur;
use App\Log;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Enums\CampaignTypes;
use App\Models\PanierContent;
use App\Models\Statistique;
use App\Models\Mur;
use App\Models\Log;
use Illuminate\Http\Request;
use App\Traits\GenerateBR;
use App\Traits\CouponTrait;
use App\Http\Controllers;
use Carbon\Carbon;
class AjaxController extends Controller
{
@ -48,7 +45,7 @@ class AjaxController extends Controller
}
// ---- 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 +56,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 +66,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 +106,7 @@ class AjaxController extends Controller
$coupons = '<TABLE width="100%" align="center" cellpadding="0" cellspacing="0" border="0">';
$coupons .= '<TR><TD width="100%" align="center"><div>';
if ($campagne->camp_type == 0) {
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
// ---- POUR LES MURS
if (!isset($couponsToPrint)) {
die();
@ -167,7 +141,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 +209,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 +240,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();
@ -335,16 +309,7 @@ class AjaxController extends Controller
die();
}
if ($request->session()->has('contact')) {
$contact = $request->session()->get('contact');
}
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) {
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) {
if ($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 +318,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);
}
}

View file

@ -0,0 +1,114 @@
<?php
namespace App\Http\Controllers\Api\v0;
use App\Models\Contact;
use App\Http\Controllers\Controller;
use App\Models\Site;
use App\Traits\CouponTrait;
use Illuminate\Http\Request;
class ContactController extends Controller
{
use CouponTrait;
public function updateContact(Request $request)
{
// Validation des paramètres requis
$requiredFields = [
'refadherent' => 'string',
'nom' => 'string',
'refsite' => 'string',
'prenom' => 'string',
'email' => 'email',
'code_postal' => 'string',
'commune' => 'string',
];
$validated = [];
foreach ($requiredFields as $field => $type) {
$value = $request->input($field);
if (empty($value)) {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$validated[$field] = $value;
}
// Validation spécifique pour l'email
if (!filter_var($validated['email'], FILTER_VALIDATE_EMAIL)) {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'L\'email fourni n\'est pas valide'
]);
}
// Validation du pays (entier ou par défaut)
$pays = $request->input('pays');
if ($pays !== null && $pays !== '') {
if (!filter_var($pays, FILTER_VALIDATE_INT)) {
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Le pays doit être un entier'
]);
}
$validated['pays'] = $pays;
} else {
$validated['pays'] = 250;
}
// Recherche du contact existant
$contact = Contact::where([
'contact_siteId' => $validated['refsite'],
'contact_ref' => $validated['refadherent']
])->first();
// Si le contact n'existe pas, on vérifie le site
if (!$contact) {
$site = Site::where('site_id', $validated['refsite'])->first();
if (!$site) {
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
]);
}
$contact = new Contact();
$contact->contact_ref = $validated['refadherent'];
$contact->contact_siteId = $validated['refsite'];
$contact->contact_hash = $request->input('hashcode') ?: strtoupper(md5(uniqid(time(), true)));
}
// Mise à jour des champs
$contact->contact_prenom = $validated['prenom'];
$contact->contact_nom = $validated['nom'];
$contact->contact_email = $validated['email'];
$contact->contact_cp = $validated['code_postal'];
$contact->contact_ville = $validated['commune'];
$contact->contact_country = $validated['pays'];
$contact->contact_updatedate = now();
if ($request->filled('hashcode')) {
$contact->contact_hash = $request->hashcode;
}
// Sauvegarde et réponse
if ($contact->save()) {
return response()->json([
'Statut' => 'OK',
'contact' => $contact
]);
}
return response()->json([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
]);
}
}

View file

@ -0,0 +1,509 @@
<?php
namespace App\Http\Controllers\Api\v0;
use Illuminate\Http\Request;
use App\Models\Panier;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Models\Contact;
use App\Http\Controllers\Controller;
use App\Models\Site;
use App\Models\Log;
use App\Models\PanierContent;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
class PanierController extends Controller
{
use ThanksTrait;
use CouponTrait;
public function updateBasket(Request $request)
{
if (isset($request->admin)) {
$source = 'ADMIN';
} else {
$source = 'API';
}
// ---- INIT du log
$log = new Log();
$log->log_action = config('constants.updatebasket');
$log->log_source = $source;
if (isset($request->basketid)) {
$basketid = $request->basketid;
if ($basketid != '') {
$panier = Panier::where('panier_ref', $basketid)->first();
if (!$panier) {
$log->log_params = json_encode(['basketid' => $basketid]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}
if (isset($request->panier) && $request->panier != "") {
$panier = $request->panier;
$panierTab = explode(",", $panier);
$coupons = array();
foreach ($panierTab as $panier) {
$pos = strpos($panier, ")");
if ($pos === false || substr_count($panier, ")") != 1) {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$quantity = substr($panier, 0, $pos);
$quantity = str_replace("(", "", $quantity);
$couponCode = substr($panier, $pos + 1);
if (is_numeric($quantity) && is_numeric($couponCode)) {
if (isset($coupons[$couponCode])) {
$coupons[$couponCode] = $coupons[$couponCode] + $quantity;
} else {
$coupons[$couponCode] = $quantity;
}
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
}//end foreach
// ---- Préparation message de log avec coupons
$panierCoupons = array();
foreach ($coupons as $code => $qty) {
array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]);
}
if (count($coupons) == 0) {
die();
}
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}//end if
// ---- MAJ du panier
$panier = Panier::where('panier_ref', $basketid)->first();
if ($panier) {
foreach ($coupons as $couponCode => $quantity) {
$cp = Coupon::where('coupon_code', $couponCode)->first();
$exists = $cp->campagnes->contains($panier->panier_campId);
if ($cp && $exists) {
$site = $cp->coupon_siteId;
$panierContent = PanierContent::where(['panier_content_panierId' => $panier->panier_id, 'panier_content_couponId' => $cp->coupon_id])->first();
if ($panierContent) {
$quantity += $panierContent->panier_content_quantity;
if ($quantity <= 0) {
$quantity = 0;
}
// MAJ du contenu
$panierContent->panier_content_quantity = $quantity;
$panierContent->save();
} else {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le coupon ne correspond pas aux coupons liés a la campagne";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Le coupon ne correspond pas aux coupons liés a la campagne'
]);
}//end if
}//end foreach
// MAJ du status du panier
$qty = $panier->panierContents()->sum('panier_content_quantity');
if ($qty == 0) {
$panier_pending = 0;
} else {
$panier_pending = 1;
}
$panier->panier_pending = $panier_pending;
$panier->save();
$campagne = Campagne::where(['camp_id' => $panier->panier_campId])->first();
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $panier->panier_contactId;
$log->log_params = json_encode(['refcamp' => $panier->panier_campId, 'basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'OK';
$log->log_message = json_encode(['Message' => 'Le panier a bien été créé/mis à jour', 'Coupons' => $panierCoupons], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$log->save();
$contact = Contact::where(['contact_id' => $panier->panier_contactId])->first();
$site = Site::where(['site_id' => $campagne->camp_siteId])->first();
if (isset($contact->contact_nom) && isset($site->site_nom)) {
if ($panier->panier_pending == 1) {
$encours = "oui";
} else {
$encours = "non";
}
$response = new \stdClass();
$response->Site = $site->site_nom . " (" . $site->site_id . ")";
$response->Campagne = $campagne->camp_name . " (" . $campagne->camp_id . ")";
$response->Panier = $panier->panier_ref;
$response->DateCreation = date("d/m/Y", strtotime($panier->panier_createdate));
$response->EnCours = $encours;
$response->Nom = $contact->contact_nom;
$response->Prenom = $contact->contact_prenom;
$response->Email = $contact->contact_email;
$response->CodePostal = $contact->contact_cp;
$response->Commune = $contact->contact_ville;
$allPanierContent = $panier->panierContents()->get();
foreach ($allPanierContent as $panierContent) {
$panCont = [];
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
if ($coupon) {
array_push($panCont, $coupon->coupon_code . " - " . $coupon->coupon_name . " (x" . $panierContent->panier_content_quantity . ")");
}
}
$response->panierContent = $panCont;
return response()->json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return response()->json([
'Statut' => 'OK',
'Panier' => $panier
]);
}//end if
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}//end if
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}//end if
} else {
// ---- Contrôle des paramètres
$error = false;
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->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([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas ou n\'est pas un panier'
]);
}
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
if (isset($request->nom) && $request->nom != "") {
$nom = $request->nom;
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
if ($refsite != $campagne->camp_siteId) {
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne ne correspond à aucune campagnes du site'
]);
}
} else {
$error = true;
}
if (isset($request->prenom) && $request->prenom != "") {
$prenom = $request->prenom;
} else {
$error = true;
}
if (isset($request->email) && $request->email != "" && filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
$email = $request->email;
} else {
$error = true;
}
if (isset($request->code_postal) && $request->code_postal != "") {
$code_postal = $request->code_postal;
} else {
$error = true;
}
if (isset($request->commune) && $request->commune != "") {
$commune = $request->commune;
} else {
$error = true;
}
if (isset($request->pays) && $request->pays != "") {
if (filter_var($request->pays, FILTER_VALIDATE_INT)) {
$pays = $request->pays;
} else {
$error = true;
}
} else {
$pays = 250;
}
if (isset($request->panier) && $request->panier != "") {
$panier = $request->panier;
$panierTab = explode(",", $panier);
$coupons = array();
foreach ($panierTab as $panier) {
$pos = strpos($panier, ")");
if ($pos === false) {
$error = true;
}
$quantity = substr($panier, 0, $pos);
$quantity = str_replace("(", "", $quantity);
$couponCode = substr($panier, $pos + 1);
if (is_numeric($quantity) && is_numeric($couponCode) && $quantity > 0) {
if (isset($coupons[$couponCode])) {
$coupons[$couponCode] = $coupons[$couponCode] + $quantity;
} else {
$coupons[$couponCode] = $quantity;
}
}
}
if (count($coupons) == 0) {
die();
}
} else {
$error = true;
}//end if
// ---- Préparation message de log avec coupons
if (isset($coupons)) {
$panierCoupons = array();
foreach ($coupons as $code => $qty) {
array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]);
}
}
if ($error) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// ---- Ajout/MAJ du contact
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if ($contact) {
// ---- Mise à jour du contact
$contact->contact_prenom = $prenom;
$contact->contact_nom = $nom;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_updatedate = date('Y-m-d H:i:s');
} else {
// ---- Création du contact
$site = Site::where('site_id', $refsite)->first();
if ($site) {
$contact = new Contact();
$contact->contact_nom = $nom;
$contact->contact_prenom = $prenom;
$contact->contact_ref = $refadherent;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_siteId = $refsite;
$contact->contact_hash = strtoupper(md5(uniqid(time(), true)));
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le site spécifié n'existe pas";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
]);
}//end if
}//end if
if (!$contact->save()) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Une erreur est survenue";
$log->save();
return response()->json([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
]);
}
// ---- Ajout/MAJ du panier
$panier = Panier::where(['panier_campId' => $refcamp, 'panier_contactId' => $contact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
foreach ($coupons as $couponCode => $quantity) {
$camp = Campagne::where('camp_id', $panier->panier_campId)->first();
$cp = $camp->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
$panierContent = PanierContent::where(['panier_content_panierId' => $panier->panier_id, 'panier_content_couponId' => $cp->coupon_id])->first();
if ($panierContent) {
// $quantity += $panierContent->panier_content_quantity;
$panierContent->panier_content_quantity = $quantity + $panierContent->panier_content_quantity;
// MAJ du contenu
$panierContent->save();
// $panierContent->update(['panier_content_quantity', $quantity]);
} else {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
}
}//end foreach
} else {
// Ajout du panier et du contenu
$panierRef = strtoupper(md5(uniqid(time(), true)));
$panier = new Panier();
$panier->panier_ref = $panierRef;
$panier->panier_campId = $refcamp;
$panier->panier_contactId = $contact->contact_id;
$panier->panier_createdate = date('Y-m-d H:i:s');
$panier->save();
foreach ($coupons as $couponCode => $quantity) {
$cp = $campagne->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
}
}//end if
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_contactId = $panier->panier_contactId;
$log->log_refsite = $request->refsite;
$log->log_statut = 'OK';
$log->log_message = json_encode(['Message' => 'Le panier a bien été créé/mis à jour', 'Coupons' => $panierCoupons], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$log->save();
$contact = Contact::where(['contact_id' => $panier->panier_contactId])->first();
$site = Site::where(['site_id' => $campagne->camp_siteId])->first();
if (isset($contact->contact_nom) && isset($site->site_nom)) {
if ($panier->panier_pending == 1) {
$encours = "oui";
} else {
$encours = "non";
}
$response = new \stdClass();
$response->Site = $site->site_nom . " (" . $site->site_id . ")";
$response->Campagne = $campagne->camp_name . " (" . $campagne->camp_id . ")";
$response->Panier = $panier->panier_ref;
$response->DateCreation = date("d/m/Y", strtotime($panier->panier_createdate));
$response->EnCours = $encours;
$response->Nom = $contact->contact_nom;
$response->Prenom = $contact->contact_prenom;
$response->Email = $contact->contact_email;
$response->CodePostal = $contact->contact_cp;
$response->Commune = $contact->contact_ville;
$allPanierContent = $panier->panierContents()->get();
$panCont = [];
foreach ($allPanierContent as $panierContent) {
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
if ($coupon) {
array_push($panCont, $coupon->coupon_code . " - " . $coupon->coupon_name . " (x" . $panierContent->panier_content_quantity . ")");
}
}
$response->panierContent = $panCont;
return response()->json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return response()->json([
'Statut' => 'OK',
'Panier' => $panier
]);
}//end if
}//end if
}
}

View file

@ -0,0 +1,187 @@
<?php
namespace App\Http\Controllers\Api\v1;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Enums\LogActions;
use App\Http\Controllers\Controller;
use App\Models\Basket;
use App\Models\BasketContent;
use App\Models\Customers;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
use App\Traits\LogTrait;
class BasketController extends Controller
{
use ThanksTrait, CouponTrait, LogTrait;
protected $logSource;
protected $logAction;
public function __construct()
{
$this->logAction = LogActions::updatebasket();
$this->logSource = 'API';
}
public function updateBasket(Request $request)
{
// Validate required parameters
$requiredParams = ['customer_hashcode', 'refcamp', 'refsite', 'panier'];
$error = false;
foreach ($requiredParams as $param) {
if (empty($request->{$param})) {
$error = true;
break;
}
}
if ($error) {
$this->writeLogErrorWrongRequestParameters(
$request->refcamp ?? null,
$request->customer_hashcode ?? null,
$request->refsite ?? null,
$request->panier ?? null
);
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// Validate campaign
$refcamp = $request->refcamp;
$campagne = Campagne::where('camp_id', $refcamp)->first();
if (!$campagne || $campagne->camp_published == 0 || !in_array($campagne->camp_type->value, [1, 3])) {
$this->writeLogErrorIncorrectCampaign($refcamp);
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas ou n\'est pas un panier'
]);
}
$refsite = $request->refsite;
if ($refsite != $campagne->camp_siteId) {
return response()->json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne ne correspond à aucune campagnes du site'
]);
}
// Parse panier
$panierTab = explode(",", $request->panier);
$coupons = [];
foreach ($panierTab as $item) {
$pos = strpos($item, ")");
if ($pos === false) {
$error = true;
break;
}
$quantity = str_replace("(", "", substr($item, 0, $pos));
$couponCode = substr($item, $pos + 1);
if (is_numeric($quantity) && is_numeric($couponCode) && $quantity > 0) {
if (isset($coupons[$couponCode])) {
$coupons[$couponCode] += $quantity;
} else {
$coupons[$couponCode] = $quantity;
}
}
}
if (empty($coupons)) {
die();
}
if ($error) {
$this->writeLogErrorWrongRequestParameters(
$refcamp,
$request->customer_hashcode,
$campagne->camp_siteId,
$request->panier
);
return response()->json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// Prepare panierCoupons for logging
$panierCoupons = [];
foreach ($coupons as $code => $qty) {
$panierCoupons[] = ['cp_code' => $code, 'qty' => $qty];
}
// Retrieve customer
$customer = Customers::where('hashcode', $request->customer_hashcode)->first();
// Retrieve or create basket
$basket = Basket::where(['campagne_id' => $refcamp, 'customer_id' => $customer->id])->first();
if ($basket) {
$camp = Campagne::where('camp_id', $basket->campagne_id)->first();
foreach ($coupons as $couponCode => $quantity) {
$cp = $camp->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
$basketContent = BasketContent::where(['basket_id' => $basket->id, 'coupon_id' => $cp->coupon_id])->first();
if ($basketContent) {
$basketContent->quantity += $quantity;
$basketContent->save();
} else {
$this->addContentToBasket($basket, $cp, $quantity);
}
}
}
} else {
$basket = new Basket();
$basket->uuid = (string) Str::uuid();
$basket->campagne()->associate($refcamp);
$basket->customer()->associate($customer);
$basket->save();
foreach ($coupons as $couponCode => $quantity) {
$cp = $campagne->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
$this->addContentToBasket($basket, $cp, $quantity);
}
}
}
// Log success
$this->writeLogSuccessBasketCreated(
$refcamp,
$request->customer_hashcode,
$refsite,
$request->panier,
$panierCoupons
);
return response()->json([
'Statut' => 'OK',
'Panier' => $basket
]);
}
private function addContentToBasket(Basket $basket, Coupon $coupon, int $quantity): void
{
if ($quantity > 0) {
$newBasketContent = new BasketContent();
$newBasketContent->basket_id = $basket->id;
$newBasketContent->coupon_id = $coupon->coupon_id;
$newBasketContent->quantity = $quantity;
$newBasketContent->save();
}
}
}

View file

@ -2,14 +2,15 @@
namespace App\Http\Controllers\Api\v1;
use App\Campagne;
use App\Coupon;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Enums\CampaignTypes;
use App\Http\Controllers\Controller;
use App\Http\Requests\Coupons\PrintRequest;
use App\Http\Resources\StatusResource;
use App\Models\Customers;
use App\Models\PrintedWalls;
use App\Statistique;
use App\Models\PrintedCoupons;
use App\Models\Statistique;
use App\Traits\CouponTrait;
use App\Traits\GenerateBR;
use PDF;
@ -39,7 +40,7 @@ class CouponsController extends Controller
return new StatusResource(['status' => 'KO', 'code' => 422, 'message' => 'Coupons not found.']);
}
$crm = new CrmApiV2(config('crm.CRM_ENDPOINT'), $campagne->site->crm_token, $campagne->site->crm_password);
$crm = new CrmApiV2(config('services.crm.endpoint'), $campagne->site->crm_token, $campagne->site->crm_password);
try {
/**
@ -58,27 +59,13 @@ 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();
if (!$this->isUsed($cp, $campagne, $customer)) {
$coupons[] = $this->printCoupon($cp, $customer, $crmInfos);
// ----- mémorise l'impression
$mur = new PrintedWalls();
$mur->camp_id = $campagne->camp_id;
$mur->customer_id = $customer->id;
$mur->coupon_id = $cp->coupon_id;
$mur->save();
// Sauvegarde de stat
$stat = new Statistique();
$stat->stat_campId = $campagne->camp_id;
$stat->stat_couponId = $cp->coupon_id;
$stat->stat_couponPrinted = 1;
$stat->save();
$coupons[] = $this->printCoupon($cp, $customer, $crmInfos, $campagne);
}
}//end foreach
}//end if

View file

@ -2,22 +2,26 @@
namespace App\Http\Controllers\Api\v1;
use App\Calendrier;
use App\Campagne;
use App\Models\Calendrier;
use App\Models\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\Resources\CouponsResource;
use App\Traits\CouponTrait;
use App\Traits\GenerateBR;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Request;
class CustomerController extends Controller
{
use CouponTrait;
use GenerateBR;
/**
* Display a listing of the resource.
@ -107,12 +111,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 +172,79 @@ 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[] = [
'quantity' => $content->quantity,
'printed' => $content->printed,
'coupon' => new CouponsResource($coupon)
];
}
}
}
return new StatusResource([
'status' => "OK",
'ref' => $basket->uuid,
'name' => $campagne->camp_name,
'limited_printing' => $campagne->camp_limitedPrinting,
'available_coupon' => $nbCoupons,
'available_amount' => $montantDispo,
'total_coupon' => $couponTotal,
'total_amount' => $montantTotal,
'coupons' => $coupons
]);
}
}

View file

@ -2,8 +2,9 @@
namespace App\Http\Controllers\Api\v1;
use App\Calendrier;
use App\Campagne;
use App\Models\Calendrier;
use App\Models\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.']);
}

View file

@ -44,6 +44,6 @@ class LoginController extends Controller
*/
protected function authenticated()
{
return redirect()->route('home');
return redirect('/');
}
}

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Log;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MaintenanceController extends Controller
{
public function index(Request $request)
{
$datas = Log::select(
DB::raw("DATE_FORMAT(created_at, '%m/%Y') as month"),
DB::raw("COUNT(*) as count")
)
->where('log_statut', 'NOK')
->where('created_at', '>=', Carbon::now()->subMonths(5)->startOfMonth())
->groupBy('month')
->orderBy('month', 'asc')
->get();
$logs = $datas->toArray();
return view('bo.maintenance.index', compact('logs'));
}
}

View file

@ -0,0 +1,76 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Users\DestroyUserRequest;
use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use Illuminate\Http\Request;
use App\Models\Site;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
public function index(Request $request)
{
$users = User::all();
return view('bo.users.index')->with(['users' => $users, 'logs' => []]);
}
public function create(Request $request)
{
$sites = Site::all();
return view('bo.users.create', compact('sites'));
}
public function store(StoreUserRequest $request)
{
$user = new User();
$user->fill($request->validated());
$user->password = Hash::make($request->password);
$user->save();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
return redirect()->route('bo.users.edit', $user);
}
public function edit(User $user)
{
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('bo.users.edit', compact('user', 'sites', 'usersites'));
}
public function update(UpdateUserRequest $request, User $user)
{
$user->fill($request->validated());
$user->save();
$sites = Site::whereIn('site_id', $request->site)->get()->pluck('id')->toArray();
$user->sites()->sync($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('bo.users.edit', $user);
}
public function destroy(DestroyUserRequest $request, User $user)
{
if ($user->delete()) {
return redirect()->route('bo.users.index');
} else {
session()->flash('delete_nok', 'Erreur lors de la suppression');
return view('bo.user.index');
}
}
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\BrandChange\InvokeBrandChange;
class BrandChangeController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\InvokeBrandChange $request
* @return \Illuminate\Http\Response
*/
public function __invoke(InvokeBrandChange $request)
{
// TODO : Revoir le passage du site
$site = \App\Models\Site::find($request->site_id);
session()->put('site', $site);
return redirect()->back();
}
}

View file

@ -2,21 +2,29 @@
namespace App\Http\Controllers;
use App\Campagne;
use App\Site;
use App\Coupon;
use App\Contact;
use App\Mur;
use App\PanierContent;
use App\Notification;
use App\Models\Campagne;
use App\Models\Site;
use App\Models\Coupon;
use App\Models\Contact;
use App\Enums\CampaignTypes;
use App\Http\Requests\Campaign\AddCouponsCampaign;
use App\Http\Requests\Campaign\DeleteCampaign;
use App\Http\Requests\Campaign\RemoveCouponCampaign;
use App\Http\Requests\Campaign\RemoveNotifCampaign;
use App\Http\Requests\Campaign\ShowDemoCampaign;
use App\Http\Requests\Campaign\StoreCampaign;
use App\Http\Requests\Campaign\StoreNotifCampaign;
use App\Http\Requests\Campaign\UpdateCampaign;
use App\Models\Mur;
use App\Models\PanierContent;
use App\Models\Notification;
use App\Models\Panier;
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));
}
}
@ -79,50 +84,40 @@ class CampagneController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Campagne $campagne
* @param \App\Models\Campagne $campagne
* @return \Illuminate\Http\Response
*/
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 \App\Campagne $campagne
* @param UpdateCampaign $request
* @param \App\Models\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 \App\Campagne $campagne
* @param DeleteCampaign $request
* @param \App\Models\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 \App\Notification $notification
* @param RemoveNotifCampaign $request
* @param \App\Models\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,105 @@ 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);
$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 +297,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 +310,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 +321,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 +329,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 +338,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;
}
@ -270,7 +364,6 @@ class CampagneController extends Controller
if ($coupons->count() > 0) {
foreach ($coupons as $coupon) {
// var_dump($coupon->coupon_id);
// ---- Calcul du nombre de BR consommé
$diffuseMur = Mur::where(['mur_campId' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->count();
@ -314,91 +407,9 @@ class CampagneController extends Controller
$data['Coupons'][] = $codeTraitement;
}//end foreach
}//end if
return Response::json([
return response()->json([
'Statut' => 'OK',
'Détails Campagne' => $data
]);
}
public function getDiffCamp(Request $request)
{
$error = false;
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
$campagne = Campagne::where(['camp_id' => $refcamp])->first();
if (!$campagne) {
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
$site = Site::where(['site_id' => $refsite])->first();
if (!$site) {
return Response::json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site n\'existe pas'
]);
};
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return Response::json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
} else {
$error = true;
}
if ($error) {
return Response::json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$data = array (
'Statut' => 'OK',
'Site' => $site->site_nom,
'Ref campagne' => $campagne->camp_id,
'Nom campagne' => $campagne->camp_name,
"Ref contact" => $refadherent,
"Email contact" => $contact->contact_email,
);
$coupons = $campagne->coupons()->get();
if ($coupons->count() > 0) {
foreach ($coupons as &$coupon) {
if ($this->isAvailable($coupon, $campagne, $contact)) {
$dispo = 1;
} else {
$dispo = 0;
}
$codeTraitement = array (
"Code traitement" => $coupon->coupon_code,
"Nom" => $coupon->coupon_name,
"Nb disponible" => $dispo,
);
$data['Codes traitement'][] = $codeTraitement;
}
}
return Response::json($data);
}
}

View file

@ -1,24 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ChangeMarqueController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function __invoke(Request $request)
{
$siteId = $request->input('site_id');
$currentRoute = $request->input('current_route');
$site = \App\Site::findOrFail($siteId);
session()->put('site', $site);
return redirect('/bo/' . $currentRoute);
}
}

View file

@ -1,292 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Contact;
use App\Site;
use App\Campagne;
use Response;
use Illuminate\Http\Request;
class ContactController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
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);
}
public function search_contact(Request $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');
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();
return view('contact.index')->with('contacts', $contacts)->with('search', false);
}//end if
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('contact.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $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();
$site = session()->get('site');
$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]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Campagne $campagne
* @return \Illuminate\Http\Response
*/
public function edit(Contact $contact)
{
$campagnes = Campagne::where(['camp_siteId' => $contact->contact_siteId, 'camp_published' => 1])->get();
return view('contact.edit', ['contact' => $contact, 'campagnes' => $campagnes]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Contact $contact
* @return \Illuminate\Http\Response
*/
public function update(Request $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');
} else {
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 != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
if (isset($request->nom) && $request->nom != "") {
$nom = $request->nom;
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
} else {
$error = true;
}
if (isset($request->prenom) && $request->prenom != "") {
$prenom = $request->prenom;
} else {
$error = true;
}
if (isset($request->email) && $request->email != "" && filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
$email = $request->email;
} else {
$error = true;
}
if (isset($request->code_postal) && $request->code_postal != "") {
$code_postal = $request->code_postal;
} else {
$error = true;
}
if (isset($request->commune) && $request->commune != "") {
$commune = $request->commune;
} else {
$error = true;
}
if (isset($request->pays) && $request->pays != "") {
if (filter_var($request->pays, FILTER_VALIDATE_INT)) {
$pays = $request->pays;
} else {
$error = true;
}
} else {
$pays = 250;
}
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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if ($contact) {
$contact->contact_prenom = $prenom;
$contact->contact_nom = $nom;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_updatedate = date('Y-m-d H:i:s');
if (isset($request->hashcode) && $request->hashcode != "") {
$contact->contact_hash = $request->hashcode;
}
} else {
$site = Site::where('site_id', $refsite)->first();
if ($site) {
$contact = new Contact();
$contact->contact_nom = $nom;
$contact->contact_prenom = $prenom;
$contact->contact_ref = $refadherent;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_siteId = $refsite;
if (isset($request->hashcode) && $request->hashcode != "") {
$contact->contact_hash = $request->hashcode;
} else {
$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([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
]);
}//end if
}//end if
if ($contact->save()) {
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([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
]);
}
}
}

View file

@ -4,14 +4,15 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Coupon;
use App\Site;
use App\Campagne;
use App\Mouvement;
use App\Calendrier;
use App\Models\Coupon;
use App\Models\Site;
use App\Models\Campagne;
use App\Models\Mouvement;
use App\Models\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,14 +26,9 @@ 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);
@ -40,8 +36,7 @@ class CouponController extends Controller
$coupon->coupon_left = 0;
// $coupon->coupon_quantity - $this->getUsedQuantity($coupon);
}
return view('coupon.index', ['coupons' => $coupons, 'camps' => $campIds]);
return view('coupon.index', ['coupons' => $coupons]);
}
/**
@ -51,52 +46,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_code' => 'required|unique:coupon,coupon_code',
'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()->back()
->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'];
}
@ -112,46 +87,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);
@ -161,15 +111,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();
@ -179,28 +120,13 @@ 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]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Coupon $coupon
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function edit(Coupon $coupon)
@ -211,33 +137,13 @@ class CouponController extends Controller
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Coupon $coupon
* @param UpdateCoupons $request
* @param \App\Models\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;
}
@ -253,11 +159,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();
@ -266,6 +178,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) {
@ -288,7 +202,7 @@ class CouponController extends Controller
/**
* Remove the specified resource from storage.
*
* @param \App\Coupon $coupon
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function destroy(Coupon $coupon)
@ -296,10 +210,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();
}
}
@ -312,8 +226,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)) {

View file

@ -1,87 +0,0 @@
<?php
namespace App\Http\Controllers;
use App;
use CpChart\Data;
use CpChart\Image;
use App\Traits\CouponTrait;
use App\Traits\GraphTrait;
use App\Site;
use App\Coupon;
use Datetime;
use Illuminate\Http\Request;
class ExportController extends Controller
{
use CouponTrait;
use GraphTrait;
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function show(Request $request)
{
$sites = Site::all();
$startdate = new DateTime("first day of last month");
$startdate = $startdate->format('Y-m-d');
$enddate = date('Y-m-d');
return view('export.index')->with(['sites' => $sites, 'startdate' => $startdate, 'enddate' => $enddate]);
}
// ------ AJAX Export
public function export_coupons(Request $request)
{
$ids = $request->input('ids');
$startdate = date('Y-m-d', strtotime($request->input('startdate')));
$enddate = date('Y-m-d', strtotime($request->input('enddate')));
$coupons = Coupon::find($ids);
$labels = $this->getLabelsForStats($startdate, $enddate);
$paths = array();
foreach ($coupons as $coupon) {
$cpName = str_replace(' ', '', $coupon->coupon_name);
$now = strtotime(now());
$full_path = 'export/' . $cpName . '_' . $now . '.pdf';
$dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon);
$coupon->couponQuantity = $this->getFullQuantity($coupon);
$coupon->couponFullPrinted = $this->getUsedQuantity($coupon);
$coupon->couponPrinted = $this->getUsedQuantityOnPeriod($coupon, $startdate, $enddate);
$pdf = App::make('dompdf.wrapper');
$myData = new Data();
$myData->addPoints($dataCoupon, "My Serie 1");
$myData->addPoints($labels, "My Serie 2");
$myData->setAxisName(0, "Coupons Diffusés");
$myData->setAbscissa("My Serie 2");
$myData->setSerieTicks("My Serie 2", 2);
$serieSettings = array("R" => 229,"G" => 11,"B" => 11);
$myData->setPalette("My Serie 1", $serieSettings);
$myPicture = new Image(700, 230, $myData);
$myPicture->setGraphArea(60, 40, 670, 190);
$myPicture->setFontProperties(array("FontSize" => 10));
$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);
}//end foreach
return json_encode($paths);
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Fo;
use App\Models\Calendrier;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\Basket\PrintRequest;
use App\Models\Basket;
use App\Traits\GenerateBR;
use PDF;
use Illuminate\Http\Request;
use LDC\LDCCRM\CrmApiV2;
class BasketController extends Controller
{
use GenerateBR;
// FIXME: Docblock
public function show(Request $request, Basket $basket)
{
$totalQuantity = $basket->contents->sum(function ($content) {
return $content->quantity - $content->printed;
});
return view('fo.basket.show', compact('basket', 'totalQuantity'));
}
// FIXME: Docblock
public function print(PrintRequest $request, Basket $basket)
{
$campagne = $basket->campagne;
// FIXME: Bump to CrmApiV4
$crm = new CrmApiV2(config('services.crm.endpoint'), $campagne->site->crm_token, $campagne->site->crm_password);
/**
* @var \LDC\LDCCRM\Models\Customer
*/
$crmInfos = $crm->getCustomer($basket->customer->hashcode);
if (is_null($crmInfos)) {
throw new \Exception('Customer not found.');
}
$coupons = [];
$currentDateTime = date('Y-m-d H:i:s');
foreach ($basket->contents as $content) {
$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 ($coupon !== null) {
$calendars = Calendrier::where('calendrier_couponId', $coupon->coupon_id)->get();
$published = true;
if (!$calendars->isEmpty()) {
$published = false;
foreach ($calendars as $calendar) {
if ($currentDateTime > $calendar->calendrier_startdate && $currentDateTime < $calendar->calendrier_enddate) {
$published = true;
break; // Exit loop early as condition is met
}
}
}
if ($published) {
$qtyToPrint = $content->quantity - $content->printed;
for ($i = 0; $i < $qtyToPrint; $i++) {
$coupons[] = $this->printCoupon($coupon, $basket->customer, $crmInfos, $campagne);
}
$content->printed = $content->quantity;
$content->save();
}
}
}
// $coupons contains all printed coupons
$pdf = PDF::loadView('pdf.coupons', ['coupons' => $coupons]);
return $pdf->download(sprintf("coupons_%s_%s_%s.pdf", $crmInfos->firstname, $crmInfos->lastname, date('d-m-Y')));
}
}

View file

@ -1,35 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Campagne;
use Barryvdh\Debugbar\Facade as Debugbar;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->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,
]);
}
}

View file

@ -1,145 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Site;
use App\User;
use App\Log;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class MaintenanceController extends Controller
{
public function show(Request $request)
{
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
}
$dates = array(date('m/Y'));
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]);
}
// $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]);
}
public function usercreate(Request $request)
{
$sites = Site::all();
return view('user.create')->with(['sites' => $sites]);
}
public function userstore(Request $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->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::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
}
public function useredit(User $user)
{
$sites = Site::all();
$usersites = $user->sites()->get()->pluck('site_id')->toArray();
return view('user.edit')->with(['user' => $user, 'sites' => $sites, 'usersites' => $usersites]);
}
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);
}
}
public function userupdate(Request $request, User $user)
{
// MAJ du User
$user->name = $request->name;
$user->email = $request->email;
$user->roles = $request->roles;
$user->save();
// MAJ des sites liés
$siteids = $request->site;
$sites = Site::whereIn('site_id', $siteids)->get()->pluck('id')->toArray();
$user->sites()->sync($sites);
$marques = Auth::user()->sites;
$submarques = $marques->map(function ($marque) {
return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']);
});
session()->put('marques', $submarques);
$users = User::all();
foreach ($users as &$user) {
$sites = $user->sites()->get();
$user->linkedSites = "";
foreach ($sites as $site) {
$user->linkedSites .= '<p>' . $site->site_nom . '</p>';
}
}
$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]);
}
}

View file

@ -1,28 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Mouvement;
use App\Coupon;
use Illuminate\Http\Request;
class MouvementController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$mouvement = new Mouvement();
$mouvement->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);
}
}

View file

@ -1,316 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Campagne;
use App\Contact;
use App\Mur;
use App\Log;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
use Response;
class MurController extends Controller
{
use CouponTrait;
use ThanksTrait;
public function show(Request $request)
{
$datas = $request->all();
if (isset($datas['refcamp'])) {
$ref = intval($datas['refcamp']);
$campagne = Campagne::where(['camp_id' => $ref])->first();
} else {
abort(404);
}
if (!isset($datas['refsite'])) {
abort(404);
}
if (!isset($campagne) || $campagne->camp_published == 0 || ($campagne->camp_type != 0 && $campagne->camp_type != 2)) {
abort(404);
}
if (isset($datas['hash'])) {
$contact = Contact::where([
'contact_hash' => $datas['hash'], 'contact_siteId' => $campagne->camp_siteId
])->first();
} else {
abort(404);
}
$coupons = $this->getCouponsPublished($campagne);
foreach ($coupons as $coupon) {
$coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact);
$coupon->isAvailableToPrint = $this->isAvailableToPrint($coupon, $campagne);
}
unset($coupon);
// Montant total et Nombre réductions disponible
$montantDispo = 0;
$montantTotal = 0;
$nbCoupon = 0;
$nbCouponToPrint = 0;
foreach ($coupons as $coupon) {
$montantTotal += $coupon->coupon_value;
if ($coupon->isAvailable == true) {
$montantDispo += $coupon->coupon_value;
$nbCoupon++;
}
if ($coupon->isAvailableToPrint == true) {
$nbCouponToPrint++;
}
}
session()->put('campagne', $campagne);
session()->put('site', $campagne->site);
session()->put('contact', $contact);
return view('landings::' . $ref . '.index')
->with(['ref' => $ref, 'coupons' => $coupons, 'contact' => $contact, 'nb' => $nbCoupon, 'nbAvailableToPrint' => $nbCouponToPrint, 'montantDispo' => $montantDispo]);
}
public function printMur(Request $request)
{
if (isset($request->coupons)) {
session()->put('coupons', $request->coupons);
$coupons = $request->coupons;
}
if ($request->session()->has('campagne')) {
$campagne = $request->session()->get('campagne');
} else {
abort(419);
}
$ref = $campagne->camp_id;
return view('landings::' . $ref . '.imprimer')
->with(['ref' => $ref, 'coupons' => $coupons, 'contact' => $request->session()->get('contact')]);
}
public function deleteControlContact(Request $request)
{
if (isset($request->admin)) {
$source = 'ADMIN';
} else {
$source = 'API';
}
// ---- INIT du log
$log = new Log();
$log->log_action = config('constants.delctrlcontact');
$log->log_source = $source;
$error = false;
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
// Erreur si paramètres mal renseignés
if ($error) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// Check de la campagne
$campagne = Campagne::where('camp_id', $refcamp)->first();
if (!$campagne) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_statut = 'NOK';
$log->log_message = "La campagne n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
// Check du contact
$contact = Contact::where(['contact_ref' => $refadherent, 'contact_siteId' => $campagne->camp_siteId])->first();
if (!$contact) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_statut = 'NOK';
$log->log_message = "Le contact n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
if ($campagne) {
// Update
$mur = Mur::where(['mur_campId' => $refcamp, 'mur_contactId' => $contact->contact_id])->update(['mur_deleted' => '1']);
if ($mur != 0) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $contact->contact_id;
$log->log_statut = 'OK';
$log->log_message = $mur . " enregistrements ont été mis à jour.";
$log->save();
return Response::json([
'Statut' => 'OK',
'Message' => $mur . " enregistrements ont été mis à jour."
]);
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent]);
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $contact->contact_id;
$log->log_statut = 'OK';
$log->log_message = 'Aucun contrôle à effacer';
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Aucun contrôle à effacer'
]);
}//end if
}//end if
return;
}
public function montantDispoCampagne(Request $request)
{
// ---- Contrôle des paramètres
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
return Response::json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// ------ Recuperation de la campagne
$camp = Campagne::where(['camp_id' => $refcamp])->first();
if (!$camp) {
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
// ------ Récupération des coupons de la campagne
$coupons = $camp->coupons()->where(['coupon_published' => 1])->get();
if (count($coupons) == 0) {
return Response::json([
'Statut' => 'KO',
'Code' => 105,
'Message' => 'La campagne est vide'
]);
}
// ---- Montant total et Nombre réductions disponible
$montantTotal = 0;
foreach ($coupons as $coupon) {
$montantTotal += $coupon->coupon_value;
}
$montantTotal = number_format($montantTotal, 2, ",", " ");
$montantTotal = str_pad($montantTotal, 6, "0", STR_PAD_LEFT);
return Response::json([
'Statut' => 'OK',
'Message' => $montantTotal
]);
}
public function montantDispoContact(Request $request)
{
$error = false;
if (isset($request->refcamp) && $request->refcamp != "") {
$refcamp = $request->refcamp;
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
if ($error) {
return Response::json([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$campagne = Campagne::where(['camp_id' => $refcamp])->where('camp_type', 'IN', array(0,2))->first();
if (!$campagne) {
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas'
]);
}
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if (!$contact) {
return Response::json([
'Statut' => 'KO',
'Code' => 104,
'Message' => 'Le contact n\'existe pas'
]);
}
$coupons = $this->getCouponsPublished($campagne);
foreach ($coupons as &$coupon) {
$coupon->isAvailable = $this->isAvailable($coupon, $campagne, $contact);
}
unset($coupon);
$montantDispo = 0;
foreach ($coupons as $coupon) {
if ($coupon->isAvailable == true) {
$montantDispo += $coupon->coupon_value;
}
}
$montantDispo = number_format($montantDispo, 2, ",", " ");
$montantDispo = str_pad($montantDispo, 6, "0", STR_PAD_LEFT);
return Response::json([
'Statut' => 'OK',
'Message' => $montantDispo
]);
}
}

View file

@ -3,16 +3,13 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Panier;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Site;
use App\Log;
use App\PanierContent;
use App\Models\Panier;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Models\Contact;
use App\Enums\CampaignTypes;
use App\Traits\CouponTrait;
use App\Traits\ThanksTrait;
use Response;
class PanierController extends Controller
{
@ -40,7 +37,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);
@ -75,502 +72,13 @@ class PanierController extends Controller
->with(['ref' => $ref, 'coupons' => $coupons, 'contact' => $request->session()->get('contact')]);
}
public function updateBasket(Request $request)
{
if (isset($request->admin)) {
$source = 'ADMIN';
} else {
$source = 'API';
}
// ---- INIT du log
$log = new Log();
$log->log_action = config('constants.updatebasket');
$log->log_source = $source;
if (isset($request->basketid)) {
$basketid = $request->basketid;
if ($basketid != '') {
$panier = Panier::where('panier_ref', $basketid)->first();
if (!$panier) {
$log->log_params = json_encode(['basketid' => $basketid]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}
if (isset($request->panier) && $request->panier != "") {
$panier = $request->panier;
$panierTab = explode(",", $panier);
$coupons = array();
foreach ($panierTab as $panier) {
$pos = strpos($panier, ")");
if ($pos === false || substr_count($panier, ")") != 1) {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
$quantity = substr($panier, 0, $pos);
$quantity = str_replace("(", "", $quantity);
$couponCode = substr($panier, $pos + 1);
if (is_numeric($quantity) && is_numeric($couponCode)) {
if (isset($coupons[$couponCode])) {
$coupons[$couponCode] = $coupons[$couponCode] + $quantity;
} else {
$coupons[$couponCode] = $quantity;
}
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
}//end foreach
// ---- Préparation message de log avec coupons
$panierCoupons = array();
foreach ($coupons as $code => $qty) {
array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]);
}
if (sizeof($coupons) == 0) {
die();
}
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}//end if
// ---- MAJ du panier
$panier = Panier::where('panier_ref', $basketid)->first();
if ($panier) {
foreach ($coupons as $couponCode => $quantity) {
$cp = Coupon::where('coupon_code', $couponCode)->first();
$exists = $cp->campagnes->contains($panier->panier_campId);
if ($cp && $exists) {
$site = $cp->coupon_siteId;
$panierContent = PanierContent::where(['panier_content_panierId' => $panier->panier_id, 'panier_content_couponId' => $cp->coupon_id])->first();
if ($panierContent) {
$quantity += $panierContent->panier_content_quantity;
if ($quantity <= 0) {
$quantity = 0;
}
// MAJ du contenu
$panierContent->panier_content_quantity = $quantity;
$panierContent->save();
} else {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le coupon ne correspond pas aux coupons liés a la campagne";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 110,
'Message' => 'Le coupon ne correspond pas aux coupons liés a la campagne'
]);
}//end if
}//end foreach
// MAJ du status du panier
$qty = $panier->panierContents()->sum('panier_content_quantity');
if ($qty == 0) {
$panier_pending = 0;
} else {
$panier_pending = 1;
}
$panier->panier_pending = $panier_pending;
$panier->save();
$campagne = Campagne::where(['camp_id' => $panier->panier_campId])->first();
// var_dump($panier->panier_campId);
$log->log_refsite = $campagne->camp_siteId;
$log->log_contactId = $panier->panier_contactId;
$log->log_params = json_encode(['refcamp' => $panier->panier_campId, 'basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'OK';
$log->log_message = json_encode(['Message' => 'Le panier a bien été créé/mis à jour', 'Coupons' => $panierCoupons], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$log->save();
$contact = Contact::where(['contact_id' => $panier->panier_contactId])->first();
$site = Site::where(['site_id' => $campagne->camp_siteId])->first();
if (isset($contact->contact_nom) && isset($site->site_nom)) {
if ($panier->panier_pending == 1) {
$encours = "oui";
} else {
$encours = "non";
}
$response = new \stdClass();
$response->Site = $site->site_nom . " (" . $site->site_id . ")";
$response->Campagne = $campagne->camp_name . " (" . $campagne->camp_id . ")";
$response->Panier = $panier->panier_ref;
$response->DateCreation = date("d/m/Y", strtotime($panier->panier_createdate));
$response->EnCours = $encours;
$response->Nom = $contact->contact_nom;
$response->Prenom = $contact->contact_prenom;
$response->Email = $contact->contact_email;
$response->CodePostal = $contact->contact_cp;
$response->Commune = $contact->contact_ville;
$allPanierContent = $panier->panierContents()->get();
foreach ($allPanierContent as $panierContent) {
$panCont = [];
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
if ($coupon) {
array_push($panCont, $coupon->coupon_code . " - " . $coupon->coupon_name . " (x" . $panierContent->panier_content_quantity . ")");
}
}
$response->panierContent = $panCont;
return Response::json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return Response::json([
'Statut' => 'OK',
'Panier' => $panier
]);
}//end if
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}//end if
} else {
$log->log_params = json_encode(['basketid' => $basketid, 'panier' => $panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le panier n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 106,
'Message' => 'Le panier n\'existe pas'
]);
}//end if
} else {
// ---- Contrôle des paramètres
$error = false;
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)) {
$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([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne n\'existe pas ou n\'est pas un panier'
]);
}
} else {
$error = true;
}
if (isset($request->refadherent) && $request->refadherent != "") {
$refadherent = $request->refadherent;
} else {
$error = true;
}
if (isset($request->nom) && $request->nom != "") {
$nom = $request->nom;
} else {
$error = true;
}
if (isset($request->refsite) && $request->refsite != "") {
$refsite = $request->refsite;
if ($refsite != $campagne->camp_siteId) {
return Response::json([
'Statut' => 'KO',
'Code' => 103,
'Message' => 'La campagne ne correspond à aucune campagnes du site'
]);
}
} else {
$error = true;
}
if (isset($request->prenom) && $request->prenom != "") {
$prenom = $request->prenom;
} else {
$error = true;
}
if (isset($request->email) && $request->email != "" && filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
$email = $request->email;
} else {
$error = true;
}
if (isset($request->code_postal) && $request->code_postal != "") {
$code_postal = $request->code_postal;
} else {
$error = true;
}
if (isset($request->commune) && $request->commune != "") {
$commune = $request->commune;
} else {
$error = true;
}
if (isset($request->pays) && $request->pays != "") {
if (filter_var($request->pays, FILTER_VALIDATE_INT)) {
$pays = $request->pays;
} else {
$error = true;
}
} else {
$pays = 250;
}
if (isset($request->panier) && $request->panier != "") {
$panier = $request->panier;
$panierTab = explode(",", $panier);
$coupons = array();
foreach ($panierTab as $panier) {
$pos = strpos($panier, ")");
if ($pos === false) {
$error = true;
}
$quantity = substr($panier, 0, $pos);
$quantity = str_replace("(", "", $quantity);
$couponCode = substr($panier, $pos + 1);
if (is_numeric($quantity) && is_numeric($couponCode) && $quantity > 0) {
if (isset($coupons[$couponCode])) {
$coupons[$couponCode] = $coupons[$couponCode] + $quantity;
} else {
$coupons[$couponCode] = $quantity;
}
}
}
if (sizeof($coupons) == 0) {
die();
}
} else {
$error = true;
}//end if
// ---- Préparation message de log avec coupons
if (isset($coupons)) {
$panierCoupons = array();
foreach ($coupons as $code => $qty) {
array_push($panierCoupons, ['cp_code' => $code, 'qty' => $qty]);
}
}
if ($error) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$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([
'Statut' => 'KO',
'Code' => 101,
'Message' => 'Des paramètres de la requête sont mal renseignés ou non présents'
]);
}
// ---- Ajout/MAJ du contact
$contact = Contact::where(['contact_siteId' => $refsite, 'contact_ref' => $refadherent])->first();
if ($contact) {
// ---- Mise à jour du contact
$contact->contact_prenom = $prenom;
$contact->contact_nom = $nom;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_updatedate = date('Y-m-d H:i:s');
} else {
// ---- Création du contact
$site = Site::where('site_id', $refsite)->first();
if ($site) {
$contact = new Contact();
$contact->contact_nom = $nom;
$contact->contact_prenom = $prenom;
$contact->contact_ref = $refadherent;
$contact->contact_email = $email;
$contact->contact_cp = $code_postal;
$contact->contact_ville = $commune;
$contact->contact_country = $pays;
$contact->contact_siteId = $refsite;
$contact->contact_hash = strtoupper(md5(uniqid(time(), true)));
} else {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Le site spécifié n'existe pas";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 102,
'Message' => 'Le site spécifié n\'existe pas'
]);
}//end if
}//end if
if (!$contact->save()) {
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_statut = 'NOK';
$log->log_message = "Une erreur est survenue";
$log->save();
return Response::json([
'Statut' => 'KO',
'Code' => 109,
'Message' => 'Une erreur est survenue'
]);
}
// ---- Ajout/MAJ du panier
$panier = Panier::where(['panier_campId' => $refcamp, 'panier_contactId' => $contact->contact_id, 'panier_pending' => 1])->first();
if ($panier) {
foreach ($coupons as $couponCode => $quantity) {
$camp = Campagne::where('camp_id', $panier->panier_campId)->first();
$cp = $camp->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
$panierContent = PanierContent::where(['panier_content_panierId' => $panier->panier_id, 'panier_content_couponId' => $cp->coupon_id])->first();
if ($panierContent) {
// $quantity += $panierContent->panier_content_quantity;
$panierContent->panier_content_quantity = $quantity + $panierContent->panier_content_quantity;
// MAJ du contenu
$panierContent->save();
// $panierContent->update(['panier_content_quantity', $quantity]);
} else {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
}
}//end foreach
} else {
// Ajout du panier et du contenu
$panierRef = strtoupper(md5(uniqid(time(), true)));
$panier = new Panier();
$panier->panier_ref = $panierRef;
$panier->panier_campId = $refcamp;
$panier->panier_contactId = $contact->contact_id;
$panier->panier_createdate = date('Y-m-d H:i:s');
$panier->save();
foreach ($coupons as $couponCode => $quantity) {
$cp = $campagne->coupons()->where('coupon_code', $couponCode)->first();
if ($cp) {
// Ajout du contenu
if ($quantity > 0) {
$panierNewContent = new PanierContent();
$panierNewContent->panier_content_panierId = $panier->panier_id;
$panierNewContent->panier_content_couponId = $cp->coupon_id;
$panierNewContent->panier_content_quantity = $quantity;
$panierNewContent->save();
}
}
}
}//end if
$log->log_params = json_encode(['refcamp' => $request->refcamp, 'refadherent' => $request->refadherent, 'refsite' => $request->refsite, 'nom' => $request->nom, 'prenom' => $request->prenom, 'email' => $request->email, 'code postal' => $request->code_postal, 'commune' => $request->commune, 'panier' => $request->panier]);
$log->log_contactId = $panier->panier_contactId;
$log->log_refsite = $request->refsite;
$log->log_statut = 'OK';
$log->log_message = json_encode(['Message' => 'Le panier a bien été créé/mis à jour', 'Coupons' => $panierCoupons], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$log->save();
$contact = Contact::where(['contact_id' => $panier->panier_contactId])->first();
$site = Site::where(['site_id' => $campagne->camp_siteId])->first();
if (isset($contact->contact_nom) && isset($site->site_nom)) {
if ($panier->panier_pending == 1) {
$encours = "oui";
} else {
$encours = "non";
}
$response = new \stdClass();
$response->Site = $site->site_nom . " (" . $site->site_id . ")";
$response->Campagne = $campagne->camp_name . " (" . $campagne->camp_id . ")";
$response->Panier = $panier->panier_ref;
$response->DateCreation = date("d/m/Y", strtotime($panier->panier_createdate));
$response->EnCours = $encours;
$response->Nom = $contact->contact_nom;
$response->Prenom = $contact->contact_prenom;
$response->Email = $contact->contact_email;
$response->CodePostal = $contact->contact_cp;
$response->Commune = $contact->contact_ville;
$allPanierContent = $panier->panierContents()->get();
$panCont = [];
foreach ($allPanierContent as $panierContent) {
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
if ($coupon) {
array_push($panCont, $coupon->coupon_code . " - " . $coupon->coupon_name . " (x" . $panierContent->panier_content_quantity . ")");
}
}
$response->panierContent = $panCont;
return Response::json([
'Statut' => 'OK',
'Panier' => $response
]);
} else {
return Response::json([
'Statut' => 'OK',
'Panier' => $panier
]);
}//end if
}//end if
}
public function showBasket(Request $request)
{
// ---- Contrôle des paramètres
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 +87,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 +102,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 +111,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 +120,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 +129,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 +157,7 @@ class PanierController extends Controller
$response->panierContent = $panCont;
return Response::json([
return response()->json([
'Statut' => 'OK',
'Informations Panier' => $response
]);

View file

@ -15,16 +15,12 @@ class RedirectController extends Controller
*/
public function __invoke(Request $request)
{
$mur = new Controllers\MurController();
$panier = new Controllers\PanierController();
if (isset($request->basketid)) {
return $panier->showTemplate($request);
// $this->showTemplate($request);
} elseif (isset($request->hash)) {
return $mur->show($request);
} else {
return redirect()->route('home');
return redirect()->route('login');
}
}
}

View file

@ -2,8 +2,8 @@
namespace App\Http\Controllers;
use App\Site;
use App\User;
use App\Models\Site;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -78,7 +78,7 @@ class SiteController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Site $site
* @param \App\Models\Site $site
* @return \Illuminate\Http\Response
*/
public function edit(Site $site)
@ -90,7 +90,7 @@ class SiteController extends Controller
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Site $site
* @param \App\Models\Site $site
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Site $site)

View file

@ -1,120 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Campagne;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Traits\CouponTrait;
use App\Traits\GraphTrait;
class StatistiqueController extends Controller
{
use CouponTrait;
use GraphTrait;
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$sites = Auth::user()->sites()->get();
foreach ($sites as $site) {
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);
$coupon->remain = $this->getFullQuantity($coupon) - $this->getUsedQuantity($coupon);
$coupon->diffused = $this->getDiffusedQuantity($coupon);
$coupon->isPrintable = $this->isAvailableToPrint($coupon, $campagne);
$coupon->isPaused = $this->isPausedToPrint($coupon, $campagne);
}
}//end foreach
}//end if
}//end foreach
return view('stats.index')->with(['sites' => $sites]);
}
/**
* Show the stat detail of a campaign.
*
* @return \Illuminate\Http\Response
*/
public function statdetail(Campagne $campagne)
{
$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) {
$coupon->quantity = $this->getFullQuantity($coupon);
$coupon->remain = $coupon->quantity - $this->getUsedQuantity($coupon);
$coupon->diffused = $this->getDiffusedQuantity($coupon);
$coupon->isPrintable = $this->isAvailableToPrint($coupon, $campagne);
$coupon->isPaused = $this->isPausedToPrint($coupon, $campagne);
$coupon->color = $coupon->color = "#" . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT) . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT) . str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT);
$count++;
}
$enddate = date('Y-m-d');
$startdate = date('Y-m-d', strtotime("-30 days"));
return view('stats.detail')->with(['campagne' => $campagne, 'startdate' => $startdate, 'enddate' => $enddate]);
}
public function load_stats(Request $request)
{
$campid = $request->campid;
$startdate = $request->startdate;
$enddate = $request->enddate;
// ---- Labels pour la période
$labels = $this->getLabelsForStats($startdate, $enddate);
// ---- Data pour le graphique global
$dataGlobal = $this->getDataForCamp($labels, $campid);
// ---- Data pour le graphique par coupons
$campagne = Campagne::where(['camp_id' => $campid])->first();
$coupons = $campagne->coupons;
$dataSpec = [];
foreach ($coupons as $coupon) {
$dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon);
$dataSpec[$coupon->coupon_code] = $dataCoupon;
}
$data = array('labels' => $labels, 'dataGlobal' => $dataGlobal, 'dataSpec' => $dataSpec);
return json_encode($data);
}
}

View file

@ -60,11 +60,7 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'process.url' => \App\Http\Middleware\ProcessSpecificUrl::class,
'saveroute' => \App\Http\Middleware\SaveCurrentRoute::class,
'superadmin' => \App\Http\Middleware\SuperAdmin::class,
'admin' => \App\Http\Middleware\Admin::class,
'marketing' => \App\Http\Middleware\Marketing::class,
];
/**

View file

@ -1,27 +0,0 @@
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->roles == 'admin') {
return $next($request);
} elseif (Auth::check() && Auth::user()->roles == 'superadmin') {
return $next($request);
} else {
return redirect('/bo/home');
}
}
}

View file

@ -1,20 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
class Marketing
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}

View file

@ -1,96 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use App\Http\Controllers;
class ProcessSpecificUrl
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$path = $request->path();
$params = $request->all();
$paramsCount = count($params);
$contact = new Controllers\ContactController();
$mur = new Controllers\MurController();
$panier = new Controllers\PanierController();
$campagne = new Controllers\CampagneController();
$ajax = new Controllers\AjaxController();
switch ($path) {
case 'updatecontact':
$res = $contact->updateContact($request);
break;
case 'delctrlcontact':
$res = $mur->deleteControlContact($request);
break;
case 'mntdispocampagne':
$res = $mur->montantDispoCampagne($request);
break;
case 'mntdispocontact':
$res = $mur->montantDispoContact($request);
break;
case 'updatebasket':
$res = $panier->updateBasket($request);
break;
case 'showbasket':
$res = $panier->showBasket($request);
break;
case 'getdetailcampaign':
$res = $campagne->getDetail($request);
break;
case 'getdiffctccampaign':
$res = $campagne->getDiffCamp($request);
break;
case 'imprime':
$res = $panier->printPanierSelect($request);
return $next($request);
break;
case 'imprimer':
$res = $mur->printMur($request);
return $next($request);
break;
case 'merci':
$res = $mur->getThanks($request);
return $next($request);
break;
case 'merci-panier':
$res = $panier->getThanks($request);
return $next($request);
break;
case 'index':
$res = $ajax->backToIndex($request);
break;
default:
switch ($paramsCount) {
case 0:
return redirect('bo/home');
break;
case 1:
$res = $panier->showTemplate($request);
return $next($request);
break;
case 3:
$res = $mur->show($request);
return $next($request);
break;
case 4:
$res = $mur->show($request);
return $next($request);
break;
default:
break;
}
break;
}//end switch
return $res;
}
}

View file

@ -18,7 +18,7 @@ class RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->route('home');
return redirect()->route('campagne.index');
}
return $next($request);

View file

@ -2,8 +2,8 @@
namespace App\Http\Middleware;
use Auth;
use Closure;
use Illuminate\Support\Facades\Auth;
class SaveCurrentRoute
{
@ -16,26 +16,22 @@ class SaveCurrentRoute
*/
public function handle($request, Closure $next)
{
$routeName = explode('.', \Route::currentRouteName());
session()->put('active_route', $routeName[0]);
$site = session()->get('site');
if (!isset($site)) {
session()->put('site', Auth::user()->sites->first());
}
$currentLogo = session()->get('site')->only(['site_logo']);
session()->put('current_logo', $currentLogo);
$siteId = session()->get('marques');
if (!isset($siteId)) {
$marques = Auth::user()->sites;
if (!$site) {
$site = Auth::user()->sites->first();
session()->put('site', $site);
}
$currentLogo = $site->only(['site_logo']);
session()->put('current_logo', $currentLogo);
if (!$siteId) {
$marques = Auth::user()->sites;
$submarques = $marques->map(function ($marque) {
return $marque->only(['id', 'site_nom', 'site_id', 'site_logo']);
});
session()->put('marques', $submarques);
}

View file

@ -1,25 +0,0 @@
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class SuperAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->roles == 'superadmin') {
return $next($request);
} else {
return redirect('/bo/home');
}
}
}

View file

@ -22,6 +22,5 @@ class VerifyCsrfToken extends Middleware
'updatecontact',
'updatebasket',
'showbasket',
'delctrlcontact'
];
}

View file

@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Bo\Users;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class DestroyUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Requests\Bo\Users;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check();
}
/**
* 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'
];
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Http\Requests\Bo\Users;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check();
}
/**
* 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'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\BrandChange;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class InvokeBrandChange extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class AddCouponsCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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'
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class DeleteCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class RemoveCouponCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class RemoveNotifCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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 [
//
];
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class ShowDemoCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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 [
//
];
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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'
];
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class StoreNotifCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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);
}),
]
];
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Requests\Campaign;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateCampaign extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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'
];
}
}

View file

@ -0,0 +1,75 @@
<?php
namespace App\Http\Requests\Coupons;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class StoreCoupons extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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);
});
}
}

View file

@ -0,0 +1,82 @@
<?php
namespace App\Http\Requests\Coupons;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class UpdateCoupons extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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);
});
}
}

View file

@ -0,0 +1,45 @@
<?php
namespace App\Http\Requests\Customers;
use App\Http\Resources\StatusResource;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
class BasketRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'refcamp' => '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));
}
}
}

View file

@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests\Customers;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class SearchCustomers extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check()
&& in_array(Auth::user()->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'
];
}
}

View file

@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Export;
use App\Enums\UserRoles;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class PDFExport extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check() && (Auth::user()->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'
];
}
}

View file

@ -0,0 +1,49 @@
<?php
namespace App\Http\Requests\Fo\Basket;
use App\Enums\CampaignTypes;
use Illuminate\Foundation\Http\FormRequest;
class PrintRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
// FIXME: Docblock
protected function prepareForValidation()
{
$campagne = $this->basket->campagne;
if (!$campagne->camp_type->equals(CampaignTypes::panier())) {
throw new \Exception('Campaign is not basket.');
}
if ($campagne->camp_published === 0) {
throw new \Exception('Campaign is not published.');
}
if ($campagne->site->crm_token === null) {
throw new \Exception('CRM Token is missing.');
}
if ($campagne->site->crm_password === null) {
throw new \Exception('CRM Password is missing.');
}
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [];
}
}

View file

@ -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)

View file

@ -0,0 +1,67 @@
<?php
namespace App\Jobs;
use App\Models\ArchiveStat;
use App\Models\Statistique;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class ArchiveStatsJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
// Construct method.
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
DB::transaction(function () {
Statistique::query()
->where('date', '<', now())
->each(function ($stat) {
$archiveStat = new ArchiveStat();
$archiveStat->quantity = $stat->stat_couponPrinted;
$archiveStat->date = $stat->date;
$archiveStat->archive_coupon_id = $stat->stat_couponId;
$archiveStat->archive_campaign_id = $stat->stat_campId;
$archiveStat->saveOrFail();
});
Statistique::query()
->where('date', '<', now())
->delete();
});
} catch (\Exception $e) {
Log::error(
sprintf(
"ArchiveStatsJob failed - Code : %s - %s",
$e->getCode(),
$e->getMessage(),
)
);
\report($e);
} //end try
}
}

View file

@ -0,0 +1,81 @@
<?php
namespace App\Jobs;
use App\Models\Contact;
use App\Models\Log as LogModel;
use App\Models\Customers;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class CleanOldDatasJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
// Construct method.
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
DB::transaction(function () {
// Delete old contacts.
$deletedContact = Contact::query()
->where('contact_updatedate', '<', now()->subYears(3))
->delete();
Log::info(\sprintf(
'CleanOldDatasJob : %s contacts deleted',
$deletedContact
));
// Delete old customers.
$deletedCustomers = Customers::query()
->where('updated_at', '<', now()->subYears(3))
->delete();
Log::info(\sprintf(
'CleanOldDatasJob : %s customers deleted',
$deletedCustomers
));
// Delete old logs.
$deletedLogs = LogModel::query()
->where('created_at', '<', now()->subYears(3))
->delete();
Log::info(\sprintf(
'CleanOldDatasJob : %s logs deleted',
$deletedLogs
));
});
} catch (\Exception $e) {
Log::error(
sprintf(
"CleanOldDatasJob failed - Code : %s - %s",
$e->getCode(),
$e->getMessage(),
)
);
\report($e);
} //end try
}
}

View file

@ -0,0 +1,108 @@
<?php
namespace App\Jobs;
use App\Models\Contact;
use App\Models\Customers;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class DeleteCrmCustomerJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
/**
* @var array $customer
*/
private $customer;
/**
* Create a new job instance.
*
* @param array $customer
*/
public function __construct($customer)
{
$this->onConnection('rabbitmq');
$this->customer = $customer;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$hashchode = $this->customer['hashcode'];
$email = $this->customer['email'];
try {
DB::transaction(function () use ($hashchode, $email) {
// For baskets and old walls.
$contact = Contact::query()->where('contact_ref', $hashchode)->first();
if ($contact) {
$contact->deleteOrFail();
$this->writeCsvLog('Contact deleted');
}
// For walls.
$customer = Customers::query()->where('hashcode', $hashchode)->first();
if ($customer) {
$customer->deleteOrFail();
$this->writeCsvLog('Customer deleted');
}
});
} catch (\Exception $e) {
Log::info(
sprintf(
"DeleteCrmCustomerJob failed - Code : %s - %s",
$e->getCode(),
$e->getMessage(),
)
);
\report($e);
} //end try
}
/**
* Write logs in /logs/crm.csv.
*
* @param string $message
*
* @return void
*/
private function writeCsvLog(string $message)
{
$csvPath = \storage_path('/logs/crm.csv');
if (!\file_exists($csvPath)) {
$logFile = fopen($csvPath, 'w');
\fputcsv($logFile, ['date', 'hashcode', 'email', 'action'], ';');
\fclose($logFile);
}
$logFile = fopen($csvPath, 'a');
\fputcsv(
$logFile,
[
\now()->toAtomString(),
$this->customer['hashcode'],
$this->customer['email'],
$message
],
';'
);
\fclose($logFile);
}
}

View file

@ -0,0 +1,104 @@
<?php
namespace App\Lib\Helpers;
use Carbon\Carbon;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Enum;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Finder\SplFileInfo;
class ToolboxHelper
{
/**
* Mutltibyte string replace.
*
* @param array|string $search
* @param array|string $replace
* @param array|string $subject
* @param integer $count
* @return array|string|false
*/
public static function mbReplace(
$search,
$replace,
$subject,
int &$count = 0
) {
if (!is_array($search) && is_array($replace)) {
return false;
}
if (is_array($subject)) {
// Call mb_replace for each single string in $subject .
foreach ($subject as &$string) {
$string = &self::mbReplace($search, $replace, $string, $count);
}
} elseif (is_array($search)) {
if (!is_array($replace)) {
foreach ($search as &$string) {
$subject = self::mbReplace($string, $replace, $subject, $count);
}
} else {
$n = max(count($search), count($replace));
while ($n--) {
$subject = self::mbReplace(current($search), current($replace), $subject, $count);
next($search);
next($replace);
}
}
} else {
$parts = mb_split(preg_quote($search), $subject);
$count = count($parts) - 1;
$subject = implode($replace, $parts);
} //end if
return $subject;
}
/**
* Asserts that the field is unique.
*
* @param string $table
* @param string $field
* @param string|integer|float|boolean|null|array $value
* @param integer|null $id
* @param callable|null $query
* @return void
* @throws \Illuminate\Validation\ValidationException If the field is not unique.
*/
public static function assertFieldIsUnique(
string $table,
string $field,
$value,
?int $id = null,
?callable $query = null
): void {
if (!$query) {
Validator::make([$field => $value], [
self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id),
], [
self::mbReplace('.', '\.', "{$field}.unique")
=> trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value])
])->validate();
return;
}
Validator::make([$field => $value], [
$field => Rule::unique($table)->where($query)->ignore($id),
], [
$field . '.unique' => trans(
'crud.libs.toolbox.assertFieldIsUnique',
['attribute' => $field, 'value' => $value]
)
])->validate();
}
}

View file

@ -0,0 +1,82 @@
<?php
namespace App\Models;
use App\Models\Site;
use App\Traits\HasUniqueField;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property string $name Name of the archived campaign.
* @property string $campaign_id Id of the archived campaign.
* @property-read \Carbon\Carbon $created_at Created date.
* @property-read \Carbon\Carbon $updated_at Updated date.
*
* @property-read \App\Models\ArchiveStat $archiveStat ArchiveStat Has many relationship.
* @property-read \App\Models\ArchiveSite $archiveSite ArchiveSite Belongs to relationship.
*/
class ArchiveCampaign extends Model
{
use HasFactory;
use HasUniqueField;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'campaign_id',
'archive_site_id'
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
$model->assertFieldIsUnique('campaign_id', $model->campaign_id);
$site = Site::query()->where('site_id', $model->archive_site_id)->firstOrFail();
$archiveSite = ArchiveSite::query()->firstOrCreate(
[
'site_id' => $model->archive_site_id
],
[
'name' => $site->site_nom
]
);
$model->archiveSite()->associate($archiveSite);
});
static::updating(function () {
throw new \RuntimeException('Updating an archived campaign is not authorized');
});
static::deleting(function () {
throw new \RuntimeException('Deleting an archived campaign is not authorized');
});
}
// * RELATIONS
/**
* ArchiveSite model relation
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function archiveSite()
{
return $this->belongsTo(ArchiveSite::class);
}
/**
* ArchiveSite model relation
* @return Illuminate\Database\Eloquent\Relations\HasMany
*/
public function archiveStat()
{
return $this->hasMany(ArchiveStat::class);
}
}

View file

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use App\Traits\HasUniqueField;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property string $name Name of the archived coupon.
* @property string $coupon_code Treatment code of the archived coupon.
* @property-read \Carbon\Carbon $created_at Created date.
* @property-read \Carbon\Carbon $updated_at Updated date.
*
* @property-read \App\Models\ArchiveStat $archiveStat ArchiveStat Has many relationship.
*/
class ArchiveCoupon extends Model
{
use HasFactory;
use HasUniqueField;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'coupon_code',
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
$model->assertFieldIsUnique('coupon_code', $model->coupon_code);
});
static::updating(function () {
throw new \RuntimeException('Updating an archived coupon is not authorized');
});
static::deleting(function () {
throw new \RuntimeException('Deleting an archived coupon is not authorized');
});
}
// * RELATIONS
/**
* ArchiveStat model relation
* @return Illuminate\Database\Eloquent\Relations\HasMany
*/
public function archiveStat()
{
return $this->hasMany(ArchiveStat::class);
}
}

View file

@ -0,0 +1,60 @@
<?php
namespace App\Models;
use App\Traits\HasUniqueField;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property string $name Name of the archived site.
* @property string $site_id Id of the archived site.
* @property-read \Carbon\Carbon $created_at Created date.
* @property-read \Carbon\Carbon $updated_at Updated date.
*
* @property-read \App\Models\ArchiveCampaign $archiveCampaign ArchiveCampaign Has many relationship.
*/
class ArchiveSite extends Model
{
use HasFactory;
use HasUniqueField;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'site_id',
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
$model->assertFieldIsUnique('site_id', $model->site_id);
});
static::updating(function (self $model) {
throw new \RuntimeException('Updating an archived site is not authorized');
});
static::deleting(function () {
throw new \RuntimeException('Deleting an archived site is not authorized');
});
}
// * RELATIONS
/**
* ArchiveCampaign model relation
* @return Illuminate\Database\Eloquent\Relations\HasMany
*/
public function archiveCampaign()
{
return $this->hasMany(ArchiveCampaign::class);
}
}

View file

@ -0,0 +1,91 @@
<?php
namespace App\Models;
use App\Models\Campagne;
use App\Models\Coupon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @property integer $quantity Quantity of distributed coupons.
* @property \Carbon\Carbon $date Date when the coupon has been distributed.
* @property-read \Carbon\Carbon $created_at Created date.
* @property-read \Carbon\Carbon $updated_at Updated date.
*
* @property-read \App\Models\ArchiveCoupon $archiveCoupon ArchiveCoupon Belongs to relationship.
* @property-read \App\Models\ArchiveCampaign $archiveCampaign ArchiveCampaign Belongs to relationship.
*/
class ArchiveStat extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'date',
'quantity',
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
$campaign = Campagne::withTrashed()->where('camp_id', $model->archive_campaign_id)->firstOrFail();
$archiveCampaign = ArchiveCampaign::query()->firstOrCreate(
[
'campaign_id' => $model->archive_campaign_id
],
[
'name' => $campaign->camp_name,
'archive_site_id' => $campaign->camp_siteId,
]
);
$model->archiveCampaign()->associate($archiveCampaign);
$coupon = Coupon::withTrashed()->where('coupon_id', $model->archive_coupon_id)->firstOrFail();
$archiveCoupon = ArchiveCoupon::query()->firstOrCreate(
[
'coupon_code' => $model->archive_coupon_id
],
[
'name' => $coupon->coupon_code,
]
);
$model->archiveCoupon()->associate($archiveCoupon);
});
static::updating(function () {
throw new \RuntimeException('Upating an archived stat is not authorized');
});
static::deleting(function () {
throw new \RuntimeException('Deleting an archived stat is not authorized');
});
}
// * RELATIONS
/**
* ArchiveCoupon model relation
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function archiveCoupon()
{
return $this->belongsTo(ArchiveCoupon::class);
}
/**
* ArchiveCampaign model relation
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function archiveCampaign()
{
return $this->belongsTo(ArchiveCampaign::class);
}
}

41
app/Models/Basket.php Normal file
View file

@ -0,0 +1,41 @@
<?php
namespace App\Models;
use App\Models\Campagne;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Basket extends Model
{
use HasFactory;
/**
* Customer model relation
* @return BelongsTo
*/
public function customer()
{
return $this->belongsTo(Customers::class, 'customer_id', 'id');
}
/**
* Campagne model relation
* @return BelongsTo
*/
public function campagne()
{
return $this->belongsTo(Campagne::class, 'campagne_id', 'camp_id');
}
/**
* BasketContent model relation
* @return HasMany
*/
public function contents()
{
return $this->hasMany(BasketContent::class);
}
}

View file

@ -0,0 +1,43 @@
<?php
namespace App\Models;
use App\Models\Coupon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class BasketContent extends Model
{
use HasFactory;
/**
* booted method
*
* @return void
*/
protected static function booted()
{
static::creating(function (self $model) {
$model->printed = 0;
});
}
/**
* Basket model relation
* @return HasOne
*/
public function basket()
{
return $this->hasOne(Basket::class);
}
/**
* Coupon model relation
* @return HasOne
*/
public function coupon()
{
return $this->hasOne(Coupon::class, 'coupon_id', 'coupon_id');
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
@ -37,6 +37,6 @@ class Calendrier extends Model
*/
public function coupon()
{
return $this->belongsTo('App\Coupon', 'calendrier_couponId');
return $this->belongsTo('App\Models\Coupon', 'calendrier_couponId');
}
}

View file

@ -1,13 +1,36 @@
<?php
namespace App;
namespace App\Models;
use App\Enums\CampaignTypes;
use App\Models\Basket;
use App\Models\PrintedCoupons;
use Illuminate\Database\Eloquent\Factories\HasFactory;
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;
use HasFactory;
public $enumCasts = [
'camp_type' => CampaignTypes::class
];
/**
* @var array
*/
protected $fillable = [
'camp_siteId',
'camp_name',
'camp_type',
'camp_limitedPrinting',
'camp_published'
];
/**
* @var string
@ -47,7 +70,7 @@ class Campagne extends Model
*/
public function notifications()
{
return $this->hasMany('App\Notification', 'notif_campId', 'camp_id');
return $this->hasMany('App\Models\Notification', 'notif_campId', 'camp_id');
}
/**
@ -56,7 +79,7 @@ class Campagne extends Model
*/
public function murs()
{
return $this->hasMany('App\Mur', 'mur_campId', 'camp_id');
return $this->hasMany('App\Models\Mur', 'mur_campId', 'camp_id');
}
/**
@ -65,7 +88,7 @@ class Campagne extends Model
*/
public function paniers()
{
return $this->hasMany('App\Panier', 'panier_campId', 'camp_id');
return $this->hasMany('App\Models\Panier', 'panier_campId', 'camp_id');
}
/**
@ -74,7 +97,7 @@ class Campagne extends Model
*/
public function site()
{
return $this->belongsTo('App\Site', 'camp_siteId', 'site_id');
return $this->belongsTo('App\Models\Site', 'camp_siteId', 'site_id');
}
/**
@ -82,17 +105,24 @@ class Campagne extends Model
*/
public function coupons()
{
return $this->belongsToMany('App\Coupon', 'campagne_coupon', 'campagne_id', 'coup_id');
return $this->belongsToMany('App\Models\Coupon', 'campagne_coupon', 'campagne_id', 'coup_id');
}
/**
* @var array
* printedCoupons relation
* @return HasMany
*/
protected $fillable = [
'camp_siteId',
'camp_name',
'camp_type',
'camp_limitedPrinting',
'camp_published'
];
public function printedCoupons()
{
return $this->hasMany(PrintedCoupons::class, 'camp_id');
}
/**
* Basket model relation
* @return HasMany
*/
public function baskets()
{
return $this->hasMany(Basket::class);
}
}

View file

@ -1,11 +1,16 @@
<?php
namespace App;
namespace App\Models;
use App\Models\Log;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Contact extends Model
{
use HasFactory;
/**
* @var string
*/
@ -45,7 +50,7 @@ class Contact extends Model
*/
public function murs()
{
return $this->hasMany('App\Mur', 'mur_contactId', 'contact_id');
return $this->hasMany('App\Models\Mur', 'mur_contactId', 'contact_id');
}
/**
@ -54,7 +59,7 @@ class Contact extends Model
*/
public function paniers()
{
return $this->hasMany('App\Panier', 'panier_contactId', 'contact_id');
return $this->hasMany('App\Models\Panier', 'panier_contactId', 'contact_id');
}
/**
@ -63,7 +68,7 @@ class Contact extends Model
*/
public function site()
{
return $this->belongsTo('App\Site', 'contact_siteId');
return $this->belongsTo('App\Models\Site', 'contact_siteId');
}
public function scopeSearchName($query, $name)
@ -107,4 +112,14 @@ class Contact extends Model
$query->where('contact_country', $country);
}
}
/**
* log relation
*
* @return HasMany
*/
public function logs()
{
return $this->hasMany(Log::class, 'log_contactId', 'contact_id');
}
}

View file

@ -1,13 +1,16 @@
<?php
namespace App;
namespace App\Models;
use App\Models\BasketContent;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Coupon extends Model
{
use SoftDeletes;
use HasFactory;
/**
* @var string
@ -34,59 +37,6 @@ class Coupon extends Model
*/
protected $primaryKey = 'coupon_id';
/**
* OneToMany
* Coupon -> Calendrier
*/
public function calendriers()
{
return $this->hasMany('App\Calendrier', 'calendrier_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> PanierContent
*/
public function panierContents()
{
return $this->hasMany('App\PanierContent', 'panier_content_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> Mur
*/
public function murs()
{
return $this->hasMany('App\Mur', 'mur_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> Mouvement
*/
public function mouvements()
{
return $this->hasMany('App\Mouvement', 'mouvement_couponId', 'coupon_id');
}
/**
* ManyToOne
* Coupon -> Site
*/
public function site()
{
return $this->belongsTo('App\Site', 'coupon_siteId');
}
/**
* The campagnes that belong to the coupon.
*/
public function campagnes()
{
return $this->belongsToMany('App\Campagne', 'campagne_coupon', 'coup_id', 'campagne_id');
}
/**
* @var array
*/
@ -120,4 +70,66 @@ class Coupon extends Model
'coupon_seuil_alert',
'coupon_treatment_center'
];
/**
* OneToMany
* Coupon -> Calendrier
*/
public function calendriers()
{
return $this->hasMany('App\Models\Calendrier', 'calendrier_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> PanierContent
*/
public function panierContents()
{
return $this->hasMany('App\Models\PanierContent', 'panier_content_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> Mur
*/
public function murs()
{
return $this->hasMany('App\Models\Mur', 'mur_couponId', 'coupon_id');
}
/**
* OneToMany
* Coupon -> Mouvement
*/
public function mouvements()
{
return $this->hasMany('App\Models\Mouvement', 'mouvement_couponId', 'coupon_id');
}
/**
* ManyToOne
* Coupon -> Site
*/
public function site()
{
return $this->belongsTo('App\Models\Site', 'coupon_siteId');
}
/**
* The campagnes that belong to the coupon.
*/
public function campagnes()
{
return $this->belongsToMany('App\Models\Campagne', 'campagne_coupon', 'coup_id', 'campagne_id');
}
/**
* BasketContent model relation
* @return HasMany
*/
public function basketContents()
{
return $this->hasMany(BasketContent::class);
}
}

View file

@ -2,16 +2,32 @@
namespace App\Models;
use App\Models\Panier;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Customers extends Model
{
/**
* @var string $primaryKey
*/
protected $primaryKey = 'hashcode';
/**
* @var string $keyType
*/
protected $keyType = 'string';
/**
* @var array $fillable
*/
protected $fillable = ['hashcode', 'email', 'country'];
/**
* booted method
*
* @return void
*/
protected static function booted()
{
static::creating(function ($customer) {
@ -23,19 +39,54 @@ class Customers extends Model
});
}
/**
* getIsoCountry method
* Default is : France
*
* @param string $country
* @return integer
*/
private function getIsoCountry($country)
{
$country = trim(ucfirst(strtolower($country)));
switch ($country) {
case 'Belgique':
return 56;
break;
$country = 56;
break;
case 'Luxembourg':
return 442;
break;
$country = 442;
break;
default:
return 250;
// France
$country = 250;
}
return $country;
}
/**
* Printed Coupons Relation
*
* @return HasMany
*/
public function printedCoupons()
{
return $this->hasMany(PrintedCoupons::class, 'customer_id', 'id');
}
/**
* Basket model relation
* @return HasMany
*/
public function baskets()
{
return $this->hasMany(Basket::class, 'customer_id', 'id');
}
/**
* Panier model relation
* @return HasMany
*/
public function paniers()
{
return $this->hasMany(Panier::class, 'panier_contactId', 'id');
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
@ -37,6 +37,6 @@ class Mouvement extends Model
*/
public function coupon()
{
return $this->belongsTo('App\Coupon', 'mouvement_couponId');
return $this->belongsTo('App\Models\Coupon', 'mouvement_couponId');
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
@ -27,7 +27,7 @@ class Mur extends Model
*/
public function campagne()
{
return $this->belongsTo('App\Campagne', 'mur_campId');
return $this->belongsTo('App\Models\Campagne', 'mur_campId');
}
/**
@ -36,7 +36,7 @@ class Mur extends Model
*/
public function contact()
{
return $this->belongsTo('App\Contact', 'mur_contactId');
return $this->belongsTo('App\Models\Contact', 'mur_contactId');
}
/**
@ -45,6 +45,6 @@ class Mur extends Model
*/
public function coupon()
{
return $this->belongsTo('App\Coupon', 'mur_couponId');
return $this->belongsTo('App\Models\Coupon', 'mur_couponId');
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
@ -21,12 +21,14 @@ class Notification extends Model
*/
public $timestamps = false;
protected $fillable = ['notif_name', 'notif_email', 'notif_campId'];
/**
* ManyToOne
* Notification -> Campagne
*/
public function campagne()
{
return $this->belongsTo('App\Campagne', 'notif_campId');
return $this->belongsTo('App\Models\Campagne', 'notif_campId');
}
}

View file

@ -1,11 +1,14 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Panier extends Model
{
use HasFactory;
/**
* @var string
*/
@ -28,7 +31,7 @@ class Panier extends Model
*/
public function panierContents()
{
return $this->hasMany('App\PanierContent', 'panier_content_panierId', 'panier_id');
return $this->hasMany('App\Models\PanierContent', 'panier_content_panierId', 'panier_id');
}
/**
@ -37,7 +40,7 @@ class Panier extends Model
*/
public function campagne()
{
return $this->belongsTo('App\Campagne', 'panier_campId');
return $this->belongsTo('App\Models\Campagne', 'panier_campId');
}
/**
@ -46,6 +49,6 @@ class Panier extends Model
*/
public function contact()
{
return $this->belongsTo('App\Contact', 'panier_contactId');
return $this->belongsTo('App\Models\Contact', 'panier_contactId');
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
@ -27,7 +27,7 @@ class PanierContent extends Model
*/
public function panier()
{
return $this->belongsTo('App\Panier', 'panier_content_panierId', 'panier_id');
return $this->belongsTo('App\Models\Panier', 'panier_content_panierId', 'panier_id');
}
/**
@ -36,7 +36,7 @@ class PanierContent extends Model
*/
public function coupon()
{
return $this->belongsTo('App\Coupon', 'panier_content_couponId');
return $this->belongsTo('App\Models\Coupon', 'panier_content_couponId');
}
/**

View file

@ -5,7 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PrintedWalls extends Model
class PrintedCoupons extends Model
{
use HasFactory;
}

View file

@ -1,11 +1,14 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Site extends Model
{
use HasFactory;
/**
* @var string
*/
@ -37,7 +40,7 @@ class Site extends Model
*/
public function campagnes()
{
return $this->hasMany('App\Campagne', 'camp_siteId', 'site_id');
return $this->hasMany('App\Models\Campagne', 'camp_siteId', 'site_id');
}
/**
@ -46,7 +49,7 @@ class Site extends Model
*/
public function contacts()
{
return $this->hasMany('App\Contact', 'contact_siteId', 'site_id');
return $this->hasMany('App\Models\Contact', 'contact_siteId', 'site_id');
}
/**
@ -54,7 +57,7 @@ class Site extends Model
*/
public function users()
{
return $this->belongsToMany('App\User', 'site_user', 'site_id', 'user_id');
return $this->belongsToMany('App\Models\User', 'site_user', 'site_id', 'user_id');
}
/**
@ -63,7 +66,7 @@ class Site extends Model
*/
public function coupons()
{
return $this->hasMany('App\Coupon', 'coupon_siteId', 'id');
return $this->hasMany('App\Models\Coupon', 'coupon_siteId', 'id');
}
/**

View file

@ -0,0 +1,73 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Statistique extends Model
{
public $timestamps = false;
/**
* @var string
*/
protected $table = 'statistiques';
/**
* @var string
*/
protected $primaryKey = 'id';
/**
* @var string
*/
const CREATED_AT = 'created_at';
/**
* @var array
*/
protected $fillable = [
'stat_campId',
'stat_couponId',
'stat_couponPrinted',
'date'
];
/**
* @var array
*/
protected $casts = [
'date' => 'date'
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
$model->date = now()->toDateString();
});
}
// * RELATIONS
/**
* ArchiveCoupon model relation
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function campaign()
{
return $this->belongsTo(Campagne::class, 'stat_campId', 'camp_id');
}
/**
* ArchiveCampaign model relation
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function coupon()
{
return $this->belongsTo(Coupon::class, 'stat_couponId', 'coupon_id');
}
}

View file

@ -1,10 +1,10 @@
<?php
namespace App;
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Notifications\ResetPassword;
use App\Models\Notifications\ResetPassword;
class User extends Authenticatable
{
@ -53,7 +53,7 @@ class User extends Authenticatable
*/
public function sites()
{
return $this->belongsToMany('App\Site', 'site_user', 'user_id', 'site_id');
return $this->belongsToMany('App\Models\Site', 'site_user', 'user_id', 'site_id');
}

View file

@ -12,7 +12,7 @@ class AuthServiceProvider extends ServiceProvider
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
// 'App\Model' => 'App\Policies\ModelPolicy',
];
/**

View file

@ -1,33 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Statistique extends Model
{
public $timestamps = false;
/**
* @var string
*/
protected $table = 'statistiques';
/**
* @var string
*/
protected $primaryKey = 'id';
/**
* @var string
*/
const CREATED_AT = 'created_at';
/**
* @var array
*/
protected $fillable = [
'stat_campId',
'stat_couponId',
'stat_couponPrinted'
];
}

View file

@ -2,15 +2,17 @@
namespace App\Traits;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Calendrier;
use App\Models\Campagne;
use App\Models\Coupon;
use App\Models\Contact;
use App\Models\Calendrier;
use App\Enums\CampaignTypes;
use App\Models\Customers;
use App\Models\PrintedWalls;
use App\Mur;
use App\Panier;
use App\PanierContent;
use App\Models\PrintedCoupons;
use App\Models\Mouvement;
use App\Models\Mur;
use App\Models\Panier;
use App\Models\PanierContent;
trait CouponTrait
{
@ -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);
@ -348,7 +342,7 @@ trait CouponTrait
// ---- Contrôle le nombre limite d'impression
if ($coupon->coupon_enablelimitquantity === 1) {
$count = PrintedWalls::where(
$count = PrintedCoupons::where(
[
['camp_id', '=', $campagne->camp_id],
['coupon_id', '=', $coupon->coupon_id],
@ -363,7 +357,7 @@ trait CouponTrait
// ---- Contrôle la limite de période de diffusion
if ($coupon->coupon_enablelimitperiod === 1 && $coupon->coupon_limitperiod > 0) {
$count = PrintedWalls::where(
$count = PrintedCoupons::where(
[
['camp_id', '=', $campagne->camp_id],
['coupon_id', '=', $coupon->coupon_id],

View file

@ -2,10 +2,13 @@
namespace App\Traits;
use App\Models\Campagne;
use App\Models\Customers;
use Illuminate\Http\Request;
use App\Coupon;
use App\Site;
use App\Models\Coupon;
use App\Models\PrintedCoupons;
use App\Models\Site;
use App\Models\Statistique;
trait GenerateBR
{
@ -18,8 +21,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,43 +34,33 @@ 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);
$lines_mentions = explode("\r\n", $txt_mentions);
$cleanedString = str_replace(["\r", "\n"], '', $txt_mentions);
$lines_mentions = str_split($cleanedString, 92);
$y = 19;
foreach ($lines_mentions as $line) {
$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 +79,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 +100,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);
@ -158,8 +149,8 @@ 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);
} //end if
// ---- Copie le produit dans le mask
$size = getimagesize($product_image);
switch ($size['mime']) {
@ -221,7 +212,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();
@ -287,8 +278,8 @@ trait GenerateBR
}
// imagecolortransparent($ImageMentionFond, $white);
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
}//end if
}//end if
} //end if
} //end if
// ---- Inscription de l'utilisateur et de la ville
@ -311,7 +302,7 @@ trait GenerateBR
$dateValidite = date('d/m/Y', strtotime("+" . $coupon->coupon_validity . " day"));
} else {
$dateValidite = date('d/m/Y', strtotime("+30 day"));
// 30 jours par défaut
// 30 jours par défaut
}
$ImageFond = imagecreate(120, 40);
@ -372,7 +363,7 @@ trait GenerateBR
$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 if
ob_start();
imagejpeg($mask, null, 100);
@ -387,151 +378,233 @@ trait GenerateBR
}
// VB 22/04/2021
public function printCoupon(Coupon $coupon, Customers $customer, $crmInfos)
public function printCoupon(Coupon $coupon, Customers $customer, $crmInfos, Campagne $campagne)
{
$arial = public_path() . '/build/assets/fonts/coupons/arial.ttf';
$arial = public_path() . '/build/assets/fonts/coupons/arial.ttf';
$arialbd = public_path() . '/build/assets/fonts/coupons/arialbd.ttf';
// ---- Masque dans lequel l'image finale sera placée
$mask = imagecreatefrompng($coupon->coupon_image);
// Load base mask image
$mask = imagecreatefrompng($coupon->coupon_image);
list($maskWidth, $maskHeight) = getimagesize($coupon->coupon_image);
// ----- Mentions légales + RCS dépendant de l'user
// --- Draw Legal Mentions + RCS depending on the user country
if ($coupon->coupon_legal_mentions_splitted == 1) {
$legalMentions = explode('<nl>', $coupon->coupon_legal_mentions);
if ($customer->country !== 250) {
// BELGIQUE - Luxembourg
$txt_mentions = $legalMentions[0] . "\n\r" . $legalMentions[1] . " " . $coupon->coupon_rcs;
$ImageMentionFond = imagecreate(420, 145);
$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);
$lines_mentions = explode("\r\n", $txt_mentions);
$y = 19;
foreach ($lines_mentions as $line) {
$this->imagettftextSp($ImageMentionFond, 7, 0, 15, $y, $black, $arial, $line, 0.01);
$y = $y + 9;
}
// imagecolortransparent($ImageMentionFond, $white);
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
$txt_mentions = $legalMentions[0] . "\n\r " . $legalMentions[1] . "\n\r " . $coupon->coupon_rcs;
$imageWidth = 420;
$imageHeight = 145;
} else {
// FR
$txt_mentions = $legalMentions[0] . " " . $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);
$lines_mentions = explode("\r\n", $txt_mentions);
$y = 19;
foreach ($lines_mentions as $line) {
$this->imagettftextSp($ImageMentionFond, 7, 0, 15, $y, $black, $arial, $line, 0.01);
$y = $y + 9;
}
// imagecolortransparent($ImageMentionFond, $white);
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
}//end if
}//end if
$txt_mentions = $legalMentions[0] . " " . $coupon->coupon_rcs;
$imageWidth = 415;
$imageHeight = 100;
}
$ImageMentionFond = imagecreate($imageWidth, $imageHeight);
$white = imagecolorallocate($ImageMentionFond, 255, 255, 255);
imagefilledrectangle($ImageMentionFond, 0, 0, $imageWidth - 6, $imageHeight - 46, $white);
$black = imagecolorallocate($ImageMentionFond, 0, 0, 0);
// ---- Inscription de l'utilisateur et de la ville
$libelle = "OFFRE RÉSERVÉE À";
$user = $crmInfos->firstname . " " . $crmInfos->lastname . "\r\n" . $crmInfos->postcode . " " . $crmInfos->city;
$ImageFond = imagecreate(120, 40);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$box1 = imagettfbbox(8, 0, $arial, $user);
$box2 = imagettfbbox(8, 0, $arial, $libelle);
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));
$cleanedString = str_replace(["\r", "\n"], '', $txt_mentions);
$lines_mentions = str_split($cleanedString, 92);
// ---- Inscription de la date de validité
$libelle = "Valable jusqu'au :";
$y = 19;
foreach ($lines_mentions as $line) {
$this->imagettftextSp($ImageMentionFond, 7, 0, 15, $y, $black, $arial, $line, 0.01);
$y += 9;
}
if ($coupon->coupon_validity != 0) {
$dateValidite = date('d/m/Y', strtotime("+" . $coupon->coupon_validity . " day"));
} else {
$dateValidite = date('d/m/Y', strtotime("+30 day"));
// 30 jours par défaut
imagecopy($mask, $ImageMentionFond, 335, 235, 0, 0, imagesx($ImageMentionFond), imagesy($ImageMentionFond));
imagedestroy($ImageMentionFond);
}
// --- User inscription and city
$libelle = "OFFRE RÉSERVÉE À";
$user = sprintf(
"%s\r\n%s\r\n%s\r\n%s %s\r\n%s",
$crmInfos->firstname,
$crmInfos->lastname,
$crmInfos->address,
$crmInfos->postcode,
$crmInfos->city,
sprintf('id #%s', str_pad($customer->id, 13, "0", STR_PAD_LEFT))
);
$ImageFond = imagecreate(120, 80);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
// Centered libelle text
$boxLibelle = imagettfbbox(8, 0, $arial, $libelle);
$libelleX = (120 / 2) - (abs($boxLibelle[4]) - abs($boxLibelle[6])) / 2;
imagettftext($ImageFond, 8, 0, $libelleX, 10, $black, $arialbd, $libelle);
// User lines
$userLines = explode("\r\n", $user);
$y = 25;
foreach ($userLines as $line) {
$box = imagettfbbox(8, 0, $arial, $line);
$lineX = (120 / 2) - (abs($box[4]) - abs($box[6])) / 2;
$this->imagettftextSp($ImageFond, 8, 0, $lineX, $y, $black, $arial, $line, 0.01);
$y += 10;
}
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 770, 40, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
imagedestroy($ImageFond);
// --- Validity date inscription
$libelle = "Valable jusqu'au :";
$validDays = ($coupon->coupon_validity != 0) ? $coupon->coupon_validity : 30;
$dateValidite = date('d/m/Y', strtotime("+$validDays day"));
$ImageFond = imagecreate(120, 40);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
imagettftext($ImageFond, 8, 0, 1, 8, $black, $arialbd, $libelle);
imagettftext($ImageFond, 8, 0, 20, 23, $black, $arial, $dateValidite);
imagecolortransparent($ImageFond, $white);
imagecopy($mask, $ImageFond, 780, 142, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
imagedestroy($ImageFond);
// ---- Création code barre
// Save printed coupon
$printedCoupon = $this->savePrintedCoupon($campagne, $customer, $coupon);
// --- Right barcode
$codeBarre = str_pad($printedCoupon->id, 13, "0", STR_PAD_LEFT);
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$base64 = $generator->getBarcode($codeBarre, $generator::TYPE_CODE_128, 2, 30);
$barcodeImage = imagecreatefromstring($base64);
imagecopy($mask, $barcodeImage, 660, 355, 0, 0, imagesx($barcodeImage), imagesy($barcodeImage));
imagedestroy($barcodeImage);
// Text below right barcode
$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, 800, 385, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
imagedestroy($ImageFond);
// --- Barcode treatment text
if ($customer->country !== 250) {
$textReduc = "Traitement ScanCoupon/HighCo Data Benelux";
$copyPosition = [70, 230];
} elseif ($coupon->coupon_treatment_center == 0) {
$textReduc = "• Traitement ScanCoupon •";
$copyPosition = [52, 322];
} else {
$textReduc = "• Traitement Sogec •";
$copyPosition = [52, 322];
}
$ImageFond = imagecreate(270, 20);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
imagettftext($ImageFond, 9, 0, 0, 10, $black, $arialbd, $textReduc);
if ($customer->country !== 250) {
imagecopy($mask, $ImageFond, 70, 230, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
} else {
imagecopy($mask, $ImageFond, 52, 322, 0, 0, imagesx($ImageFond), imagesy($ImageFond));
}
imagecopy($mask, $ImageFond, $copyPosition[0], $copyPosition[1], 0, 0, imagesx($ImageFond), imagesy($ImageFond));
imagedestroy($ImageFond);
// --- Left barcode
if ($customer->country !== 250) {
$codeBarre = imagecreatefromjpeg($coupon->coupon_gs1code);
imageresolution($codeBarre, 72);
$codeBarreImg = imagecreatefromjpeg($coupon->coupon_gs1code);
imageresolution($codeBarreImg, 72);
list($width, $height) = getimagesize($coupon->coupon_gs1code);
$r = $width / $height;
$w = 285;
$h = 150;
if ($w / $h > $r) {
$newwidth = $h * $r;
$newheight = $h;
} else {
$newheight = $w / $r;
$newwidth = $w;
}
$test = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($test, $codeBarre, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$ratio = $width / $height;
$maxWidth = 285;
$maxHeight = 150;
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 . ".@.";
if ($maxWidth / $maxHeight > $ratio) {
$newWidth = $maxHeight * $ratio;
$newHeight = $maxHeight;
} else {
$newHeight = $maxWidth / $ratio;
$newWidth = $maxWidth;
}
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$base64 = $generator->getBarcode($codeBarrePrint, $generator::TYPE_CODE_128_A, 2, 46);
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($resizedImage, $codeBarreImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagecopy($mask, $resizedImage, 60, 250, 0, 0, $newWidth, $newHeight);
imagedestroy($codeBarreImg);
imagedestroy($resizedImage);
} else {
$codeBarre = $coupon->coupon_code;
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$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));
imagedestroy($barcodeImage);
$ImageFond = imagecreate(380, 15);
$white = imagecolorallocate($ImageFond, 255, 255, 255);
$black = imagecolorallocate($ImageFond, 0, 0, 0);
$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
imagedestroy($ImageFond);
}
// Final output as base64 encoded JPEG
ob_start();
imagejpeg($mask, null, 100);
$contents = ob_get_contents();
ob_end_clean();
$dataUri = "data:image/jpeg;base64," . base64_encode($contents);
// ---- Libère la mémoire associée aux images manipulées
imagedestroy($mask);
imagedestroy($ImageFond);
return $dataUri;
// Save stat.
$this->saveStat($campagne, $coupon);
return "data:image/jpeg;base64," . base64_encode($contents);
}
/**
* Save 'printed_coupons' line.
*
* @param Campagne $campagne
* @param Customers $customer
* @param Coupon $coupon
* @return PrintedCoupons
*/
public function savePrintedCoupon(Campagne $campagne, Customers $customer, Coupon $coupon): PrintedCoupons
{
$mur = new PrintedCoupons();
$mur->camp_id = $campagne->camp_id;
$mur->customer_id = $customer->id;
$mur->coupon_id = $coupon->coupon_id;
$mur->save();
return $mur;
}
/**
* Save stats in the 'statistiques' table.
*
* @param Campagne $campagne
* @param Coupon $coupon
* @return Statistique
*/
public function saveStat(Campagne $campagne, Coupon $coupon): Statistique
{
$stat = Statistique::query()->firstOrCreate(
[
'date' => now()->toDateString(),
'stat_campId' => $campagne->camp_id,
'stat_couponId' => $coupon->coupon_id,
],
[
'stat_couponPrinted' => 0,
]
);
$stat->stat_couponPrinted += 1;
$stat->save();
return $stat;
}
}

View file

@ -1,76 +0,0 @@
<?php
namespace App\Traits;
use App\Statistique;
use DateTime;
trait GraphTrait
{
// ------ Make Labels
public function getLabelsForStats($startdate, $enddate)
{
// ---- Calcul de l'intervalle en jour
$datetime1 = new DateTime($startdate);
$datetime2 = new DateTime($enddate);
$interval = $datetime1->diff($datetime2);
$days = $interval->format('%a');
// ---- Labels des graphiques
$labels = [];
for ($i = 0; $i <= $days; $i++) {
$date = date('d/m/Y', strtotime("+" . $i . " days", strtotime($startdate)));
array_push($labels, $date);
}
return $labels;
}
// ---- Data for global graph
public function getDataForCamp($labels, $campid)
{
$dataGlobal = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataGlobal[] = $stat;
} else {
$dataGlobal[] = 0;
}
}
return $dataGlobal;
}
// ---- Data for one coupon on one camp
public function getDataForCoupon($labels, $campid, $coupon)
{
$dataCoupon = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataCoupon[] = $stat;
} else {
$dataCoupon[] = 0;
}
}
return $dataCoupon;
}
// ---- Data for one coupon all camp
public function getDataForCouponAllCamp($labels, $coupon)
{
$dataCoupon = [];
foreach ($labels as $label) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
$stat = Statistique::where(['stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
if (isset($stat)) {
$dataCoupon[] = $stat;
} else {
$dataCoupon[] = 0;
}
}
return $dataCoupon;
}
}

View file

@ -0,0 +1,31 @@
<?php
namespace App\Traits;
use App\Lib\Helpers\ToolboxHelper;
use \Illuminate\Support\Str;
trait HasUniqueField
{
/**
* Asserts using validation that the field is unique
*
* @param string $field
* @param string|null $value
* @param integer|null $id
* @param string|null $slugField
* @return void
* @throws \Illuminate\Validation\ValidationException If the given field already exists.
*/
private function assertFieldIsUnique(string $field, ?string $value = null, ?int $id = null, ?string $slugField = null): void
{
if (!is_null($value)) {
$table = $this->getTable();
ToolboxHelper::assertFieldIsUnique($table, $field, $value, $id);
if (!is_null($slugField)) {
ToolboxHelper::assertFieldIsUnique($table, $slugField, Str::slug($value), $id);
}
}
}
}

97
app/Traits/LogTrait.php Normal file
View file

@ -0,0 +1,97 @@
<?php
namespace App\Traits;
use App\Models\Log;
trait LogTrait
{
/**
* Write error log when the campaign doesn't exist or isn't a basket.
*
* @param string $refcamp
* @return void
*/
public function writeLogErrorIncorrectCampaign(string $refcamp)
{
$log = new Log();
$log->log_action = $this->logAction->value;
$log->log_source = $this->logSource;
$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();
}
/**
* Write error log when there's a wrong or missing parameter in the request.
*
* @param string $refcamp
* @param string $refadherent
* @param string $refsite
* @param string $panier
* @return void
*/
public function writeLogErrorWrongRequestParameters(
string $refcamp,
string $refadherent,
string $refsite,
string $panier
) {
$log = new Log();
$log->log_action = $this->logAction->value;
$log->log_source = $this->logSource;
$log->log_params = json_encode([
'refcamp' => $refcamp,
'refadherent' => $refadherent,
'refsite' => $refsite,
'panier' => $panier
]);
$log->log_statut = 'NOK';
$log->log_message = "Des paramètres de la requête sont mal renseignés ou non présents";
$log->save();
}
/**
* Write success log when the basket is created or updated.
*
* @param string $refcamp
* @param string $refadherent
* @param string $refsite
* @param string $panier
* @param array $panierCoupons
* @return void
*/
public function writeLogSuccessBasketCreated(
string $refcamp,
string $refadherent,
string $refsite,
string $panier,
array $panierCoupons
) {
$log = new Log();
$log->log_action = $this->logAction->value;
$log->log_source = $this->logSource;
$log->log_params = json_encode([
'refcamp' => $refcamp,
'refadherent' => $refadherent,
'refsite' => $refsite,
'panier' => $panier
]);
$log->log_refsite = $refsite;
$log->log_statut = 'OK';
$log->log_message = json_encode(
['Message' => 'Le panier a bien été créé/mis à jour', 'Coupons' => $panierCoupons],
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
);
$log->save();
}
}

View file

@ -2,6 +2,8 @@
namespace LDCWEB;
use LDC\LDCCRM\Models\Customer;
class MesBR
{
@ -9,10 +11,13 @@ class MesBR
private $refCamp;
public function __construct($endpoint, $refCamp)
private $refSite;
public function __construct($endpoint, $refCamp, $refSite)
{
$this->endpoint = $endpoint;
$this->refCamp = $refCamp;
$this->refSite = $refSite;
}
public function createCustomer(string $hashcode, string $email, string $country)
@ -81,4 +86,66 @@ class MesBR
curl_close($curl);
return json_decode($result);
}
// -------- New methods related to baskets (2025/10)
/** .
* Update basket
*
* @param \LDC\LDCCRM\Models\Customer $crm_customer
* @param string $coupon_id
* @param integer $quantity
* @return array<string,string>
* 'status' => 'OK',
* 'ref' => Basket REF,
*/
public function updateBasket(
Customer $crm_customer,
string $coupon_id,
int $quantity = 1
): array {
$res = $this->callAPI("GET", "/customer/basket/update", [
'refsite' => $this->refSite,
'refcamp' => $this->refCamp,
'customer_hashcode' => $crm_customer->hashcode,
'panier' => "({$quantity}){$coupon_id}"
]);
if (!$res) {
error_log("MESBR - CODE : 999 - MESSAGE : Cannot read API Response (non json)");
return ['status' => 'KO', 'code' => 999, 'message' => 'Cannot read API Response (non json)'];
}
if ($res->Statut === 'KO') {
error_log("MESBR - CODE : $res->Code - MESSAGE : $res->Message");
return ['status' => 'KO', 'code' => $res->Code, 'message' => $res->Message];
}
return ['status' => 'OK', 'ref' => $res->Panier->ref];
}
/**
* Get customer basket
*
* @param \LDC\LDCCRM\Models\Customer $crm_customer
* @return array
*/
public function getBasket(
Customer $crm_customer,
): array {
$res = $this->callApi("GET", '/customer/basket', [
'refcamp' => $this->refCamp,
'hashcode' => $crm_customer->hashcode
]);
if (!$res) {
error_log("MESBR - CODE : 999 - MESSAGE : Cannot read API Response (non json)");
return ['status' => 'KO', 'code' => 999, 'message' => 'Cannot read API Response (non json)'];
}
if ($res->status === 'KO') {
error_log("MESBR - CODE : $res->code - MESSAGE : $res->message");
return ['status' => 'KO', 'code' => $res->code, 'message' => $res->message];
}
return ['status' => 'OK', 'coupons' => $res->coupons];
}
}

View file

@ -1,11 +1,6 @@
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"name": "uwil/mesbr",
"description": "Webcoupon management system",
"type": "project",
"require": {
"php": "^7.3",
@ -14,15 +9,16 @@
"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",
"uxweb/sweet-alert": "^2.0"
"uxweb/sweet-alert": "^2.0",
"vladimir-yuldashev/laravel-queue-rabbitmq": "^11.3"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",

444
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "30db3ec95147621d8486d7ad5796a124",
"content-hash": "1b3d7e201bf5b5d95441c22f9c4d2265",
"packages": [
{
"name": "barryvdh/laravel-dompdf",
@ -2615,6 +2615,123 @@
},
"time": "2022-01-27T09:35:39+00:00"
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
"reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": ""
},
"require": {
"php": "^7|^8"
},
"require-dev": {
"phpunit/phpunit": "^6|^7|^8|^9",
"vimeo/psalm": "^1|^2|^3|^4"
},
"type": "library",
"autoload": {
"psr-4": {
"ParagonIE\\ConstantTime\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paragon Initiative Enterprises",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com",
"role": "Maintainer"
},
{
"name": "Steve 'Sc00bz' Thomas",
"email": "steve@tobtu.com",
"homepage": "https://www.tobtu.com",
"role": "Original Developer"
}
],
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
"keywords": [
"base16",
"base32",
"base32_decode",
"base32_encode",
"base64",
"base64_decode",
"base64_encode",
"bin2hex",
"encoding",
"hex",
"hex2bin",
"rfc4648"
],
"support": {
"email": "info@paragonie.com",
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
"time": "2024-05-08T12:18:48+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v9.99.100",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
"shasum": ""
},
"require": {
"php": ">= 7"
},
"require-dev": {
"phpunit/phpunit": "4.*|5.*",
"vimeo/psalm": "^1"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paragon Initiative Enterprises",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com"
}
],
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
"polyfill",
"pseudorandom",
"random"
],
"support": {
"email": "info@paragonie.com",
"issues": "https://github.com/paragonie/random_compat/issues",
"source": "https://github.com/paragonie/random_compat"
},
"time": "2020-10-15T08:29:30+00:00"
},
{
"name": "phenx/php-font-lib",
"version": "0.5.6",
@ -2705,6 +2822,87 @@
},
"time": "2022-03-07T12:52:04+00:00"
},
{
"name": "php-amqplib/php-amqplib",
"version": "v3.7.3",
"source": {
"type": "git",
"url": "https://github.com/php-amqplib/php-amqplib.git",
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"ext-sockets": "*",
"php": "^7.2||^8.0",
"phpseclib/phpseclib": "^2.0|^3.0"
},
"conflict": {
"php": "7.4.0 - 7.4.1"
},
"replace": {
"videlalvaro/php-amqplib": "self.version"
},
"require-dev": {
"ext-curl": "*",
"nategood/httpful": "^0.2.20",
"phpunit/phpunit": "^7.5|^9.5",
"squizlabs/php_codesniffer": "^3.6"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"PhpAmqpLib\\": "PhpAmqpLib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1-or-later"
],
"authors": [
{
"name": "Alvaro Videla",
"role": "Original Maintainer"
},
{
"name": "Raúl Araya",
"email": "nubeiro@gmail.com",
"role": "Maintainer"
},
{
"name": "Luke Bakken",
"email": "luke@bakken.io",
"role": "Maintainer"
},
{
"name": "Ramūnas Dronga",
"email": "github@ramuno.lt",
"role": "Maintainer"
}
],
"description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
"homepage": "https://github.com/php-amqplib/php-amqplib/",
"keywords": [
"message",
"queue",
"rabbitmq"
],
"support": {
"issues": "https://github.com/php-amqplib/php-amqplib/issues",
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
},
"time": "2025-02-18T20:11:13+00:00"
},
{
"name": "phpoption/phpoption",
"version": "1.9.3",
@ -2780,6 +2978,116 @@
],
"time": "2024-07-20T21:41:07+00:00"
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.43",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "709ec107af3cb2f385b9617be72af8cf62441d02"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02",
"reference": "709ec107af3cb2f385b9617be72af8cf62441d02",
"shasum": ""
},
"require": {
"paragonie/constant_time_encoding": "^1|^2|^3",
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
"php": ">=5.6.1"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"suggest": {
"ext-dom": "Install the DOM extension to load XML formatted public keys.",
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
},
"type": "library",
"autoload": {
"files": [
"phpseclib/bootstrap.php"
],
"psr-4": {
"phpseclib3\\": "phpseclib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jim Wigginton",
"email": "terrafrost@php.net",
"role": "Lead Developer"
},
{
"name": "Patrick Monnerat",
"email": "pm@datasphere.ch",
"role": "Developer"
},
{
"name": "Andreas Fischer",
"email": "bantu@phpbb.com",
"role": "Developer"
},
{
"name": "Hans-Jürgen Petrich",
"email": "petrich@tronic-media.com",
"role": "Developer"
},
{
"name": "Graham Campbell",
"email": "graham@alt-three.com",
"role": "Developer"
}
],
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
"homepage": "http://phpseclib.sourceforge.net",
"keywords": [
"BigInteger",
"aes",
"asn.1",
"asn1",
"blowfish",
"crypto",
"cryptography",
"encryption",
"rsa",
"security",
"sftp",
"signature",
"signing",
"ssh",
"twofish",
"x.509",
"x509"
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.43"
},
"funding": [
{
"url": "https://github.com/terrafrost",
"type": "github"
},
{
"url": "https://www.patreon.com/phpseclib",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
"type": "tidelift"
}
],
"time": "2024-12-14T21:12:59+00:00"
},
{
"name": "picqer/php-barcode-generator",
"version": "v0.3",
@ -6264,77 +6572,6 @@
],
"time": "2024-11-08T15:21:10+00:00"
},
{
"name": "szymach/c-pchart",
"version": "v3.0.17",
"source": {
"type": "git",
"url": "https://github.com/szymach/c-pchart.git",
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/szymach/c-pchart/zipball/c022568da78f73bb7acf7db7a974934a434d47d7",
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7",
"shasum": ""
},
"require": {
"ext-gd": "*",
"php": "^5.4|^7.0|^8.0"
},
"require-dev": {
"codeception/codeception": "^4.1.22",
"codeception/module-asserts": "^1.3",
"codeception/module-filesystem": "^1.0",
"phpunit/phpunit": "^5.7|^9.5",
"squizlabs/php_codesniffer": "^3.4"
},
"type": "library",
"extra": {
"branch-alias": {
"2.0": "2.0.x-dev",
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"files": [
"constants.php"
],
"psr-4": {
"CpChart\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-3.0-only"
],
"authors": [
{
"name": "Jean-Damien Pogolotti",
"homepage": "http://www.pchart.net",
"role": "Creator of the original pChart library"
},
{
"name": "Piotr Szymaszek",
"homepage": "https://github.com/szymach",
"role": "Developer of the CpChart wrapper package"
}
],
"description": "Port of \"pChart\" library into PHP 5+",
"homepage": "https://github.com/szymach/c-pchart",
"keywords": [
"CpChart",
"c-pChart",
"charts",
"pchart",
"statistics"
],
"support": {
"issues": "https://github.com/szymach/c-pchart/issues",
"source": "https://github.com/szymach/c-pchart/tree/v3.0.17"
},
"time": "2023-05-27T11:12:02+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "v2.2.7",
@ -6454,6 +6691,69 @@
},
"time": "2020-09-14T23:22:32+00:00"
},
{
"name": "vladimir-yuldashev/laravel-queue-rabbitmq",
"version": "v11.3.0",
"source": {
"type": "git",
"url": "https://github.com/vyuldashev/laravel-queue-rabbitmq.git",
"reference": "a5649faabfd224365b7c363f5e449777316d8627"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vyuldashev/laravel-queue-rabbitmq/zipball/a5649faabfd224365b7c363f5e449777316d8627",
"reference": "a5649faabfd224365b7c363f5e449777316d8627",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/queue": "^8.0",
"php": "^7.3|^8.0",
"php-amqplib/php-amqplib": "^2.12|^3.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.17",
"laravel/horizon": "^5.0",
"mockery/mockery": "^1.0",
"orchestra/testbench": "^6.0",
"phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-pcntl": "Required to use all features of the queue consumer."
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"VladimirYuldashev\\LaravelQueueRabbitMQ\\LaravelQueueRabbitMQServiceProvider"
]
},
"branch-alias": {
"dev-master": "11.0-dev"
}
},
"autoload": {
"psr-4": {
"VladimirYuldashev\\LaravelQueueRabbitMQ\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Vladimir Yuldashev",
"email": "misterio92@gmail.com"
}
],
"description": "RabbitMQ driver for Laravel Queue. Supports Laravel Horizon.",
"support": {
"issues": "https://github.com/vyuldashev/laravel-queue-rabbitmq/issues",
"source": "https://github.com/vyuldashev/laravel-queue-rabbitmq/tree/v11.3.0"
},
"time": "2021-07-06T00:05:52+00:00"
},
{
"name": "vlucas/phpdotenv",
"version": "v5.6.1",

View file

@ -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,
],
];

View file

@ -67,7 +67,7 @@ return [
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'model' => App\Models\User::class,
],
// 'users' => [

Some files were not shown because too many files have changed in this diff Show more