'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 */ 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 */ 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 */ 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 */ public static function values(): array { return array_column(self::cases(), 'value'); } }