44 lines
1.6 KiB
PHP
44 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Domain\Reservations\Enums;
|
|
|
|
enum ReservationStatus: string
|
|
{
|
|
case Draft = 'draft';
|
|
case PendingApproval = 'pending_approval';
|
|
case AwaitingInformation = 'awaiting_information';
|
|
case Approved = 'approved';
|
|
case Ready = 'ready';
|
|
case Delivered = 'delivered';
|
|
case InUse = 'in_use';
|
|
case Returned = 'returned';
|
|
case Completed = 'completed';
|
|
case Rejected = 'rejected';
|
|
case Cancelled = 'cancelled';
|
|
case Expired = 'expired';
|
|
case NoShow = 'no_show';
|
|
case Overdue = 'overdue';
|
|
case Incident = 'incident';
|
|
|
|
/** @return list<self> */
|
|
public function allowedTransitions(): array
|
|
{
|
|
return match ($this) {
|
|
self::Draft => [self::PendingApproval, self::Cancelled],
|
|
self::PendingApproval => [self::AwaitingInformation, self::Approved, self::Rejected, self::Cancelled, self::Expired],
|
|
self::AwaitingInformation => [self::PendingApproval, self::Rejected, self::Cancelled, self::Expired],
|
|
self::Approved => [self::Ready, self::Cancelled],
|
|
self::Ready => [self::Delivered, self::NoShow, self::Cancelled],
|
|
self::Delivered => [self::InUse, self::Returned, self::Overdue, self::Incident],
|
|
self::InUse, self::Overdue, self::Incident => [self::Returned],
|
|
self::Returned => [self::Completed, self::Incident],
|
|
self::Completed, self::Rejected, self::Cancelled, self::Expired, self::NoShow => [],
|
|
};
|
|
}
|
|
|
|
public function canTransitionTo(self $next): bool
|
|
{
|
|
return in_array($next, $this->allowedTransitions(), true);
|
|
}
|
|
}
|