237 lines
8.8 KiB
PHP
237 lines
8.8 KiB
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
use App\Traits\ProvidesEnumOptions;
|
|
|
|
enum Role: string
|
|
{
|
|
use ProvidesEnumOptions;
|
|
|
|
case DEVELOPER = 'developer';
|
|
case OWNER = 'owner';
|
|
case ADMIN_TOKO = 'admin-toko';
|
|
case ADMIN_BAHAN_BAKU = 'admin-bahan-baku';
|
|
case DIREKTUR = 'direktur';
|
|
case MARKETING = 'marketing';
|
|
case NON_OPERATOR = 'non-operator';
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::DEVELOPER => 'Developer',
|
|
self::OWNER => 'Owner',
|
|
self::ADMIN_TOKO => 'Admin Toko',
|
|
self::ADMIN_BAHAN_BAKU => 'Admin Bahan Baku',
|
|
self::DIREKTUR => 'Direktur',
|
|
self::MARKETING => 'Marketing',
|
|
self::NON_OPERATOR => 'Non Operator',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @return list<Permission>
|
|
*/
|
|
public function permissions(): array
|
|
{
|
|
return match ($this) {
|
|
self::DEVELOPER, self::OWNER => Permission::cases(),
|
|
self::DIREKTUR => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::EMPLOYEES_CREATE,
|
|
Permission::EMPLOYEES_UPDATE,
|
|
Permission::EMPLOYEES_DELETE,
|
|
Permission::EMPLOYEES_RESET_PASSWORD,
|
|
Permission::EMPLOYEES_TOGGLE_STATUS,
|
|
Permission::ATTENDANCES_VIEW,
|
|
Permission::ATTENDANCES_CREATE,
|
|
Permission::ATTENDANCES_DELETE,
|
|
Permission::ATTENDANCES_MANAGE,
|
|
Permission::LEAVE_REQUESTS_VIEW,
|
|
Permission::LEAVE_REQUESTS_CREATE,
|
|
Permission::LEAVE_REQUESTS_UPDATE,
|
|
Permission::LEAVE_REQUESTS_DELETE,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
Permission::SUPPLIERS_VIEW,
|
|
Permission::SUPPLIERS_CREATE,
|
|
Permission::SUPPLIERS_UPDATE,
|
|
Permission::SUPPLIERS_DELETE,
|
|
Permission::CUSTOMERS_VIEW,
|
|
Permission::CUSTOMERS_CREATE,
|
|
Permission::CUSTOMERS_UPDATE,
|
|
Permission::CUSTOMERS_DELETE,
|
|
Permission::PRODUCTS_VIEW,
|
|
Permission::PRODUCTS_CREATE,
|
|
Permission::PRODUCTS_UPDATE,
|
|
Permission::PRODUCTS_DELETE,
|
|
Permission::PRODUCTS_TOGGLE_STATUS,
|
|
Permission::RAW_MATERIALS_VIEW,
|
|
Permission::RAW_MATERIALS_CREATE,
|
|
Permission::RAW_MATERIALS_UPDATE,
|
|
Permission::RAW_MATERIALS_DELETE,
|
|
Permission::RAW_MATERIALS_TOGGLE_STATUS,
|
|
Permission::CASH_VIEW,
|
|
Permission::CASH_DEPOSIT,
|
|
Permission::CASH_UPDATE,
|
|
Permission::CASH_DELETE,
|
|
Permission::EXPENSES_VIEW,
|
|
Permission::EXPENSES_CREATE,
|
|
Permission::EXPENSES_UPDATE,
|
|
Permission::EXPENSES_DELETE,
|
|
Permission::EMPLOYEE_ADVANCES_VIEW,
|
|
Permission::EMPLOYEE_ADVANCES_CREATE,
|
|
Permission::EMPLOYEE_ADVANCES_UPDATE,
|
|
Permission::EMPLOYEE_ADVANCES_DELETE,
|
|
Permission::EMPLOYEE_ADVANCES_PAY,
|
|
Permission::PAYROLL_VIEW,
|
|
Permission::PAYROLL_PAY,
|
|
Permission::PAYROLL_ADJUST,
|
|
Permission::PAYROLL_CLOSE,
|
|
],
|
|
self::ADMIN_TOKO => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::EMPLOYEES_CREATE,
|
|
Permission::EMPLOYEES_UPDATE,
|
|
Permission::EMPLOYEES_RESET_PASSWORD,
|
|
Permission::EMPLOYEES_TOGGLE_STATUS,
|
|
Permission::ATTENDANCES_VIEW,
|
|
Permission::ATTENDANCES_CREATE,
|
|
Permission::ATTENDANCES_DELETE,
|
|
Permission::ATTENDANCES_MANAGE,
|
|
Permission::LEAVE_REQUESTS_VIEW,
|
|
Permission::LEAVE_REQUESTS_CREATE,
|
|
Permission::LEAVE_REQUESTS_UPDATE,
|
|
Permission::LEAVE_REQUESTS_DELETE,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
Permission::SUPPLIERS_VIEW,
|
|
Permission::SUPPLIERS_CREATE,
|
|
Permission::SUPPLIERS_UPDATE,
|
|
Permission::SUPPLIERS_DELETE,
|
|
Permission::CUSTOMERS_VIEW,
|
|
Permission::CUSTOMERS_CREATE,
|
|
Permission::CUSTOMERS_UPDATE,
|
|
Permission::CUSTOMERS_DELETE,
|
|
Permission::PRODUCTS_VIEW,
|
|
Permission::PRODUCTS_CREATE,
|
|
Permission::PRODUCTS_UPDATE,
|
|
Permission::PRODUCTS_DELETE,
|
|
Permission::PRODUCTS_TOGGLE_STATUS,
|
|
Permission::CASH_VIEW,
|
|
Permission::CASH_DEPOSIT,
|
|
Permission::CASH_UPDATE,
|
|
Permission::CASH_DELETE,
|
|
Permission::EXPENSES_VIEW,
|
|
Permission::EXPENSES_CREATE,
|
|
Permission::EXPENSES_UPDATE,
|
|
Permission::EXPENSES_DELETE,
|
|
Permission::EMPLOYEE_ADVANCES_VIEW,
|
|
Permission::EMPLOYEE_ADVANCES_CREATE,
|
|
Permission::EMPLOYEE_ADVANCES_UPDATE,
|
|
Permission::EMPLOYEE_ADVANCES_DELETE,
|
|
Permission::EMPLOYEE_ADVANCES_PAY,
|
|
Permission::PAYROLL_VIEW,
|
|
Permission::PAYROLL_PAY,
|
|
Permission::PAYROLL_ADJUST,
|
|
Permission::PAYROLL_CLOSE,
|
|
],
|
|
self::ADMIN_BAHAN_BAKU => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::ATTENDANCES_VIEW,
|
|
Permission::ATTENDANCES_CREATE,
|
|
Permission::LEAVE_REQUESTS_VIEW,
|
|
Permission::LEAVE_REQUESTS_CREATE,
|
|
Permission::LEAVE_REQUESTS_UPDATE,
|
|
Permission::LEAVE_REQUESTS_DELETE,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
Permission::SUPPLIERS_VIEW,
|
|
Permission::SUPPLIERS_CREATE,
|
|
Permission::SUPPLIERS_UPDATE,
|
|
Permission::SUPPLIERS_DELETE,
|
|
Permission::RAW_MATERIALS_VIEW,
|
|
Permission::RAW_MATERIALS_CREATE,
|
|
Permission::RAW_MATERIALS_UPDATE,
|
|
Permission::RAW_MATERIALS_DELETE,
|
|
Permission::RAW_MATERIALS_TOGGLE_STATUS,
|
|
],
|
|
self::MARKETING => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::ATTENDANCES_VIEW,
|
|
Permission::ATTENDANCES_CREATE,
|
|
Permission::LEAVE_REQUESTS_VIEW,
|
|
Permission::LEAVE_REQUESTS_CREATE,
|
|
Permission::LEAVE_REQUESTS_UPDATE,
|
|
Permission::LEAVE_REQUESTS_DELETE,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
Permission::SUPPLIERS_VIEW,
|
|
Permission::SUPPLIERS_CREATE,
|
|
Permission::SUPPLIERS_UPDATE,
|
|
Permission::SUPPLIERS_DELETE,
|
|
Permission::CUSTOMERS_VIEW,
|
|
Permission::CUSTOMERS_CREATE,
|
|
Permission::CUSTOMERS_UPDATE,
|
|
Permission::CUSTOMERS_DELETE,
|
|
Permission::PRODUCTS_VIEW,
|
|
],
|
|
self::NON_OPERATOR => [
|
|
Permission::DASHBOARD_VIEW,
|
|
],
|
|
};
|
|
}
|
|
|
|
public function isAssignable(): bool
|
|
{
|
|
return $this !== self::DEVELOPER;
|
|
}
|
|
|
|
/**
|
|
* @return list<array{value: string, label: string}>
|
|
*/
|
|
public static function assignableSelectOptions(): array
|
|
{
|
|
return collect(self::cases())
|
|
->filter(fn (self $role) => $role->isAssignable())
|
|
->map(fn (self $role) => [
|
|
'value' => $role->value,
|
|
'label' => $role->label(),
|
|
])
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function assignableValues(): array
|
|
{
|
|
return collect(self::cases())
|
|
->filter(fn (self $role) => $role->isAssignable())
|
|
->map(fn (self $role) => $role->value)
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function values(): array
|
|
{
|
|
return array_column(self::cases(), 'value');
|
|
}
|
|
}
|