Files
zemailnator/app/Models/Ticket.php
2025-11-14 02:01:01 -08:00

71 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use Exception;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Ticket extends Model
{
use HasFactory;
protected $fillable = [
'user_id', 'ticket_id', 'subject', 'message', 'status', 'last_response_at', 'ip_address',
];
protected static function boot()
{
parent::boot();
static::creating(function ($ticket): void {
if (empty($ticket->ticket_id)) {
$ticket->ticket_id = 'TICKET-'.strtoupper(Str::random(6));
}
});
}
public function user()
{
return $this->belongsTo(User::class);
}
public function responses()
{
return $this->hasMany(TicketResponse::class);
}
protected $casts = [
'created_at' => 'datetime', // Ensures created_at is a Carbon instance
'updated_at' => 'datetime', // Ensures updated_at is a Carbon instance
'last_response_at' => 'datetime', // Cast last_response_at to Carbon instance
];
public static function autoClose(): bool
{
try {
$tickets = Ticket::query()->where('status', 'pending')
->where('last_response_at', '<', now()->subDays(3))
->get();
if (count($tickets) > 0) {
foreach ($tickets as $ticket) {
$ticket->status = 'closed';
$ticket->save();
TicketResponse::query()->create([
'ticket_id' => $ticket->id,
'user_id' => 1,
'response' => 'This ticket has been auto-closed due to inactivity.',
]);
}
}
return true;
} catch (Exception) {
return false;
}
}
}