55 lines
1.3 KiB
PHP
55 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
enum StreamFrequencyEnum: string
|
|
{
|
|
case ONCE = 'once';
|
|
case DAILY = 'daily';
|
|
case WEEKLY = 'weekly';
|
|
case BIWEEKLY = 'biweekly';
|
|
case MONTHLY = 'monthly';
|
|
case QUARTERLY = 'quarterly';
|
|
case YEARLY = 'yearly';
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::ONCE => 'One-time',
|
|
self::DAILY => 'Daily',
|
|
self::WEEKLY => 'Weekly',
|
|
self::BIWEEKLY => 'Bi-weekly',
|
|
self::MONTHLY => 'Monthly',
|
|
self::QUARTERLY => 'Quarterly',
|
|
self::YEARLY => 'Yearly',
|
|
};
|
|
}
|
|
|
|
public static function values(): array
|
|
{
|
|
return array_column(self::cases(), 'value');
|
|
}
|
|
|
|
public static function labels(): array
|
|
{
|
|
$labels = [];
|
|
foreach (self::cases() as $case) {
|
|
$labels[$case->value] = $case->label();
|
|
}
|
|
|
|
return $labels;
|
|
}
|
|
|
|
public function getMonthlyEquivalentMultiplier(): float
|
|
{
|
|
return match ($this) {
|
|
self::DAILY => 30.44, // Average days per month
|
|
self::WEEKLY => 4.33, // Average weeks per month
|
|
self::BIWEEKLY => 2.17,
|
|
self::MONTHLY => 1.0,
|
|
self::QUARTERLY => 1.0 / 3.0,
|
|
self::YEARLY => 1.0 / 12.0,
|
|
self::ONCE => 0.0,
|
|
};
|
|
}
|
|
}
|