ldc-supportweb/app/Jobs/AutoCloseOldTickets.php

40 lines
1.3 KiB
PHP
Raw Permalink Normal View History

2021-09-28 14:53:43 +02:00
<?php
namespace App\Jobs;
use App\Enums\TicketStatus;
use App\Events\NotifySubscriptions;
use App\Events\TicketStatusChanged;
use App\Models\Ticket;
use Illuminate\Support\Carbon;
class AutoCloseOldTickets
{
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$limitDays = 15;
2022-03-29 16:57:54 +02:00
$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));
2021-09-28 14:53:43 +02:00
})->get();
2022-03-29 16:57:54 +02:00
/** @var \App\Models\Ticket $ticket */
2021-09-28 14:53:43 +02:00
foreach ($tickets as $ticket) {
2022-08-30 13:21:07 +00:00
/** @var \App\Enums\TicketStatus */
2022-03-29 16:57:54 +02:00
$oldStatus = $ticket->status;
2021-09-28 14:53:43 +02:00
$ticket->status = TicketStatus::archived();
$ticket->saveQuietly();
2021-09-29 10:25:07 +02:00
event(new TicketStatusChanged($ticket, $oldStatus, null, $message));
event(new NotifySubscriptions($ticket, $message, collect([$ticket->user])));
2021-09-28 14:53:43 +02:00
}
}
}