ldc-mesbr-app/app/Traits/CouponTrait.php
2019-02-27 10:32:34 +01:00

191 lines
No EOL
6.9 KiB
PHP

<?php
namespace App\Traits;
use App\Campagne;
use App\Coupon;
use App\Contact;
use App\Calendrier;
use App\Mur;
use App\Panier;
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 validité
if($coupon->coupon_maxdatevalidity != null){
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatevalidity)){
$coupons->forget($key);
}
}
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
if(isset($calendars)){
$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 validité
if($coupon->coupon_maxdatevalidity != null){
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatevalidity)){
$panierContents->forget($key);
}
}
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
if(isset($calendars)){
$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 validité
if($coupon->coupon_maxdatevalidity != null){
if(strtotime(date('Y-m-d')) > strtotime($coupon->coupon_maxdatevalidity)){
$panierContents->forget($key);
}
}
// ---- Contrôle des calendriers de diffusion
$calendars = Calendrier::where(['calendrier_couponId' => $coupon->coupon_id])->get();
if(isset($calendars)){
$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 isAvailable(Coupon $coupon, Campagne $campagne, Contact $contact){
$available = true;
// ---- Contrôle le nombre limite d'impression
if($coupon->coupon_enablelimitquantity == 1){
$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;
$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])->get();
$countPrinted = $countPrinted + count($murs);
} else { // Paniers
$paniers = Panier::where(['panier_campId' => $campagne->camp_id])->get();
foreach ($paniers as $key => $panier) {
$panierContentCount = $panier->panierContents->sum('panier_content_printed');
$countPrinted = $countPrinted + $panierContentCount;
}
}
}
return $countPrinted;
}
}