ldc-supportweb/app/Jobs/AutoCloseOldTickets.php
Jérémy Munsch e8d0ab76f1 Fix #12
2023-04-25 09:24:47 +00:00

39 lines
1.3 KiB
PHP

<?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;
$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::waitingValidation())
})->whereDate('updated_at', '<=', Carbon::now()->subDays($limitDays))
->whereDoesntHave('messages', function ($q) use ($limitDays) {
$q->whereDate('updated_at', '>', Carbon::now()->subDays($limitDays));
})->get();
/** @var \App\Models\Ticket $ticket */
foreach ($tickets as $ticket) {
/** @var \App\Enums\TicketStatus */
$oldStatus = $ticket->status;
$ticket->status = TicketStatus::archived();
$ticket->saveQuietly();
event(new TicketStatusChanged($ticket, $oldStatus, null, $message));
event(new NotifySubscriptions($ticket, $message, collect([$ticket->user])));
}
}
}