feat: establish reservation portal foundation
This commit is contained in:
20
app/Domain/Reservations/Enums/ReservationItemStatus.php
Normal file
20
app/Domain/Reservations/Enums/ReservationItemStatus.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domain\Reservations\Enums;
|
||||
|
||||
enum ReservationItemStatus: string
|
||||
{
|
||||
case Held = 'held';
|
||||
case Reserved = 'reserved';
|
||||
case Ready = 'ready';
|
||||
case Delivered = 'delivered';
|
||||
case Returned = 'returned';
|
||||
case Cancelled = 'cancelled';
|
||||
case Failed = 'failed';
|
||||
|
||||
/** @return list<string> */
|
||||
public static function blockingValues(): array
|
||||
{
|
||||
return [self::Held->value, self::Reserved->value, self::Ready->value, self::Delivered->value];
|
||||
}
|
||||
}
|
||||
43
app/Domain/Reservations/Enums/ReservationStatus.php
Normal file
43
app/Domain/Reservations/Enums/ReservationStatus.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user