From d9c9209286961032e1a382dd481d6c3eab375ce8 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Mon, 3 Jun 2024 10:06:15 +0530 Subject: [PATCH 1/7] CHANGE_ALL_IMPORT_EXPORT_FUNCTION_TO_CHECK_VALIDATION_AND_CONVERT_TO_JOB : RV --- app/Controllers/ClientController.php | 5 +- app/Controllers/EmpDataServiceController.php | 2151 ++++++++++++------ app/Controllers/EmployeeController.php | 184 +- app/Controllers/JobWorker.php | 12 + app/Models/EmployeePolicyModel.php | 253 +- app/Views/client_policy.php | 6 +- app/Views/employee_upload.php | 57 +- app/Views/file_list.php | 6 +- app/Views/policy_grid.php | 7 +- app/Views/view_file_upload_emp_list.php | 2 +- 10 files changed, 1886 insertions(+), 797 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 033300aa..52b3dbca 100644 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -586,11 +586,11 @@ class ClientController extends AdminController $this->myLogger->logme('error','Client policy CREATE function called'); - $policy_id = $this->request->getPost('policy_id'); + $policy_type_id = $this->request->getPost('policy_type_id'); $client_branch_id = $this->request->getPost('client_branch_id'); $policyCount = $this->clientPolicyModel - ->where('policy_id', $policy_id) + ->where('policy_type_id', $policy_type_id) ->where('client_branch_id', $client_branch_id) ->countAllResults(); @@ -816,7 +816,6 @@ class ClientController extends AdminController $jsonDataForRelation = json_encode($relation_data); - // if($policy_grid_id == 10 || $policy_grid_id == 11){ // $premium_type = 1; // }else{ diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 9ea04893..6325255f 100644 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -111,7 +111,7 @@ class EmpDataServiceController extends BaseController $batch_list_data['batch_code'] = $params['batch_code']; $batch_list_data['emp_policy_id'] = $value['primaryKey']; - $batch_list_data['created_by'] = get_session_userid(); + $batch_list_data['created_by'] = $params['user_id']; $this->batchListModel->insert($batch_list_data); } @@ -133,30 +133,29 @@ class EmpDataServiceController extends BaseController public function generateExcelForAdditionandInception($export_data) { - $return = $this->removeOldExportInfoFromBatchFile($export_data); - // Fetch employee data for export from the database $objects = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data); - $insurer_id = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first(); - $cash_balance = $this->clientDepositModel->where('client_id', $export_data['client_id'])->where('insurer_id', $insurer_id['insurer_id'])->orderBy('id', 'DESC')->first(); - $totals = 0; - foreach ($objects as $key => $value) { + // Calculate the total amount from the objects + $totals = array_reduce($objects, function ($carry, $item) { + return $carry + $item->total; + }, 0); + + $totals = round($totals, 2); + + $this->removeOldExportInfoFromBatchFile($export_data); - $totals += $value->total; - } if (!empty($cash_balance)) { if ((int) $cash_balance['balance'] < (int) $totals) { + $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.'); return 0; } - } else { - // return 0; } @@ -171,6 +170,8 @@ class EmpDataServiceController extends BaseController // If no data is found for export, return false if ($count == 0) { + + $this->myLogger->logme('error', 'No Record found. TPA ID or UHID are Alread Updated. Correction export data count : {data}', ['data' => $count]); return false; } @@ -212,30 +213,35 @@ class EmpDataServiceController extends BaseController // If Excel generation is successful if ($success) { - - // Batch files and list entry - // $return = $this->batchFilesAndBatchListEntry($export_data, $objects); - $random_number_count = 4; $export_data['batch_code'] = generate_random_string($random_number_count); $export_data['created_by'] = get_session_userid(); - + $insert = $this->batchFileModel->insert($export_data); $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first(); $batch_code = $batch_file_batch_code['batch_code']; // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]); - $job_details = new Jobs(); - $r = Jobs::addJob(['job_name' => 'insertBatchList','payload' => ['batch_code' => $batch_code, 'batch_list_data' => $objects ]]); + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $objects]]); // If batch operation is successful if (true) { + + // Clear the output buffer to avoid any unwanted output + if (ob_get_level()) { + ob_end_clean(); + } + // Set headers for Excel file download header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - header('Content-Disposition: attachment;filename="' . $export_data['file_name'] . '"'); - header('Cache-Control: max-age=0'); + header('Content-Disposition: attachment; filename="' . $export_data['file_name'] . '"'); + header('Content-Transfer-Encoding: binary'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + header('Expires: 0'); // Output file contents rewind($tempFile); @@ -247,7 +253,7 @@ class EmpDataServiceController extends BaseController return true; // Excel file successfully generated and exported } else { - + return false; // Batch operation failed } } @@ -266,17 +272,18 @@ class EmpDataServiceController extends BaseController $ids[] = $obj->id; } - // echo '
';
-        // print_r($objects); die;
-
         $count = count($objects);
         $export_data['count'] = $count;
         $this->myLogger->logme('error', 'Correction export data count : {data}', ['data' => $count]);
 
         if ($count == 0) {
-            return false;
+            $this->myLogger->logme('error', 'No Record found. Endorsement ID Alread Updated.  Correction export data count : {data}', ['data' => $count]);
+            return false;  
         }
 
+        $this->removeOldExportInfoFromBatchFile($export_data);
+
+
         $this->myLogger->logme('error', 'Correction export file name : {data}', ['data' => $export_data['file_name']]);
 
         $correction_data = transform_objects_to_array_for_correction($objects);
@@ -302,7 +309,11 @@ class EmpDataServiceController extends BaseController
         $value = generate_excel($headers, $correction_data, $tempFile);
 
         if ($value) {
+
+
+
             $return = $this->batchFilesAndBatchListEntry($export_data, $objects);
+
             if ($return) {
 
                 foreach ($ids as $key => $id) {
@@ -312,7 +323,6 @@ class EmpDataServiceController extends BaseController
                     }
                 }
 
-
                 // Set the appropriate headers for Excel file download
                 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
                 header('Content-Disposition: attachment;filename="' . $export_data['file_name'] . '"');
@@ -329,7 +339,6 @@ class EmpDataServiceController extends BaseController
 
                 return true;
             } else {
-
                 return false;
             }
         }
@@ -347,6 +356,7 @@ class EmpDataServiceController extends BaseController
             $ids[] = $obj->endorsement_primarykey;
             $totals += $obj->total;
         }
+        
         $rounded_totals = round($totals, 2);
         // echo '
';
         // print_r($ids); die;
@@ -354,13 +364,17 @@ class EmpDataServiceController extends BaseController
         $count = count($objects);
         $export_data['count'] = $count;
         $export_data['amount'] = $rounded_totals;
+        $export_data['status'] = 'success';
 
         $this->myLogger->logme('error', 'SI_Enhancement export data count : {data}', ['data' => $count]);
 
         if ($count == 0) {
+
+            $this->myLogger->logme('error', 'No Record found. Endorsement ID Alread Updated. SI_Enhancement export data count : {data}', ['data' => $count]);
             return false;
         }
 
+        $this->removeOldExportInfoFromBatchFile($export_data);
         $this->myLogger->logme('error', 'SI_Enhancement export file name : {data}', ['data' => $export_data['file_name']]);
 
         $si_data = transform_objects_to_array_for_si_enhancement($objects);
@@ -440,21 +454,21 @@ class EmpDataServiceController extends BaseController
             $totals += $obj->total;
         }
         $rounded_totals = round($totals, 2);
-        // echo '
';
-        // print_r($ids); 
-        // print_r($objects); die;
 
         $count = count($objects);
         $export_data['count'] = $count;
         $export_data['amount'] = $rounded_totals;
-
+        $export_data['status'] = 'success';
 
         $this->myLogger->logme('error', 'Deletion export data count : {data}', ['data' => $count]);
 
         if ($count == 0) {
+
+            $this->myLogger->logme('error', 'No Record found. Endorsement ID Alread Updated. Deletion export data count : {data}', ['data' => $count]);
             return false;
         }
 
+        $this->removeOldExportInfoFromBatchFile($export_data);
         $this->myLogger->logme('error', 'Deletion export file name : {data}', ['data' => $export_data['file_name']]);
 
         $si_data = transform_objects_to_array_for_deletion($objects);
@@ -539,48 +553,24 @@ class EmpDataServiceController extends BaseController
      *               - 0 if the provided data is incomplete or incorrect.
      */
 
-    public function importExcelDataForInception($import_data)
-    {
-
-        $file = $import_data['file'];
-
-        $is_moved = $file->move(WRITEPATH . 'uploads/import_excel');
-        $filename = $file->getName();
-        $this->myLogger->logme('error', 'Inception Import file name : {data}', ['data' => $filename]);
-
-
-        $random_number_count = 4;
-        $import_data['batch_code'] = generate_random_string($random_number_count);
-        $import_data['created_by'] = get_session_userid();
-        $import_data['status'] = 'pending';
-        $import_data['file_name'] = $filename;
-
-        $insert = $this->batchFileModel->insert($import_data);
-
-        $file_id['file_id'] = $insert;
-
-        $job_details  = new Jobs();                             
-        $r = Jobs::addJob(['job_name' => 'importInceptionFileValidation','payload' => ['file_id' => $insert]]);
-
-        return 1;
-    }
 
+    //Endorsement Inception
 
     public function importInceptionFileValidation($params)
     {
 
-        $this->myLogger->logme('info', 'importInceptionFileValidation called');
+        $this->myLogger->logme('info', 'Inception File Validation --  Function called');
 
         $file_id = $params['file_id'];
 
-        $this->myLogger->logme('error', 'importInceptionFileValidation batch file table primary id : {data}', ['data' => $file_id]);
+        $this->myLogger->logme('error', 'Inception File Validation --   Batch File Table Primary ID : {data}', ['data' => $file_id]);
         
         $file = $this->batchFileModel->where('id', $file_id)->first();
         $client_id = $file['client_id'];
         $client_policy_id = $file['client_policy_id'];
         $client_branch_id = $file['client_branch_id'];
         $batch_code = $file['batch_code'];
-
+        $user_id = $file['created_by'];
 
         $insurer_or_tpa = $file['insurer_or_tpa'];
         if ($insurer_or_tpa == 'tpa') {
@@ -629,10 +619,12 @@ class EmpDataServiceController extends BaseController
             ->where('employees.client_id', $client_id)
             ->where('employees.client_branch_id', $client_branch_id)
             ->where("employee_polices.{$id} IS NULL OR employee_polices.{$id} = ''")
+            ->where('employee_polices.is_active', 1)
+            ->where('employee_polices.status', 'active')
+            ->where('employees.is_active', 1)
+            ->where('employees.emp_status', 'active')
             ->findAll();
 
-        // echo '
';
-        // print_r($employee_data); die;
 
 
         if ($employee_data == null || empty($employee_data)) {
@@ -644,12 +636,12 @@ class EmpDataServiceController extends BaseController
                 ];
     
                 $this->batchFileModel->where('id', $file_id)->set($data)->update();
-                $this->myLogger->logme('error', 'importInceptionFileValidation TPAID already updated');
+                $this->myLogger->logme('error', 'Inception File Validation --   TPAID already updated');
 
                 $file_data = $this->getDataByFileId($file_id, 'failure');
                 $this->setPullNotification($file_data);
 
-                return 'The list of employees provided has already been updated with the TPA ID, or this is not the correct file';
+                return ['status' => 'error', 'message' => 'The list of employees provided has already been updated with the TPA ID, or this is not the correct file'];
 
             } else if ($insurer_or_tpa == 'insurer') {
 
@@ -658,23 +650,23 @@ class EmpDataServiceController extends BaseController
                 ];
     
                 $this->batchFileModel->where('id', $file_id)->set($data)->update();
-                $this->myLogger->logme('error', 'importInceptionFileValidation UHID already updated');
+                $this->myLogger->logme('error', 'Inception File Validation --   UHID already updated');
 
                 $file_data = $this->getDataByFileId($file_id, 'failure');
                 $this->setPullNotification($file_data);
 
-                return 'The list of employees provided has already been updated with the UHID, or this is not the correct file';
+                return ['status' => 'error', 'message' =>'The list of employees provided has already been updated with the UHID, or this is not the correct file'];
             }
 
-            $this->myLogger->logme('error', 'importInceptionFileValidation UHID or TPAID already updated or the uploadedfile is not correct');
+            $this->myLogger->logme('error', 'Inception File Validation --   UHID or TPAID already updated or the uploadedfile is not correct');
 
         }
 
         $excel_data_count = count($excel_data);
         $emp_data_count = count($employee_data);
 
-        $this->myLogger->logme('error', 'importInceptionFileValidation excel file count : {data}', ['data' => $excel_data_count]);
-        $this->myLogger->logme('error', 'importInceptionFileValidation database count : {data}', ['data' => $emp_data_count]);
+        $this->myLogger->logme('error', 'Inception File Validation --   Excel File count : {data}', ['data' => $excel_data_count]);
+        $this->myLogger->logme('error', 'Inception File Validation --   Database count : {data}', ['data' => $emp_data_count]);
 
 
         // dd($excel_data_count, $emp_data_count);
@@ -685,7 +677,7 @@ class EmpDataServiceController extends BaseController
 
             $status = 'in-progress-partially';
             $partially_updated_data = 'Expected : ' . $emp_data_count . ',  ' . 'Updated : ' . $excel_data_count . ',  ' . 'difference : ' . $difference;
-            $this->myLogger->logme('error', 'importInceptionFileValidation excel file count partially : {data}', ['data' => $partially_updated_data]);
+            $this->myLogger->logme('error', 'Inception File Validation --   excel file count partially : {data}', ['data' => $partially_updated_data]);
         }
 
 
@@ -697,12 +689,12 @@ class EmpDataServiceController extends BaseController
             ];
 
             $this->batchFileModel->where('id', $file_id)->set($data)->update();
-            $this->myLogger->logme('error', 'importInceptionFileValidation excel file count ( {excel} ) exceeds db count ( {db} )', ['db' => $emp_data_count, 'excel' => $excel_data_count]);
+            $this->myLogger->logme('error', 'Inception File Validation --   Excel File Count ( {excel} ) exceeds db count ( {db} )', ['db' => $emp_data_count, 'excel' => $excel_data_count]);
 
             $file_data = $this->getDataByFileId($file_id, 'failure');
             $this->setPullNotification($file_data);
 
-            return 'The Excel record count exceeds the DB record count. excel file count : ' .  $excel_data_count . 'db count : ' .  $emp_data_count;
+            return ['status' => 'error', 'message' =>'The Excel record count exceeds the DB record count. excel file count : ' .  $excel_data_count . 'db count : ' .  $emp_data_count];
         }
 
 
@@ -874,15 +866,11 @@ class EmpDataServiceController extends BaseController
         $error_count = count($errors);
         $json_errors = json_encode($errors);
 
-        // echo $json_errors; die;
-
         $missing_id_count = count($missing_id);
         $json_missing_id = json_encode($missing_id);
 
         // dd($error_count, $missing_id_count, $json_errors, $json_missing_id);
 
-        // dd($batch_list_id);
-
         if ($missing_id_count > 0) {
 
             $data = [
@@ -897,14 +885,14 @@ class EmpDataServiceController extends BaseController
                 $file_data = $this->getDataByFileId($file_id, 'failure');
                 $this->setPullNotification($file_data);
 
-                return 'The TPA ID column is either partially or entirely empty.';
+                return ['status' => 'error', 'message' =>'The TPA ID column is either partially or entirely empty.'];
 
             } else if ($insurer_or_tpa == 'insurer') {
 
                 $file_data = $this->getDataByFileId($file_id, 'failure');
                 $this->setPullNotification($file_data);
 
-                return 'The UHID column is either partially or entirely empty.';
+                return ['status' => 'error', 'message' =>'The UHID column is either partially or entirely empty.'];
             }
         }
 
@@ -916,8 +904,11 @@ class EmpDataServiceController extends BaseController
                 'status' => 'failed',
             ];
 
+            $file_data = $this->getDataByFileId($file_id, 'failure');
+            $this->setPullNotification($file_data);
+
             $this->batchFileModel->where('id', $file_id)->set($data)->update();
-            return 0;
+            return ['status' => 'error', 'message' => 'Inception File Validation Failed Excel and Database Data are Mismatching'];
 
         } else {
 
@@ -935,6 +926,7 @@ class EmpDataServiceController extends BaseController
                 $data = [
                     'emp_policy_id' => $value,
                     'batch_code' => $batch_code,
+                    'created_by' => $user_id
                 ];
 
                 $insert = $this->batchListModel->insert($data);
@@ -946,9 +938,10 @@ class EmpDataServiceController extends BaseController
             $job_details  = new Jobs();                             
             $r = Jobs::addJob(['job_name' => 'importInceptionUpdateTPAandUHID','payload' => ['file_id' => $file_id]]);
 
-
             // $this->importInceptionUpdateTPAandUHID(['file_id' => $file_id]);
 
+            return ['status' => 'error', 'message' => 'Inception File Validation Successfully Completed'];
+
         }
         
     }
@@ -957,7 +950,7 @@ class EmpDataServiceController extends BaseController
     public function importInceptionUpdateTPAandUHID($params)
     {
 
-        $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID called');
+        $this->myLogger->logme('error', 'Inception Update TPA and UHID --  Function called');
 
         $file_id = $params['file_id'];
         $file = $this->batchFileModel->find($file_id);
@@ -968,12 +961,12 @@ class EmpDataServiceController extends BaseController
             ];
 
             $this->batchFileModel->where('id', $file_id)->set($data)->update();
-            $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID the Physical file not found - file id : {data}', ['data' => $file_id]);
+            $this->myLogger->logme('error', 'Inception Update TPA and UHID --   The Physical file not found --   File id : {data}', ['data' => $file_id]);
 
             $file_data = $this->getDataByFileId($file_id, 'failure');
             $this->setPullNotification($file_data);
 
-            return 'importInceptionUpdateTPAandUHID the Physical file not found'; // Return error code if file not found
+            return ['status' => 'error', 'message' => 'Inception Update TPA and UHID --   The Physical file not found']; // Return error code if file not found
         }
 
         $client_id = $file['client_id'];
@@ -986,11 +979,11 @@ class EmpDataServiceController extends BaseController
 
 
         $get_policy_type = $this->clientPolicyModel
-                                ->select('policy_type.policy_type, policies.policy_type_id as policy_type_id')
-                                ->join('policies', 'policies.id = client_policy.policy_id')
-                                ->join('policy_type', 'policy_type.id = policies.policy_type_id')
-                                ->where('client_policy.id', $client_policy_id)
-                                ->first();
+            ->select('policy_type.policy_type, policies.policy_type_id as policy_type_id')
+            ->join('policies', 'policies.id = client_policy.policy_id')
+            ->join('policy_type', 'policy_type.id = policies.policy_type_id')
+            ->where('client_policy.id', $client_policy_id)
+            ->first();
 
 
         $status_val = 'success';
@@ -999,7 +992,7 @@ class EmpDataServiceController extends BaseController
             $status_val = 'partially success';
         }
 
-        $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID  file name : {data}', ['data'=> $file['file_name']]);
+        $this->myLogger->logme('error', 'Inception Update TPA and UHID --    file name : {data}', ['data' => $file['file_name']]);
 
 
         $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
@@ -1025,10 +1018,8 @@ class EmpDataServiceController extends BaseController
             $uhid[] = $value[16];
             $amount = $value[20];
 
-            $totals += $amount;
+            $totals = $totals + $amount;
 
-
-            // Execute the query
             $query = $db->table('employee_polices');
             $query->select('employee_polices.id');
             $query->join('employees', 'employees.id = employee_polices.employee_id');
@@ -1045,45 +1036,19 @@ class EmpDataServiceController extends BaseController
                 $query->where('(employee_polices.uhid IS NULL OR employee_polices.uhid = "")');
             }
             $query->where('employee_polices.is_active', 1);
+            $query->where('employee_polices.status', 'active');
+            $query->where('employees.is_active', 1);
+            $query->where('employees.emp_status', 'active');
             $query->limit(1);
 
-            // Get the result
             $result = $query->get()->getRowArray();
             if (isset($result['id']) && $result['id'] !== null) {
-                $emp_policy_ids[] = $result['id'];
-                $emp_details[] = array('id' => $result['id'],'tpa_id' => $value[15], 'uhid' => $value[16]);
+                $emp_policy_ids[] = $result['id']; //for cash deposite
+                $emp_details[] = array('id' => $result['id'], 'tpa_id' => $value[15], 'uhid' => $value[16]);
             }
-
-
-
-            // $sql = "
-            // UPDATE employee_polices
-            // JOIN employees ON employees.id = employee_polices.employee_id
-            // SET tpa_id = ?
-            // WHERE employees.name = ?
-            // AND employees.emp_code = ?
-            // AND employee_polices.client_policy_id = ?
-            // AND (employee_polices.tpa_id IS NULL OR employee_polices.tpa_id = '')";
-
-            // $params = [$tpa_id, $name, $emp_code, $client_policy_id];
-            // $db->query($sql, $params);
-
-
-
-            // $sql = "
-            // UPDATE employee_polices 
-            // JOIN employees ON employees.id = employee_polices.employee_id 
-            // SET employee_polices.uhid = ? 
-            // WHERE employees.name = ? 
-            // AND employees.emp_code = ? 
-            // AND employee_polices.client_policy_id = ?
-            // AND (employee_polices.uhid IS NULL OR employee_polices.uhid = '')";
-
-            // $params = [$uhid, $name, $emp_code, $client_policy_id];
-            // $db->query($sql, $params);
         }
 
-       $return = $this->employeePolicyModel->bulkUpdate($emp_details);
+        $return = $this->employeePolicyModel->bulkUpdate($emp_details);
 
         // Update batch file status and amount
         $this->batchFileModel->update($file_id, [
@@ -1093,14 +1058,14 @@ class EmpDataServiceController extends BaseController
         ]);
 
 
-        $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID  employee count : {data}', ['data'=> $emp_count]);
-        $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID  batch file status : {data}', ['data'=> $status_val]);
-        $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID  total amount for cash deposite : {data}', ['data'=> $totals]);
+        $this->myLogger->logme('error', 'Inception Update TPA and UHID --    employee count : {data}', ['data' => $emp_count]);
+        $this->myLogger->logme('error', 'Inception Update TPA and UHID --    batch file status : {data}', ['data' => $status_val]);
+        $this->myLogger->logme('error', 'Inception Update TPA and UHID --    total amount for cash deposite : {data}', ['data' => $totals]);
 
 
         if ($file['insurer_or_tpa'] == 'tpa') {
 
-            $this->myLogger->logme('error', 'importInceptionUpdateTPAandUHID  set  cashDepositCalculationForInception and sendMailForDownloadingECard in JOB QUEUE');
+            $this->myLogger->logme('error', 'Inception Update TPA and UHID --    set  cashDepositCalculationForInception and sendMailForDownloadingECard in JOB QUEUE');
 
             $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id);
             $depositeData = [
@@ -1116,8 +1081,8 @@ class EmpDataServiceController extends BaseController
 
 
 
-            $job_details  = new Jobs();                             
-            $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForInception','payload' => [
+            $job_details  = new Jobs();
+            $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForInception', 'payload' => [
                 'employeeIds' => $emp_policy_ids,
                 'client_id' => $client_id,
                 'client_policy_id' => $client_policy_id,
@@ -1127,12 +1092,11 @@ class EmpDataServiceController extends BaseController
                 'policy_name' => $policy_name['policy_name'],
                 'user_id' => $user_id,
             ]]);
-    
-            if($get_policy_type['policy_type_id'] != 1){
 
-                $job_details  = new Jobs();                             
-                $r = Jobs::addJob(['job_name' => 'sendMailForDownloadingECard','payload' => $emp_policy_ids]);  
+            if ($get_policy_type['policy_type_id'] != 1) {
 
+                $job_details  = new Jobs();
+                $r = Jobs::addJob(['job_name' => 'sendMailForDownloadingECard', 'payload' => $emp_policy_ids]);
             }
 
             // $this->cashDepositCalculationForInception($depositeData);
@@ -1144,602 +1108,1474 @@ class EmpDataServiceController extends BaseController
         $this->setPullNotification($file_data);
 
 
-        return 'Import Inception Updated '. $status_val . '- Updated Count : ' . $emp_count;
+        return 'Import Inception Updated ' . $status_val . '- Updated Count : ' . $emp_count;
     }
 
 
 
 
 
+    //Endorsement Correction
 
-
-    public function importExcelDataForCorrection($import_data)
+    public function importCorrectionValidation($params)
     {
 
-        $client_id = $import_data['client_id'];
-        $client_policy_id = $import_data['client_policy_id'];
-        $client_branch_id = $import_data['client_branch_id'];
-        $file = $import_data['file'];
+        $this->myLogger->logme('error', 'Correction File Validation --   Function called');
 
-        $data = $this->readExcelToArray($file);
-        unset($data[0]);
-        $count = count($data);
+        $file_id = $params['file_id'];
+        $file = $this->batchFileModel->where('id', $file_id)->first();
 
-        $missing_id = [];
-        $empty_emp_tpa_uh_ids = [];
-        foreach ($data as $key => $value) {
+        $client_id = $file['client_id'];
+        $client_policy_id = $file['client_policy_id'];
+        $client_branch_id = $file['client_branch_id'];
+        $batch_code = $file['batch_code'];
+        $user_id = $file['created_by'];
 
-            try {
-
-                if ($value[10] === null) {
-                    $missing_id[] = $key + 1;
-                }
-
-                $emp_code = $value[0];
-                $uhid = $value[1];
-                $endorsement_id = $value[10] != null ? $value[10] : '';
-
-                $db = \Config\Database::connect();
-
-                // Execute the query
-                $query = $db->table('emp_endorsement')
-                    ->select('emp_endorsement.id')
-                    ->join('employees', 'employees.id = emp_endorsement.pk')
-                    ->join('employee_polices', 'employee_polices.employee_id = employees.id')
-                    ->where('employee_polices.client_policy_id', $client_policy_id)
-                    ->where('employees.client_id', $client_id)
-                    ->where('employees.client_branch_id', $client_branch_id)
-                    ->where('employee_polices.uhid', $uhid)
-                    ->where('employees.emp_code', $emp_code)
-                    ->where('(emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = "")')
-                    ->groupBy('emp_endorsement.group_key')
-                    ->limit(1);
-
-                // Get the result
-                $result = $query->get()->getRowArray();
-                if (isset($result['id']) && $result['id'] !== null) {
-                    $empty_emp_tpa_uh_ids[] = $result['id'];
-                }
-            } catch (\Exception $e) {
-                // Handle the exception here
-                return 0;
-            }
-        }
-
-        $missing_id_count = count($missing_id);
-        $empty_id_count = count($empty_emp_tpa_uh_ids);
-
-        // if($missing_id_count != $count){
-
-        //     return 2;
-        // }
-
-        if ($missing_id_count != 0) {
-
-            return 2;
-        }
-
-
-        if ($empty_id_count == 0) {
-
-            return 3;
-        }
-
-        // dd($count, $missing_id, $missing_id_count, $empty_id_count, $data, $empty_emp_tpa_uh_ids);
-
-
-        $is_moved = $file->move(WRITEPATH . 'uploads/import_excel');
-        $filename = $file->getName();
-
-        $this->myLogger->logme('error', 'Correction Import file name : {data}', ['data' => $filename]);
-        $random_number_count = 4;
-        $batch_code = generate_random_string($random_number_count);
-        $this->myLogger->logme('error', 'Correction Import BATCH CODE : {data}', ['data' => $batch_code]);
-
-
-        $import_data['batch_code'] = $batch_code;
-        $import_data['created_by'] = get_session_userid();
-        $import_data['file_name'] = $filename;
-        $insert = $this->batchFileModel->insert($import_data);
-        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
-
-        $batch_code_for_batch_list['batch_code'] = $batch_file_batch_code['batch_code'];
-        $batch_code_for_batch_list['created_by'] = get_session_userid();
-
-        $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $batch_file_batch_code['file_name'];
+        $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
 
         if (!file_exists($file_name_with_path)) {
-            return 2;
+
+            $this->myLogger->logme('error', 'Correction File Validation --   The Physical file not found');
+            $this->myLogger->logme('error', 'Correction File Validation --   File Name : {data}', ['data' => $file['file_name']]);
+            $this->myLogger->logme('error', 'Correction File Validation --   File Path : {data}', ['data' => $file_name_with_path]);
+
+            return 'The Physical file not found';
         }
 
-        $data = read_excel_file_to_array($file_name_with_path);
-        unset($data[0]);
-        $count = count($data);
-        $this->batchFileModel->where('id', $insert)->set('count', $count)->update();
-        foreach ($data as $key => $value) {
+        $excel_data = $this->readExcelFileToArray($file_name_with_path);
+        unset($excel_data[0]);
 
-            if (!empty($value) && isset($value[10])) {
 
-                $emp_code = $value[0];
-                $uhid = $value[1];
-                $endorsement_id = $value[10] != null ? $value[10] : '';
+        $endorsement_data = $this->empEndorsementModel
+            ->select("
+                                emp_endorsement.id, 
+                                emp_endorsement.pk, 
+                                emp_endorsement.emp_code, 
+                                emp_endorsement.endorsement_id, 
+                                emp_endorsement.old_value, 
+                                emp_endorsement.new_value, 
+                                emp_endorsement.field_name, 
+                                emp_endorsement.remarks, 
+                                emp_endorsement.actions, 
+                                employees.id AS primaryKey, 
+                                employees.name AS emp_name, 
+                                employees.dob AS emp_dob, 
+                                employees.gender AS emp_gender, 
+                                employees.client_id AS emp_client_id, 
+                                'Has Define' AS emp_type,
+                                employee_polices.uhid,
+                                employees.relationship_code
+                            ")
+            ->join("employees", "employees.id = emp_endorsement.pk", "left")
+            ->join("employee_polices", "employees.id = employee_polices.employee_id", "left")
+            ->where("employees.client_id", $client_id)
+            ->where("employee_polices.client_policy_id", $client_policy_id)
+            ->where("employees.client_branch_id", $client_branch_id)
+            ->where("employees.is_active", 1)
+            ->where("employees.emp_status", "active")
+            ->where("emp_endorsement.actions", "c")
+            ->where("(emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = '')")
+            ->findAll();
 
-                $val = $this->employeePolicyModel
-                    ->select('employees.id')
-                    ->join('employees', 'employees.id = employee_polices.employee_id')
-                    ->where('employee_polices.client_policy_id', $client_policy_id)
-                    ->where('employees.client_id', $client_id)
-                    ->where('employees.client_branch_id', $client_branch_id)
-                    ->where('employee_polices.uhid', $uhid)
-                    ->where('employees.emp_code', $emp_code)
-                    ->where('employees.is_active', 1)
-                    ->first();
 
-                $batch_code_for_batch_list['emp_policy_id'] = $val['id'];
-                $this->batchListModel->insert($batch_code_for_batch_list);
 
-                // $this->employeePolicyModel->updateCorrectionData($emp_code, $uhid, $endorsement_id);
+        // dd($endorsement_data, $excel_data);
 
-                $queryData =  $this->empEndorsementModel->select('emp_endorsement.*, employees.id as emp_id')
-                    ->join('employees', 'employees.id = emp_endorsement.pk')
-                    ->join('employee_polices', 'employee_polices.employee_id = employees.id')
-                    ->where('employees.emp_code', $emp_code)
-                    ->where('employees.client_id', $client_id)
-                    ->where('employees.client_branch_id', $client_branch_id)
-                    ->where('employee_polices.client_policy_id', $client_policy_id)
-                    ->where('employee_polices.uhid', $uhid)
-                    ->get()
-                    ->getResultArray();
 
-                // dd($queryData);
+        if ($endorsement_data == null || empty($endorsement_data)) {
 
-                foreach ($queryData as $endorsementData) {
+            $data = [
+                'status' => 'failed-1',
+            ];
 
-                    $emp_endoresment_id = $endorsementData['id'];
-                    $emp_id = $endorsementData['emp_id'];
-                    $field_name = $endorsementData['field_name'];
-                    $new_value = $endorsementData['new_value'];
-                    $endoresment_udate_data = [
-                        'endorsement_id' => $endorsement_id,
-                        'status' => 'complete',
-                    ];
-                    $this->empEndorsementModel->where('id', $emp_endoresment_id)->set($endoresment_udate_data)->update();
-                    $this->employeeModel->where('id', $emp_id)->set($field_name, $new_value)->update();
-                }
+            $this->batchFileModel->where('id', $file_id)->set($data)->update();
+            $this->myLogger->logme('error', 'correctionFileValidation ENDORSEMENT ID already updated');
 
-                // $query = $this->employeePolicyModel->getLastQuery();
-                // echo $query . "
"; - } else { + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); - return 0; - } + return 'The list of employees provided has already been updated with the ENDORSEMENT ID, or this is not the correct file'; + + $this->myLogger->logme('error', 'correctionFileValidation ENDORSEMENT ID already updated or the uploadedfile is not correct'); + } + + $excel_data_count = count($excel_data); + $endorsement_data_count = count($endorsement_data); + + $this->myLogger->logme('error', 'correctionFileValidation excel file count : {data}', ['data' => $excel_data_count]); + $this->myLogger->logme('error', 'correctionFileValidation database count : {data}', ['data' => $endorsement_data_count]); + + + $difference = $endorsement_data_count - $excel_data_count; + + $status = 'in-progress'; + if ($excel_data_count < $endorsement_data_count) { + + $status = 'in-progress-partially'; + $partially_updated_data = 'Expected : ' . $endorsement_data_count . ', ' . 'Updated : ' . $excel_data_count . ', ' . 'difference : ' . $difference; + $this->myLogger->logme('error', 'correctionFileValidation excel file count partially : {data}', ['data' => $partially_updated_data]); } - return 1; - } - - - public function importExcelDataForSIEnhancement($import_data) - { - - $client_id = $import_data['client_id']; - $client_policy_id = $import_data['client_policy_id']; - $client_branch_id = $import_data['client_branch_id']; - $file = $import_data['file']; - - $data = $this->readExcelToArray($file); - unset($data[0]); - $count = count($data); + + if ($endorsement_data_count < $excel_data_count) { + + $data = [ + 'status' => 'failed-3', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'correctionFileValidation excel file count ( {excel} ) exceeds db count ( {db} )', ['db' => $endorsement_data_count, 'excel' => $excel_data_count]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The Excel record count exceeds the DB record count. excel file count : ' . $excel_data_count . 'db count : ' . $endorsement_data_count; + } + $errors = []; // Initialize an array to store errors $missing_id = []; - $empty_emp_tpa_uh_ids = []; - $totals = 0; - foreach ($data as $key => $value) { + $batch_list_id = []; - try { - if ($value[19] === null) { - $missing_id[] = $key + 1; - } + foreach ($endorsement_data as $key => $endorsement_value) { - $totals += $value[18]; + $key = $key + 1; - $emp_name = $value[1]; - $emp_code = $value[2]; - $endorsement_id = $value[19] != null ? $value[19] : ''; - - $db = \Config\Database::connect(); - - // Execute the query - $query = $db->table('emp_endorsement') - ->select('emp_endorsement.id') - ->join('employee_polices', 'employee_polices.id = emp_endorsement.pk') - ->join('employees', 'employees.emp_code = emp_endorsement.emp_code') - ->where('employees.emp_code', $emp_code) - ->where('employees.name', $emp_name) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('emp_endorsement.actions', 'si') - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('(emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = "")') - ->groupBy('emp_endorsement.group_key'); - - // Get the result - $result = $query->get()->getRowArray(); - if (isset($result['id']) && $result['id'] !== null) { - $empty_emp_tpa_uh_ids[] = $result['id']; - } - } catch (\Exception $e) { - // Handle the exception here - return 0; + if (!isset($excel_data[$key])) { + break; } + + + if ($excel_data[$key][10] === null) { + $missing_id[$key][] = [ + 'row' => $key, + 'column' => 10, + ]; + } + + + if ($endorsement_value['emp_name'] != $excel_data[$key][2]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 2, + 'db_data' => $endorsement_value['emp_name'], + 'excel_data' => $excel_data[$key][2] + ]; + } + + if ($endorsement_value['emp_code'] != $excel_data[$key][0]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 0, + 'db_data' => $endorsement_value['emp_code'], + 'excel_data' => $excel_data[$key][0] + ]; + } + + if ($endorsement_value['emp_dob'] != $excel_data[$key][5]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 5, + 'db_data' => $endorsement_value['emp_dob'], + 'excel_data' => $excel_data[$key][5] + ]; + } + + if ($endorsement_value['emp_gender'] != $excel_data[$key][6]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 6, + 'db_data' => $endorsement_value['emp_gender'], + 'excel_data' => $excel_data[$key][6] + ]; + } + + if ($endorsement_value['old_value'] != $excel_data[$key][7]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 7, + 'db_data' => $endorsement_value['old_value'], + 'excel_data' => $excel_data[$key][7] + ]; + } + + if ($endorsement_value['new_value'] != $excel_data[$key][8]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 8, + 'db_data' => $endorsement_value['new_value'], + 'excel_data' => $excel_data[$key][8] + ]; + } + + + + if ($endorsement_value['uhid'] != $excel_data[$key][1]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 1, + 'db_data' => $endorsement_value['uhid'], + 'excel_data' => $excel_data[$key][1] + ]; + } + + $batch_list_id[] = $endorsement_value['primaryKey']; } - $rounded_totals = round($totals, 2); + + + $error_count = count($errors); + $json_errors = json_encode($errors); + $missing_id_count = count($missing_id); - $empty_id_count = count($empty_emp_tpa_uh_ids); + $json_missing_id = json_encode($missing_id); - // if($missing_id_count != $count){ + // dd($error_count, $missing_id_count, $json_errors, $json_missing_id, $batch_list_id); - // return 2; - // } - if ($missing_id_count != 0) { + if ($missing_id_count > 0) { - return 2; + $data = [ + + 'count' => $endorsement_data_count, + 'error_data' => $json_missing_id, + 'status' => 'failed', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The ENDORSEMENT ID column is either partially or entirely empty.'; + } - // if($empty_emp_tpa_uh_ids != $count){ - // return 3; - // } + if ($error_count > 0) { - if ($empty_id_count == 0) { + $data = [ - return 3; - } + 'count' => $endorsement_data_count, + 'error_data' => $json_errors, + 'status' => 'failed', + ]; - // dd($count, $missing_id, $missing_id_count, $empty_id_count, $data, $empty_emp_tpa_uh_ids); + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + return 'Correction Validation Failed'; - $is_moved = $file->move(WRITEPATH . 'uploads/import_excel'); - $filename = $file->getName(); + } else { - $this->myLogger->logme('error', 'SI_Enhancement Import file name : {data}', ['data' => $filename]); - $random_number_count = 4; - $batch_code = generate_random_string($random_number_count); - $this->myLogger->logme('error', 'SI_Enhancement Import BATCH CODE : {data}', ['data' => $batch_code]); + $data = [ + 'count' => $endorsement_data_count, + 'status' => $status, + 'error_data' => $partially_updated_data ?? null, + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); - $import_data['batch_code'] = $batch_code; - $import_data['created_by'] = get_session_userid(); - $import_data['file_name'] = $filename; - $import_data['amount'] = $rounded_totals; - $insert = $this->batchFileModel->insert($import_data); - $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first(); + foreach ($batch_list_id as $key => $value) { - $batch_code_for_batch_list['batch_code'] = $batch_file_batch_code['batch_code']; - $batch_code_for_batch_list['created_by'] = get_session_userid(); - - $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $batch_file_batch_code['file_name']; - - if (!file_exists($file_name_with_path)) { - return 2; - } - - $data = read_excel_file_to_array($file_name_with_path); - unset($data[0]); - $count = count($data); - $this->batchFileModel->where('id', $insert)->set('count', $count)->update(); - $employeeIds = []; - foreach ($data as $key => $value) { - - if (!empty($value) && isset($value[19])) { - - $emp_name = $value[1]; - $emp_code = $value[2]; - // echo $emp_name .'-'. $emp_code; die; - $endorsement_id = $value[19] != null ? $value[19] : ''; - - $updateData = [ - 'emp_code' => $emp_code, - 'client_id' => $client_id, - 'client_policy_id' => $client_policy_id, - 'emp_name' => $emp_name, - 'endorsement_id' => $endorsement_id, + $data = [ + 'emp_policy_id' => $value, + 'batch_code' => $batch_code, + 'created_by' => $user_id, ]; - $this->employeePolicyModel->updateEndoresmentIdForSIEnhancement($updateData); - - $queryData = $this->employeePolicyModel - ->select('employee_polices.*') - ->join('employees', 'employee_polices.employee_id = employees.id') - ->where('employees.emp_code', $emp_code) - ->where('employees.name', $emp_name) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('employee_polices.is_active', 1) - ->first(); - - $queryData['is_active'] = 0; - $this->employeePolicyModel->save($queryData); - - unset($queryData['id']); - unset($queryData['created_by']); - unset($queryData['created_at']); - unset($queryData['updated_by']); - unset($queryData['updated_at']); - unset($queryData['is_active']); - - $queryData['basic_cover_si'] = $value[8]; - $queryData['premium'] = $value[14]; - $queryData['si_enhancement_date'] = $value[10]; - $queryData['rata_premimum'] = $value[16]; - $queryData['gst'] = $value[17]; - $queryData['created_by'] = get_session_userid(); - - //new insert - $this->employeePolicyModel->save($queryData); - - $val = $this->employeePolicyModel - ->select('employee_polices.id') - ->join('employees', 'employees.id = employee_polices.employee_id') - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('employees.name', $emp_name) - ->where('employees.emp_code', $emp_code) - ->where('employee_polices.is_active', 1) - ->first(); - - if ($val !== null) { - $id = $val['id']; - $batch_code_for_batch_list['emp_policy_id'] = $id; - $this->batchListModel->insert($batch_code_for_batch_list); - array_push($employeeIds, $id); - } - } else { - - return 0; + $insert = $this->batchListModel->insert($data); } + + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'importCorrectionUpdateEndorsementID','payload' => ['file_id' => $file_id]]); + + // $this->importCorrectionUpdateEndorsementID(['file_id' => $file_id]); + + return 'Correction Validation Success'; } - - $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id); - $depositeData = [ - 'employeeIds' => $employeeIds, - 'client_id' => $client_id, - 'client_policy_id' => $client_policy_id, - 'client_branch_id' => $client_branch_id, - 'count' => $count, - 'event' => $import_data['event_type'], - 'policy_name' => $policy_name['policy_name'], - ]; - - // dd($depositeData); - $this->cashDepositCalculationForSIEnhancement($depositeData); - - return 1; } - public function importExcelDataForDeletion($import_data) + public function importCorrectionUpdateEndorsementID($params){ + + $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID called'); + + $file_id = $params['file_id']; + $file = $this->batchFileModel->find($file_id); + if (!$file) { + + $data = [ + 'status' => 'failed-4', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID the Physical file not found - file id : {data}', ['data' => $file_id]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'importCorrectionUpdateEndorsementID the Physical file not found'; // Return error code if file not found + } + + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $client_branch_id = $file['client_branch_id']; + $insurer_or_tpa = $file['insurer_or_tpa']; + $status = $file['status']; + $batch_code = $file['batch_code']; + $user_id = $file['created_by']; + + + $status_val = 'success'; + if ($status == 'in-progress-partially') { + + $status_val = 'partially success'; + } + + $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID file name : {data}', ['data'=> $file['file_name']]); + + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + + $emp_ids = []; + $emp_details = []; + $endorsement_id = []; + $endorsement_details = []; + + $emp_count = count($excel_data); + $db = \Config\Database::connect(); + + + foreach ($excel_data as $key => $value) { + + $emp_code = $value[0]; + $old_value = $value[7]; + $endorsement_id[] = $value[10]; + $uhid = $value[1]; + + + $result = $this->empEndorsementModel + ->select('emp_endorsement.*, employees.id as emp_id') + ->join('employees', 'employees.id = emp_endorsement.pk') + ->join('employee_polices', 'employee_polices.employee_id = employees.id') + ->where('employees.emp_code', $emp_code) + ->where('employees.client_id', $client_id) + ->where('employees.client_branch_id', $client_branch_id) + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employee_polices.uhid', $uhid) + ->where('emp_endorsement.old_value', $old_value) + + ->where('employee_polices.is_active', 1) + ->where('employee_polices.status', 'active') + ->where('employees.is_active', 1) + ->where('employees.emp_status', 'active') + ->first(); + + if (isset($result['id']) && $result['id'] !== null) { + + // return $result; + $emp_details[] = array('id' => $result['emp_id'], 'group_key' => $result['group_key'], $result['field_name'] => $value[8]); + $endorsement_details[] = array('group_key' => $result['group_key'], 'id' => $result['id'], 'endorsement_id' => $value[10], 'status' => 'complete'); + } + + } + + // return [$emp_details, $endorsement_details]; + + $this->empEndorsementModel->updateBatch($endorsement_details, 'group_key'); + $this->employeeModel->updateBatch($emp_details); + + // Update batch file status and amount + $this->batchFileModel->update($file_id, [ + 'count' => $emp_count, + 'status' => $status_val, + ]); + + + $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID employee count : {data}', ['data'=> $emp_count]); + $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID batch file status : {data}', ['data'=> $status_val]); + + + $file_data = $this->getDataByFileId($file_id, 'success'); + $this->setPullNotification($file_data); + + + return 'Import Correction Updated '. $status_val . '- Updated Count : ' . $emp_count; + + } + + + + + //Endorsement SIEnhancement + + public function importSIEnhancementValidation($params) + { + $file_id = $params['file_id']; + $file = $this->batchFileModel->where('id', $file_id)->first(); + + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $client_branch_id = $file['client_branch_id']; + $batch_code = $file['batch_code']; + $user_id = $file['created_by']; + + + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + + if (!file_exists($file_name_with_path)) { + return 'The Physical file not found'; + } + + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + + + $db = \Config\Database::connect(); + + // Raw SQL query + $sql = " + SELECT + a.id as endorsement_primarykey, + a.group_key, + employee_polices.id AS primaryKey, + employees.id AS emp_primary, + employees.name AS emp_name, + employees.emp_code AS emp_code, + employees.dob AS emp_dob, + employees.gender AS emp_gender, + employees.relationship_code AS emp_relationship_code, + 'Has Define' AS emp_type, + employee_polices.uhid AS risk_id, + employee_polices.pre_existing_alignments, + employee_polices.policy_end_date, + employee_polices.basic_cover_si as old_basic_cover_si, + employee_polices.rata_premimum as old_si_premium, + sidata.new_basic_cover_si, + sidata.new_si_premium, + sidata.date_of_coverage, + DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1 AS no_of_days, + sidata.new_si_premium - employee_polices.rata_premimum AS difference_premium, + ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premimum, + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS gst, + ((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS total + FROM + emp_endorsement a + LEFT JOIN + employees ON employees.emp_code = a.emp_code + LEFT JOIN + employee_polices ON employees.id = employee_polices.employee_id + LEFT JOIN ( + SELECT + aa.emp_code, + aa.new_value as new_basic_cover_si, + bb.new_value as new_si_premium, + cc.new_value as date_of_coverage + FROM ( + SELECT + a1.emp_code, + a1.field_name, + a1.new_value + FROM + emp_endorsement as a1 + WHERE + a1.field_name = 'basic_cover_si' + ) aa + LEFT JOIN ( + SELECT + b1.emp_code, + b1.field_name, + b1.new_value + FROM + emp_endorsement as b1 + WHERE + b1.field_name = 'premium' + ) bb ON aa.emp_code = bb.emp_code + LEFT JOIN ( + SELECT + c1.emp_code, + c1.field_name, + c1.new_value + FROM + emp_endorsement as c1 + WHERE + c1.field_name = 'si_enhancement_date' + ) cc ON aa.emp_code = cc.emp_code + ) as sidata ON a.emp_code = sidata.emp_code + WHERE + employee_polices.client_policy_id = '$client_policy_id' + AND employees.client_branch_id = '$client_branch_id' + AND employee_polices.is_active = '1' + AND (a.endorsement_id IS NULL OR a.endorsement_id = '') + AND a.actions = 'si' + GROUP BY group_key + "; + + // Execute the query + $query = $db->query($sql); + + // Fetch the results + $endorsement_data = $query->getResultArray(); + + + + // dd($endorsement_data, $excel_data); + + + if ($endorsement_data == null || empty($endorsement_data)) { + + $data = [ + 'status' => 'failed-1', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'SI Enhancement_File Validation -- ENDORSEMENT ID already updated or the uploadedfile is not correct'); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The list of employees provided has already been updated with the ENDORSEMENT ID, or this is not the correct file'; + } + + $excel_data_count = count($excel_data); + $endorsement_data_count = count($endorsement_data); + + $this->myLogger->logme('error', 'SI Enhancement_File Validation -- Excel file count : {data}', ['data' => $excel_data_count]); + $this->myLogger->logme('error', 'SI Enhancement File Validation -- Database count : {data}', ['data' => $endorsement_data_count]); + + + $difference = $endorsement_data_count - $excel_data_count; + + $status = 'in-progress'; + if ($excel_data_count < $endorsement_data_count) { + + $status = 'in-progress-partially'; + $partially_updated_data = 'Expected : ' . $endorsement_data_count . ', ' . 'Updated : ' . $excel_data_count . ', ' . 'difference : ' . $difference; + $this->myLogger->logme('error', 'SI Enhancement File Validation -- excel file count partially : {data}', ['data' => $partially_updated_data]); + } + + + + if ($endorsement_data_count < $excel_data_count) { + + $data = [ + 'status' => 'failed-3', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'SI_Enhancement_FileValidation excel file count ( {excel} ) exceeds db count ( {db} )', ['db' => $endorsement_data_count, 'excel' => $excel_data_count]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The Excel record count exceeds the DB record count. excel file count : ' . $excel_data_count . 'db count : ' . $endorsement_data_count; + } + + + $errors = []; // Initialize an array to store errors + $missing_id = []; + $batch_list_id = []; + + foreach ($endorsement_data as $key => $endorsement_value) { + + $key = $key + 1; + + if (!isset($excel_data[$key])) { + break; + } + + + if ($excel_data[$key][19] === null) { + $missing_id[$key][] = [ + 'row' => $key, + 'column' => 19, + ]; + } + + + if ($endorsement_value['emp_name'] != $excel_data[$key][1]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 1, + 'db_data' => $endorsement_value['emp_name'], + 'excel_data' => $excel_data[$key][1] + ]; + } + + if ($endorsement_value['emp_code'] != $excel_data[$key][2]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 2, + 'db_data' => $endorsement_value['emp_code'], + 'excel_data' => $excel_data[$key][2] + ]; + } + + if ($endorsement_value['emp_relationship_code'] != $excel_data[$key][4]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 4, + 'db_data' => $endorsement_value['emp_relationship_code'], + 'excel_data' => $excel_data[$key][4] + ]; + } + + if ($endorsement_value['emp_dob'] != $excel_data[$key][5]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 5, + 'db_data' => $endorsement_value['emp_dob'], + 'excel_data' => $excel_data[$key][5] + ]; + } + + if ($endorsement_value['emp_gender'] != $excel_data[$key][6]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 6, + 'db_data' => $endorsement_value['emp_gender'], + 'excel_data' => $excel_data[$key][6] + ]; + } + + + if ($endorsement_value['pre_existing_alignments'] != $excel_data[$key][7]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 7, + 'db_data' => $endorsement_value['pre_existing_alignments'], + 'excel_data' => $excel_data[$key][7] + ]; + } + + if ($endorsement_value['new_basic_cover_si'] != $excel_data[$key][8]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 8, + 'db_data' => $endorsement_value['new_basic_cover_si'], + 'excel_data' => $excel_data[$key][8] + ]; + } + + if ($endorsement_value['old_basic_cover_si'] != $excel_data[$key][9]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 9, + 'db_data' => $endorsement_value['old_basic_cover_si'], + 'excel_data' => $excel_data[$key][9] + ]; + } + + + + if ($endorsement_value['date_of_coverage'] != $excel_data[$key][10]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 10, + 'db_data' => $endorsement_value['date_of_coverage'], + 'excel_data' => $excel_data[$key][10] + ]; + } + + if ($endorsement_value['policy_end_date'] != $excel_data[$key][11]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 11, + 'db_data' => $endorsement_value['policy_end_date'], + 'excel_data' => $excel_data[$key][11] + ]; + } + + if ($endorsement_value['no_of_days'] != $excel_data[$key][12]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 12, + 'db_data' => $endorsement_value['no_of_days'], + 'excel_data' => $excel_data[$key][12] + ]; + } + + if ($endorsement_value['old_si_premium'] != $excel_data[$key][13]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 13, + 'db_data' => $endorsement_value['old_si_premium'], + 'excel_data' => $excel_data[$key][13] + ]; + } + + if ($endorsement_value['new_si_premium'] != $excel_data[$key][14]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 14, + 'db_data' => $endorsement_value['new_si_premium'], + 'excel_data' => $excel_data[$key][14] + ]; + } + + if ($endorsement_value['difference_premium'] != $excel_data[$key][15]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 15, + 'db_data' => $endorsement_value['difference_premium'], + 'excel_data' => $excel_data[$key][15] + ]; + } + + if ($endorsement_value['pro_rata_premimum'] != $excel_data[$key][16]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 16, + 'db_data' => $endorsement_value['pro_rata_premimum'], + 'excel_data' => $excel_data[$key][16] + ]; + } + + if ($endorsement_value['gst'] != $excel_data[$key][17]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 17, + 'db_data' => $endorsement_value['gst'], + 'excel_data' => $excel_data[$key][17] + ]; + } + + $batch_list_id[] = $endorsement_value['primaryKey']; + } + + + $error_count = count($errors); + $json_errors = json_encode($errors); + + + $missing_id_count = count($missing_id); + $json_missing_id = json_encode($missing_id); + + // dd($error_count, $missing_id_count, $json_errors, $json_missing_id, $batch_list_id); + + + if ($missing_id_count > 0) { + + $data = [ + + 'count' => $endorsement_data_count, + 'error_data' => $json_missing_id, + 'status' => 'failed', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The ENDORSEMENT ID column is either partially or entirely empty.'; + } + + + if ($error_count > 0) { + + $data = [ + + 'count' => $endorsement_data_count, + 'error_data' => $json_errors, + 'status' => 'failed', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + return 'SI ENHANCEMENT File Validation Failed'; + } else { + + $data = [ + 'count' => $endorsement_data_count, + 'status' => $status, + 'error_data' => $partially_updated_data ?? null, + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + + + foreach ($batch_list_id as $key => $value) { + + $data = [ + 'emp_policy_id' => $value, + 'batch_code' => $batch_code, + 'created_by' => $user_id, + ]; + + $insert = $this->batchListModel->insert($data); + } + + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'importSIEnhancementUpdateEndorsementID', 'payload' => ['file_id' => $file_id]]); + + // $this->importSIEnhancementUpdateEndorsementID(['file_id' => $file_id]); + return 'SI Enhancement_File Validation -- Success'; + } + } + + + public function importSIEnhancementUpdateEndorsementID($params) { - $client_id = $import_data['client_id']; - $client_policy_id = $import_data['client_policy_id']; - $client_branch_id = $import_data['client_branch_id']; - $file = $import_data['file']; + $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- Function called'); + + $file_id = $params['file_id']; + $file = $this->batchFileModel->find($file_id); + if (!$file) { + + $data = [ + 'status' => 'failed-4', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- The Physical file not found -- File id : {data}', ['data' => $file_id]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'SI Enhancement Update Endorsement ID -- The Physical file not found'; // Return error code if file not found + } + + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $client_branch_id = $file['client_branch_id']; + $status = $file['status']; + $batch_code = $file['batch_code']; + $user_id = $file['created_by']; - $data = $this->readExcelToArray($file); - unset($data[0]); - array_pop($data); - $count = count($data); + $status_val = 'success'; + if ($status == 'in-progress-partially') { + $status_val = 'partially success'; + } - $missing_id = []; - $empty_emp_tpa_uh_ids = []; + $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- file name : {data}', ['data' => $file['file_name']]); + + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + + $emp_count = count($excel_data); //excel file count + + $emp_policy_ids = []; + $employeeIds = []; + $emp_details = []; + $endorsement_id = []; + $endorsement_details = []; $totals = 0; - foreach ($data as $key => $value) { - try { + foreach ($excel_data as $key => $value) { - if ($value[15] === null) { - $missing_id[] = $key + 1; - } + $emp_name = $value[1]; + $emp_code = $value[2]; + $endorsement_id[] = $value[19]; + $totals += $value[18]; - $totals += $value[13]; - $emp_name = $value[2]; //employee name - $emp_code = $value[1]; //employee code - $date_of_exit = $value[7]; // date of releving - $endorsement_id = $value[15] != null ? $value[15] : ''; //endorsement id + $result = $this->empEndorsementModel - $db = \Config\Database::connect(); + ->select('emp_endorsement.*, employees.id as emp_id, employee_polices.id as emp_policy_id') + ->join('employee_polices', 'employee_polices.id = emp_endorsement.pk') + ->join('employees', 'employees.emp_code = emp_endorsement.emp_code') + ->where('employees.emp_code', $emp_code) + ->where('employees.name', $emp_name) + ->where('employees.client_id', $client_id) + ->where('employees.client_branch_id', $client_branch_id) + ->where('emp_endorsement.actions', 'si') + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employee_polices.is_active', 1) + ->where('employee_polices.status', 'active') + ->where('employees.is_active', 1) + ->where('employees.emp_status', 'active') + ->where('(emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = "")') + ->groupBy('emp_endorsement.group_key') + ->first(); - // Execute the query - $query = $db->table('emp_endorsement') - ->select('emp_endorsement.id') - ->join('employee_polices', 'employee_polices.id = emp_endorsement.pk') - ->join('employees', 'employees.emp_code = emp_endorsement.emp_code') - ->where('employees.emp_code', $emp_code) - ->where('employees.name', $emp_name) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('emp_endorsement.actions', 'd') - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('(emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = "")') - ->groupBy('emp_endorsement.group_key'); - - $result = $query->get()->getRowArray(); - if (isset($result['id']) && $result['id'] !== null) { - $empty_emp_tpa_uh_ids[] = $result['id']; - } - } catch (\Exception $e) { - // Handle the exception here - return 0; + if (isset($result['id']) && $result['id'] !== null) { + $emp_policy_ids[] = array('id' => $result['emp_policy_id'], 'is_active' => 0); + $employeeIds[] = $result['emp_policy_id']; + $endorsement_details[] = array('id' => $result['id'], 'group_key' => $result['group_key'], 'endorsement_id' => $value[19], 'status' => 'complete'); } + + $empData = $this->employeePolicyModel + ->select('employee_polices.*') + ->join('employees', 'employee_polices.employee_id = employees.id') + ->where('employees.emp_code', $emp_code) + ->where('employees.name', $emp_name) + ->where('employees.client_id', $client_id) + ->where('employees.client_branch_id', $client_branch_id) + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employee_polices.is_active', 1) + ->where('employee_polices.status', 'active') + ->where('employees.is_active', 1) + ->where('employees.emp_status', 'active') + ->first(); + + unset($empData['id'], $empData['created_by'], $empData['created_at'], $empData['updated_by'], $empData['updated_at'], $empData['is_active']); + + $empData['basic_cover_si'] = $value[8]; + $empData['premium'] = $value[14]; + $empData['si_enhancement_date'] = $value[10]; + $empData['rata_premimum'] = $value[16]; + $empData['gst'] = $value[17]; + $empData['created_by'] = $user_id; + + $emp_details[] = $empData; } $rounded_totals = round($totals, 2); - $missing_id_count = count($missing_id); - $empty_id_count = count($empty_emp_tpa_uh_ids); - // if($missing_id_count != $count){ + // dd($emp_policy_ids, $emp_details, $endorsement_details); - // return 2; + $this->employeePolicyModel->updateBatch($emp_policy_ids, 'id'); + + $db = \Config\Database::connect(); + $db->transStart(); + + $this->employeePolicyModel->insertBatch($emp_details); + + $insertedIds = []; + $startId = $db->insertID(); // Get the first inserted ID + + for ($i = 0; $i < count($emp_details); $i++) { + $insertedIds[] = $startId + $i; + } + + $db->transComplete(); + + // if ($db->transStatus() === FALSE) { + // // Handle the error, rollback, etc. + // } else { + // // Transaction successful + // print_r($insertedIds); // This will print the array of inserted IDs // } + + $this->employeePolicyModel->bulkUpdateForEndorsement($endorsement_details); - if ($missing_id_count != 0) { - - return 2; - } - - // if($empty_emp_tpa_uh_ids != $count){ - - // return 3; - // } - - if ($empty_id_count == 0) { - - return 3; - } - - // dd($count, $missing_id_count, $empty_id_count, $data, $empty_emp_tpa_uh_ids); - - $is_moved = $file->move(WRITEPATH . 'uploads/import_excel'); - $filename = $file->getName(); - - $this->myLogger->logme('error', 'Deletion Import file name : {data}', ['data' => $filename]); - $random_number_count = 4; - $batch_code = generate_random_string($random_number_count); - $this->myLogger->logme('error', 'Deletion Import BATCH CODE : {data}', ['data' => $batch_code]); + // Update batch file status and amount + $this->batchFileModel->update($file_id, [ + 'count' => $emp_count, + 'status' => $status_val, + 'amount' => $rounded_totals, + ]); - $import_data['batch_code'] = $batch_code; - $import_data['created_by'] = get_session_userid(); - $import_data['file_name'] = $filename; - $import_data['amount'] = $rounded_totals; - $insert = $this->batchFileModel->insert($import_data); - $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first(); - - $batch_code_for_batch_list['batch_code'] = $batch_file_batch_code['batch_code']; - $batch_code_for_batch_list['created_by'] = get_session_userid(); - - $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $batch_file_batch_code['file_name']; - - if (!file_exists($file_name_with_path)) { - return 2; - } - - $data = read_excel_file_to_array($file_name_with_path); - unset($data[0]); - array_pop($data); - - $count = count($data); - $this->batchFileModel->where('id', $insert)->set('count', $count)->update(); - - $employeeIds = []; - foreach ($data as $key => $value) { - - if (!empty($value) && isset($value[15])) { - - $emp_name = $value[2]; //employee name - $emp_code = $value[1]; //employee code - $date_of_exit = $value[7]; // date of releving - - // echo $emp_name .'-'. $emp_code .'-'. $date_of_exit; die; - $endorsement_id = $value[15] != null ? $value[15] : ''; //endorsement id - - $val = $this->employeePolicyModel - ->select('employee_polices.id') - ->join('employees', 'employees.id = employee_polices.employee_id') - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('employees.name', $emp_name) - ->where('employees.emp_code', $emp_code) - ->where('employee_polices.is_active', 1) - ->first(); + $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- Employee count : {data}', ['data' => $emp_count]); + $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- Batch File status : {data}', ['data' => $status_val]); - if ($val !== null) { + $file_data = $this->getDataByFileId($file_id, 'success'); + $this->setPullNotification($file_data); - $id = $val['id']; - $batch_code_for_batch_list['emp_policy_id'] = $id; - $this->batchListModel->insert($batch_code_for_batch_list); - array_push($employeeIds, $id); - } - - // $updateData = [ - // 'emp_code' =>$emp_code, - // 'client_id' =>$client_id, - // 'client_policy_id' =>$client_policy_id, - // 'emp_name' =>$emp_name, - // 'endorsement_id' =>$endorsement_id, - // ]; - - // $this->employeePolicyModel->updateEndoresmentIdForDeletion($updateData); - - $deletionDataForEmployee = $this->empEndorsementModel - ->select('emp_endorsement.new_value, emp_endorsement.id as ee_id, employees.id') - ->join('employees', 'emp_endorsement.emp_code = employees.emp_code') - ->join('employee_polices', 'employee_polices.employee_id = employees.id') - ->where('emp_endorsement.emp_code', $emp_code) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('employee_polices.client_policy_id', $client_policy_id) - ->where('emp_endorsement.name', $emp_name) - ->where('emp_endorsement.field_name', 'emp_status') - ->first(); - - $deletionDataForEmployee['updated_by'] = get_session_userid(); - $this->employeeModel->save($deletionDataForEmployee); - - $e_Data = [ - 'endorsement_id' => $endorsement_id, - 'status' => 'complete', - ]; - $group_key = $this->empEndorsementModel->select('group_key')->where('id', $deletionDataForEmployee['ee_id'])->first(); - $this->empEndorsementModel->where('group_key', $group_key)->set($e_Data)->update(); - - $fetchData = [ - 'emp_code' => $emp_code, - 'client_policy_id' => $client_policy_id, - 'emp_name' => $emp_name, - ]; - - $deletionDataForEmployeePolicy = $this->employeePolicyModel->fetchEmpEndorsementData($fetchData); - $deletionDataForEmployeePolicy['updated_by'] = get_session_userid(); - $this->employeePolicyModel->save($deletionDataForEmployeePolicy); - - // $query = $this->employeePolicyModel->getLastQuery(); - // echo $query . "
"; - - } else { - - return 0; - } - } + //call the cash deposite function $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id); - $depositeData = [ - 'employeeIds' => $employeeIds, + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForSIEnhancement','payload' => [ + 'employeeIds' => $insertedIds, 'client_id' => $client_id, - 'client_branch_id' => $client_branch_id, 'client_policy_id' => $client_policy_id, - 'count' => $count, - 'event' => $import_data['event_type'], + 'client_branch_id' => $client_branch_id, + 'count' => $emp_count, + 'event' => $file['event_type'], 'policy_name' => $policy_name['policy_name'], - ]; + 'user_id' => $user_id, + ]]); - $this->cashDepositCalculationForDeletion($depositeData); - return 1; + return 'SI Enhancement Update Endorsement ID -- ' . $status_val . '-- Updated Count : ' . $emp_count; } + //Endorsement Deletion + + public function importDeletionValidation($params) + { + $file_id = $params['file_id']; + $file = $this->batchFileModel->where('id', $file_id)->first(); + + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $client_branch_id = $file['client_branch_id']; + $batch_code = $file['batch_code']; + $user_id = $file['created_by']; + + + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + + if (!file_exists($file_name_with_path)) { + return 'The Physical file not found'; + } + + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + array_pop($excel_data); + + + $db = \Config\Database::connect(); + + $sql = " + SELECT DISTINCT + a.id as endorsement_primarykey, + a.group_key, + employee_polices.id as primaryKey, + employees.name AS emp_name, + employees.emp_code AS emp_code, + employees.dob AS emp_dob, + employees.gender AS emp_gender, + employees.relationship AS emp_relationship, + 'Has Define' as emp_type, + + employee_polices.basic_cover_si, + employee_polices.uhid as risk_id, + employee_polices.policy_end_date, + employee_polices.rata_premimum as premium, + + + deletiondata.empstatus, + deletiondata.changeevent, + deletiondata.dateofexit, + deletiondata.reasonforexit, + deletiondata.status, + + DATEDIFF(employee_polices.policy_end_date, deletiondata.dateofexit) AS no_of_days, + ROUND((employee_polices.rata_premimum * DATEDIFF(employee_polices.policy_end_date, deletiondata.dateofexit)) / 365, 2) AS pro_rata_premium, + ROUND(((employee_polices.rata_premimum * DATEDIFF(employee_polices.policy_end_date, deletiondata.dateofexit)) / 365) * 0.18, 2) AS gst, + ROUND(((employee_polices.rata_premimum * DATEDIFF(employee_polices.policy_end_date, deletiondata.dateofexit)) / 365) + (((employee_polices.rata_premimum * DATEDIFF(employee_polices.policy_end_date, deletiondata.dateofexit)) / 365) * 0.18), 2) AS total + FROM + emp_endorsement a + LEFT JOIN + employees ON a.emp_code = employees.emp_code and a.pk = employees.id + LEFT JOIN + employee_polices ON employees.id = employee_polices.employee_id + + LEFT JOIN( + + select aa.emp_code, aa.new_value as 'empstatus', bb.new_value as 'changeevent', cc.new_value as 'dateofexit', dd.new_value as 'reasonforexit', ee.new_value as 'status' from + + ( SELECT a1.emp_code, a1.field_name, a1.new_value from emp_endorsement as a1 where a1.field_name = 'emp_status') aa + left join + ( SELECT b1.emp_code, b1.field_name, b1.new_value from emp_endorsement as b1 where b1.field_name = 'change_event') bb on aa.emp_code = bb.emp_code + left join + ( SELECT c1.emp_code, c1.field_name, c1.new_value from emp_endorsement as c1 where c1.field_name = 'date_of_exit') cc on aa.emp_code = cc.emp_code + left join + ( SELECT d1.emp_code, d1.field_name, d1.new_value from emp_endorsement as d1 where d1.field_name = 'reason_for_exit') dd on aa.emp_code = dd.emp_code + left JOIN + ( SELECT e1.emp_code, e1.field_name, e1.new_value from emp_endorsement as e1 where e1.field_name = 'status') ee on aa.emp_code = ee.emp_code + + ) as deletiondata on a.emp_code = deletiondata.emp_code + + WHERE employee_polices.client_policy_id = '$client_policy_id' + AND employees.client_branch_id = '$client_branch_id' + AND a.actions = 'd' + AND employee_polices.is_active = 1 + AND employee_polices.status = 'active' + AND employees.is_active = 1 + AND employees.emp_status = 'active' + AND (a.endorsement_id IS NULL OR a.endorsement_id = '') + group by group_key + "; + + $query = $db->query($sql); + $endorsement_data = $query->getResultArray(); + + + if ($endorsement_data == null || empty($endorsement_data)) { + + $data = [ + 'status' => 'failed-1', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'Deletion File Validation ENDORSEMENT ID already updated'); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The list of employees provided has already been updated with the ENDORSEMENT ID, or this is not the correct file'; + $this->myLogger->logme('error', 'Deletion File Validation ENDORSEMENT ID already updated or the uploadedfile is not correct'); + } + + $excel_data_count = count($excel_data); + $endorsement_data_count = count($endorsement_data); + + $this->myLogger->logme('error', 'Deletion File Validation excel file count : {data}', ['data' => $excel_data_count]); + $this->myLogger->logme('error', 'Deletion File Validation database count : {data}', ['data' => $endorsement_data_count]); + + + $difference = $endorsement_data_count - $excel_data_count; + + $status = 'in-progress'; + if ($excel_data_count < $endorsement_data_count) { + + $status = 'in-progress-partially'; + $partially_updated_data = 'Expected : ' . $endorsement_data_count . ', ' . 'Updated : ' . $excel_data_count . ', ' . 'difference : ' . $difference; + $this->myLogger->logme('error', 'Deletion File Validation excel file count partially : {data}', ['data' => $partially_updated_data]); + } + + + + if ($endorsement_data_count < $excel_data_count) { + + $data = [ + 'status' => 'failed-3', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'Deletion File Validation excel file count ( {excel} ) exceeds db count ( {db} )', ['db' => $endorsement_data_count, 'excel' => $excel_data_count]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The Excel record count exceeds the DB record count. excel file count : ' . $excel_data_count . ' db count : ' . $endorsement_data_count; + } + + + $errors = []; // Initialize an array to store errors + $missing_id = []; + $batch_list_id = []; + + foreach ($endorsement_data as $key => $endorsement_value) { + + $key = $key + 1; + + if (!isset($excel_data[$key])) { + break; + } + + + if ($excel_data[$key][15] === null) { + $missing_id[$key][] = [ + 'row' => $key, + 'column' => 15, + ]; + } + + + if ($endorsement_value['emp_name'] != $excel_data[$key][2]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 2, + 'db_data' => $endorsement_value['emp_name'], + 'excel_data' => $excel_data[$key][2] + ]; + } + + if ($endorsement_value['emp_code'] != $excel_data[$key][1]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 1, + 'db_data' => $endorsement_value['emp_code'], + 'excel_data' => $excel_data[$key][1] + ]; + } + + if ($endorsement_value['emp_dob'] != $excel_data[$key][3]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 3, + 'db_data' => $endorsement_value['emp_dob'], + 'excel_data' => $excel_data[$key][3] + ]; + } + + if ($endorsement_value['emp_gender'] != $excel_data[$key][4]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 4, + 'db_data' => $endorsement_value['emp_gender'], + 'excel_data' => $excel_data[$key][4] + ]; + } + + + if ($endorsement_value['emp_relationship'] != $excel_data[$key][5]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 5, + 'db_data' => $endorsement_value['emp_relationship'], + 'excel_data' => $excel_data[$key][5] + ]; + } + + if ($endorsement_value['basic_cover_si'] != $excel_data[$key][6]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 6, + 'db_data' => $endorsement_value['basic_cover_si'], + 'excel_data' => $excel_data[$key][6] + ]; + } + + if ($endorsement_value['dateofexit'] != $excel_data[$key][7]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 7, + 'db_data' => $endorsement_value['dateofexit'], + 'excel_data' => $excel_data[$key][7] + ]; + } + + if ($endorsement_value['policy_end_date'] != $excel_data[$key][8]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 8, + 'db_data' => $endorsement_value['policy_end_date'], + 'excel_data' => $excel_data[$key][8] + ]; + } + + if ($endorsement_value['no_of_days'] != $excel_data[$key][9]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 9, + 'db_data' => $endorsement_value['no_of_days'], + 'excel_data' => $excel_data[$key][9] + ]; + } + + + + if ($endorsement_value['premium'] != $excel_data[$key][10]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 10, + 'db_data' => $endorsement_value['premium'], + 'excel_data' => $excel_data[$key][10] + ]; + } + + if ($endorsement_value['pro_rata_premium'] != $excel_data[$key][11]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 11, + 'db_data' => $endorsement_value['pro_rata_premium'], + 'excel_data' => $excel_data[$key][11] + ]; + } + + if ($endorsement_value['gst'] != $excel_data[$key][12]) { + $errors[$key][] = [ + 'row' => $key, + 'column' => 12, + 'db_data' => $endorsement_value['gst'], + 'excel_data' => $excel_data[$key][12] + ]; + } + + $batch_list_id[] = array('emp_policy_id' =>$endorsement_value['primaryKey'], 'batch_code' => $batch_code, 'created_by' => $user_id); + } + + + $error_count = count($errors); + $json_errors = json_encode($errors); + + + $missing_id_count = count($missing_id); + $json_missing_id = json_encode($missing_id); + + // dd($error_count, $missing_id_count, $json_errors, $json_missing_id, $batch_list_id); + + if ($missing_id_count > 0) { + + $data = [ + + 'count' => $endorsement_data_count, + 'error_data' => $json_missing_id, + 'status' => 'failed', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'The ENDORSEMENT ID column is either partially or entirely empty.'; + } + + + if ($error_count > 0) { + + $data = [ + 'count' => $endorsement_data_count, + 'error_data' => $json_errors, + 'status' => 'failed', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'Deletion File Validation Failed'; + + } else { + + $data = [ + 'count' => $endorsement_data_count, + 'status' => $status, + 'error_data' => $partially_updated_data ?? null, + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $insert = $this->batchListModel->insertBatch($batch_list_id); + + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'importDeletionUpdateEndorsementID', 'payload' => ['file_id' => $file_id]]); + + // $this->importDeletionUpdateEndorsementID(['file_id' => $file_id]); + + return 'Deletion File Validation ENDORSEMENT ID validated the file Successfully'; + } + + } + + + public function importDeletionUpdateEndorsementID($params) + { + + $this->myLogger->logme('error', 'Deletion Update Endorsement ID -- Function called'); + + $file_id = $params['file_id']; + $file = $this->batchFileModel->find($file_id); + if (!$file) { + + $data = [ + 'status' => 'failed-4', + ]; + + $this->batchFileModel->where('id', $file_id)->set($data)->update(); + $this->myLogger->logme('error', 'Deletion Update Endorsement ID -- The Physical file not found -- File id : {data}', ['data' => $file_id]); + + $file_data = $this->getDataByFileId($file_id, 'failure'); + $this->setPullNotification($file_data); + + return 'Deletion Update Endorsement ID -- The Physical file not found'; // Return error code if file not found + } + + $client_id = $file['client_id']; + $client_policy_id = $file['client_policy_id']; + $client_branch_id = $file['client_branch_id']; + $status = $file['status']; + $batch_code = $file['batch_code']; + $user_id = $file['created_by']; + + + $status_val = 'success'; + if ($status == 'in-progress-partially') { + + $status_val = 'partially success'; + } + + $this->myLogger->logme('error', 'Deletion Update Endorsement ID -- file name : {data}', ['data' => $file['file_name']]); + + $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name']; + $excel_data = $this->readExcelFileToArray($file_name_with_path); + unset($excel_data[0]); + array_pop($excel_data); + + $emp_count = count($excel_data); //excel file count + + $employees_table_data = []; + $emp_endorsement_table_data = []; + $employee_policy_table_data = []; + $employee_policy_table_primaryKey = []; + + $totals = 0; + + + foreach ($excel_data as $key => $value) { + + $emp_name = $value[2]; //employee name + $emp_code = $value[1]; //employee code + $totals = $totals + $value[13]; + + + $fetch_data = [ + 'client_policy_id' => $client_policy_id, + 'client_branch_id' => $client_branch_id, + 'emp_name' => $emp_name, + 'emp_code' => $emp_code + ]; + $result = $this->employeePolicyModel->fetchEmpEndorsementData($fetch_data); + + // dd($result['emp_endorsement_primarykey']); + + if (isset($result['emp_endorsement_primarykey']) && $result['emp_endorsement_primarykey'] !== null) { + + $employee_policy_table_primaryKey[] = $result['emp_policy_primarykey']; //for cash deposite + $employee_policy_table_data[] = array('id' => $result['emp_policy_primarykey'], 'date_of_exit' => $result['date_of_exit'], 'reason_for_exit' => $result['reason_for_exit'], 'status' => $result['status'], 'is_active' => 0); + $employees_table_data[] = array('id' => $result['employees_primarykey'], 'emp_status' => $result['status'], 'is_active' => 0); + $emp_endorsement_table_data[] = array('id' => $result['emp_endorsement_primarykey'], 'group_key' => $result['group_key'], 'endorsement_id' => $value[15], 'status' => 'complete'); + } + + } + + $rounded_totals = round($totals, 2); + + // dd($employees_table_data, $emp_endorsement_table_data, $employee_policy_table_data, $employee_policy_table_primaryKey, $totals, $emp_count); + + + // Check if $employees_table_data is null or empty + if (empty($employees_table_data)) { + return ['error' => true, 'message' => 'Employees table data is empty or null.']; + } + + // Check if $employee_policy_table_data is null or empty + if (empty($employee_policy_table_data)) { + return ['error' => true, 'message' => 'Employee policy table data is empty or null.']; + } + + // Check if $emp_endorsement_table_data is null or empty + if (empty($emp_endorsement_table_data)) { + return ['error' => true, 'message' => 'Employee endorsement table data is empty or null.']; + } + + $this->employeeModel->updateBatch($employees_table_data, 'id'); + $this->employeePolicyModel->updateBatch($employee_policy_table_data, 'id'); + $this->employeePolicyModel->bulkUpdateForEndorsement($emp_endorsement_table_data); + + // Update batch file status and amount + $this->batchFileModel->update($file_id, [ + 'count' => $emp_count, + 'status' => $status_val, + 'amount' => $rounded_totals, + ]); + + + $this->myLogger->logme('error', 'Deletion Update Endorsement ID -- Employee count : {data}', ['data' => $emp_count]); + $this->myLogger->logme('error', 'Deletion Update Endorsement ID -- Batch File status : {data}', ['data' => $status_val]); + + + $file_data = $this->getDataByFileId($file_id, 'success'); + $this->setPullNotification($file_data); + + //call the cash deposite function + + $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id); + + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForDeletion', 'payload' => [ + 'employeeIds' => $employee_policy_table_primaryKey, + 'client_id' => $client_id, + 'client_policy_id' => $client_policy_id, + 'client_branch_id' => $client_branch_id, + 'count' => $emp_count, + 'event' => $file['event_type'], + 'policy_name' => $policy_name['policy_name'], + 'user_id' => $user_id, + ]]); + + return 'Deletion Update Endorsement ID -- ' . $status_val . '-- Updated Count : ' . $emp_count; + } + + /** * The below functions are Calculates and records cash deposits for employee policies at inception. * @@ -1795,16 +2631,17 @@ class EmpDataServiceController extends BaseController public function cashDepositCalculationForSIEnhancement($arrayData) - { + { + // return $arrayData; + if (!empty($arrayData)) { $amount = $this->employeePolicyModel->query(" - SELECT - SUM(ROUND((employee_polices.premium * DATEDIFF(employee_polices.policy_end_date, employee_polices.si_enhancement_date)) / 365, 2) + - ROUND(((employee_polices.premium * DATEDIFF(employee_polices.policy_end_date, employee_polices.si_enhancement_date)) / 365) * 0.18, 2)) AS total_sum + SELECT SUM(rata_premimum + gst) AS total_sum FROM employee_polices WHERE id IN (" . implode(',', $arrayData['employeeIds']) . ") - ")->getRow(); + ")->getRow(); + $insurer_id = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first(); $description = 'The following amount of ' . $amount->total_sum . ' has been credited for the ' . $arrayData['count'] . ' employees at ' . remove_underscore_capitalize_first_letter($arrayData['event']) . ' to ' . remove_underscore_capitalize_first_letter($arrayData['policy_name']) . '.'; @@ -1816,11 +2653,12 @@ class EmpDataServiceController extends BaseController 'insurer_id' => $insurer_id['insurer_id'], 'description' => $description, 'transaction_type' => 'Debit', - 'updated_by' => get_session_userid(), + 'updated_by' => $arrayData['user_id'], 'is_active' => 1, ]; - $response = DepositHelper::saveDeposit($data, get_session_userid()); - return true; + $response = DepositHelper::saveDeposit($data, $arrayData['user_id']); + $msg = "SI Enhancement Cash Deposite Updated Successfully -- " . $description; + return [$msg, $response]; // print_r($response); // $query = $this->employeePolicyModel->getLastQuery(); // echo $query . "
"; @@ -1839,11 +2677,9 @@ class EmpDataServiceController extends BaseController // echo '
';
             // print_r($arrayData); die;
             $amount = $this->employeePolicyModel->query("
-                SELECT
-                    SUM(ROUND((employee_polices.premium * DATEDIFF(employee_polices.policy_end_date, employee_polices.date_of_exit)) / 365, 2) +
-                        ROUND(((employee_polices.premium * DATEDIFF(employee_polices.policy_end_date, employee_polices.date_of_exit)) / 365) * 0.18, 2)) AS total_sum
-                FROM employee_polices
-                WHERE id IN (" . implode(',', $arrayData['employeeIds']) . ")
+                SELECT SUM(rata_premimum + gst) AS total_sum
+                    FROM employee_polices
+                    WHERE id IN (" . implode(',', $arrayData['employeeIds']) . ")
                 ")->getRow();
 
             $insurer_id = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
@@ -1857,10 +2693,13 @@ class EmpDataServiceController extends BaseController
                 'insurer_id' => $insurer_id['insurer_id'],
                 'description' => $description,
                 'transaction_type' => 'Credit',
-                'updated_by' => get_session_userid(),
+                'updated_by' => $arrayData['user_id'],
                 'is_active' => 1,
             ];
-            $response = DepositHelper::saveDeposit($data, get_session_userid());
+            $response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
+            $msg = "Deletion Cash Deposite Updated Successfully -- " . $description;
+            return [$msg, $response];
+
             return true;
             // print_r($response);
             // $query = $this->employeePolicyModel->getLastQuery();
@@ -2210,15 +3049,26 @@ class EmpDataServiceController extends BaseController
 
     public function readExcelFileToArray($path)
     {
-
         $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($path);
         $sheet = $spreadsheet->getActiveSheet();
-
+    
         $highestRowAndColumn = $sheet->getHighestRowAndColumn();
         $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
-
-        return $excel_data;
+    
+        // Filter out empty or null rows
+        $filtered_data = array_filter($excel_data, function($row) {
+            // Check if all cells in the row are empty or null
+            foreach ($row as $cell) {
+                if (!is_null($cell) && $cell !== '') {
+                    return true;
+                }
+            }
+            return false;
+        });
+    
+        return $filtered_data;
     }
+    
 
 
     public function removeOldExportInfoFromBatchFile($params){
@@ -2242,7 +3092,6 @@ class EmpDataServiceController extends BaseController
 
                 $id = $batch_data['id'];
                 $batch_code = $batch_data['batch_code'];
-
                 $this->batchFileModel->where('id', $id)->delete();
                 $this->batchListModel->where('batch_code', $batch_code)->delete();
 
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index 3e73f9a8..feba609b 100644
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -358,7 +358,7 @@ class EmployeeController extends AdminController
     public function importExport()
     {
 
-        $this->myLogger->logme('error', 'importExport function called');
+        $this->myLogger->logme('error', 'Import Export --  Function called');
         $empDataServiceController = new EmpDataServiceController();
 
         $client_id = $this->request->getPost('client_id');
@@ -370,10 +370,10 @@ class EmployeeController extends AdminController
 
         $client_data = $this->clientModel->where('id', $client_id)->first();
         $policy_name_and_branch_name = $this->clientPolicyModel->select('policies.name, client_branch.branch_code')
-                            ->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
-                            ->join('policies', 'policies.id = client_policy.policy_id')
-                            ->where('client_policy.id', $client_policy_id)
-                            ->first();
+        ->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
+        ->join('policies', 'policies.id = client_policy.policy_id')
+        ->where('client_policy.id', $client_policy_id)
+            ->first();
         $file_name = generate_filename($client_data['short_name'], $event_type, $actions, $insurer_or_tpa, $policy_name_and_branch_name['name'], $policy_name_and_branch_name['branch_code']);
 
         $batch_data = [
@@ -386,20 +386,19 @@ class EmployeeController extends AdminController
             'file_name' => $file_name,
         ];
 
-        //  $event_type = 'si_enhancement';
 
         if ($actions == 'export') {
 
             if ($event_type == 'inception' || $event_type == 'addition' || $event_type == 'dependent_addition') {
 
                 $return = $empDataServiceController->generateExcelForAdditionandInception($batch_data);
-               
-                if($return == 0){
+
+                if ($return == 0) {
 
                     session()->setFlashdata('error', "Insufficient deposit amount.");
                     return redirect()->to(base_url('employee/upload'));
-                } 
-                
+                }
+
                 if (!$return) {
 
                     if ($insurer_or_tpa == 'tpa') {
@@ -409,7 +408,6 @@ class EmployeeController extends AdminController
                         session()->setFlashdata('error', "No data was found for this action. The UHID has already been updated.");
                         return redirect()->to(base_url('employee/upload'));
                     }
-
                 } else {
                     $this->myLogger->logme('error', 'Successfully exported Excel file in {data}.', ['data' => $event_type]);
                 }
@@ -425,6 +423,13 @@ class EmployeeController extends AdminController
             } else if ($event_type == 'si_enhancement') {
 
                 $return = $empDataServiceController->generateExcelForSIEnhancement($batch_data);
+
+                if ($return == 0) {
+
+                    session()->setFlashdata('error', "Insufficient deposit amount.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
+
                 if (!$return) {
                     session()->setFlashdata('error', 'No data found about this action');
                     return redirect()->to(base_url('employee/upload'));
@@ -444,29 +449,25 @@ class EmployeeController extends AdminController
         } else if ($actions == 'import') {
 
             $batch_data['file'] = $this->request->getFile('import_file_data');
-            
+            $file = $this->request->getFile('import_file_data');
+
+            $is_moved = $file->move(WRITEPATH . 'uploads/import_excel');
+            $filename = $file->getName();
+            $this->myLogger->logme('error', 'Inception Import file name : {data}', ['data' => $filename]);
+
+            $random_number_count = 4;
+            $batch_data['batch_code'] = generate_random_string($random_number_count);
+            $batch_data['created_by'] = get_session_userid();
+            $batch_data['status'] = 'pending';
+            $batch_data['file_name'] = $filename;
 
             if ($event_type == 'inception' || $event_type == 'addition' || $event_type == 'dependent_addition') {
 
-
-                $file = $this->request->getFile('import_file_data');
-
-                $is_moved = $file->move(WRITEPATH . 'uploads/import_excel');
-                $filename = $file->getName();
-                $this->myLogger->logme('error', 'Inception Import file name : {data}', ['data' => $filename]);
-        
-        
-                $random_number_count = 4;
-                $batch_data['batch_code'] = generate_random_string($random_number_count);
-                $batch_data['created_by'] = get_session_userid();
-                $batch_data['status'] = 'pending';
-                $batch_data['file_name'] = $filename;
-        
                 $file_id = $this->batchFileModel->insert($batch_data);
 
-                $job_details  = new Jobs();                             
-                $r = Jobs::addJob(['job_name' => 'importInceptionFileValidation','payload' => ['file_id' => $file_id]]);
-        
+                $job_details  = new Jobs();
+                $r = Jobs::addJob(['job_name' => 'importInceptionFileValidation', 'payload' => ['file_id' => $file_id]]);
+
                 $return = 1;
 
                 // $return = $empDataServiceController->importInceptionFileValidation(['file_id' => $file_id]);
@@ -474,71 +475,64 @@ class EmployeeController extends AdminController
                 if ($return == 1) {
                     session()->setFlashdata('success', 'Data updated successfully. File is being validated.');
                     return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 2) {
-                    session()->setFlashdata('error', 'The TPA ID column is either partially or entirely empty.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 0) {
-                    session()->setFlashdata('error', 'Please upload the correct file.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 3) {
-                    session()->setFlashdata('error', 'The list of employees provided has already been updated with the TPA ID, or this is not the correct file');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 4) {
-                    session()->setFlashdata('error', 'The UHID column is either partially or entirely empty.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 5) {
-                    session()->setFlashdata('error', 'The list of employees provided has already been updated with the UHID, or this is not the correct file');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 6) {
-                    session()->setFlashdata('error', 'The Excel record count exceeds the DB record count.');
+                } else {
+                    session()->setFlashdata($return['status'], $return['message']);
                     return redirect()->to(base_url('employee/upload'));
                 }
             } else if ($event_type == 'correction') {
 
-                $return = $empDataServiceController->importExcelDataForCorrection($batch_data);
+                $file_id = $this->batchFileModel->insert($batch_data);
+
+                $job_details  = new Jobs();
+                $r = Jobs::addJob(['job_name' => 'importCorrectionValidation', 'payload' => ['file_id' => $file_id]]);
+
+                $return = 1;
+
+                // $return = $empDataServiceController->importCorrectionValidation(['file_id' => $file_id]);
+
                 if ($return == 1) {
-                    session()->setFlashdata('success', 'Data updated successfully');
+                    session()->setFlashdata('success', 'Data updated successfully. File is being validated.');
                     return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 2) {
-                    session()->setFlashdata('error', 'The Endorsement ID columns are empty.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 0) {
-                    session()->setFlashdata('error', 'Please upload the correct file');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 3) {
-                    session()->setFlashdata('error', 'File already uploaded');
+                } else {
+                    session()->setFlashdata('error', $return);
                     return redirect()->to(base_url('employee/upload'));
                 }
             } else if ($event_type == 'si_enhancement') {
 
-                $return = $empDataServiceController->importExcelDataForSIEnhancement($batch_data);
+
+                $file_id = $this->batchFileModel->insert($batch_data);
+
+                $job_details  = new Jobs();
+                $r = Jobs::addJob(['job_name' => 'importSIEnhancementValidation', 'payload' => ['file_id' => $file_id]]);
+
+                $return = 1;
+
+                // $return = $empDataServiceController->importSIEnhancementValidation(['file_id' => $file_id]);
+
                 if ($return == 1) {
-                    session()->setFlashdata('success', 'Data updated successfully');
+                    session()->setFlashdata('success', 'Data updated successfully. File is being validated.');
                     return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 2) {
-                    session()->setFlashdata('error', 'The Endorsement ID columns are empty.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 0) {
-                    session()->setFlashdata('error', 'Please upload the correct file');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 3) {
-                    session()->setFlashdata('error', 'File already uploaded');
+                } else {
+                    session()->setFlashdata('error', $return);
                     return redirect()->to(base_url('employee/upload'));
                 }
             } else if ($event_type == 'deletion') {
 
-                $return = $empDataServiceController->importExcelDataForDeletion($batch_data);
+                $file_id = $this->batchFileModel->insert($batch_data);
+
+                $job_details  = new Jobs();
+                $r = Jobs::addJob(['job_name' => 'importDeletionValidation', 'payload' => ['file_id' => $file_id]]);
+
+                $return = 1;
+
+                // $return = $empDataServiceController->importDeletionValidation(['file_id' => $file_id]);
+
+
                 if ($return == 1) {
-                    session()->setFlashdata('success', 'Data updated successfully');
+                    session()->setFlashdata('success', 'Data updated successfully. File is being validated.');
                     return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 2) {
-                    session()->setFlashdata('error', 'The Endorsement ID columns are empty.');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 0) {
-                    session()->setFlashdata('error', 'Please upload the correct file');
-                    return redirect()->to(base_url('employee/upload'));
-                } else if ($return == 3) {
-                    session()->setFlashdata('error', 'File already uploaded');
+                } else {
+                    session()->setFlashdata('error', $return);
                     return redirect()->to(base_url('employee/upload'));
                 }
             }
@@ -707,6 +701,9 @@ class EmployeeController extends AdminController
 
     public function viewUploadedEmployeeList()
     {
+
+        $empDataServiceController = new EmpDataServiceController();
+
         $file_id = $this->request->getGet('file_id');
         // $emp_data['employees'] = $this->employeePolicyModel->getViewEmpSuccessList($file_id);
         // $html = view('view_file_upload_emp_list', $emp_data);
@@ -718,20 +715,21 @@ class EmployeeController extends AdminController
             ->join('clients c', 'files.client_id = c.id and files.client_id = cp.client_id', 'left')
             ->where('files.id', $file_id)->first();
 
+            // dd($file_name);
+
         try {
 
             $filePath = WRITEPATH . '/uploads/excel/' . $file_name['file_name'];
 
             if (file_exists($filePath)) {
-                $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filePath);
-                $sheet = $spreadsheet->getActiveSheet();
-
-                $highestRowAndColumn = $sheet->getHighestRowAndColumn();
-                $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
-                // dd($excel_data);
+                
+                $excel_data = $empDataServiceController->readExcelFileToArray($filePath);
                 $emp_data['thead'] = $excel_data[0];
                 unset($excel_data[0]);
                 $emp_data['tbody'] = $excel_data;
+                $emp_data['count'] = count($excel_data);
+
+                // dd($emp_data);
 
                 $html = view('view_file_upload_emp_list', $emp_data);
             } else {
@@ -1210,6 +1208,7 @@ class EmployeeController extends AdminController
         $client_id = $file['client_id'];
         $client_policy_id = $file['client_policy_id'];
         $insurer_or_tpa = $file['insurer_or_tpa'];
+        $event_type = $file['event_type'];
 
         $error_data = json_decode($file['error_data']);
 
@@ -1225,8 +1224,10 @@ class EmployeeController extends AdminController
         $excel_data = $empDataServiceController->readExcelFileToArray($file_name_with_path);
         $excelErrorData['excel_header'] = $excel_data[0];
         unset($excel_data[0]);
-        array_pop($excel_data);
 
+        if($event_type == 'inception' || $event_type == 'deletion'){
+            array_pop($excel_data);
+        }
 
         $finalArray = [];
         foreach ($error_data as $key => $values) {
@@ -1242,15 +1243,22 @@ class EmployeeController extends AdminController
 
                 }else{
 
-                    if ($insurer_or_tpa == 'tpa') {
+                    if($event_type == 'inception'){
 
-                        $error = 'Expected value : TPA ID';
+                        if ($insurer_or_tpa == 'tpa') {
 
-                    } else if ($insurer_or_tpa == 'insurer') {
-        
-                        $error = 'Expected value : UHID';
+                            $error = 'Expected value : TPA ID';
+    
+                        } else if ($insurer_or_tpa == 'insurer') {
+            
+                            $error = 'Expected value : UHID';
+                        }
+
+                    }else{
+                        $error = 'Expected value : ENDORSEMENT ID';
                     }
 
+
                 }
                 $data = ['value' => $excel_data[$row][$column], 'error' => $error,];
                 $excel_data[$row][$column] = $data;
diff --git a/app/Controllers/JobWorker.php b/app/Controllers/JobWorker.php
index 793ddb76..38fd648a 100644
--- a/app/Controllers/JobWorker.php
+++ b/app/Controllers/JobWorker.php
@@ -16,10 +16,22 @@ class JobWorker extends AdminController
 
     private  static $event_class_mapping = [
         'add' => ['type' => 'HC', 'handler' => 'App\\Helpers\\HttpRequestHelper'], 'sub' =>  ['type' => 'CC', 'handler' => 'App\\Controllers\\Jobs\SubJob'], 'fancy_date_time_format' => ['type' => 'HF', 'handler' => 'fancy_date_time_format'], 'addNumber' => ['type' => 'HC', 'handler' => 'App\\Model\\HttpRequestHelper'], 'excelFileFormatValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'excelFileDataValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesOnboardPreprocess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeeDisembark' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesSIEnhanceProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesCorrectionProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'send_email' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'bulk_mail' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'insertBatchList' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+       
         'importInceptionFileValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
         'importInceptionUpdateTPAandUHID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
         'cashDepositCalculationForInception' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
         'sendMailForDownloadingECard' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        
+        'importCorrectionValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importCorrectionUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        
+        'cashDepositCalculationForSIEnhancement' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importSIEnhancementValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importSIEnhancementUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        
+        'cashDepositCalculationForDeletion' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importDeletionValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
+        'importDeletionUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
     ];
     public function __construct()
     {
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index 2e7bcf23..4f9652d9 100644
--- a/app/Models/EmployeePolicyModel.php
+++ b/app/Models/EmployeePolicyModel.php
@@ -143,7 +143,7 @@ class EmployeePolicyModel extends Model
                 employees.relationship AS emp_relationship,
                 employees.relationship_code AS emp_relationship_code,
                 TIMESTAMPDIFF(YEAR, employees.dob, CURDATE()) AS emp_age,
-                'Has Define' as emp_type,
+                employees.emp_type as emp_type,
 
                 employee_polices.id as primaryKey, 
                 employee_polices.tpa_id, 
@@ -175,8 +175,13 @@ class EmployeePolicyModel extends Model
             ) as batch_data ON employee_polices.id = batch_data.emp_policy_id
             WHERE employee_polices.client_policy_id = '{$client_policy_id}'
                 AND (employee_polices.{$id} IS NULL OR employee_polices.{$id} = '')
+                AND employees.client_branch_id = '{$client_branch_id}'
                 AND employee_polices.is_active = 1
-                AND employees.client_branch_id = '{$client_branch_id}'";
+                AND employee_polices.status = 'active'
+                AND employees.is_active = 1
+                AND employees.emp_status = 'active'
+                
+        ";
 
             // Get the result set
             $query = $this->db->query($sql);
@@ -209,7 +214,7 @@ class EmployeePolicyModel extends Model
                         employees.dob AS emp_dob, 
                         employees.gender AS emp_gender, 
                         employees.client_id AS emp_client_id, 
-                        'Has Define' AS emp_type,
+                        employees.emp_type as emp_type,
                         employee_polices.uhid,
                         employees.relationship_code,
                         batch_data.emp_policy_id, 
@@ -235,12 +240,16 @@ class EmployeePolicyModel extends Model
                         AND batch_files.insurer_or_tpa = '{$insurer_or_tpa}'
                     ) AS batch_data ON emp_endorsement.pk = batch_data.emp_policy_id
 
-                    WHERE batch_data.bf IS NULL
-                    AND batch_data.bl IS NULL
-                    AND employees.client_id = '{$client_id}'
+                    WHERE employees.client_id = '{$client_id}'
                     AND employee_polices.client_policy_id = '{$client_policy_id}'
                     AND employees.client_branch_id = '{$client_branch_id}'
                     AND emp_endorsement.actions = 'c'
+                    AND employee_polices.is_active = 1
+                    AND employee_polices.status = 'active'
+                    AND employees.is_active = 1
+                    AND employees.emp_status = 'active'
+                    AND (employee_polices.tpa_id IS NOT NULL AND employee_polices.tpa_id != '')
+                    AND (employee_polices.uhid IS NOT NULL AND employee_polices.uhid != '')                    
                     AND (emp_endorsement.endorsement_id IS NULL OR emp_endorsement.endorsement_id = '')";
 
                 // Execute the raw query
@@ -265,13 +274,14 @@ class EmployeePolicyModel extends Model
             $query = $this->db->query("
                     SELECT 
                         a.id as endorsement_primarykey,
+                        a.group_key,
                         employee_polices.id AS primaryKey,
                         employees.name AS emp_name,
                         employees.emp_code AS emp_code,
                         employees.dob AS emp_dob,
                         employees.gender AS emp_gender,
                         employees.relationship_code AS emp_relationship_code,
-                        'Has Define' AS emp_type,
+                        employees.emp_type as emp_type,
                         employee_polices.uhid AS risk_id,
                         employee_polices.pre_existing_alignments,
                         employee_polices.policy_end_date,
@@ -283,10 +293,15 @@ class EmployeePolicyModel extends Model
                         sidata.new_basic_cover_si, 
                         sidata.new_si_premium,
                         sidata.date_of_coverage,
+                        
                         DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1 AS no_of_days,
+
                         sidata.new_si_premium - employee_polices.rata_premimum AS difference_premium,
+
                         ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premimum,
+
                         ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS gst,
+
                         ((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS total
 
                     FROM 
@@ -346,14 +361,16 @@ class EmployeePolicyModel extends Model
                             AND batch_files.actions = 'export' 
                             AND batch_files.insurer_or_tpa = '{$insurer_or_tpa}'
                     ) AS batch_data ON employee_polices.id = batch_data.emp_policy_id
-                    WHERE 
-                        batch_data.bf IS NULL 
-                        AND batch_data.bl IS NULL 
-                        AND employee_polices.client_policy_id = '{$client_policy_id}'
-                        AND employees.client_branch_id = '{$client_policy_id}'
-                        AND employee_polices.is_active = '1'
+
+                    WHERE employee_polices.client_policy_id = '{$client_policy_id}'
+                        AND employees.client_branch_id = '{$client_branch_id}'
                         AND (a.endorsement_id IS NULL OR a.endorsement_id = '') 
-                        AND a.field_name = 'si_enhancement_date'
+                        AND a.actions = 'si'
+                        AND employee_polices.is_active = 1
+                        AND employee_polices.status = 'active'
+                        AND employees.is_active = 1
+                        AND employees.emp_status = 'active'
+                        group by group_key
                 ");
 
                 // Get the result set
@@ -374,13 +391,14 @@ class EmployeePolicyModel extends Model
             $query = $this->db->query("
             SELECT DISTINCT
                 a.id as endorsement_primarykey,
+                a.group_key,
                 employee_polices.id as primaryKey, 
                 employees.name AS emp_name,
                 employees.emp_code AS emp_code,
                 employees.dob AS emp_dob,
                 employees.gender AS emp_gender,
                 employees.relationship AS emp_relationship,
-                'Has Define' as emp_type,
+                employees.emp_type as emp_type,
                 
                 employee_polices.basic_cover_si, 
                 employee_polices.uhid as risk_id, 
@@ -404,7 +422,7 @@ class EmployeePolicyModel extends Model
             FROM 
                 emp_endorsement a
             LEFT JOIN 
-                employees ON a.emp_code = employees.emp_code 
+                employees ON a.emp_code = employees.emp_code and a.pk = employees.id 
             LEFT JOIN 
                 employee_polices ON employees.id = employee_polices.employee_id 
             
@@ -439,16 +457,20 @@ class EmployeePolicyModel extends Model
                     AND batch_files.actions = 'export'
                     AND batch_files.insurer_or_tpa = '{$insurer_or_tpa}'
                 ) AS batch_data ON employee_polices.id = batch_data.emp_policy_id 
-            WHERE 
-                batch_data.bf IS NULL
-                AND batch_data.bl IS NULL
-                AND employee_polices.client_policy_id = {$client_policy_id}
+
+            WHERE employee_polices.client_policy_id = {$client_policy_id}
                 AND employees.client_branch_id = {$client_branch_id}
+                AND (a.endorsement_id IS NULL OR a.endorsement_id = '')
+                AND a.actions = 'd'
                 AND employee_polices.is_active = 1
-                AND (a.endorsement_id IS NULL OR a.endorsement_id = '') AND a.field_name = 'status'
+                AND employee_polices.status = 'active'
+                AND employees.is_active = 1
+                AND employees.emp_status = 'active'
+                group by group_key
         ");
     
         $result = $query->getResult();
+
         return $result;
         
     }
@@ -547,34 +569,62 @@ class EmployeePolicyModel extends Model
 
     public function fetchEmpEndorsementData($fetch_data)
     {
+        // dd($fetch_data);
+
         $client_policy_id = $fetch_data['client_policy_id'];
+        $client_branch_id = $fetch_data['client_branch_id'];
         $emp_name = $fetch_data['emp_name'];
         $emp_code = $fetch_data['emp_code'];
 
         // Your raw SQL query
         $sql = "
-            SELECT 
-                ep.id,
-                MAX(CASE WHEN ee.field_name = 'date_of_exit' THEN ee.new_value END) AS date_of_exit,
-                MAX(CASE WHEN ee.field_name = 'reason_for_exit' THEN ee.new_value END) AS reason_for_exit,
-                MAX(CASE WHEN ee.field_name = 'status' THEN ee.new_value END) AS status
-            FROM 
-                emp_endorsement AS ee
-            JOIN 
-                employee_polices AS ep ON ep.id = ee.pk
-            WHERE 
-                ee.emp_code = '$emp_code'
-                AND ep.client_policy_id = $client_policy_id
-                AND ee.name = '$emp_name'
-                AND ee.field_name IN ('date_of_exit', 'reason_for_exit', 'status')
-            GROUP BY 
-                ee.emp_code, ee.name, ep.id";
+                SELECT
+                    ee.id as emp_endorsement_primarykey,
+                    ep.id as emp_policy_primarykey,
+                    e.id as employees_primarykey,
+                    ee.group_key,
+                    MAX(
+                    CASE
+                        WHEN ee.field_name = 'date_of_exit' THEN ee.new_value
+                    END
+                    ) AS date_of_exit,
+                    MAX(
+                    CASE
+                        WHEN ee.field_name = 'reason_for_exit' THEN ee.new_value
+                    END
+                    ) AS reason_for_exit,
+                    MAX(
+                    CASE
+                        WHEN ee.field_name = 'status' THEN ee.new_value
+                    END
+                    ) AS status
+                FROM
+                    emp_endorsement AS ee
+                    JOIN employee_polices AS ep ON ep.id = ee.pk
+                    JOIN employees AS e ON e.emp_code = ee.emp_code
+                WHERE
+                    ee.emp_code = '$emp_code'
+                    AND ep.client_policy_id = '$client_policy_id'
+                    AND e.client_branch_id = '$client_branch_id'
+                    AND ee.name = '$emp_name'
+                    AND ee.field_name IN ('date_of_exit', 'reason_for_exit', 'status')
+                    AND ep.is_active = 1
+                    AND ep.status = 'active'
+                    AND e.is_active = 1
+                    AND e.emp_status = 'active'
+                GROUP BY
+                    ee.group_key
+        ";
+
+        // dd($sql);
 
         // Execute the raw SQL query
         $query = $this->db->query($sql);
 
         // Fetch and return results
-        return  $row = $query->getRowArray();
+         $row = $query->getRowArray();
+
+         return $row;
     }
     
 
@@ -659,7 +709,7 @@ class EmployeePolicyModel extends Model
                 $query2->join('insurers', 'insurers.id = policies.insurer_id');
                 $query2->whereIn('e.actions', ['si', 'd']);
                 $query2->where('ep.client_policy_id', $policy_id);
-                $query2->where('employees.client_id', $policy_id);
+                $query2->where('employees.client_id', $client_id);
                 $query1->where('employees.client_branch_id', $branch_id);
                 if($status != 0 && !empty($status)){
 
@@ -931,7 +981,132 @@ class EmployeePolicyModel extends Model
             throw $e;
         }
     }
+
+
+    public function bulkUpdateForEndorsement($endorsement_details)
+    {
+
+        // Extract IDs, endorsement_ids, and statuses
+        $ids = array_column($endorsement_details, 'group_key');
+        $endorsement_ids = array_column($endorsement_details, 'endorsement_id');
+        $statuses = array_column($endorsement_details, 'status');
+
+        // Escape values for SQL
+        $escapedIds = array_map([$this->db, 'escape'], $ids);
+        $escapedEndorsementIds = array_map([$this->db, 'escape'], $endorsement_ids);
+        $escapedStatuses = array_map([$this->db, 'escape'], $statuses);
+
+        // Construct the CASE statements
+        $caseEndorsementId = array_map(function ($id, $endorsement_id) {
+            return "WHEN group_key = $id THEN $endorsement_id";
+        }, $escapedIds, $escapedEndorsementIds);
+
+        $caseStatus = array_map(function ($id, $status) {
+            return "WHEN status = $id THEN $status";
+        }, $escapedIds, $escapedStatuses);
+
+        // Convert cases to a string
+        $caseEndorsementIdString = implode(' ', $caseEndorsementId);
+        $caseStatusString = implode(' ', $caseStatus);
+
+        // Convert ids to a string
+        $idsString = implode(', ', $escapedIds);
+
+        // Construct the SQL query
+        $sql = "
+            UPDATE emp_endorsement
+            SET 
+                endorsement_id = CASE {$caseEndorsementIdString} END,
+                status = CASE {$caseStatusString} END
+            WHERE group_key IN ({$idsString})
+        ";
+
+        // Begin a transaction
+        $this->db->transBegin();
+
+        try {
+            // Execute the query
+            $this->db->query($sql);
+
+            // Commit the transaction
+            if ($this->db->transStatus() === FALSE) {
+                // If something went wrong, rollback
+                $this->db->transRollback();
+                throw new \Exception('Bulk update failed.');
+            } else {
+                // Otherwise, commit
+                $this->db->transCommit();
+            }
+
+            return $this->db->getLastQuery();
+        } catch (\Exception $e) {
+            // Rollback the transaction on error
+            $this->db->transRollback();
+            throw $e;
+        }
+    }
     
 
+    public function bulkUpdateForCorrection($emp_details){
+
+        foreach ($emp_details as $employee) {
+            $id = $this->db->escape($employee['id']);
+            $ids[] = $id;
+        
+            foreach ($employee as $field => $value) {
+                if ($field === 'id') continue;
+                $escapedValue = $this->db->escape($value);
+        
+                if (!isset($caseStatements[$field])) {
+                    $caseStatements[$field] = [];
+                }
+        
+                $caseStatements[$field][] = "WHEN id = $id THEN $escapedValue";
+            }
+        }
+        
+        // Construct the CASE strings
+        $caseStrings = [];
+        foreach ($caseStatements as $field => $cases) {
+            $caseStrings[] = "$field = CASE " . implode(' ', $cases) . " END";
+        }
+        
+        // Convert ids to a string
+        $idsString = implode(', ', $ids);
+        
+        // Construct the SQL query
+        $sql = "
+            UPDATE employees
+            SET " . implode(', ', $caseStrings) . "
+            WHERE id IN ($idsString)
+        ";
+        
+        // Begin a transaction
+        $this->db->transBegin();
+        
+        try {
+            // Execute the query
+            $this->db->query($sql);
+        
+            // Commit the transaction
+            if ($this->db->transStatus() === FALSE) {
+                // If something went wrong, rollback
+                $this->db->transRollback();
+                throw new \Exception('Bulk update failed.');
+            } else {
+                // Otherwise, commit
+                $this->db->transCommit();
+            }
+        
+            return $this->db->getLastQuery();
+            
+        } catch (\Exception $e) {
+            // Rollback the transaction on error
+            $this->db->transRollback();
+            throw $e;
+        }
+
+    }
+
 
 }
\ No newline at end of file
diff --git a/app/Views/client_policy.php b/app/Views/client_policy.php
index ab4e17f4..18d6ee36 100644
--- a/app/Views/client_policy.php
+++ b/app/Views/client_policy.php
@@ -14,7 +14,7 @@
                     Policy
                     TPA
                     Date
-                    Enrollment Status
+                    Enrollment 
Status Status Action @@ -252,7 +252,7 @@ ${item.insurer_short} - ${item.insurer_branch_name} ${item.policy_name} (${item.policy_type_name}) ${tpaValue} - ${(item.policy_start_date)} / ${(item.policy_end_date)} + ${(item.policy_start_date)} /
${(item.policy_end_date)} ${(enrollmentStatus)} ${checkDateStatus(item.policy_end_date, 1)} @@ -474,7 +474,7 @@ ${item.insurer_short} - ${item.insurer_branch_name} ${item.policy_name} (${item.policy_type_name}) ${tpaValue} - ${rearrangeDateFormat(item.policy_start_date)} - ${rearrangeDateFormat(item.policy_end_date)} + ${rearrangeDateFormat(item.policy_start_date)} /
${rearrangeDateFormat(item.policy_end_date)} ${(enrollmentStatus)} ${checkDateStatus(item.policy_end_date, 1)} diff --git a/app/Views/employee_upload.php b/app/Views/employee_upload.php index 052b1bab..82d763cb 100644 --- a/app/Views/employee_upload.php +++ b/app/Views/employee_upload.php @@ -20,8 +20,8 @@ option:disabled {
-
+ + @@ -38,14 +38,14 @@ option:disabled {

-

-
@@ -214,7 +214,21 @@ $(document).ready(function() { // console.log('submit called'); + if(!checkValues()){ + + toastr.warning('Form is Empty', 'warning') + return false; + } + + + $('#client_id').val() + $('#policy_id').val() + $('#branch_id').val() + $('#upload-action-type').val() + var isValid = $('#emp-upload-form').parsley().validate(); + + console.log('isValid', isValid) if (!isValid) { console.log('Form is Empty', 'Warning'); return; @@ -933,7 +947,7 @@ function checkPolicyTermsAndRackRatesHasDefiend(event) setTimeout(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - }, 1000); + }, 300); console.log('check policy responce', response); @@ -965,7 +979,7 @@ function checkPolicyTermsAndRackRatesHasDefiend(event) setTimeout(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - }, 1000); + }, 300); // toastr.error('Something went wrong! Try Later', 'Error'); console.error('Error fetching data from checkPolicyTermsAndRackRatesHasDefiend API:', error); return false; @@ -976,5 +990,36 @@ function checkPolicyTermsAndRackRatesHasDefiend(event) } +function checkValues() { + + var clientId = $('#client_id').val(); + var policyId = $('#policy_id').val(); + var branchId = $('#branch_id').val(); + var uploadActionType = $('#upload-action-type').val(); + + if (!clientId || clientId == '0') { + // alert('Client ID is empty or zero'); + return false; + } + + if (!policyId || policyId == '0') { + // alert('Policy ID is empty or zero'); + return false; + } + + if (!branchId || branchId == '0') { + // alert('Branch ID is empty or zero'); + return false; + } + + if (!uploadActionType || uploadActionType == '0') { + // alert('Upload action type is empty or zero'); + return false; + } + + // If all values are valid, return true + return true; +} + //--------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/app/Views/file_list.php b/app/Views/file_list.php index 5c3504af..3f8320ad 100644 --- a/app/Views/file_list.php +++ b/app/Views/file_list.php @@ -81,7 +81,7 @@ class="mdi mdi-dots-horizontal">