From 8aa4e83cd88df6551ddfdcaa6c2714f258488eee Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 6 Aug 2026 17:18:53 +0700 Subject: [PATCH] feat: enhance role selection in Employee edit page; add conditional rendering based on view permissions and update role filtering in EmployeeService --- .../Admin/HR/EmployeeController.php | 9 ++- app/Services/Admin/HR/EmployeeService.php | 1 + resources/js/pages/admin/hr/employee/edit.tsx | 64 ++++++++++--------- routes/web.php | 4 +- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/app/Http/Controllers/Admin/HR/EmployeeController.php b/app/Http/Controllers/Admin/HR/EmployeeController.php index 46ae2fe..c695f26 100644 --- a/app/Http/Controllers/Admin/HR/EmployeeController.php +++ b/app/Http/Controllers/Admin/HR/EmployeeController.php @@ -36,7 +36,9 @@ public function create(): Response return Inertia::render('admin/hr/employee/create', [ 'roles' => $this->service->canViewAll() - ? Role::where('name', '!=', 'Developer')->get(['id', 'name']) + ? Role::where('name', '!=', 'Developer') + ->when($this->service->shouldHideAdminBahanBaku(), fn ($q) => $q->where('name', '!=', 'admin-bahan-baku')) + ->get(['id', 'name']) : Role::where('name', '=', $user->roles->first()?->name)->get(['id', 'name']), 'canViewAll' => $this->service->canViewAll(), ]); @@ -57,7 +59,10 @@ public function edit(User $user): Response return Inertia::render('admin/hr/employee/edit', [ 'employee' => $user, - 'roles' => Role::where('name', '!=', 'Developer')->get(['id', 'name']), + 'roles' => Role::where('name', '!=', 'Developer') + ->when($this->service->shouldHideAdminBahanBaku(), fn ($q) => $q->where('name', '!=', 'admin-bahan-baku')) + ->get(['id', 'name']), + 'canViewAll' => $this->service->canViewAll(), ]); } diff --git a/app/Services/Admin/HR/EmployeeService.php b/app/Services/Admin/HR/EmployeeService.php index 2da4190..e2d5a2a 100644 --- a/app/Services/Admin/HR/EmployeeService.php +++ b/app/Services/Admin/HR/EmployeeService.php @@ -57,6 +57,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $userRoles = auth()->user()->roles->pluck('name'); $q->whereHas('roles', fn ($rq) => $rq->whereIn('name', $userRoles)); }) + ->when($this->shouldHideAdminBahanBaku(), fn ($q) => $q->whereDoesntHave('roles', fn ($rq) => $rq->where('name', 'admin-bahan-baku'))) ->when($search, fn ($q) => $q->whereHas('userProfile', fn ($uq) => $uq->where('full_name', 'like', "%{$search}%"))) ->when($filters['employment_status'] ?? null, fn ($q, $status) => $q->whereHas('employee', fn ($eq) => $eq->where('employment_status', $status))) ->when(isset($filters['is_active']) && $filters['is_active'] !== '', fn ($q) => $q->where('is_active', filter_var($filters['is_active'], FILTER_VALIDATE_BOOLEAN))) diff --git a/resources/js/pages/admin/hr/employee/edit.tsx b/resources/js/pages/admin/hr/employee/edit.tsx index a926396..a78e6f1 100644 --- a/resources/js/pages/admin/hr/employee/edit.tsx +++ b/resources/js/pages/admin/hr/employee/edit.tsx @@ -161,35 +161,41 @@ export default function EmployeeEdit({ employee, roles, canViewAll }: Props) { * - r.name} - value={selectedRole} - onValueChange={(value) => - setSelectedRole(value) - } - > - - - - Tidak ada role - ditemukan. - - - {(role) => ( - - {role.name} - - )} - - - + {canViewAll ? ( + r.name} + value={selectedRole} + onValueChange={(value) => + setSelectedRole(value) + } + > + + + + Tidak ada role + ditemukan. + + + {(role) => ( + + {role.name} + + )} + + + + ) : ( +
+ {selectedRole?.name ?? '-'} +
+ )} diff --git a/routes/web.php b/routes/web.php index a911425..6657c1d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -101,8 +101,8 @@ Route::post('employees/{user}/reset-password', [EmployeeController::class, 'resetPassword'])->name('employees.reset-password')->middleware('permission:employees.reset_password'); Route::get('attendances', [AttendanceController::class, 'index'])->name('attendances.index')->middleware('permission:attendances.view'); - Route::post('attendances', [AttendanceController::class, 'store'])->name('attendances.store')->middleware('permission:attendances.manage'); - Route::put('attendances/{attendance}', [AttendanceController::class, 'update'])->name('attendances.update')->middleware('permission:attendances.manage'); + Route::post('attendances', [AttendanceController::class, 'store'])->name('attendances.store')->middleware('permission:attendances.create'); + Route::put('attendances/{attendance}', [AttendanceController::class, 'update'])->name('attendances.update')->middleware('permission:attendances.create'); Route::get('attendances/by-date', [AttendanceController::class, 'byDate'])->name('attendances.by-date')->middleware('permission:attendances.view'); Route::resource('leave-requests', LeaveRequestController::class)->except(['show', 'create', 'edit'])->middleware('permission:leave_requests.view|leave_requests.create|leave_requests.update|leave_requests.delete');