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