57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Toby\Domain\Enums;
 | 
						|
 | 
						|
enum VacationRequestState: string
 | 
						|
{
 | 
						|
    case CREATED = "created";
 | 
						|
    case CANCELED = "canceled";
 | 
						|
    case REJECTED = "rejected";
 | 
						|
    case APPROVED = "approved";
 | 
						|
    case WAITING_FOR_TECHNICAL = "waiting_for_technical";
 | 
						|
    case WAITING_FOR_ADMINISTRATIVE = "waiting_for_administrative";
 | 
						|
    case ACCEPTED_BY_TECHNICAL = "accepted_by_technical";
 | 
						|
    case ACCEPTED_BY_ADMINSTRATIVE = "accepted_by_administrative";
 | 
						|
 | 
						|
    public function label(): string
 | 
						|
    {
 | 
						|
        return __($this->value);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function pendingStates(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            self::CREATED,
 | 
						|
            self::WAITING_FOR_TECHNICAL,
 | 
						|
            self::WAITING_FOR_ADMINISTRATIVE,
 | 
						|
            self::ACCEPTED_BY_TECHNICAL,
 | 
						|
            self::ACCEPTED_BY_ADMINSTRATIVE,
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public static function successStates(): array
 | 
						|
    {
 | 
						|
        return [self::APPROVED];
 | 
						|
    }
 | 
						|
 | 
						|
    public static function failedStates(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            self::REJECTED,
 | 
						|
            self::CANCELED,
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public static function filterByStatus(string $filter): array
 | 
						|
    {
 | 
						|
        return match ($filter) {
 | 
						|
            "pending" => VacationRequestState::pendingStates(),
 | 
						|
            "success" => VacationRequestState::successStates(),
 | 
						|
            "failed" => VacationRequestState::failedStates(),
 | 
						|
            default => VacationRequestState::cases(),
 | 
						|
        };
 | 
						|
    }
 | 
						|
}
 |