161 lines
6.8 KiB
PHP
161 lines
6.8 KiB
PHP
<?php
|
|
|
|
namespace App\Console;
|
|
|
|
use Illuminate\Console\Scheduling\Schedule;
|
|
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
|
use App\Coupon;
|
|
use App\Site;
|
|
use App\Panier;
|
|
use App\PanierContent;
|
|
use App\Mur;
|
|
use App\Campagne;
|
|
use App\Statistique;
|
|
use App\User;
|
|
use App\Notification;
|
|
use App\Mail\AlertBr;
|
|
use App\Mail\AlertBrAdmin;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use App\Traits\CouponTrait;
|
|
use Carbon\Carbon;
|
|
|
|
class Kernel extends ConsoleKernel
|
|
{
|
|
use CouponTrait;
|
|
/**
|
|
* The Artisan commands provided by your application.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $commands = [
|
|
//
|
|
];
|
|
|
|
/**
|
|
* Define the application's command schedule.
|
|
*
|
|
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
|
* @return void
|
|
*/
|
|
protected function schedule(Schedule $schedule)
|
|
{
|
|
//---- Commande d'alerte appelé tt les jours de la semaine a 7h00
|
|
$schedule->call(function () {
|
|
$sites = Site::all();
|
|
$couponSeuilGlobal = array();
|
|
$couponDiffusionGlobal = array();
|
|
$sendGlobal = false;
|
|
foreach ($sites as $site) { // ---- Pour chaque site
|
|
$campagnes = Campagne::where(['camp_siteId' => $site->site_id])->get();
|
|
foreach ($campagnes as $campagne) {
|
|
$sendMail = false;
|
|
$users = array();
|
|
$couponSeuil = array();
|
|
$couponDiffusion = array();
|
|
$coupons = $campagne->coupons()->get();
|
|
foreach ($coupons as $coupon) {
|
|
$couponAlert = false;
|
|
if($coupon->coupon_published){
|
|
|
|
$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]);
|
|
$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
|
|
array_push($couponDiffusion, $coupon);
|
|
array_push($couponDiffusionGlobal, [$site->site_nom , $coupon]);
|
|
$sendGlobal = true;
|
|
$couponAlert = true;
|
|
}
|
|
|
|
if($couponAlert){
|
|
$notifications = Notification::where(['notif_campId' => $campagne->camp_id])->get();
|
|
foreach ($notifications as $notification) {
|
|
if(!array_key_exists($notification->notif_id, $users)){
|
|
$userObject = [];
|
|
$userObject['email'] = $notification->notif_email;
|
|
$userObject['name'] = $notification->notif_name;
|
|
$users[$notification->notif_id] = (object)$userObject;
|
|
}
|
|
}
|
|
$sendMail = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if($sendMail){
|
|
Mail::to($users)->send(new AlertBr($couponSeuil, $couponDiffusion, $site->site_nom));
|
|
}
|
|
}
|
|
}
|
|
if($sendGlobal) {
|
|
$superadmins = array();
|
|
$admins = User::where(['roles' => 'superadmin'])->get();
|
|
foreach ($admins as $admin) {
|
|
$adminObject = [];
|
|
$adminObject['email'] = $admin->email;
|
|
$adminObject['name'] = $admin->name;
|
|
array_push($superadmins, (object)$adminObject);
|
|
}
|
|
Mail::to($superadmins)->send(new AlertBrAdmin($couponSeuilGlobal, $couponDiffusionGlobal));
|
|
}
|
|
})->weekdays()->at('7:00');
|
|
|
|
// ---- Sauvegarde des stats tous les jours a 23:45
|
|
$schedule->call(function () {
|
|
$last_stat = Statistique::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');
|
|
}
|
|
$campagnes = Campagne::all();
|
|
foreach ($campagnes as $campagne) {
|
|
$coupons = $campagne->coupons()->get();
|
|
foreach ($coupons as $coupon) {
|
|
if ($campagne->camp_type == 0 || $campagne->camp_type == 2) { //Calcul des BR consommé pour les murs
|
|
$count = Mur::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')])->count();
|
|
} 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;
|
|
}
|
|
}
|
|
// ---- Insertion en base de stats
|
|
if($count > 0){
|
|
$stat = new Statistique();
|
|
$stat->stat_campId = $campagne->camp_id;
|
|
$stat->stat_couponId = $coupon->coupon_id;
|
|
$stat->stat_couponPrinted = $count;
|
|
|
|
$stat->save();
|
|
}
|
|
}
|
|
}
|
|
})->everyFifteenMinutes();
|
|
|
|
}
|
|
|
|
/**
|
|
* Register the commands for the application.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function commands()
|
|
{
|
|
$this->load(__DIR__.'/Commands');
|
|
|
|
require base_path('routes/console.php');
|
|
}
|
|
}
|