'Developer', self::OWNER => 'Owner', self::ADMIN_TOKO => 'Admin Toko', self::ADMIN_BAHAN_BAKU => 'Admin Bahan Baku', self::DIREKTUR => 'Direktur', self::MARKETING => 'Marketing', self::CASHIER => 'Kasir', self::NON_OPERATOR => 'Non Operator', }; } /** * @return list */ public function permissions(): array { return match ($this) { self::DEVELOPER, self::OWNER => array_values(array_filter( Permission::cases(), fn (Permission $permission) => ! in_array($permission, [ Permission::ATTENDANCES_CREATE, Permission::ATTENDANCES_DELETE, ], true) )), self::DIREKTUR => [ Permission::DASHBOARD_VIEW, Permission::EMPLOYEES_VIEW, 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::SUPPLIERS_VIEW, Permission::CUSTOMERS_VIEW, Permission::PRODUCTS_VIEW, Permission::RAW_MATERIALS_VIEW, Permission::PURCHASES_VIEW, Permission::ORDERS_VIEW, Permission::CUTTINGS_VIEW, Permission::CASH_VIEW, Permission::EXPENSES_VIEW, Permission::EMPLOYEE_ADVANCES_VIEW, Permission::EMPLOYEE_ADVANCES_CREATE, Permission::EMPLOYEE_ADVANCES_UPDATE, Permission::EMPLOYEE_ADVANCES_DELETE, Permission::EMPLOYEE_ADVANCES_PAY, Permission::PAYROLL_VIEW, ], self::ADMIN_TOKO => [ Permission::DASHBOARD_VIEW, Permission::CUTTINGS_VERIFY, Permission::ATTENDANCES_VIEW, Permission::ATTENDANCES_CREATE, Permission::ATTENDANCES_DELETE, 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::ORDERS_VIEW, Permission::ORDERS_CREATE, Permission::ORDERS_UPDATE, Permission::ORDERS_DELETE, Permission::ORDERS_SEND, Permission::ORDERS_COMPLETE, Permission::ORDERS_CANCEL, Permission::CASH_VIEW, Permission::CASH_DEPOSIT, Permission::CASH_WITHDRAW, 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_ADJUST, ], self::CASHIER => [ Permission::DASHBOARD_VIEW, Permission::ATTENDANCES_VIEW, Permission::ATTENDANCES_CREATE, Permission::ATTENDANCES_DELETE, Permission::LEAVE_REQUESTS_VIEW, Permission::LEAVE_REQUESTS_CREATE, Permission::LEAVE_REQUESTS_UPDATE, Permission::LEAVE_REQUESTS_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::ORDERS_VIEW, Permission::ORDERS_CREATE, Permission::ORDERS_UPDATE, Permission::ORDERS_DELETE, Permission::ORDERS_SEND, Permission::ORDERS_COMPLETE, Permission::ORDERS_CANCEL, 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_ADJUST, ], self::ADMIN_BAHAN_BAKU => [ Permission::DASHBOARD_VIEW, Permission::ATTENDANCES_VIEW, Permission::ATTENDANCES_CREATE, Permission::LEAVE_REQUESTS_VIEW, Permission::LEAVE_REQUESTS_CREATE, Permission::LEAVE_REQUESTS_UPDATE, Permission::LEAVE_REQUESTS_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, Permission::PRODUCTS_VIEW, Permission::CUTTINGS_VIEW, Permission::CUTTINGS_CREATE, Permission::CUTTINGS_UPDATE, Permission::CUTTINGS_DELETE, Permission::CUTTINGS_COMPLETE, Permission::PURCHASES_VIEW, Permission::PURCHASES_CREATE, Permission::PURCHASES_UPDATE, Permission::PURCHASES_DELETE, Permission::EMPLOYEE_ADVANCES_VIEW, Permission::EMPLOYEE_ADVANCES_CREATE, Permission::EMPLOYEE_ADVANCES_UPDATE, Permission::EMPLOYEE_ADVANCES_DELETE, Permission::EMPLOYEE_ADVANCES_PAY, Permission::PAYROLL_VIEW, ], self::MARKETING => [ Permission::DASHBOARD_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::CUSTOMERS_VIEW, Permission::PRODUCTS_VIEW, Permission::ORDERS_VIEW, Permission::EMPLOYEE_ADVANCES_VIEW, Permission::EMPLOYEE_ADVANCES_CREATE, Permission::EMPLOYEE_ADVANCES_UPDATE, Permission::EMPLOYEE_ADVANCES_DELETE, Permission::EMPLOYEE_ADVANCES_PAY, Permission::PAYROLL_VIEW, ], self::NON_OPERATOR => [ Permission::DASHBOARD_VIEW, Permission::DASHBOARD_VIEW, Permission::ATTENDANCES_VIEW, Permission::ATTENDANCES_CREATE, Permission::LEAVE_REQUESTS_VIEW, Permission::LEAVE_REQUESTS_CREATE, Permission::LEAVE_REQUESTS_UPDATE, Permission::LEAVE_REQUESTS_DELETE, Permission::EMPLOYEE_ADVANCES_VIEW, Permission::EMPLOYEE_ADVANCES_CREATE, Permission::EMPLOYEE_ADVANCES_UPDATE, Permission::EMPLOYEE_ADVANCES_DELETE, Permission::EMPLOYEE_ADVANCES_PAY, Permission::PAYROLL_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'); } }