diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 6218dc44..0e6e5f93 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -2843,28 +2843,8 @@ class EmployeeController extends AdminController //UPDATE EMPLOYEE public function update_emp_data() { - + $rules = [ - // 'emp_code' => [ - // 'rules' => 'required', - // 'errors' => [ - // 'required' => 'Employee Code is missing' - // ] - // ], - // 'name' => [ - // 'rules' => 'required|min_length[2]|max_length[100]', - // 'errors' => [ - // 'required' => 'Employee name is required', - // 'min_length' => 'Name must be at least 2 characters', - // 'max_length' => 'Name cannot exceed 100 characters' - // ] - // ], - // 'gender' => [ - // 'rules' => 'permit_empty|in_list[M,F]', - // 'errors' => [ - // 'in_list' => 'Invalid gender selected' - // ] - // ], 'email_corporate' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ @@ -2883,16 +2863,16 @@ class EmployeeController extends AdminController ]; $request_post_data = $this->request->getPost(); $data = sanitizeInputArrayAdvanced($request_post_data); - if (isset($data['relationship'])) { - $rules['relationship'] = [ - 'rules' => 'required|in_list[Self,Spouse,Child,Father,Mother,Father-in-law,Mother-in-law]', - 'errors' => [ - 'required' => 'Relationship is required', - 'in_list' => 'The selected relationship is invalid.' - ] - ]; + if (isset($data['relationship'])) { + $rules['relationship'] = [ + 'rules' => 'required|in_list[Self,Spouse,Child,Father,Mother,Father-in-law,Mother-in-law]', + 'errors' => [ + 'required' => 'Relationship is required', + 'in_list' => 'The selected relationship is invalid.' + ] + ]; } - + if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ @@ -2903,37 +2883,54 @@ class EmployeeController extends AdminController ]); } - - - // print_rr($data);die(); - // $data['dob'] = date('Y-m-d', strtotime($data['dob'])); - $data['dob'] = (!empty($data['dob'])) ? change_date_format($data['dob'], null, 'Y-m-d') : null; - // print_rr($data); die; + $employeeId = (int) ($data['employee_primary_id'] ?? 0); + if ($employeeId <= 0) { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'Employee ID is required'], 400); + } // Fetch current employee data - $employee_data = $this->employeeModel->where('id', $data['employee_primary_id'])->first(); - - if ($employee_data['relationship'] == 'Self') { + $employee_data = $this->employeeModel->where('id', $employeeId)->first(); + if (!$employee_data) { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'Employee not found'], 404); + } - if(isset($data['gender'])){ + // Whitelist only editable fields from this form. + // name / gender / dob are disabled for active employees and may be absent from POST — + // only update them when the client actually sent a value (do not force null). + $updateData = [ + 'email_corporate' => $data['email_corporate'], + 'mobile' => $data['mobile'], + ]; - if ($employee_data['gender'] != $data['gender']) { + if (!empty($data['name'])) { + $updateData['name'] = $data['name']; + } + if (isset($data['gender']) && $data['gender'] !== '') { + $updateData['gender'] = $data['gender']; + } + if (!empty($data['dob'])) { + $updateData['dob'] = change_date_format($data['dob'], null, 'Y-m-d'); + } + if (isset($data['relationship'])) { + $updateData['relationship'] = $data['relationship']; + } - $spouse_gender = ($data['gender'] == 'M') ? 'F' : 'M'; - $this->employeeModel - ->where('emp_code', $employee_data['emp_code']) - ->where('relationship', 'Spouse') - ->set(['gender' => $spouse_gender]) - ->update(); - } + if ($employee_data['relationship'] == 'Self' && isset($updateData['gender'])) { + if ($employee_data['gender'] != $updateData['gender']) { + $spouse_gender = ($updateData['gender'] == 'M') ? 'F' : 'M'; + $this->employeeModel + ->where('emp_code', $employee_data['emp_code']) + ->where('relationship', 'Spouse') + ->set(['gender' => $spouse_gender]) + ->update(); } } - + // Update the employee data - $result = $this->employeeModel->where('id', $data['employee_primary_id'])->set($data)->update(); - + $result = $this->employeeModel->where('id', $employeeId)->set($updateData)->update(); + if ($result) { - return $this->respond(['status' => true, 'code' => 200, 'data' => $data, 'message' => 'Employee updated successfully'], 200); + return $this->respond(['status' => true, 'code' => 200, 'data' => $updateData, 'message' => 'Employee updated successfully'], 200); } else { return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update employee.'], 404); }