diff --git a/app/Http/Controllers/Admin/Hr/EmployeeController.php b/app/Http/Controllers/Admin/Hr/EmployeeController.php index 1771b10..4f1893b 100644 --- a/app/Http/Controllers/Admin/Hr/EmployeeController.php +++ b/app/Http/Controllers/Admin/Hr/EmployeeController.php @@ -28,13 +28,27 @@ public function __construct( public function index(Request $request): Response { $tableQuery = $this->parseDataTableQuery($request); + $role = $request->string('role')->toString(); + $gender = $request->string('gender')->toString(); $employmentStatus = $request->string('employment_status')->toString(); + $isActive = $request->string('is_active')->toString(); return Inertia::render('admin/hr/employees/Index', [ - 'employees' => $this->employeeService->paginateForIndex($tableQuery, $employmentStatus), + 'employees' => $this->employeeService->paginateForIndex( + $tableQuery, + $role, + $gender, + $employmentStatus, + $isActive + ), 'filters' => $this->dataTableFilters($tableQuery, [ + 'role' => $role, + 'gender' => $gender, 'employment_status' => $employmentStatus, + 'is_active' => $isActive, ]), + 'roles' => Role::assignableSelectOptions(), + 'genders' => Gender::selectOptions(), 'employmentStatuses' => EmploymentStatus::selectOptions(), ]); } diff --git a/app/Services/Hr/EmployeeService.php b/app/Services/Hr/EmployeeService.php index e333ca2..ab3a5e1 100644 --- a/app/Services/Hr/EmployeeService.php +++ b/app/Services/Hr/EmployeeService.php @@ -15,8 +15,13 @@ class EmployeeService /** * @param array{search: string, sort: string, direction: 'asc'|'desc'} $tableQuery */ - public function paginateForIndex(array $tableQuery, string $employmentStatus): LengthAwarePaginator - { + public function paginateForIndex( + array $tableQuery, + string $role = '', + string $gender = '', + string $employmentStatus = '', + string $isActive = '', + ): LengthAwarePaginator { $query = User::query() ->with(['profile', 'employee', 'roles']) ->whereHas('employee') @@ -31,9 +36,21 @@ public function paginateForIndex(array $tableQuery, string $employmentStatus): L }); }); }) + ->when( + $role !== '', + fn ($query) => $query->whereHas('roles', fn ($query) => $query->where('name', $role)) + ) + ->when( + $gender !== '', + fn ($query) => $query->whereHas('profile', fn ($query) => $query->where('gender', $gender)) + ) ->when( $employmentStatus !== '', fn ($query) => $query->whereHas('employee', fn ($query) => $query->where('employment_status', $employmentStatus)) + ) + ->when( + $isActive !== '', + fn ($query) => $query->where('is_active', $isActive === '1') ); $this->applySorting($query, $tableQuery['sort'], $tableQuery['direction']); diff --git a/resources/js/components/data-table/DataTableToolbar.vue b/resources/js/components/data-table/DataTableToolbar.vue index 19d856c..b2ccb4c 100644 --- a/resources/js/components/data-table/DataTableToolbar.vue +++ b/resources/js/components/data-table/DataTableToolbar.vue @@ -1,4 +1,5 @@