Files
portal-api/app/Enums/Product/ProductBillingCycle.php

58 lines
1.5 KiB
PHP

<?php
namespace App\Enums\Product;
enum ProductBillingCycle: string
{
case ONE_TIME = 'onetime';
case MONTHLY = 'monthly';
case QUARTERLY = 'quarterly';
case SEMI_ANNUALLY = 'semiannually';
case ANNUALLY = 'annually';
case BIENNIALLY = 'biennially';
case TRIENNIALLY = 'triennially';
public function label(): string
{
return match ($this) {
self::ONE_TIME => 'One Time',
self::MONTHLY => 'Monthly',
self::QUARTERLY => 'Quarterly',
self::SEMI_ANNUALLY => 'Semi Annually',
self::ANNUALLY => 'Annually',
self::BIENNIALLY => 'Biennially',
self::TRIENNIALLY => 'Triennially',
};
}
public function months(): int
{
return match ($this) {
self::ONE_TIME => 0,
self::MONTHLY => 1,
self::QUARTERLY => 3,
self::SEMI_ANNUALLY => 6,
self::ANNUALLY => 12,
self::BIENNIALLY => 24,
self::TRIENNIALLY => 36,
};
}
/**
* Resolve from the legacy admin integer billing code:
* 2 → monthly, 3 → quarterly, 4 → semi_annually, 5 → annually
*/
public static function fromLegacyCode(int $code): self
{
return match ($code) {
2 => self::MONTHLY,
3 => self::QUARTERLY,
4 => self::SEMI_ANNUALLY,
5 => self::ANNUALLY,
6 => self::BIENNIALLY,
7 => self::TRIENNIALLY,
default => self::MONTHLY,
};
}
}