diff --git a/app/Config/Routes.php b/app/Config/Routes.php index a32b6788..b4380b4b 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -23,12 +23,6 @@ $routes->get('download-e-card/(:any)', 'EmployeeController::generateIDCardForEmp $routes->get('download-kyc-docs/(:segment)', 'ClientController::downloadKYCDocument/$1'); -$routes->get('get-notification', 'DashboardController::getDashboardNotifications'); -$routes->get('acknowledge-notification/(:segment)', 'DashboardController::acknowledgeMessage/$1'); -$routes->get('get-pending-action', 'PendingActionsController::getPendingActions'); - - - $routes->group("/user", ["filter" => "authMVC"], function ($routes) { $routes->post("create", "UserController::create"); $routes->get("create", "UserController::create"); @@ -42,6 +36,9 @@ $routes->group("/user", ["filter" => "authMVC"], function ($routes) { $routes->group("/dashboard", ["filter" => "authMVC"], function ($routes) { $routes->get("view", "DashboardController::dashboard"); + $routes->get('get-notification', 'DashboardController::getDashboardNotifications'); + $routes->get('acknowledge-notification/(:segment)', 'DashboardController::acknowledgeMessage/$1'); + $routes->get('get-pending-action', 'PendingActionsController::getPendingActions'); }); @@ -236,6 +233,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get("has_policy_config_completed/(:any)", "EmployeeController::hasPolicyConfigCompleted/$1"); $routes->get("get-client-branch/(:any)", "ClientController::getClientBranch/$1"); $routes->get("get-client-details/(:any)", "ClientController::getClientAllDetailsByUsingClientID/$1"); + $routes->get("delete-additional-rack-rate/(:any)", "ClientController::deleteAdditionalRackRate/$1"); }); $routes->cli('cli/processjob', 'JobWorker::processJob'); @@ -243,6 +241,7 @@ $routes->cli('cli/processjobs', 'JobWorker::processJobs'); $routes->get("processjob", "JobWorker::processJob"); + //Employee login api's $routes->post("/employeeRest/verifyEmployeeNumber", "RestAuthenticationController::verifyEmployeeWithMobileNumber"); $routes->post("/employeeRest/getVerifiedUserData", "RestAuthenticationController::getVerifiedUserData"); @@ -255,15 +254,11 @@ $routes->group("/api", ["filter" => "authJWT"], function ($routes) { $routes->post("getId", "RestAuthenticationController::getUserIdFromToken"); }); - - - $routes->get("/getEmployeeProfile", "EmployeeRestController::getEmployeeProfile/$1"); $routes->post("/editEmployeeProfile", "EmployeeRestController::editEmployeeProfile"); $routes->post("/calculatePremium", "EmployeeRestController::calculatePremium"); -$routes->get("getEmployeeActiveOrInactivePolicy", "EmployeeRestController::getEmployeeActiveOrInactivePolicy"); $routes->group("employeeRest", ["filter" => "authJWT"], function ($routes) { diff --git a/app/Config/Session.php b/app/Config/Session.php index 591aefdc..e077df64 100644 --- a/app/Config/Session.php +++ b/app/Config/Session.php @@ -40,8 +40,7 @@ class Session extends BaseConfig * The number of SECONDS you want the session to last. * Setting to 0 (zero) means expire when the browser is closed. */ - // public int $expiration = 7200; - public int $expiration = 86400; //24 Hours + public int $expiration = 7200; /** * -------------------------------------------------------------------------- diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 7de442a9..52b3dbca 100644 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -169,8 +169,9 @@ class ClientController extends AdminController // echo "
";
         // print_r($data); die;
-        $data['placeHolders'] = ['member_name','nhance_logo','tpa_id','ecard_download_link', 'client_logo', 'policy_no', 'member_summary', 'app_link', 'client_name'];
+        $data['placeHolders'] = ['member_name','nhance_logo','tpa_id','ecard_download_link', 'client_logo', 'policy_no', 'member_summary', 'app_link', 'post_enrollment_app_link', 'client_name'];
 
+        // dd($data['placeHolders']);
 
         echo view('layout/header', $headerData);
         echo view('client_onboarding', $data);
@@ -283,7 +284,7 @@ class ClientController extends AdminController
         
 
         $editData['notification'] =$this->notificationModel->select('template_name,enabled')->where('client_id',$id)->findAll();
-        $editData['placeHolders'] = ['member_name','nhance_logo','tpa_id','ecard_download_link', 'client_logo', 'policy_no', 'member_summary', 'app_link', 'client_name'];
+        $editData['placeHolders'] = ['member_name','nhance_logo','tpa_id','ecard_download_link', 'client_logo', 'policy_no', 'member_summary', 'app_link', 'post_enrollment_app_link', 'client_name'];
 
 
         echo view('layout/header', $headerData);
@@ -585,13 +586,13 @@ 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)
-        ->countAllResult(); 
+        ->countAllResults(); 
 
         if($policyCount > 0 ){
             $clientPoliceData =  $this->clientPolicyModel->getClientPolicyByClientId($this->request->getPost('client_id'));
@@ -783,6 +784,9 @@ class ClientController extends AdminController
 
     public function createClientPolicyPremium()
     {
+
+        // echo json_encode(['key' => $this->request->getPost()]); die;
+
         try {
             $policy_type = $this->request->getPost('policy_type');
             $client_id = $this->request->getPost('client_id');
@@ -793,6 +797,24 @@ class ClientController extends AdminController
                 $client_id =  $client_policy_data['client_id'];
             }
             $policy_grid_id = $this->request->getPost('policy_grid_id');
+            $rack_rate_type = $this->request->getPost('rack_rate_type');
+
+            $self = $this->request->getPost('self') ? 1 : 0;
+            $spouse = $this->request->getPost('spouse')? 1 : 0;
+            $childrens = $this->request->getPost('childrens')? 1 : 0;
+            $parents = $this->request->getPost('parents')? 1 : 0;
+            $parents_in_law = $this->request->getPost('parents-in-law')? 1 : 0;
+            $either_parents_pil = $this->request->getPost('either-parents-pil')? 1 : 0;
+
+            $relation_data['self'] = $self;
+            $relation_data['spouse'] = $spouse;
+            $relation_data['childrens'] = $childrens;
+            $relation_data['parents'] = $parents;
+            $relation_data['parents-in-law'] = $parents_in_law;
+            $relation_data['either-parents-pil'] = $either_parents_pil;
+
+
+            $jsonDataForRelation = json_encode($relation_data);
 
             // if($policy_grid_id == 10 || $policy_grid_id == 11){
             //     $premium_type = 1;
@@ -811,6 +833,11 @@ class ClientController extends AdminController
             $data['client_policy_id'] = $client_policy_id;
             $data['policy_grid_id'] = $policy_grid_id;
             $data['premium_type'] = $premium_type;
+            $data['rack_rate_type'] = $rack_rate_type;
+
+            if($rack_rate_type == 1){
+                $data['additional_relationship'] = $jsonDataForRelation;
+            }
 
 
             $premium = [];
@@ -818,7 +845,7 @@ class ClientController extends AdminController
             if ($policy_grid_id == '1' || $policy_grid_id == '2') {
                 $this->policyPremium1Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->set('is_active', 0)->update();
             } else {
-                $this->policyPremium2Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->set('is_active', 0)->update();
+                $this->policyPremium2Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->where('rack_rate_type', $rack_rate_type)->set('is_active', 0)->update();
             }
 
 
@@ -925,6 +952,9 @@ class ClientController extends AdminController
 
 
                 $premium = $this->request->getPost('6_premium[]');
+
+                print_r($premium);
+
                 $sum_insure = $this->request->getPost('6_si');
                 $age_from = $this->request->getPost('6_age_from[]');
                 $age_to = $this->request->getPost('6_age_to[]');
@@ -1135,21 +1165,24 @@ class ClientController extends AdminController
             $self = $policy_terms_data->family_floaters;
         }
 
-        $emp_count = $this->employeeModel->join('client_policy cp', "employees.client_id = cp.client_id")
-        ->join('employee_polices ep', "cp.id = ep.client_policy_id AND employees.id = ep.employee_id")
-        ->where("employees.client_id", $record['client_id'])
-        ->where("employees.emp_status", 'active')
-        ->where("ep.status", 'active')
-        ->where("employees.is_active", 1)
-        ->where("ep.is_active", 1)
+        // $emp_count = $this->employeeModel
+        // ->join('client_policy cp', "employees.client_id = cp.client_id")
+        // ->join('employee_polices ep', "cp.id = ep.client_policy_id AND employees.id = ep.employee_id")
+        // ->where("employees.client_id", $record['client_id'])
+        // ->where("employees.emp_status", 'active')
+        // ->where("ep.status", 'active')
+        // ->where("employees.is_active", 1)
+        // ->where("ep.is_active", 1)
+        // ->countAllResults();
+
+
+        $emp_count = $this->employeePolicyModel
+        ->join('client_policy cp', "cp.id = employee_polices.client_policy_id")
+        ->where("employee_polices.client_policy_id", $client_policy_id)
+        ->where("employee_polices.status", 'active')
+        ->where("employee_polices.is_active", 1)
         ->countAllResults();
 
-
-        // $data = $this->employeePolicyModel->select('employee_polices.id')
-        // ->where('employee_polices.is_active', 1)
-        // ->where('employee_polices.client_policy_id', $client_policy_id)
-        //     ->findAll();
-
         // $emp_count = count($data);
 
         // if($emp_count == 0){
@@ -1184,6 +1217,11 @@ class ClientController extends AdminController
 
             $premiumData = "";
         }
+
+
+
+
+        
         // echo '
';
         // print_r($premiumData); die;
 
@@ -1240,19 +1278,28 @@ class ClientController extends AdminController
                 $premiumDataa = $premiumData;
             }
 
-            // print_r($premiumData);die;
+            // $premium1 = [];
+            // $premium2 = [];
 
-            // print_r($data[0]->policy_type); die;
-            // echo "hello";
-            // return json_encode($premiumData);
+            // foreach ($premiumDataa as $key => $item) {
+            //     if ($item['rack_rate_type'] == 0) {
+            //         $premium1[] = $item;
+            //     } elseif ($item['rack_rate_type'] == 1) {
+            //         $premium2[] = $item;
+            //     }
+            // }
+
+            // print_r($premium1);
+            // print_r($premium2); die;
+
+            return $this->respond(['status' => true, 'code' => 200, 'data' => $resultss, 'premiumData' => json_encode($premiumDataa), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
 
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $resultss, 'premiumData' => json_encode($premiumDataa), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self], 200);
         } else if ($search_term === 'GPA') {
 
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self], 200);
+            return $this->respond(['status' => true, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
         } else {
 
-            return $this->respond(['status' => false, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self], 200);
+            return $this->respond(['status' => false, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
         }
     }
 
@@ -2047,5 +2094,31 @@ class ClientController extends AdminController
     }
 
 
+    public function deleteAdditionalRackRate($client_id, $client_policy_id, $rack_rate_type)
+    {
+        try {
+            $result = $this->policyPremium2Model
+                ->where('client_id', $client_id)
+                ->where('client_policy_id', $client_policy_id)
+                ->where('rack_rate_type', $rack_rate_type)
+                ->set('is_active', 0)
+                ->update();
+    
+            if (!$result) {
+
+                return $this->respond(['status' => false,'code' => 200, 'message' => 'Failed to update the record.'], 200);
+            }
+        } catch (\Exception $e) {
+
+            log_message('error', $e->getMessage());
+            return $this->respond(['status' => false,'code' => 200, 'message' => 'Failed to update the record.'], 200);
+
+        }
+    
+        return $this->respond(['status' => true,'code' => 200, 'message' => 'Additionaly Rack Rate Data Remove Successfully'], 200);
+    }
+    
+
+
 
 }
\ No newline at end of file
diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php
index 1378abbf..8642c0a5 100644
--- a/app/Controllers/DashboardController.php
+++ b/app/Controllers/DashboardController.php
@@ -18,11 +18,14 @@ class DashboardController extends AdminController
     use ResponseTrait;
     protected $messageModel;
     protected $userMessageModel;
+    protected $myLogger;
     
     public function __construct()
     {
+        set_session_context('Dashboard');
         $this->messageModel        = new MessageModel();
         $this->userMessageModel    = new UserMessageModel();
+        $this->myLogger = \Config\Services::mylogger();
     }
 
     public function dashboard()
@@ -34,15 +37,20 @@ class DashboardController extends AdminController
 
     public function getDashboardNotifications()
     {
-        //pull notofications to dashboard especially for file upload cases
+        // Pull notifications for the dashboard, especially for file upload cases.
         $userId = get_session_userid();
         $roleId = 5;
         $teamId = 1;
-
-        $messages = $this->messageModel->getMessagesForUser($userId, $roleId, $teamId);
-
-        return $this->respond($messages);
+    
+        if ($userId != null && $roleId != null && $teamId != null) {
+            $messages = $this->messageModel->getMessagesForUser($userId, $roleId, $teamId);
+            return $this->respond(['status' => true, 'code' => 200, 'message' => $messages], 200);
+        } else {
+            $this->myLogger->logme('error', 'The session is not set correctly. USER_ID : {user_id},  ROLE_ID : {role_id},  TEAM_ID : {team_id}', ['user_id' => $userId, 'role_id' => $roleId, 'team_id' => $teamId]);
+            return $this->respond(['status' => false, 'code' => 404, 'message' => 'No data found'], 200);
+        }
     }
+    
 
     public function acknowledgeMessage($messageId)
     {
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 3aa5c42d..dfe0f07e 100644
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -373,7 +373,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');
@@ -385,10 +385,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 = [
@@ -401,20 +401,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') {
@@ -424,7 +423,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]);
                 }
@@ -440,6 +438,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'));
@@ -459,29 +464,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]);
@@ -489,71 +490,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'));
                 }
             }
@@ -722,6 +716,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);
@@ -733,20 +730,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 {
@@ -1055,6 +1053,34 @@ class EmployeeController extends AdminController
     {
 
         $this->loadLayout('ecard_template/default_ecard');
+        
+        // Load the session library if it's not autoloaded
+        // $session = \Config\Services::session();
+        
+        // Access session data
+        $sessionData = session()->get();
+        
+        // Check if session data exists and if expiration time is set
+        if (!empty($sessionData) && isset($sessionData['isLoggedIn']) && isset($sessionData['session_expiration'])) {
+            // Get the session expiration timestamp
+            $expirationTimestamp = $sessionData['session_expiration'];
+        
+            // Get the current timestamp
+            $currentTimestamp = time();
+        
+            // Check if the current time is greater than the expiration time
+            if ($currentTimestamp > $expirationTimestamp) {
+                // Session has expired
+                echo "Session has expired";
+            } else {
+                // Session is active
+                echo "Session is active";
+            }
+        } else {
+            // Session data is not set or session is not started
+            echo "Session is not started or data is not set";
+        }
+        
     }
 
 
@@ -1197,6 +1223,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']);
 
@@ -1212,8 +1239,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) {
@@ -1229,15 +1258,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;
@@ -1268,9 +1304,18 @@ class EmployeeController extends AdminController
     {
         $client_policy_id = $this->request->uri->getSegment(3);
         $policy_details = $this->clientPolicyModel->find($client_policy_id);
-        // print_r($policy_details);die();
         $policy_terms = isset($policy_details['policy_terms']) ? true : false;
 
+        $si_enhancement_true_or_false = 1;
+        if($policy_terms){
+            $policyTermsData = json_decode($policy_details['policy_terms']);
+
+            if (isset($policyTermsData->suminsuredenhancement) && $policyTermsData->suminsuredenhancement !== null) {
+                $si_enhancement_true_or_false = $policyTermsData->suminsuredenhancement;
+            }        
+        }
+        
+
         $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($client_policy_id,$policy_details['client_id']);
 
         $message = null;
@@ -1285,7 +1330,7 @@ class EmployeeController extends AdminController
         }
         $message  = isset($message) ? ($message . ' not defined for choosed policy') : null;
 
-            return $this->respond(['dataStatus' => true, 'code' => 200, 'message' => $message], 200);
+        return $this->respond(['dataStatus' => true, 'code' => 200, 'message' => $message, 'si_enhancement' => $si_enhancement_true_or_false], 200);
         
     }
 
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index daf246d7..c31cabe7 100644
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -84,15 +84,22 @@ class EmployeeRestController extends AdminController
        try {
             $emp_code = $this->request->getGet('emp_code');
             $client_id = $this->request->getGet('client_id');
+            $client_branch_id = $this->request->getGet('client_branch_id');
             if ($emp_code) {
                 $relationship = 'self';
                 $employee = $this->employeeModel->where('emp_code', $emp_code)
                                                 ->where('client_id', $client_id)
+                                                ->where('client_branch_id', $client_branch_id)
                                                 ->where('is_active', 1 )
                                                 ->where('relationship', $relationship)
                                                 ->first();
                 $result = $employee;
-                    return $this->respond(['status' => 'success','code' => 200,'data' => $result],200);
+                $AccountManagerDetails =  $this->clientRMModel->select('client_rm.* , user_profiles.*')
+                                                    ->join('user_profiles', 'client_rm.user_id = user_profiles.id', 'left')
+                                                    ->where('client_rm.client_id', $client_id )
+                                                    ->where('client_rm.level', 3 )
+                                                    ->findAll();
+                return $this->respond(['status' => 'success','code' => 200,'data' => $result, 'AccountManagerDetails'=> isset($AccountManagerDetails[0]) ? $AccountManagerDetails[0] : null ],200);
             } else {
                 $result = "No Match's";
                     return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404);
@@ -102,7 +109,7 @@ class EmployeeRestController extends AdminController
        }
     }
 
-
+    //not in use
     public function editEmployeeProfile()
     {
         try {
@@ -125,7 +132,7 @@ class EmployeeRestController extends AdminController
         
     }
 
-
+    //not in use
     public function getEmployeeAndDependence()
     {
         try {
@@ -152,7 +159,7 @@ class EmployeeRestController extends AdminController
         
     }
 
-
+    //not in use
     public function editEmployeeAndDependence()
     {
         try {
@@ -372,6 +379,7 @@ class EmployeeRestController extends AdminController
             return null;
         }
     }
+
     public function deleteDependence()
     {
         try {
@@ -400,11 +408,78 @@ class EmployeeRestController extends AdminController
         
     }
 
+    // Get the RelationShip list
+    public function createOrUpdateEmployeePolicySiAmount()
+    {            
+        
+        try {
+            $requestData = $this->request->getJSON();
+            
+            foreach ($requestData as $key => $value) {
+
+            
+            $checkIfExist = $this->employeePolicyModel->where('employee_id', $value->employee_id)
+                                                    ->where('client_policy_id', $value->client_policy_id)
+                                                    ->where('is_active', 1 )
+                                                    ->findAll();
+            
+
+            // dd($checkIfExist);
+            if ($checkIfExist) {
+
+                    $empPolicy = $this->employeePolicyModel->updateSiAndPremium($value->client_policy_id,  $value->employee_id, $value->basic_cover_si);
+
+                }else{
+
+                    $data['employee_id']= $value->employee_id;
+                    $data['client_policy_id']= $value->client_policy_id;
+                    $data['basic_cover_si']= $value->basic_cover_si;
+                    $data['status'] = 'draft';
+            
+                    $this->employeePolicyModel->insert($data);
+                }
+            }
+
+            $this->updatePremiumAmount($requestData[0]->client_policy_id , $requestData[0]->emp_code);
+
+            return $this->respond(['status' => 'success','code' => 200,'data' => []], 200);             
+            
+        } catch (\Exception $e) {
+            return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500);
+        }
+    }
+
+    public function findPremiumAmount($slabArray,$siAmount)
+    {
+        foreach ($slabArray as $key => $value) {
+            if($value['si'] == $siAmount){
+                return $value['premium'];
+                break;
+            }
+        } 
+    }
+    
+    public function relationshipList()
+    {
+        try {
+            
+            $relation_ships= $this->relationshipModel->findAll();
+
+            if(count($relation_ships) > 0){
+                return $this->respond(['status' => 'success','code' => 200,'data' => $relation_ships], 200);             
+            }else{
+                return $this->respond(['status' => 'success','code' => 200,'data' => "No Data..!"], 200);             
+            }
+
+        } catch (\Exception $e) {
+            return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500);
+        }
+    }
 
     public function getEmployeeAndDependenceByClientId()
     {
         try {
-            $empData =   $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0);
+            $empData =   $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0,branch_id:$this->request->getGet('client_branch_id'));
            
             if ($empData) {
                 return $this->respond(['status' => 'success', 'code' => 200, 'data' => $empData], 200);
@@ -419,11 +494,11 @@ class EmployeeRestController extends AdminController
         
     }
 
-
     public function exportDataByClientPolicyId()
     {
         try {
-            $empData =   $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0);
+
+        $empData =   $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0,branch_id:$this->request->getGet('client_branch_id'));
 
         if(count($empData))
         {
@@ -496,6 +571,7 @@ class EmployeeRestController extends AdminController
         
     }
 
+    //not in use
     public function getClientPolicy()
     {
         try {
@@ -534,73 +610,7 @@ class EmployeeRestController extends AdminController
 
   
 
-    // Get the RelationShip list
 
-    public function createOrUpdateEmployeePolicySiAmount()
-    {            
-        
-        try {
-            $requestData = $this->request->getJSON();
-           
-            foreach ($requestData as $key => $value) {
-
-            
-            $checkIfExist = $this->employeePolicyModel->where('employee_id', $value->employee_id)
-                                                   ->where('client_policy_id', $value->client_policy_id)
-                                                   ->where('is_active', 1 )
-                                                   ->findAll();
-           
-
-            // dd($checkIfExist);
-            if ($checkIfExist) {
-
-                    $empPolicy = $this->employeePolicyModel->updateSiAndPremium($value->client_policy_id,  $value->employee_id, $value->basic_cover_si);
-
-                }else{
-
-                    $data['employee_id']= $value->employee_id;
-                    $data['client_policy_id']= $value->client_policy_id;
-                    $data['basic_cover_si']= $value->basic_cover_si;
-                    $data['status'] = 'draft';
-            
-                    $this->employeePolicyModel->insert($data);
-                }
-            }
-
-            $this->updatePremiumAmount($requestData[0]->client_policy_id , $requestData[0]->emp_code);
-
-            return $this->respond(['status' => 'success','code' => 200,'data' => []], 200);             
-           
-        } catch (\Exception $e) {
-            return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500);
-        }
-    }
-
-    public function findPremiumAmount($slabArray,$siAmount)
-    {
-       foreach ($slabArray as $key => $value) {
-           if($value['si'] == $siAmount){
-             return $value['premium'];
-             break;
-           }
-       } 
-    }
-    public function relationshipList()
-    {
-        try {
-           
-            $relation_ships= $this->relationshipModel->findAll();
-
-            if(count($relation_ships) > 0){
-                return $this->respond(['status' => 'success','code' => 200,'data' => $relation_ships], 200);             
-            }else{
-                return $this->respond(['status' => 'success','code' => 200,'data' => "No Data..!"], 200);             
-            }
-
-        } catch (\Exception $e) {
-            return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500);
-        }
-    }
 
     // Upload the Employee Detail in DB by Sheet Data
     public function employeeUpload()
@@ -614,6 +624,7 @@ class EmployeeRestController extends AdminController
         //    die;
             $file = $this->request->getFile('file');
             $client_id = $this->request->getPost('client_id');
+            $client_branch_id = $this->request->getPost('client_branch_id');
             $policy_id = $this->request->getPost('policy_id');
 
             $client_data = $this->clientModel->where('id', $client_id)->first();
@@ -632,7 +643,7 @@ class EmployeeRestController extends AdminController
 
 
 
-            $client_policy = $this->clientPolicyModel->where('id', $policy_id)->where('client_id', $client_id)->first();
+            $client_policy = $this->clientPolicyModel->where('id', $policy_id)->where('client_id', $client_id)->where('client_branch_id', $client_branch_id)->first();
             if ($client_policy) {
                 $policy = $this->policesModel->where('id', $client_policy['policy_id'])->first();
                 $policy_permium_1 = $this->policyPremium1Model->where(['client_id' => $client_id , 'client_policy_id' => $policy_id,'is_active' =>1])-> first();
@@ -666,6 +677,7 @@ class EmployeeRestController extends AdminController
                 
                 $extractData['file_name']= $filename;
                 $extractData['client_id']= $client_id;
+                $extractData['client_branch_id']= $client_branch_id;
                 $extractData['status']= 'success';
                 $extractData['policy_id']= $policy_id;
                 $extractData['action']= 'enrollment';
@@ -772,6 +784,7 @@ class EmployeeRestController extends AdminController
                             'client_id' => $client_id,
                             'emp_status'=>'draft',
                             'band'=> $extra['10'][$index],
+                            'client_branch_id' => $client_branch_id
                             
                         ];
                         $basic_cover_si_value = null;
@@ -928,13 +941,15 @@ public function getAgeRange($terms,$familyFloatesValue)
    
 
 }
+
 public function getEmployeePolicy()
 {            
     try {
 
         $id = $this->request->getGet('id');
         $emp_code = $this->request->getGet('emp_code');
-        $client_id = $this->request->getGet('client_id');     
+        $client_id = $this->request->getGet('client_id');
+        $client_branch_id = $this->request->getGet('client_branch_id');     
 
         // This is an array containing keys to be removed from the terms and conditions array
         $keysToRemove  = ["removable_keys"];
@@ -942,8 +957,11 @@ public function getEmployeePolicy()
         $empPolicy = $this->employeeModel->getEmployeePolicy($id);
 
         // Retrieve employee and dependents data by passing the employee code
-        $employeeData = $this->employeeModel->where('emp_code',$emp_code)->where('client_id',$client_id)
-                                            ->where('is_active', 1 )->where('is_addon_value',0)->findAll();
+        $employeeData = $this->employeeModel->where('emp_code',$emp_code)
+                                            ->where('client_id',$client_id)
+                                            ->where('client_branch_id',$client_branch_id)
+                                            ->where('is_active', 1 )
+                                            ->where('is_addon_value',0)->findAll();
 
     
         if ($empPolicy) {
@@ -1091,12 +1109,13 @@ public function getEmployeePolicy()
                                                                             ->where('client_policy.policy_type_id',  3 )
                                                                             ->where('client_policy.is_addon',  1 )
                                                                             ->where('client_policy.client_id', $this->request->getGet('client_id') )
+                                                                            ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') )
                                                                             ->where('client_policy.is_active', 1 )
                                                                             ->get()
                                                                             ->getResult();
                     if($checkGmcParentsPolicyExist)
                     {
-                        $GmcParrentsData =  $this->getGmcParrentsPolicy($checkGmcParentsPolicyExist,$emp_code,$client_id);
+                        $GmcParrentsData =  $this->getGmcParrentsPolicy($checkGmcParentsPolicyExist,$emp_code,$client_id,$client_branch_id);
                         return $this->respond(['status' => 'success','code' => 200,'data' => [$array,$GmcParrentsData]], 200);
                       
                     }
@@ -1122,11 +1141,14 @@ public function getEmployeePolicy()
 }
 
 
-public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id)
+public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id,$client_branch_id)
 {
 
-    $employeeData = $this->employeeModel->where('emp_code',$emp_code)->where('client_id',$client_id)
-                                        ->where('is_active', 1 )->where('is_addon_value',0)->findAll();
+    $employeeData = $this->employeeModel->where('emp_code',$emp_code)
+                                        ->where('client_id',$client_id)
+                                        ->where('client_branch_id',$client_branch_id)
+                                        ->where('is_active', 1 )
+                                        ->where('is_addon_value',0)->findAll();
     foreach ($GmcParrentsPolicy as $key => $array) {
 
        
@@ -1163,9 +1185,7 @@ public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id)
             $array->eCardDownload = null; 
         }
 
-        // if($array->tpa_id != null){
-        //     $array->eCardDownload = base_url('download-e-card/') . $array->rand_string;
-        // }else{ $array->eCardDownload = null; }
+       
         $array->eCardDownload = null;
 
         // Map family floaters that already exist in the employee table
@@ -1256,6 +1276,7 @@ public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id)
     }
 
 }
+
 public function FloterConvertion($array){
 
         $result = [];
@@ -1320,7 +1341,8 @@ public function getClientDetails()
         $client = $this->clientModel->where('id',$this->request->getGet('client_id'))->first(); 
         if($client) {
         $client['client_logo'] = base_url().'public/uploads/logo/'.$client['client_logo'];
-        $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id'))->findAll(); 
+        $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id'))
+                                                ->where('client_branch_id',$this->request->getGet('client_branch_id'))->findAll(); 
         return $this->respond(['status' => 'success','code' => 200,'data' => ['client'=>$client,'client_policy'=>$clientPolicy]], 200);
 
         }else{
@@ -1335,17 +1357,22 @@ public function getAddOnPolicy()
 {            
     try {
 
-        $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('is_addon_value',1)->findAll();
+        $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )
+                                                 ->where('emp_code',$this->request->getGet('emp_code'))
+                                                 ->where('client_id',$this->request->getGet('client_id'))
+                                                 ->where('client_branch_id',$this->request->getGet('client_branch_id'))
+                                                 ->where('is_addon_value',1)->findAll();
 
        
 
         $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id'))
+                                                ->where('client_branch_id',$this->request->getGet('client_branch_id'))
                                                 ->where('policy_status', 1)
                                                 ->findAll(); 
 
         if(count($clientPolicy))
         {
-        $band =   $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('family_floater_key','self')->get()->getRow()->band;
+        $band =   $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('client_branch_id',$this->request->getGet('client_branch_id'))->where('family_floater_key','self')->get()->getRow()->band;
         $PolicyData = [];
         foreach ($clientPolicy as $key => $array) {
         $responce = [];
@@ -1768,6 +1795,7 @@ public function getCashDepositData()
     $ClientPolicyData =  $this->clientPolicyModel->select('client_policy.client_id as clientId , client_policy.insurer_id as insurerId,insurers.name as insurer_name')
                                                 ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left')
                                                 ->where('client_policy.client_id', $this->request->getGet('client_id') )
+                                                ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') )
                                                 ->where('client_policy.is_active', 1 )
                                                 ->where('client_policy.policy_status', 1)
                                                 ->groupBy('client_policy.insurer_id')
@@ -1789,6 +1817,7 @@ public function getCashDepositData()
                                                         ->join('policies', 'client_policy.policy_id = policies.id', 'left')
                                                         ->where('client_policy.insurer_id',  $value['insurerId'] )
                                                         ->where('client_policy.client_id', $this->request->getGet('client_id') )
+                                                        ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') )
                                                         ->where('client_policy.is_active', 1 )
                                                         ->where('client_policy.policy_status', 1)
                                                         ->findAll();
@@ -1797,7 +1826,7 @@ public function getCashDepositData()
             {
                
                 $value['type'] = $this->policyTypeModel->where('id',$value['policy_type_id'])->get()->getRow()->policy_type;
-                $employeeDetails = $this->employeePolicyModel->getEmployeePolicy( client_id:$value['client_id'],policy_id: $value['client_policy_id'],status:0);
+                $employeeDetails = $this->employeePolicyModel->getEmployeePolicy( client_id:$value['client_id'],policy_id: $value['client_policy_id'],status:0,branch_id:$this->request->getGet('client_branch_id'));
                 $enrolledCount = 0;
                 $draftCount = 0;
                 if(count($employeeDetails))
@@ -1970,83 +1999,6 @@ public function removeEmpAndEmpPolicyData()
 }
 
 
-
-
-function getEmployeeOldPolicy()
-{
-   $ClientPolicyData =  $this->clientPolicyModel->select('client_policy.* , policies.name as policy_name , policy_type.policy_type as policy_type')
-                                                ->join('policies', 'client_policy.policy_id = policies.id', 'left')
-                                                ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
-                                                ->where('client_policy.client_id', $this->request->getGet('client_id') )
-                                                ->where('client_policy.is_active', 1 )
-                                                ->where('client_policy.policy_status', 0)
-                                                ->orderby('client_policy.id' , 'ASC')
-                                                ->findAll();
-
-    // Retrieve employee and dependents data by passing the employee code
-    $employeeData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code'))
-                                        ->where('client_id',$this->request->getGet('client_id'))
-                                        ->where('is_active', 1 )->findAll();
-    $whereArrayForId = [];
-    foreach ( $employeeData as $key => $value) { array_push($whereArrayForId, $value['id']); }
-    
-    if(count($ClientPolicyData) > 0 && count($employeeData) > 0)
-    {
-        $result = [];
-        foreach ($ClientPolicyData as $key => $ClientPolicyValue) {
-
-            $terms = json_decode($ClientPolicyValue['policy_terms']);
-            // dd($terms);
-            $data['client_id'] = $ClientPolicyValue['client_id'];
-            $data['client_policy_id'] = $ClientPolicyValue['id'];
-            $data['policy_name'] = $ClientPolicyValue['policy_name'];
-            $data['policy_type'] = $ClientPolicyValue['policy_type'];
-            $data['policy_type'] = $ClientPolicyValue['policy_type'];
-            $data['policy_start_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_start_date']);
-            $data['policy_end_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_end_date']);
-
-            if($ClientPolicyValue['policy_type_id'] == 1){ $data['heading'] = 'Group Personal Accident Coverage'; }else
-            if($ClientPolicyValue['policy_type_id'] == 2){ $data['heading'] = 'Group Medical Coverage'; }else
-            if($ClientPolicyValue['policy_type_id'] == 3){ $data['heading'] = 'Group Medical Coverage - Parents'; }else
-            if($ClientPolicyValue['policy_type_id'] == 4){ $data['heading'] = 'Group Medical Coverage - Top Up'; }else
-            if($ClientPolicyValue['policy_type_id'] == 5){ $data['heading'] = 'Group Medical Coverage - Parents (Top Up)'; }
-
-            if($ClientPolicyValue['policy_type_id'] == 1){ $data['floter_text_heading'] = 'Sum Insured'; }
-            else
-            { 
-               if($terms->family_floater == 1){ $data['floter_text_heading'] = 'Floter Sum Insured'; }else{ $data['floter_text_heading'] = 'Sum Insured'; }
-            }
-            
-            $employee_policy = $this->employeePolicyModel->select('employees.*,employee_polices.employee_id , employee_polices.basic_cover_si , employee_polices.premium , employee_polices.gst , employee_polices.tpa_id , employee_polices.rand_string')
-                                                         ->join('employees', 'employee_polices.employee_id = employees.id', 'left')
-                                                         ->whereIn('employee_polices.employee_id',$whereArrayForId)
-                                                         ->where('employee_polices.client_policy_id',$ClientPolicyValue['id'])
-                                                         ->where('employee_polices.is_active', 1 )->findAll();
-            $si_value = 0;
-            $si_premium_value = 0;
-            $si_gst_value = 0;                                             
-            foreach ($employee_policy as $key => $value) {
-                if(isset($value['basic_cover_si'])){  $si_value = $value['basic_cover_si']; }
-                if(isset($value['premium'])){   $si_premium_value = $si_premium_value + $value['premium'];}
-                if(isset($value['gst'])){   $si_gst_value = $si_gst_value + $value['gst'];}
-            }   
-
-            $data['si_value'] = $si_value;
-            $data['si_premium_value'] = ($ClientPolicyValue['policy_type_id'] == 1 ||  $ClientPolicyValue['policy_type_id'] == 2) ? 0 : $si_premium_value;
-            $data['si_gst_value'] = ($ClientPolicyValue['policy_type_id'] == 1 || $ClientPolicyValue['policy_type_id'] == 2) ? 0 : $si_gst_value;
-
-            $data['EmployeePolicy'] = $employee_policy;
-            array_push($result, $data);
-        }
-
-        return $this->respond(['status' => 'success','code' => 200,'data' => $result ], 200);
-
-    }else{
-        return $this->respond(['status' => 'failed','code' => 404,'data' => [] ], 200);
-    }
-   
-}
-
 function getEmployeeActiveOrInactivePolicy()
 {
 
@@ -2055,6 +2007,7 @@ function getEmployeeActiveOrInactivePolicy()
                                                 ->join('policies', 'client_policy.policy_id = policies.id', 'left')
                                                 ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
                                                 ->where('client_policy.client_id', $this->request->getGet('client_id') )
+                                                ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') )
                                                 ->where('client_policy.is_active', 1 )
                                                 ->where('client_policy.policy_status', $policy_status)
                                                 ->orderby('client_policy.id' , 'ASC')
@@ -2063,9 +2016,11 @@ function getEmployeeActiveOrInactivePolicy()
     // Retrieve employee and dependents data by passing the employee code
     $employeeData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code'))
                                         ->where('client_id',$this->request->getGet('client_id'))
+                                        ->where('client_branch_id',$this->request->getGet('client_branch_id'))
                                         ->where('is_active', 1 )->findAll();
     $employeeName = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code'))
                                         ->where('client_id',$this->request->getGet('client_id'))
+                                        ->where('client_branch_id',$this->request->getGet('client_branch_id'))
                                         ->where('family_floater_key','self')->where('is_active', 1 )
                                         ->get()->getRow()->name;
     $whereArrayForId = [];
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/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php
index 3af70fc4..72e7b8c7 100644
--- a/app/Controllers/RestAuthenticationController.php
+++ b/app/Controllers/RestAuthenticationController.php
@@ -101,7 +101,7 @@ class RestAuthenticationController extends AdminController
                 $auth =  HttpRequestHelper::getRequestInfo();
                 if ($auth) {
                     $data = [
-                        'user_id' => $employeeData['id'],
+                       'user_id' => $employeeData['id'],
                        'user_type' => 'employee',
                        'ip' => $auth['ip'],
                        'platform' => $auth['platform'],
diff --git a/app/Filters/AuthJWT.php b/app/Filters/AuthJWT.php
index a9b6911f..456b2e6f 100644
--- a/app/Filters/AuthJWT.php
+++ b/app/Filters/AuthJWT.php
@@ -24,9 +24,17 @@ class AuthJWT implements FilterInterface
             if (JWTToken::validateJWT($jwt)) {
                 $data = JWTToken::validateJWT($jwt);
                 $data = json_decode($data);
+
                 if ($data->status) {
                     // $auth = $request->getHeader("Authorization");
-                    
+                    // $decodedToken = $data->decoded;
+
+                    // $decodedToken->exp += 30;
+                    // $newJwt = JWTToken::encode((array)$decodedToken);
+
+                    // Set the new JWT in the response headers
+                    // $response = service('response');
+                    // $response->setHeader('Authorization', $newJwt);                
                     return true;
                 }else{
                     header('Content-Type: application/json');
diff --git a/app/Helpers/JWTToken.php b/app/Helpers/JWTToken.php
index 6c6d29cf..dc381fa1 100644
--- a/app/Helpers/JWTToken.php
+++ b/app/Helpers/JWTToken.php
@@ -20,7 +20,7 @@ class JWTToken
     {
         $secret_Key="secret";
         $iat = time();
-        $exp = $iat + 36000;
+        $exp = $iat + 180;
         $request_data = [
             "iat" => $iat, 
             "exp" => $exp,
diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php
index cfc96b17..0c8c7067 100644
--- a/app/Helpers/sendMailNotification.php
+++ b/app/Helpers/sendMailNotification.php
@@ -105,6 +105,7 @@ class sendMailNotification
             $name =  $get_emp_email_and_other_details['name'];
             $mail_content = $notification['mail_content'];
             $nhance_logo = $_ENV['NHANCE_LOGO'];
+            $post_enrollment_app_link = $_ENV['POST_ENROLLMENT_APP_LINK'];
             
             $client_logo = base_url() . "public/uploads/logo/" . $client_data['client_logo'];
             // $client_logo = $nhance_logo;
@@ -114,8 +115,9 @@ class sendMailNotification
 
             $mail_content = str_replace("[[member_name]]", $name, $mail_content);
             $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content);
+            $mail_content = str_replace("[[post_enrollment_app_link]]", "Review Details", $mail_content);
             // $mail_content = str_replace("[[tpa_id]]", $tpa_id, $mail_content);
-            $mail_content = str_replace("[[ecard_download_link]]", "Download Insurance Card", $mail_content);
+            $mail_content = str_replace("[[ecard_download_link]]", "Download Insurance Card", $mail_content);
             $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content);
 
             $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails']];
diff --git a/app/Helpers/session_helper.php b/app/Helpers/session_helper.php
index 6e879e4b..ce6a0f56 100644
--- a/app/Helpers/session_helper.php
+++ b/app/Helpers/session_helper.php
@@ -10,6 +10,37 @@ if (!function_exists('check_session')) {
     }
 }
 
+if (!function_exists('set_last_visited_time')) {
+    function set_last_visited_time()
+    {
+        $session = \Config\Services::session();
+        $session->set('last_visited', date("Y-m-d H:i:s"));
+    }
+}
+
+if (!function_exists('get_last_visited_time')) {
+    function get_last_visited_time()
+    {
+        // Get the session service
+        $session = \Config\Services::session();
+
+        // Get the last visited time from session
+        $lastVisitTime = $session->get('last_visited');
+
+        // Check if the last visited time is set
+        if ($lastVisitTime) {
+            // Calculate the time five minutes ago
+            $fiveMinutesBefore = date("YmdHi", strtotime('-5 minutes'));
+
+            // Compare the last visited time with the time five minutes ago
+            return date("YmdHi", strtotime($lastVisitTime)) > $fiveMinutesBefore ? 1 : 0;
+        }
+
+        // If last visited time is not set, return 0
+        return 0;
+    }
+}
+
 if (!function_exists('get_session_userid')) {
     function get_session_userid()
     {
diff --git a/app/Models/ClientModel.php b/app/Models/ClientModel.php
index 35beeb4c..fd1e8510 100644
--- a/app/Models/ClientModel.php
+++ b/app/Models/ClientModel.php
@@ -42,7 +42,18 @@ class ClientModel extends Model
 
             foreach ($clients as &$client) {
                 $clientPolicyModel = new ClientPolicyModel();
-                $clientPolicies = $clientPolicyModel->select(['client_branch.id as branch_id','client_branch.branch_name','client_branch.branch_code', 'client_branch.client_id', 'client_policy.id as client_policy_id','p.name','pt.policy_type',])
+                $clientPolicies = $clientPolicyModel
+                                  ->select(['
+
+                                        client_branch.id as branch_id',
+                                        'client_branch.branch_name',
+                                        'client_branch.branch_code', 
+                                        'client_branch.client_id', 
+                                        'client_policy.id as client_policy_id',
+                                        'client_policy.policy_terms',
+                                        'p.name',
+                                        'pt.policy_type',
+                                    ])
                                   ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') 
                                   ->join('policies p', 'p.id = client_policy.policy_id') 
                                   ->join('policy_type pt','client_policy.policy_type_id = pt.id')
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/Models/PolicyPremium2Model.php b/app/Models/PolicyPremium2Model.php
index a03ca381..b302a53c 100644
--- a/app/Models/PolicyPremium2Model.php
+++ b/app/Models/PolicyPremium2Model.php
@@ -25,6 +25,8 @@ class PolicyPremium2Model extends Model
         'is_active',  
         'premium_type',  
         'relationship',  
+        'additional_relationship',  
+        'rack_rate_type',  
         
     ];
 
diff --git a/app/Views/client_branch.php b/app/Views/client_branch.php
index c788731c..93ea7137 100644
--- a/app/Views/client_branch.php
+++ b/app/Views/client_branch.php
@@ -234,7 +234,7 @@ $(document).ready(function () {
     $("#branch_form").submit(function(event) {
 
         event.preventDefault(); 
-        branch_PrimaryKey = $('#client_id_for_client_branch').val();
+        branch_PrimaryKey = $('#client_id_branch').val();
 
         console.log('branch_PrimaryKey', branch_PrimaryKey)
         
diff --git a/app/Views/client_policy.php b/app/Views/client_policy.php
index bb844432..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 @@ -47,7 +47,7 @@
@@ -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)} @@ -1468,6 +1468,13 @@ $('#client_branch').empty(); + + $('#client_branch').append($('