diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 7c889cb..fe4a23a 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,6 +2,7 @@ namespace App\Console; +use App\Jobs\AutoCloseOldTickets; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -23,6 +24,7 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { + $schedule->job(AutoCloseOldTickets::class)->dailyAt('08:00'); } /** diff --git a/app/Events/TicketStatusChanged.php b/app/Events/TicketStatusChanged.php index 9e786d5..fb4c471 100644 --- a/app/Events/TicketStatusChanged.php +++ b/app/Events/TicketStatusChanged.php @@ -22,15 +22,19 @@ class TicketStatusChanged public $status; + /** @var string */ + public $message; + /** * Create a new event instance. * * @return void */ - public function __construct(Ticket $ticket, $status, User $user = null) + public function __construct(Ticket $ticket, $status, User $user = null, string $message = null) { $this->ticket = $ticket; $this->status = $status; $this->user = $user; + $this->message = $message; } } diff --git a/app/Jobs/AutoCloseOldTickets.php b/app/Jobs/AutoCloseOldTickets.php new file mode 100644 index 0000000..1279d11 --- /dev/null +++ b/app/Jobs/AutoCloseOldTickets.php @@ -0,0 +1,37 @@ +orWhere('status', TicketStatus::processed()) + ->where('updated_at', '<', Carbon::now()->subDays(15)) + ->whereDoesntHave('messages', function ($q) { + $q->where('updated_at', '<', Carbon::now()->subDays(15)); + })->get(); + foreach ($tickets as $ticket) { + $oldStatus = $ticket->status; + $ticket->status = TicketStatus::archived(); + $ticket->saveQuietly(); + if (!$ticket->subscriptions->contains($ticket->user)) { + event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); + } + event(new NotifySubscriptions($ticket, $message)); + } + } +} diff --git a/app/Listeners/AddStatusMessages.php b/app/Listeners/AddStatusMessages.php index e0bc59d..64f3377 100644 --- a/app/Listeners/AddStatusMessages.php +++ b/app/Listeners/AddStatusMessages.php @@ -17,7 +17,9 @@ class AddStatusMessages { $message = new Message(); $message->ticket_id = $event->ticket->id; - if ($event->user) { + if ($event->message) { + $message->message = $event->message; + } elseif ($event->user) { // phpcs:ignore Generic.Files.LineLength.TooLong $message->message = "{$event->user->name} a modifié le statut en {$event->ticket->status->label}"; } else {