feat: establish reservation portal foundation

This commit is contained in:
2026-08-04 15:24:08 +01:00
commit c96264ae96
226 changed files with 32232 additions and 0 deletions

View 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];
}
}

View 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);
}
}