diff --git a/app/Services/HR/EmployeeService.php b/app/Services/HR/EmployeeService.php index d5e12a53..69184f50 100644 --- a/app/Services/HR/EmployeeService.php +++ b/app/Services/HR/EmployeeService.php @@ -48,8 +48,25 @@ public function getEmployees(array $filters = [], int $perPage = 20): LengthAwar } // 정렬 - $query->orderByRaw("FIELD(employee_status, 'active', 'leave', 'resigned')") - ->orderBy('created_at', 'desc'); + $sortBy = $filters['sort_by'] ?? 'hire_date_asc'; + switch ($sortBy) { + case 'hire_date_asc': + $query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.hire_date')) ASC"); + break; + case 'hire_date_desc': + $query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.hire_date')) DESC"); + break; + case 'resign_date_asc': + $query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.resign_date')) ASC"); + break; + case 'resign_date_desc': + $query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.resign_date')) DESC"); + break; + default: + $query->orderByRaw("FIELD(employee_status, 'active', 'leave', 'resigned')") + ->orderBy('created_at', 'desc'); + break; + } return $query->paginate($perPage); } diff --git a/resources/views/hr/employees/index.blade.php b/resources/views/hr/employees/index.blade.php index dfd5bee5..e31ab205 100644 --- a/resources/views/hr/employees/index.blade.php +++ b/resources/views/hr/employees/index.blade.php @@ -75,6 +75,17 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 f +