ldc-mesbr-app/app/Http/Controllers/AjaxController.php

303 lines
12 KiB
PHP
Raw Permalink Normal View History

2019-01-15 14:17:15 +01:00
<?php
namespace App\Http\Controllers;
2021-04-27 17:29:47 +02:00
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;
2019-01-15 14:17:15 +01:00
use Illuminate\Http\Request;
2019-02-13 16:37:14 +01:00
use App\Traits\GenerateBR;
use App\Traits\CouponTrait;
2019-01-15 14:17:15 +01:00
class AjaxController extends Controller
{
2019-02-13 16:37:14 +01:00
use GenerateBR;
use CouponTrait;
2025-08-14 17:05:09 +02:00
// ---- Ajoute des coupons à une campagne
public function add_coupons_ajax(Request $request)
{
$camp_id = $request->input('campid');
$campagne = Campagne::where('camp_id', $camp_id)->first();
$ids = $request->input('ids');
$coupons = Coupon::find($ids);
$campagne->coupons()->attach($coupons);
return json_encode($coupons);
}
// ---- Efface des coupons d'une campagne
public function remove_coupons_ajax(Request $request)
{
$camp_id = $request->input('campid');
$campagne = Campagne::where('camp_id', $camp_id)->first();
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
$campagne->coupons()->detach($coupon_id);
return json_encode($coupon);
}
2019-02-13 16:37:14 +01:00
// ---- Dépublie un coupon
public function unpublishCouponsAjax(Request $request)
2021-04-27 17:29:47 +02:00
{
2025-04-03 09:30:16 +02:00
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
2019-02-13 16:37:14 +01:00
$coupon->coupon_published = 0;
$coupon->save();
return json_encode($coupon);
}
// ---- Publie un coupon
public function publishCouponsAjax(Request $request)
2021-04-27 17:29:47 +02:00
{
2025-04-03 09:30:16 +02:00
$coupon_id = $request->input('couponid');
$coupon = Coupon::find($coupon_id);
2019-02-13 16:37:14 +01:00
$coupon->coupon_published = 1;
$coupon->save();
return json_encode($coupon);
}
// ---- Impression des BR
public function impressionAjax(Request $request)
2021-04-27 17:29:47 +02:00
{
2019-02-20 16:26:32 +01:00
2021-04-27 17:29:47 +02:00
if ($request->session()->has('coupons')) {
$couponsToPrint = $request->session()->get('coupons');
}
if ($request->session()->has('campagne')) {
$campagne = $request->session()->get('campagne');
2019-02-13 16:37:14 +01:00
} else {
die();
}
2021-04-27 17:29:47 +02:00
if ($request->session()->has('contact')) {
$contact = $request->session()->get('contact');
2019-02-13 16:37:14 +01:00
} else {
die();
}
2021-04-27 17:29:47 +02:00
if ($request->session()->has('panier')) {
$panier = $request->session()->get('panier');
2019-02-13 16:37:14 +01:00
}
2019-02-20 16:26:32 +01:00
2021-04-27 17:29:47 +02:00
if ($contact->contact_ref == "DEMO") {
$source = 'ADMIN';
2019-02-20 16:26:32 +01:00
} else {
2021-04-27 17:29:47 +02:00
$source = 'API';
2019-02-20 16:26:32 +01:00
}
// ---- INIT du log
2025-04-03 09:30:16 +02:00
$log = new Log();
$log->log_action = config('constants.impression');
$log->log_source = $source;
2019-02-20 16:26:32 +01:00
$log->log_contactId = $contact->contact_id;
2025-04-03 09:30:16 +02:00
$log->log_refsite = $campagne->camp_siteId;
$log->log_params = json_encode(['refcamp' => $campagne->camp_id]);
2019-02-20 16:26:32 +01:00
2026-10-28 12:27:46 +01:00
$couponsPrinted = [];
2019-02-20 16:26:32 +01:00
2025-04-03 09:30:16 +02:00
$coupons = '<TABLE width="100%" align="center" cellpadding="0" cellspacing="0" border="0">';
2021-04-27 17:29:47 +02:00
$coupons .= '<TR><TD width="100%" align="center"><div>';
2019-02-13 16:37:14 +01:00
if ($campagne->camp_type->equals(CampaignTypes::mur())) {
2025-04-03 09:30:16 +02:00
// ---- POUR LES MURS
2021-04-27 17:29:47 +02:00
if (!isset($couponsToPrint)) {
die();
}
2019-02-13 16:37:14 +01:00
$nbCoupon = 0;
2026-10-28 12:27:46 +01:00
foreach ($couponsToPrint as $coupon_code) {
2019-02-13 16:37:14 +01:00
$cp = Coupon::where(['coupon_code' => $coupon_code])->first();
2021-04-27 17:29:47 +02:00
if ($this->isAvailable($cp, $campagne, $contact) && $this->isAvailableToPrint($cp, $campagne)) {
2019-02-20 16:26:32 +01:00
array_push($couponsPrinted, ['cp_code' => $cp->coupon_code, 'qty' => 1]);
2019-02-13 16:37:14 +01:00
$imgCoupon = $this->printCp($cp, $contact);
2025-04-03 09:30:16 +02:00
$coupons .= '<img src="' . $imgCoupon . '" border="0" style="display:block;width:165mm;"/>';
2019-02-13 16:37:14 +01:00
$nbCoupon++;
2021-04-27 17:29:47 +02:00
if ($nbCoupon % 3 == 0) {
$coupons .= '</div><div>';
}
2019-02-13 16:37:14 +01:00
2025-04-03 09:30:16 +02:00
// ----- mémorise l'impression
$mur = new Mur();
$mur->mur_campid = $campagne->camp_id;
2019-02-13 16:37:14 +01:00
$mur->mur_contactId = $contact->contact_id;
2025-04-03 09:30:16 +02:00
$mur->mur_couponId = $cp->coupon_id;
2019-02-13 16:37:14 +01:00
$mur->save();
2025-04-03 09:30:16 +02:00
// Sauvegarde de stat
$this->saveStat($campagne, $cp);
2025-04-03 09:30:16 +02:00
}//end if
}//end foreach
} elseif ($campagne->camp_type->equals(CampaignTypes::panier())) {
2025-04-03 09:30:16 +02:00
// ---- POUR LES PANIERS
2021-04-27 17:29:47 +02:00
if (!isset($panier)) {
die();
}
2019-02-13 16:37:14 +01:00
$allPanierContent = $panier->panierContents()->get();
2021-04-27 17:29:47 +02:00
if (count($allPanierContent) == 0) {
die("error");
}
2019-02-13 16:37:14 +01:00
$nbCoupon = 0;
2021-04-27 17:29:47 +02:00
2019-02-13 16:37:14 +01:00
foreach ($allPanierContent as $panierContent) {
2021-04-27 17:29:47 +02:00
$cp = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
2025-04-03 09:30:16 +02:00
if ($cp && $this->isAvailableToPrint($cp, $campagne)) {
2019-02-13 16:37:14 +01:00
$imgCoupon = $this->printCp($cp, $contact);
// ---- Création du html du contenu à imprimer
2021-04-27 17:29:47 +02:00
if ($campagne->camp_limitedPrinting == 0) {
for ($i = 0; $i < $panierContent->panier_content_quantity; $i++) {
$coupons .= '<img src="' . $imgCoupon . '" border="0" style="display:block;width:165mm;"/>';
2019-02-13 16:37:14 +01:00
$nbCoupon++;
2021-04-27 17:29:47 +02:00
if ($nbCoupon % 3 == 0) {
$coupons .= '</div><div>';
}
2019-02-13 16:37:14 +01:00
}
$newQtyAvailable = 0;
2025-04-03 09:30:16 +02:00
$newQtyPrinted = $panierContent->panier_content_quantity + $panierContent->panier_content_printed;
2019-02-20 16:26:32 +01:00
array_push($couponsPrinted, ['cp_code' => $cp->coupon_code, 'qty' => $panierContent->panier_content_quantity]);
2025-04-03 09:30:16 +02:00
// Sauvegarde de stat
$this->saveStat($campagne, $cp);
2021-04-27 17:29:47 +02:00
} else {
if ($panierContent->panier_content_quantity > 0) {
$coupons .= '<img src="' . $imgCoupon . '" border="0" style="display:block;width:165mm;"/>';
2019-02-13 16:37:14 +01:00
$nbCoupon++;
2021-04-27 17:29:47 +02:00
if ($nbCoupon % 3 == 0) {
$coupons .= '</div><div>';
}
$newQtyAvailable = $panierContent->panier_content_quantity - 1;
2025-04-03 09:30:16 +02:00
$newQtyPrinted = $panierContent->panier_content_printed + 1;
2019-02-20 16:26:32 +01:00
array_push($couponsPrinted, ['cp_code' => $cp->coupon_code, 'qty' => 1]);
2021-04-27 17:29:47 +02:00
2025-04-03 09:30:16 +02:00
// Sauvegarde de stat
$this->saveStat($campagne, $cp);
2019-02-13 16:37:14 +01:00
}
2025-04-03 09:30:16 +02:00
}//end if
2019-02-13 16:37:14 +01:00
// ---- Mémorise l'impression
$panierContent->panier_content_quantity = $newQtyAvailable;
2025-04-03 09:30:16 +02:00
$panierContent->panier_content_printed = $newQtyPrinted;
2019-02-13 16:37:14 +01:00
$panierContent->save();
2025-04-03 09:30:16 +02:00
}//end if
}//end foreach
2019-02-13 16:37:14 +01:00
// ---- Update du status du panier
$qty = $panier->panierContents()->sum('panier_content_quantity');
2021-04-27 17:29:47 +02:00
if ($qty == 0) {
2019-02-13 16:37:14 +01:00
$panier->panier_pending = 0;
2021-04-27 17:29:47 +02:00
} else {
2019-02-13 16:37:14 +01:00
$panier->panier_pending = 1;
}
$panier->save();
} elseif ($campagne->camp_type->equals(CampaignTypes::murss())) {
2025-04-03 09:30:16 +02:00
// ---- POUR LES MURS SANS SELECTION
2019-02-13 16:37:14 +01:00
$nbCoupon = 0;
2025-04-03 09:30:16 +02:00
$cps = $campagne->coupons()->get();
2019-02-13 16:37:14 +01:00
2021-04-27 17:29:47 +02:00
foreach ($cps as $cp) {
2019-02-13 16:37:14 +01:00
// ---- Contrôle si le BR a déjà fait l'objet d'une impression
2021-04-27 17:29:47 +02:00
if ($this->isAvailable($cp, $campagne, $contact) && $this->isAvailableToPrint($cp, $campagne)) {
2019-02-13 16:37:14 +01:00
// ---- Génère l'image du BR à imprimer
$imgCoupon = $this->printCp($cp, $contact);
2025-04-03 09:30:16 +02:00
$coupons .= '<img src="' . $imgCoupon . '" border="0" style="display:block;width:165mm;"/>';
2019-02-13 16:37:14 +01:00
$nbCoupon++;
2021-04-27 17:29:47 +02:00
if ($nbCoupon % 3 == 0) {
$coupons .= '</div><div>';
}
2019-02-20 16:26:32 +01:00
array_push($couponsPrinted, ['cp_code' => $cp->coupon_code, 'qty' => 1]);
2025-04-03 09:30:16 +02:00
// ----- mémorise l'impression
$mur = new Mur();
$mur->mur_campid = $campagne->camp_id;
2019-02-13 16:37:14 +01:00
$mur->mur_contactId = $contact->contact_id;
2025-04-03 09:30:16 +02:00
$mur->mur_couponId = $cp->coupon_id;
2019-02-13 16:37:14 +01:00
$mur->save();
2025-04-03 09:30:16 +02:00
// Sauvegarde de stat
$this->saveStat($campagne, $cp);
2025-04-03 09:30:16 +02:00
}//end if
}//end foreach
} elseif ($campagne->camp_type->equals(CampaignTypes::paniers())) {
2025-04-03 09:30:16 +02:00
// ---- POUR LES PANIERS AVEC SELECTION
2021-04-27 17:29:47 +02:00
if (!isset($couponsToPrint)) {
die();
}
2019-02-13 16:37:14 +01:00
$nbCoupon = 0;
2021-04-27 17:29:47 +02:00
if (!isset($panier)) {
die();
}
2026-10-28 12:27:46 +01:00
foreach ($couponsToPrint as $coupon_code) {
2019-02-13 16:37:14 +01:00
$cp = Coupon::where(['coupon_code' => $coupon_code])->first();
2021-04-27 17:29:47 +02:00
if ($this->isAvailable($cp, $campagne, $contact) && $this->isAvailableToPrint($cp, $campagne)) {
2025-04-03 09:30:16 +02:00
$imgCoupon = $this->printCp($cp, $contact);
2019-02-13 16:37:14 +01:00
$panierContent = PanierContent::where(['panier_content_couponId' => $cp->coupon_id, 'panier_content_panierId' => $panier->panier_id])->first();
2021-04-27 17:29:47 +02:00
if ($panierContent->panier_content_quantity > 0) {
$coupons .= '<img src="' . $imgCoupon . '" border="0" style="display:block;width:165mm;"/>';
2019-02-13 16:37:14 +01:00
$nbCoupon++;
2021-04-27 17:29:47 +02:00
if ($nbCoupon % 3 == 0) {
$coupons .= '</div><div>';
}
$newQtyAvailable = $panierContent->panier_content_quantity - 1;
2025-04-03 09:30:16 +02:00
$newQtyPrinted = $panierContent->panier_content_printed + 1;
2025-04-03 09:30:16 +02:00
// Sauvegarde de stat
$this->saveStat($campagne, $cp);
// ---- Mémorise l'impression
$panierContent->panier_content_quantity = $newQtyAvailable;
$panierContent->panier_content_printed = $newQtyPrinted;
$panierContent->save();
2019-02-13 16:37:14 +01:00
}
2019-02-20 16:26:32 +01:00
array_push($couponsPrinted, ['cp_code' => $cp->coupon_code, 'qty' => 1]);
2025-04-03 09:30:16 +02:00
}//end if
}//end foreach
2019-02-20 16:26:32 +01:00
// ---- Update du status du panier
$qty = $panier->panierContents()->sum('panier_content_quantity');
2021-04-27 17:29:47 +02:00
if ($qty == 0) {
2019-02-20 16:26:32 +01:00
$panier->panier_pending = 0;
2021-04-27 17:29:47 +02:00
} else {
2019-02-20 16:26:32 +01:00
$panier->panier_pending = 1;
}
$panier->save();
2025-04-03 09:30:16 +02:00
}//end if
2019-02-13 16:37:14 +01:00
$coupons .= '</div></TD></TR>';
2021-04-27 17:29:47 +02:00
$coupons .= '</TABLE>';
2019-02-13 16:37:14 +01:00
2025-04-03 09:30:16 +02:00
$log->log_statut = 'OK';
2019-02-20 16:26:32 +01:00
$log->log_message = json_encode(['Message' => 'Impressions réussies', 'Coupons' => $couponsPrinted], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$log->save();
2019-02-13 16:37:14 +01:00
return $coupons;
}
// ---- Retour au bon index une fois l'impression faite
2021-04-27 17:29:47 +02:00
public function backToIndex(Request $request)
{
if ($request->session()->has('campagne')) {
$campagne = $request->session()->get('campagne');
2019-02-13 16:37:14 +01:00
} else {
die();
}
2025-11-06 16:17:22 +01:00
if ($campagne->camp_type->equals(CampaignTypes::panier()) || $campagne->camp_type->equals(CampaignTypes::paniers())) {
2021-04-27 17:29:47 +02:00
if ($request->session()->has('panier')) {
$panier = $request->session()->get('panier');
2019-02-13 16:37:14 +01:00
} else {
die();
}
2021-04-27 17:29:47 +02:00
return redirect(url('/') . '/?basketid=' . $panier->panier_ref);
}
2019-02-13 16:37:14 +01:00
}
2019-01-15 14:17:15 +01:00
}