diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index fe4a23a..4745ce3 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -3,6 +3,7 @@ namespace App\Console; use App\Jobs\AutoCloseOldTickets; +use App\Jobs\WarnBeforeAutoCloseTicket; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -25,6 +26,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { $schedule->job(AutoCloseOldTickets::class)->dailyAt('08:00'); + $schedule->job(WarnBeforeAutoCloseTicket::class)->dailyAt('08:05'); } /** diff --git a/app/Jobs/AutoCloseOldTickets.php b/app/Jobs/AutoCloseOldTickets.php index 984587e..8e06cba 100644 --- a/app/Jobs/AutoCloseOldTickets.php +++ b/app/Jobs/AutoCloseOldTickets.php @@ -17,12 +17,14 @@ class AutoCloseOldTickets */ public function handle() { - $message = 'En l\'abscence d\'activitée depuis 15 jours ce ticket est automatiquement clos et archivé.'; - $tickets = Ticket::where('status', TicketStatus::production()) - ->orWhere('status', TicketStatus::processed()) - ->where('updated_at', '<', Carbon::now()->subDays(15)) - ->whereDoesntHave('messages', function ($q) { - $q->where('updated_at', '<', Carbon::now()->subDays(15)); + $limitDays = 15; + $message = 'En l\'absence d\'activitée depuis 15 jours ce ticket est automatiquement clos et archivé.'; + $tickets = Ticket::where(function ($q) { + $q->where('status', TicketStatus::production()) + ->orWhere('status', TicketStatus::processed()); + })->whereDate('updated_at', '<=', Carbon::now()->subDays($limitDays)) + ->whereDoesntHave('messages', function ($q) use ($limitDays) { + $q->whereDate('updated_at', '>', Carbon::now()->subDays($limitDays)); })->get(); foreach ($tickets as $ticket) { $oldStatus = $ticket->status; diff --git a/app/Jobs/WarnBeforeAutoCloseTicket.php b/app/Jobs/WarnBeforeAutoCloseTicket.php new file mode 100644 index 0000000..6609c37 --- /dev/null +++ b/app/Jobs/WarnBeforeAutoCloseTicket.php @@ -0,0 +1,44 @@ +where('status', TicketStatus::production()) + ->orWhere('status', TicketStatus::processed()); + })->whereDate('updated_at', '<=', Carbon::now()->subDays($warningDays)) + ->whereDoesntHave('messages', function ($q) use ($warningDays) { + $q->whereDate('updated_at', '>', Carbon::now()->subDays($warningDays)); + })->get(); + foreach ($tickets as $ticket) { + $date = $ticket->messages->sortByDesc('updated_at')->first()->updated_at ?? $ticket->updated_at; + $limitDate = $date->addDays($warningDays); + if (intval(Carbon::now()->diff($limitDate)->format('%a')) >= $warningDays) { + event(new NotifySubscriptions($ticket, $messageToAll, collect($ticket->user))); + } + event(new NotifyTicketCreator($ticket, sprintf( + $messageToUser, + intval($date->diff(Carbon::now()->subDays($warningDays))->format('%a') + 1) + ))); + } + } +} diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php index 8d7db72..886f1c5 100644 --- a/app/Mail/TicketUpdate.php +++ b/app/Mail/TicketUpdate.php @@ -39,7 +39,7 @@ class TicketUpdate extends Mailable { $ticket = $this->ticket; $corpsMaj = Utils::plainToHtml($this->corpsMaj); - return $this->subject("[SupportWeb] Le ticket n°" . $ticket->id . " à été mis à jour") + return $this->subject("[SupportWeb][{$ticket->site->name}] Ticket n°$ticket->id") ->view('emails.ticket-update', compact('ticket', 'corpsMaj')); } }