Files
ladill-queue/app/Models/Ticket.php
T
isaaccladandCursor d2f5ff11d2
Deploy Ladill Queue / deploy (push) Successful in 40s
Fix queue handoff so tickets keep their number across services.
Handoff now frees the counter, ends the service session, and requeues
the same ticket for the next department — critical for hospital flows
like doctor → lab.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-14 21:22:01 +00:00

75 lines
2.1 KiB
PHP

<?php
namespace App\Models;
use App\Models\Concerns\BelongsToOwner;
use App\Models\Concerns\UsesUuidRouteKey;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
class Ticket extends Model
{
use BelongsToOwner, SoftDeletes, UsesUuidRouteKey;
protected $table = 'queue_tickets';
protected $fillable = [
'uuid', 'owner_ref', 'organization_id', 'branch_id', 'service_queue_id', 'counter_id',
'ticket_number', 'status', 'priority', 'position', 'customer_name', 'customer_phone',
'customer_email', 'source', 'qr_token', 'barcode', 'estimated_wait_seconds',
'issued_at', 'called_at', 'serving_started_at', 'completed_at', 'metadata',
];
protected function casts(): array
{
return [
'metadata' => 'array',
'issued_at' => 'datetime',
'called_at' => 'datetime',
'serving_started_at' => 'datetime',
'completed_at' => 'datetime',
];
}
protected static function booted(): void
{
static::creating(function (self $ticket) {
$ticket->uuid ??= (string) Str::uuid();
$ticket->qr_token ??= Str::random(32);
});
}
public function organization(): BelongsTo
{
return $this->belongsTo(Organization::class, 'organization_id');
}
public function branch(): BelongsTo
{
return $this->belongsTo(Branch::class, 'branch_id');
}
public function serviceQueue(): BelongsTo
{
return $this->belongsTo(ServiceQueue::class, 'service_queue_id');
}
public function counter(): BelongsTo
{
return $this->belongsTo(Counter::class, 'counter_id');
}
public function events(): HasMany
{
return $this->hasMany(TicketEvent::class, 'ticket_id');
}
public function transfers(): HasMany
{
return $this->hasMany(TicketTransfer::class, 'ticket_id')->orderByDesc('transferred_at');
}
}