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 $counts = Mur::selectRaw('count(*) as count, DATE_FORMAT(mur_createdate, "%Y-%m-%d") as date') ->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')]) ->groupBy(DB::raw("DATE_FORMAT(mur_createdate, '%Y-%m-%d')")) ->pluck('count', 'date'); foreach($counts as $date => $count){ $stat = new Statistique(); $stat->stat_campId = $campagne->camp_id; $stat->stat_couponId = $coupon->coupon_id; $stat->stat_couponPrinted = $count; $stat->created_at = $date; $stat->save(); } } // 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; // } // } } } })->everyFifteenMinutes(); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }