isMethod('POST') ? Permission::EMPLOYEES_CREATE : Permission::EMPLOYEES_UPDATE; return $this->user()?->can($permission->value) ?? false; } /** * @return array */ public function rules(): array { $isOwner = $this->role === Role::OWNER->value; $rules = [ 'email' => ['required', 'email', 'max:100', Rule::unique('users', 'email')->ignore($this->route('user')?->id)], 'username' => ['required', 'string', 'max:20', 'alpha_dash', Rule::unique('users', 'username')->ignore($this->route('user')?->id)], 'full_name' => ['required', 'string', 'max:200'], 'phone_number' => ['nullable', 'string', 'max:20', new PhoneNumber], 'gender' => ['nullable', Rule::enum(Gender::class)], 'birth_date' => ['nullable', 'date', 'before:today'], 'address' => ['nullable', 'string'], 'role' => ['required', Rule::in(Role::assignableValues())], ]; if (! $isOwner) { $rules['join_date'] = ['required', 'date']; $rules['employment_status'] = ['required', Rule::enum(EmploymentStatus::class)]; $rules['base_salary'] = ['required', 'integer', 'min:0']; } return $rules; } /** * @return array */ public function attributes(): array { return [ 'email' => 'email', 'username' => 'username', 'full_name' => 'nama lengkap', 'phone_number' => 'nomor telepon', 'gender' => 'jenis kelamin', 'birth_date' => 'tanggal lahir', 'address' => 'alamat', 'role' => 'role', 'join_date' => 'tanggal bergabung', 'employment_status' => 'status kepegawaian', 'base_salary' => 'gaji pokok', ]; } }