'Draft', self::Submitted => 'Submitted', self::Approved => 'Approved', self::Rejected => 'Rejected', self::Sent => 'Sent', self::PartiallyPaid => 'Partially Paid', self::Paid => 'Paid', self::Overdue => 'Overdue', }; } public function allowedTransitions(): array { return match ($this) { self::Draft => [self::Submitted], self::Submitted => [self::Approved, self::Rejected], self::Approved => [self::Sent], self::Rejected => [self::Draft], self::Sent => [self::PartiallyPaid, self::Paid, self::Overdue], self::PartiallyPaid => [self::Paid, self::Overdue], self::Paid => [], self::Overdue => [self::PartiallyPaid, self::Paid], }; } public function color(): string { return match ($this) { self::Draft => 'gray', self::Submitted => 'blue', self::Approved => 'green', self::Rejected => 'red', self::Sent => 'indigo', self::PartiallyPaid => 'amber', self::Paid => 'emerald', self::Overdue => 'red', }; } }