39 lines
1.3 KiB
PHP
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])));
|
|
}
|
|
}
|
|
}
|