331 lines
No EOL
13 KiB
PHP
331 lines
No EOL
13 KiB
PHP
<?php
|
|
|
|
namespace App\Traits;
|
|
|
|
use App\Campagne;
|
|
use App\Coupon;
|
|
use App\Contact;
|
|
use App\Calendrier;
|
|
use App\Mur;
|
|
use App\Statistique;
|
|
use App\Panier;
|
|
use App\PanierContent;
|
|
use DateTime;
|
|
|
|
trait CouponTrait {
|
|
|
|
public function getCouponsPublished(Campagne $campagne) {
|
|
$coupons = $campagne->coupons()->get();
|
|
|
|
foreach ($coupons as $key => $coupon) {
|
|
|
|
// ---- Contrôle de la publication
|
|
if($coupon->coupon_published == 0) {
|
|
$coupons->forget($key);
|
|
}
|
|
|
|
// ---- Contrôle la date de début de diffusion
|
|
if($coupon->coupon_mindatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)){
|
|
$coupons->forget($key);
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle la date de validité
|
|
if($coupon->coupon_maxdatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)){
|
|
$coupons->forget($key);
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle des calendriers de diffusion
|
|
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
|
|
if(isset($calendars) && !$calendars->isEmpty()){
|
|
$pub = 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)){
|
|
$pub = true;
|
|
}
|
|
}
|
|
if(!$pub) {
|
|
$coupons->forget($key);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $coupons;
|
|
}
|
|
|
|
public function getPanierContentPublished(Panier $panier) {
|
|
$panierContents = $panier->panierContents()->get();
|
|
foreach ($panierContents as $key => $panierContent) {
|
|
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
|
|
// ---- Contrôle de la publication
|
|
if($coupon->coupon_published == 0) {
|
|
$panierContents->forget($key);
|
|
}
|
|
|
|
// ---- Contrôle la date de début de diffusion
|
|
if($coupon->coupon_mindatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)){
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
// ---- Contrôle la date de validité
|
|
if($coupon->coupon_maxdatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)){
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle des calendriers de diffusion
|
|
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
|
|
if(isset($calendars) && !$calendars->isEmpty()){
|
|
$pub = 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)){
|
|
$pub = true;
|
|
}
|
|
}
|
|
if(!$pub) {
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $panierContents;
|
|
}
|
|
|
|
public function getCountCouponsPanierPublished(Panier $panier) {
|
|
$panierContents = $panier->panierContents()->get();
|
|
foreach ($panierContents as $key => $panierContent) {
|
|
$coupon = Coupon::where(['coupon_id' => $panierContent->panier_content_couponId])->first();
|
|
// ---- Contrôle de la publication
|
|
if($coupon->coupon_published == 0) {
|
|
$panierContents->forget($key);
|
|
}
|
|
|
|
// ---- Contrôle la date de début de diffusion
|
|
if($coupon->coupon_mindatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)){
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle la date de validité
|
|
if($coupon->coupon_maxdatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)){
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle des calendriers de diffusion
|
|
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
|
|
if(isset($calendars) && !$calendars->isEmpty()){
|
|
$pub = 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)){
|
|
$pub = true;
|
|
}
|
|
}
|
|
if(!$pub) {
|
|
$panierContents->forget($key);
|
|
}
|
|
}
|
|
}
|
|
|
|
$count = 0;
|
|
|
|
foreach ($panierContents as $panierContent) {
|
|
$count = $count + $panierContent->panier_content_quantity;
|
|
}
|
|
|
|
return $count;
|
|
}
|
|
|
|
public function isAvailableToPrint(Coupon $coupon, Campagne $campagne) {
|
|
$availableToPrint = true;
|
|
// ---- Contrôle de la publication
|
|
if($coupon->coupon_published == 0) {
|
|
$availableToPrint = false;
|
|
}
|
|
|
|
// ---- Contrôle la date de début de diffusion
|
|
if($coupon->coupon_mindatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)){
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
// ---- Contrôle la date de validité
|
|
if($coupon->coupon_maxdatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)){
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle des calendriers de diffusion
|
|
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
|
|
if(isset($calendars) && !$calendars->isEmpty()){
|
|
$pub = 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)){
|
|
$pub = true;
|
|
}
|
|
}
|
|
if(!$pub) {
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
|
|
if ($campagne->camp_published == 0) {
|
|
$availableToPrint = false;
|
|
}
|
|
|
|
return $availableToPrint;
|
|
}
|
|
|
|
public function isPausedToPrint(Coupon $coupon, Campagne $campagne) {
|
|
$availableToPrint = true;
|
|
|
|
// ---- Contrôle la date de début de diffusion
|
|
if($coupon->coupon_mindatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) < strtotime($coupon->coupon_mindatediffusion)){
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
// ---- Contrôle la date de validité
|
|
if($coupon->coupon_maxdatediffusion != null){
|
|
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatediffusion)){
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle des calendriers de diffusion
|
|
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
|
|
if(isset($calendars) && !$calendars->isEmpty()){
|
|
$pub = 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)){
|
|
$pub = true;
|
|
}
|
|
}
|
|
if(!$pub) {
|
|
$availableToPrint = false;
|
|
}
|
|
}
|
|
|
|
return $availableToPrint;
|
|
}
|
|
|
|
|
|
public function isAvailable(Coupon $coupon, Campagne $campagne, Contact $contact){
|
|
$available = true;
|
|
|
|
// ---- Contrôle le nombre limite d'impression
|
|
if($coupon->coupon_enablelimitquantity == 1 && $coupon->coupon_enablelimitquantity > 0){
|
|
$stat = Mur::where([
|
|
'mur_campId' => $campagne->camp_id,
|
|
'mur_contactId' => $contact->contact_id,
|
|
'mur_couponId' => $coupon->coupon_id,
|
|
'mur_deleted' => 0 ])
|
|
->count();
|
|
|
|
if($stat >= $coupon->coupon_limitquantity){
|
|
$available = false;
|
|
}
|
|
}
|
|
|
|
// ---- Contrôle la limite de période de diffusion
|
|
if($coupon->coupon_enablelimitperiod == 1 && $coupon->coupon_limitperiod > 0){
|
|
$stat = Mur::where([
|
|
'mur_campId' => $campagne->camp_id,
|
|
'mur_contactId' => $contact->contact_id,
|
|
'mur_couponId' => $coupon->coupon_id,
|
|
'mur_deleted' => 0 ])
|
|
->orderBy('mur_createdate', 'DESC')
|
|
->first();
|
|
|
|
if (isset($stat) && $stat->count() > 0){
|
|
$dateDisponibilite = date('Y-m-d',strtotime($stat->mur_createdate." +".$coupon->coupon_limitperiod." days"));
|
|
if($dateDisponibilite > date('Y-m-d')){
|
|
$available = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $available;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
|
|
} else { // Paniers
|
|
$campagneId = $campagne->camp_id;
|
|
$countPrinted = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function($query) use ($campagneId){
|
|
$query->where('panier_campId', $campagneId);
|
|
})->sum('panier_content_printed');
|
|
}
|
|
}
|
|
return $countPrinted;
|
|
}
|
|
|
|
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);
|
|
|
|
} else { // Paniers
|
|
$campagneId = $campagne->camp_id;
|
|
$panierContents = PanierContent::where('panier_content_couponId', $couponId)->whereHas('panier', function($query) use ($campagneId){
|
|
$query->where('panier_campId', $campagneId);
|
|
})->get();
|
|
$panierContentCountPrinted = $panierContents->sum('panier_content_printed');
|
|
$panierContentCountDiffused = $panierContents->sum('panier_content_quantity');
|
|
$countPrinted = $countPrinted + $panierContentCountPrinted + $panierContentCountDiffused;
|
|
}
|
|
}
|
|
return $countPrinted;
|
|
}
|
|
|
|
public function getUsedQuantityOnPeriod(Coupon $coupon, $startdate, $enddate) {
|
|
$countPrinted = 0;
|
|
$startdate = date('Y-m-d H:i:s', strtotime($startdate));
|
|
$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) { // Murs
|
|
$murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->whereBetween('mur_createdate', [$startdate, $enddate])->get();
|
|
$countPrinted = $countPrinted + count($murs);
|
|
} else { // Paniers
|
|
$paniers = Panier::where(['panier_campId' => $campagne->camp_id])->where(function($query) use ($startdate, $enddate){
|
|
$query->whereBetween('panier_createdate', [$startdate, $enddate])
|
|
->orWhereBetween('panier_updatedate', [$startdate, $enddate]);
|
|
})->get();
|
|
foreach ($paniers as $key => $panier) {
|
|
$panierContentCount = $panier->panierContents->sum('panier_content_printed');
|
|
$countPrinted = $countPrinted + $panierContentCount;
|
|
}
|
|
}
|
|
}
|
|
return $countPrinted;
|
|
}
|
|
} |