74 lines
2.2 KiB
PHP
74 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
/**
|
|
* Contract Type Enum — Loại hợp đồng chi tiết (subtype của category)
|
|
*
|
|
* Ownership: deposit (đặt cọc), purchase (mua bán), transfer (chuyển nhượng)
|
|
* Business: rental (cho thuê), self_business (tự doanh), bcc (hợp tác KD)
|
|
*
|
|
* Để thêm loại mới:
|
|
* 1. Thêm case mới vào enum + gán category phù hợp trong category()
|
|
* 2. Thêm label trong lang/vi/enums.php và lang/en/enums.php
|
|
* 3. Reload browser
|
|
*/
|
|
enum ContractType: string
|
|
{
|
|
case DEPOSIT = 'deposit';
|
|
case PURCHASE = 'purchase';
|
|
case TRANSFER = 'transfer';
|
|
case RENTAL = 'rental';
|
|
case SELF_BUSINESS = 'self_business';
|
|
case BCC = 'bcc';
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::DEPOSIT => __('enums.contract_type.deposit'),
|
|
self::PURCHASE => __('enums.contract_type.purchase'),
|
|
self::TRANSFER => __('enums.contract_type.transfer'),
|
|
self::RENTAL => __('enums.contract_type.rental'),
|
|
self::SELF_BUSINESS => __('enums.contract_type.self_business'),
|
|
self::BCC => __('enums.contract_type.bcc'),
|
|
};
|
|
}
|
|
|
|
public function color(): string
|
|
{
|
|
return match ($this) {
|
|
self::DEPOSIT => 'warning',
|
|
self::PURCHASE => 'success',
|
|
self::TRANSFER => 'info',
|
|
self::RENTAL => 'info',
|
|
self::SELF_BUSINESS => 'warning',
|
|
self::BCC => 'danger',
|
|
};
|
|
}
|
|
|
|
public function category(): ContractCategory
|
|
{
|
|
return match ($this) {
|
|
self::DEPOSIT, self::PURCHASE, self::TRANSFER => ContractCategory::OWNERSHIP,
|
|
self::RENTAL, self::SELF_BUSINESS, self::BCC => ContractCategory::BUSINESS,
|
|
};
|
|
}
|
|
|
|
public static function options(): array
|
|
{
|
|
return collect(self::cases())->mapWithKeys(fn ($case) => [
|
|
$case->value => $case->label(),
|
|
])->toArray();
|
|
}
|
|
|
|
public static function ownershipCases(): array
|
|
{
|
|
return [self::DEPOSIT, self::PURCHASE, self::TRANSFER];
|
|
}
|
|
|
|
public static function businessCases(): array
|
|
{
|
|
return [self::RENTAL, self::SELF_BUSINESS, self::BCC];
|
|
}
|
|
}
|