diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 6e3e0e30..e3685dd8 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -8,6 +8,7 @@ use CodeIgniter\Router\RouteCollection; */ $routes->post('/chat', 'ChatbotControllerNew::index'); $routes->get('/widget', 'ChatbotControllerNew::widget'); +$routes->get('/chatbottest', 'ChatbotControllerNew::chatbotest'); $routes->get('/chatbot', 'ChatbotControllerNew::chatbot'); $routes->get('/swagger', 'SwaggerController::index', ['filter' => 'authMVC']); @@ -45,6 +46,7 @@ $routes->get("frontend_content", "AppContentManagementController::frontend_conte // $routes->get('/', 'LoginController::index'); $routes->get('/test', 'Home::index'); +$routes->get('/check_gemini', 'Home::check_Gemini'); $routes->get('/login', 'LoginController::index'); ///auth/google $routes->get('/loginPos', 'LoginController::loginPos'); //login POS team $routes->post('/getVerifyPosMobileNo', 'LoginController::getVerifyPosMobileNo'); //Verify POS team mobile no @@ -87,6 +89,8 @@ $routes->group("/client", ["filter" => "authMVC"], function ($routes) { $routes->get('deposit/(:num)', 'ClientController::deposit/$1'); $routes->get('remove/(:num)', 'ClientController::removeClient/$1'); $routes->get("list/(:any)", "ClientController::editClientOnboarding/$1"); + $routes->post('wipe', 'ClientController::wipeDemoClient'); + // application/config/routes.php // Add a route for the view_Deposit method @@ -589,7 +593,9 @@ $routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { $routes->post("getPoliciesbyEmpID","TicketController::getPoliciesbyEmpID"); $routes->post("getMoreInfo","TicketController::getMoreInfo"); $routes->get("getMoreInfo","TicketController::getMoreInfo"); -// $routes->post('ticket_messages','TicketController::getTicketMessage'); + $routes->post('upload_url',"TicketController::upload_url"); + $routes->post('getUrlDataByTicketId',"TicketController::getUrlDataByTicketId"); + $routes->get('remove_url',"TicketController::remove_url"); }); $routes->group("clientApi",["filter" => "AuthClientApi"], function ($routes){ diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php index c38d6977..1f303c13 100644 --- a/app/Controllers/Chatbot/EcardDownloadConversation.php +++ b/app/Controllers/Chatbot/EcardDownloadConversation.php @@ -23,7 +23,7 @@ class EcardDownloadConversation extends Conversation $policy_list = ChatbotHelper::getListOfPolicies($chat_session_info); $buttons = []; $question = 'Choose Policy to Download Ecard:'; - log_message('error', ('policy_list : ' . json_encode($policy_list))); + // log_message('error', ('policy_list : ' . json_encode($policy_list))); if(is_array($policy_list) && count($policy_list)) { diff --git a/app/Controllers/ChatbotControllerNew.php b/app/Controllers/ChatbotControllerNew.php index dc38a3c9..544c40d4 100644 --- a/app/Controllers/ChatbotControllerNew.php +++ b/app/Controllers/ChatbotControllerNew.php @@ -25,9 +25,13 @@ class ChatbotControllerNew extends BaseController public function __construct() { set_session_context('CHATBOT CON'); + $this->myLogger = \Config\Services::mylogger(); $this->session = \Config\Services::session(); + $sessionID = session_id(); + $this->myLogger->logme('error', 'COOKIE - ' . $sessionID); + // $this->myLogger->logme('error', 'CALLED'); // Load BotMan driver @@ -51,6 +55,9 @@ class ChatbotControllerNew extends BaseController // $this->myLogger->logme('error', $method); if (isset($extras) && $method == 'widget') { + $request = \Config\Services::request(); + $cookieHeader = $request->getHeaderLine('Cookie'); + $extras = $extras->parameters; $this->session->set('CHATBOT_EMP_ID', $extras->employee_id); $this->session->set('CHATBOT_ORIGIN', $extras->origin); @@ -104,10 +111,10 @@ class ChatbotControllerNew extends BaseController log_message("error","Inside Bot Type Function"); $bot->types(); // Typing indicator for the first message - sleep(0.5); // Delay + sleep(0.1); // Delay }); // Start the Main Menu when user says "hi" or "start" - $this->botman->hears('start|hi|hello', function (BotMan $bot) { + $this->botman->hears('start|hi|hello|help|help me', function (BotMan $bot) { if ($this->isMemberLoggedIn){ $bot->reply('Hi how can i assist?'); $bot->startConversation(new MainMenuConversation()); @@ -139,9 +146,14 @@ class ChatbotControllerNew extends BaseController // } + public function chatbotest() + { + $this->loadLayout('chatbottest.php'); + } + public function chatbot() { - $this->loadLayout('chatbot.php'); + echo view('chatbot.php'); } public function widget() diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 10aeea5f..d4bfa5d8 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -608,6 +608,8 @@ class ClientController extends AdminController $data['policy_types'] = $this->policyTypeModel->findAll(); $data['policy_type'] = ['1' => 'Base Policy', '2' => 'SI Topup', '3' => 'Dependent Addon']; $data['client_type'] = ['1' => 'Group', '2' => 'Retail']; + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['insurers'] = $this->insurerModel->where('is_active', 1)->findAll(); // echo "
";
         // print_r($data); die;
@@ -635,6 +637,7 @@ class ClientController extends AdminController
         $balances = $this->clientPolicyModel->getBalances($id);
         $data['balances'] = $balances;
 
+        // dd($data);
         if($requestFrom == 'rest'){ return $data; }
 
         echo view('layout/header', $headerData);
@@ -746,12 +749,15 @@ class ClientController extends AdminController
         $this->myLogger->logme('error', 'Edit Client Onboarding function called');
         $headerData['page_name'] = 'Edit Client Onboarding';
 
-        $editData['RM']                 = $this->userModel->where('is_active', 1)->findAll();
+        $editData['RM']             = $this->userModel->where('is_active', 1)->findAll();
         $editData['tpa']            = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
         $editData['state']          = $this->stateModel->getAllStates();
         $editData['police']         = $this->policesModel->findAll();
         $editData['entity']         = $this->kycEntityTypeModel->findAll();
         $editData['insurer']        = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
+        $editData['insurers']       = $this->insurerModel->where('is_active', 1)->findAll();
+        $editData['insurer_branch'] = $this->insurerBranchModel->where('is_active', 1)->findAll();
+        $editData['clients']        = $this->clientModel->where('is_active', 1)->findAll();
         $editData['kyc_docs']       = $this->kycDocsModel->findAll();
         $editData['policyGridData'] = $this->policyGridModel->findAll();
         $editData['policy_types'] = $this->policyTypeModel->findAll();
@@ -805,7 +811,12 @@ class ClientController extends AdminController
             $data['is_download_btn'] = 1;
         }
 
+        if(empty($data['parent_client_id'])){
+            $data['parent_client_id'] = null;
+        }
+
         $insert = $this->clientModel->insert($data);
+
         if ($insert) {
             $client_data = $this->clientModel->where(['id' => $insert, 'is_active' => 1])->first();
             return $this->respond(['status' => true, 'code' => 200, 'data' => $client_data], 200);
@@ -834,6 +845,9 @@ class ClientController extends AdminController
             $data['is_download_btn'] = 1;
         }
 
+        if(empty($data['parent_client_id'])){
+            $data['parent_client_id'] = null;
+        }
         // print_r($data);die;
 
         $update             = $this->clientModel->update($id, $data);
@@ -2166,6 +2180,7 @@ class ClientController extends AdminController
 
             $insurer_id = $client_policy_data['insurer_id'];
             $client_id = $client_policy_data['client_id'];
+            $insurer_branch_id = $client_policy_data['insurer_branch_id'];
 
             if (!empty($client_policy_data['policy_start_date'])) {
                 $client_policy_data['source_policy_start_date'] =  change_date_format($client_policy_data['policy_start_date'], 'Y-m-d', 'd/m/Y');
@@ -2186,7 +2201,8 @@ class ClientController extends AdminController
                 ->findAll();
 
             $client_policy_list = $this->clientPolicyModel->getPolicyTypeForPolicyBinding($client_id);
-            $cd_data = $this->CDMasterModel->where('client_id', $client_id)->where('insurer_id', $insurer_id)->where('is_active', 1)->findAll();
+            // $cd_data = $this->CDMasterModel->where('client_id', $client_id)->where('insurer_id', $insurer_id)->where('is_active', 1)->findAll();
+            $cd_data = $this->get_cd_ac($client_id, $insurer_id, $insurer_branch_id, "internal");
             // $client_policy_data['policy_end_date'] = date('d/m/Y', strtotime($client_policy_data['policy_end_date']));
             $fromDate = new \DateTime($client_policy_data['policy_end_date']);
             $fromDate->modify('+1 year');
@@ -2545,6 +2561,7 @@ class ClientController extends AdminController
             // $data['special_condition_label'] = str_replace(',', '', $this->request->getPost("special_condition_label")) ?? [];
             // $data['special_condition_input'] = str_replace(',', '', $this->request->getPost("special_condition_input")) ?? [];
             // $data['multiple_sum_insured'] = str_replace(',', '', $this->request->getPost("multiple_sum_insured")) ?? [];
+            
             $fields = [
                 'waiverofpreexistingdiseases' => false,
                 'waiverof1,2,3&4thyearexclusions' => false,
@@ -2591,18 +2608,17 @@ class ClientController extends AdminController
                 'special_condition_input' => true,
                 'multiple_sum_insured' => true,
             ];
-            
-            // $data = [];
-            
+                       
             foreach ($fields as $field => $needsCleanup) {
                 $value = $this->request->getPost($field);
             
                 if ($value !== null && $value !== '') {
                     $data[$field] = $needsCleanup ? str_replace(',', '', $value) : $value;
+                }else{
+                     $data[$field] = $value;
                 }
             }
             
-
             $data['enrollment_display_key'] = $this->enrollmentGMCDisplayValueTransform();
 
             // print_r($data);die;
@@ -2865,6 +2881,8 @@ class ClientController extends AdminController
         try {
             $this->myLogger->logme('error', 'Policy GPA Terms CREATE function called');
 
+            // print_r($this->request->getPost()); die;
+
             /*** Client Policy Table Primary Key(ID) ***/
             $client_policy_id = $this->request->getPost("client_policy_id");
 
@@ -2936,6 +2954,8 @@ class ClientController extends AdminController
                 $value = $this->request->getPost($field);
                 if ($value !== null) {
                     $data[$field] = str_replace(',', '', $value);
+                }else{
+                     $data[$field] = $value;
                 }
             }
             
@@ -2944,6 +2964,8 @@ class ClientController extends AdminController
                 $value = $this->request->getPost($field);
                 if ($value !== null) {
                     $data[$field] = $value;
+                }else{
+                     $data[$field] = $value;
                 }
             }
             
@@ -3551,22 +3573,64 @@ class ClientController extends AdminController
         return $this->respond(['status' => true, 'code' => 200, 'message' => 'Additionaly Rack Rate Data Remove Successfully'], 200);
     }
 
-    public function get_cd_ac($client_id, $insurer_id)
+    public function get_cd_ac($client_id, $insurer_id, $insurer_branch_id, $return_type = null)
     {
+        // Get client data
+        $client_data = $this->clientModel
+            ->where('is_active', 1)
+            ->where('id', $client_id)
+            ->first();
 
-        $cd_data = $this->CDMasterModel
+        $cd_data = [];
+
+        // If client has a parent, fetch parent client CD data
+        if (!empty($client_data['parent_client_id'])) {
+            $parent_cd_data = $this->CDMasterModel
+                ->where('client_id', $client_data['parent_client_id'])
+                ->where('insurer_id', $insurer_id)
+                ->where('insurer_branch_id', $insurer_branch_id)
+                ->where('is_active', 1)
+                ->findAll();
+
+            $cd_data = array_merge($cd_data, $parent_cd_data);
+        }
+
+        // Fetch current client CD data
+        $client_cd_data = $this->CDMasterModel
             ->where('client_id', $client_id)
             ->where('insurer_id', $insurer_id)
+            ->where('insurer_branch_id', $insurer_branch_id)
             ->where('is_active', 1)
             ->findAll();
 
-        if ($cd_data) {
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $cd_data], 200);
+        $cd_data = array_merge($cd_data, $client_cd_data);
+
+        if($return_type == "internal"){
+            if(!empty($cd_data)){
+                return $cd_data;
+            }else{
+                return [];
+            }
+        }
+
+        if (!empty($cd_data)) {
+            return $this->respond([
+                'status' => true,
+                'code' => 200,
+                'data' => $cd_data
+            ], 200);
         } else {
-            return $this->respond(['status' => false, 'code' => 404, 'insurer_id' => $insurer_id, 'client_id' => $client_id], 200);
+            return $this->respond([
+                'status' => false,
+                'code' => 404,
+                'client_id' => $client_id,
+                'insurer_id' => $insurer_id,
+                'insurer_branch_id' => $insurer_branch_id
+            ], 200);
         }
     }
 
+
     public function otherPolicyTermsFormSubmit()
     {
 
@@ -4095,21 +4159,60 @@ class ClientController extends AdminController
     }
 
 
-
-    public function getCDAccNoByClientAndInsurer($client, $insurer)
+    public function getCDAccNoByClientAndInsurer($client_id, $insurer_id, $insurer_branch_id)
     {
-        $cdmData = $this->CDMasterModel
-                        ->where('client_id', $client)
-                        ->where('insurer_id', $insurer)
-                        ->where('is_active', 1)
-                        ->findAll();
+        // Get client data
+        $client_data = $this->clientModel
+            ->where('is_active', 1)
+            ->where('id', $client_id)
+            ->first();
 
-        if ($cdmData) {
-            return $this->respond(['status' => true, 'data' => $cdmData], 200);
+        $cd_data = [];
+
+        // If client has a parent, fetch parent client CD data
+        if (!empty($client_data['parent_client_id'])) {
+            $parent_cd_data = $this->CDMasterModel
+                ->where('client_id', $client_data['parent_client_id'])
+                ->where('insurer_id', $insurer_id)
+                ->where('insurer_branch_id', $insurer_branch_id)
+                ->where('is_active', 1)
+                ->findAll();
+
+            $cd_data = array_merge($cd_data, $parent_cd_data);
+        }
+
+        // Fetch current client CD data
+        $client_cd_data = $this->CDMasterModel
+            ->where('client_id', $client_id)
+            ->where('insurer_id', $insurer_id)
+            ->where('insurer_branch_id', $insurer_branch_id)
+            ->where('is_active', 1)
+            ->findAll();
+
+        $cd_data = array_merge($cd_data, $client_cd_data);
+
+        if (!empty($cd_data)) {
+            return $this->respond([ 'status' => true,'code' => 200, 'data' => $cd_data], 200);
         } else {
-            return $this->respond(['status' => false], 200);
+            return $this->respond(['status' => false,'code' => 404,'client_id' => $client_id,'insurer_id' => $insurer_id,'insurer_branch_id' => $insurer_branch_id ], 200);
         }
     }
+    
+    // public function getCDAccNoByClientAndInsurer($client, $insurer, $insurer_branch_id)
+    // {
+    //     $cdmData = $this->CDMasterModel
+    //                     ->where('client_id', $client)
+    //                     ->where('insurer_id', $insurer)
+    //                     ->where('insurer_branch_id', $insurer_branch_id)
+    //                     ->where('is_active', 1)
+    //                     ->findAll();
+
+    //     if ($cdmData) {
+    //         return $this->respond(['status' => true, 'data' => $cdmData], 200);
+    //     } else {
+    //         return $this->respond(['status' => false], 200);
+    //     }
+    // }
 
     public function createClientWithMinimalData()
     {
@@ -4119,7 +4222,7 @@ class ClientController extends AdminController
         $client_data = [
             'client_type' => $postData['client_type'],
             'client_name' => $postData['client_name'],
-            'short_name' => $postData['short_name'],
+            'short_name' => $postData['short_name'] ?? $postData['client_name'],
             'pan' => $postData['pan'],
             'client_code' => generate_client_code(),
         ];
@@ -4937,24 +5040,24 @@ class ClientController extends AdminController
         
         // ---------- EMP SERVICE CONTROLLER --------------------------------------------------------------------------------
 
-        $employeeRestController = new EmployeeServiceController();
-        // $employeeRestController->excelFileDataValidation(['file_id' => 1629]); die;
-        // $employeeRestController->employeesOnboardPreprocess(['file_id' => 726]);
-        // $employeeRestController->employeesOnboardProcess(['file_id' => 835]);
-        // $employeeRestController->employeesEnrollmentInsert(['file_id' => 836]);
-        // $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]);
         $empServiceController = new EmployeeServiceController();
         // $res = $empServiceController->excelFileFormatValidation(['file_id' => '865']);
         // $res = $empServiceController->excelFileDataValidation(['file_id' => '865']);
+        // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 726]);
+        // $res = $empServiceController->employeesOnboardProcess(['file_id' => 835]);
+        // $res = $empServiceController->employeesEnrollmentInsert(['file_id' => 836]);
         // $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '978']);
-        // $res = $empServiceController->employeeDisembark(['file_id' => '1681']); dd( $res); 
+        // $res = $empServiceController->employeeDisembark(['file_id' => '1681']); 
+        // $res = $empServiceController->employeesCorrectionProcess(['file_id' => '1681']); 
+        // dd( $res); 
+
+        // ---------- POLICY TRANSACTION CONTROLLER --------------------------------------------------------------------------------
 
         $policyTransactionController = new PolicyTransactionController();
         // $res = $policyTransactionController->validateInsurerStatement(['file_id' => '17']);
         // $res = $policyTransactionController->updateInsurerStatement(['file_id' => '22']);
         // dd('-----', $res);
 
-
         // ----------EMP DATA SERVICE CONTROLLER--------------------------------------------------------------------------------
 
         $batch_data = [
@@ -4985,44 +5088,26 @@ class ClientController extends AdminController
         // $client_policy_data = $this->clientPolicyModel->getPolicyDetailsForRemainder($client_id=159, $client_branch_id=126);
         // $dashBoardController->sendRemainderMail($client_policy_data);
 
-        // $EmpDataServiceController = new EmpDataServiceController();
         // $emp_data = $this->employeePolicyModel->getEmployeePolicyForEcard(12);
         // $ids = array_column($emp_data, 'id');
-        // $EmpDataServiceController->sendMailForDownloadingECard($ids);
         
         $EmpDataServiceController = new EmpDataServiceController();
-        // $return = $EmpDataServiceController->generateExcelForDeletion($batch_data); dd($return); die;
-        // $EmpDataServiceController->generateExcelForSIEnhancement($batch_data); die;
-        // $EmpDataServiceController->importInceptionFileValidation(['file_id' => 1932]); die;
-        // $EmpDataServiceController->importDeletionValidation(['file_id' => 304]); //for live
-        // $EmpDataServiceController->importSIEnhancementUpdateEndorsementID(['file_id' => 1199]); //for live
-        // $result = $EmpDataServiceController->importSIEnhancementValidation(['file_id' => 2496]); //for live
-        // $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 214]); //for live
-
-        // $result = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($batch_data, 1); dd($result);
-        // $result = $this->employeePolicyModel->getSIEnhancementEmployeesDataForExportExcel($batch_data, 1);
+        // $res = $EmpDataServiceController->generateExcelForDeletion($batch_data); dd($return); die;
+        // $res = $EmpDataServiceController->generateExcelForSIEnhancement($batch_data); die;
+        // $res = $EmpDataServiceController->importInceptionFileValidation(['file_id' => 1932]); die;
+        // $res = $EmpDataServiceController->importDeletionValidation(['file_id' => 304]); //for live
+        // $res = $EmpDataServiceController->importSIEnhancementUpdateEndorsementID(['file_id' => 1199]); //for live
+        // $res = $EmpDataServiceController->importSIEnhancementValidation(['file_id' => 2496]); //for live
+        // $res = $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 214]); //for live
+        // $res = $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 310]); dd($res);//for live
+        // $res = $EmpDataServiceController->getInceptionBasePremium(["13332","13333","13334","13335","13336"]); dd($res);//for live
+        // $res = $EmpDataServiceController->getDeletionBasePremium(["13248","13250","13249","13247"], json_decode('{"employeeIds":["13248","13250","13249","13247"],"client_id":"3927","client_policy_id":"6183","client_branch_id":"1874","cd_ac_no":"CD9751909505","endorsement_no":"END1238","count":4,"event_name":"deletion","policy_name":"GMC","user_id":"48"}', true)); dd($res);//for live
+        // $res = $EmpDataServiceController->makeEntryForBDSPolicyTransaction(json_decode('{"client_policy_id":"6187","endorsement_no":null,"emp_count":5,"action_type":"inception","no_of_insured":3,"no_of_dependent":0}', true)); dd($res);//for live
+        // $res = $EmpDataServiceController->sendMailForDownloadingECard($ids);
+        // $res = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($batch_data, 1); dd($result);
+        // $res = $this->employeePolicyModel->getSIEnhancementEmployeesDataForExportExcel($batch_data, 1);
         // return $this->downloadInsurerExcelExport($batch_data);
-        // dd($result); die;
-
-        // $empServiceController = new EmployeeServiceController();
-        // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => '741']);
-
-        // $PolicyTransactionController = new PolicyTransactionController();
-        // $res = $PolicyTransactionController->validateInsurerStatement(['file_id' => '36']);
-
-        // $empServiceController = new EmployeeServiceController();
-        // $res = $empServiceController->excelFileDataValidation(['file_id' => '1101']);
-        // dd($res);
-
-        // $EmpDataServiceController = new EmpDataServiceController();
-        // $EmpDataServiceController->importInceptionFileValidation(['file_id' => 160]);
-
-        // $EmpDataServiceController = new EmpDataServiceController();
-        // $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 162]);
-        // $EmpDataServiceController->importInceptionFileValidation(['file_id' => 162]);
-        // $EmpDataServiceController->importDeletionValidation(['file_id' => 171]);
-        // $EmpDataServiceController->importDeletionUpdateEndorsementID(['file_id' => 171]);
-        // $EmpDataServiceController->importCorrectionUpdateEndorsementID(['file_id' => 188]);
+        // dd($res); die;
 
         // $params = [
         //     'client_policy_id' => 6090,
@@ -6141,7 +6226,7 @@ class ClientController extends AdminController
         }
     }
     
-    // ---------------------------------------------------------------------------------------------------
+    // ---------------- HR ACCESS CONTROL -----------------------------------------------------------------------------------
 
     public function viewHrAccessData()
     {   
@@ -6208,6 +6293,14 @@ class ClientController extends AdminController
 
         $pre_client_data = $db2->table('clients')->where('is_active', 1)->where('short_name', $post_client_data['short_name'])->get()->getRowArray();
 
+        if(empty($pre_client_data)){
+
+            $hrAccessData['pre_hr_data'] = [];
+            $hrAccessData['pre_policy_data'] = [];
+            $combinedHrAccessData = $this->constructHrAccessData($hrAccessData, $client_id);
+            return $combinedHrAccessData;
+        }
+
         $hrAccessData['pre_hr_data'] = $db2->table('client_branch')
             ->select('lc.id as pre_hr_id, lc.name as hr_name, lc.mobile as hr_mobile, lc.email as hr_mail')
             ->join('level_contacts lc', 'client_branch.id = lc.ref_id')
@@ -6479,8 +6572,585 @@ class ClientController extends AdminController
         }
     }
 
+    // ------------------- DEMO CLIENT FUNCTION --------------------------------------------------------------------------------
 
+    // public function wipeDemoClient()
+    // {
+    //     // $this->myLogger->logme('error', "Wipe Demo Client function called");
+    //     $this->myLogger->logme('error', "Wipe Demo Client function called"); // Red text
 
+    //     $this->myLogger->logme('error', "Wipe Demo client Payload : " . json_encode($this->request->getPost() ?? []));
+    //     $client_id = $this->request->getPost('client_id');
+
+    //     if (empty($client_id)) {
+    //         return $this->respond(['status' => false, 'message' => 'Client id required'], 404);
+    //     }
+
+    //     // 1. Client Model
+    //     $client_data = $this->clientModel->where('id', $client_id)->where('is_active', 1)->first();
+    //     $this->myLogger->logme('error', "Client data : " . json_encode($client_data ?? []));
+
+    //     if (!empty($client_data)) {
+    //         $is_deleted = $this->clientModel->where('id', $client_id)->delete();
+
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Client data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Client record does not exist.");
+    //         }
+    //     } else {
+    //         return $this->respond(['status' => false, 'message' => 'Client not found'], 404);
+    //     }
+
+    //     // 2. Client RM Model
+    //     $client_rm_data = $this->clientRMModel->where('client_id', $client_id)->first();
+    //     $this->myLogger->logme('error', "Client Relationship Manager data : " . json_encode($client_rm_data ?? []));
+
+    //     if (!empty($client_rm_data)) {
+    //         $is_deleted = $this->clientRMModel->where('client_id', $client_id)->delete();
+
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Client Relationship Manager data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Client Relationship Manager record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Client Relationship Manager data not found.");
+    //     }
+
+    //     // 3. Client KYC Docs Model
+    //     $client_kyc_data = $this->clientKYCDocsModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Client KYC Docs data : " . json_encode($client_kyc_data ?? []));
+
+    //     if (!empty($client_kyc_data)) {
+    //         $is_deleted = $this->clientKYCDocsModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Client KYC Docs data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Client KYC Docs record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Client KYC Docs data not found.");
+    //     }
+
+    //     // 4. Client Branch Model
+    //     $client_branch_data = $this->clientBranchModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Client Branch data : " . json_encode($client_branch_data ?? []));
+
+    //     $branch_ids = array_column($client_branch_data, 'id') ?? [];
+    //     $this->myLogger->logme('error', "Client Branch id count : " . count($branch_ids ?? []));
+
+    //     if (!empty($client_branch_data)) {
+
+    //         $is_deleted = $this->clientBranchModel->where('client_id', $client_id)->delete();
+
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Client Branch data removed successfully.");
+
+    //             if(!empty($branch_ids)){
+
+    //                 $level_contact_data = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->findAll();
+    //                 $this->myLogger->logme('error', "Level Contact data : " . json_encode($level_contact_data ?? []));
+
+    //                 $is_deleted = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->delete();
+    //                 if ($is_deleted) {
+    //                     $this->myLogger->logme('error', "Level Contact data removed successfully.");
+    //                 } else {
+    //                     $this->myLogger->logme('error', "Level Contact record does not exist. To delete");
+    //                 }
+
+    //             }else{
+    //                  $this->myLogger->logme('error', "Level Contact data not found.");
+    //             }
+
+    //         } else {
+    //             $this->myLogger->logme('error', "Client Branch record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Client Branch data not found.");
+    //     }
+
+    //     // 5. Client Policy Model
+    //     $client_policy_data = $this->clientPolicyModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Client Policy data : " . json_encode($client_policy_data ?? []));
+
+    //     $policy_ids = array_column($client_policy_data, 'id') ?? [];
+    //     $this->myLogger->logme('error', "Client Policy id count : " . count($policy_ids ?? []));
+
+    //     if (!empty($client_policy_data)) {
+    //         $is_deleted = $this->clientPolicyModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+
+    //             $this->myLogger->logme('error', "Client Policy data removed successfully.");
+
+    //             if(!empty($policy_ids)){
+
+    //                 $employee_policy_data = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->findAll();
+    //                 $this->myLogger->logme('error', "Employee Policy data count : " . count($employee_policy_data ?? []));
+
+    //                 $is_deleted = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->delete();
+    //                 if ($is_deleted) {
+    //                     $this->myLogger->logme('error', "Employee policy data removed successfully.");
+    //                 } else {
+    //                     $this->myLogger->logme('error', "Employee policy record does not exist. To delete");
+    //                 }
+
+    //             }else{
+    //                  $this->myLogger->logme('error', "Employee policy data not found.");
+    //             }
+
+    //         } else {
+    //             $this->myLogger->logme('error', "Client Policy record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Client Policy data not found.");
+    //     }
+
+    //     // 6. Employee Model
+    //     $employee_data = $this->employeeModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Employee data count : " . count($employee_data ?? []));
+
+    //     if (!empty($employee_data)) {
+
+    //         $is_deleted = $this->employeeModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Employee data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Employee record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Employee data not found.");
+    //     }
+
+    //     // 7. Client Deposit Model
+    //     $client_deposit_data = $this->clientDepositModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Client Deposit data : " . json_encode($client_deposit_data ?? []));
+
+    //     if (!empty($client_deposit_data)) {
+    //         $is_deleted = $this->clientDepositModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Client Deposit data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Client Deposit record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Client Deposit data not found.");
+    //     }
+
+    //     // 8. Policy Premium 1 Model
+    //     $policy_premium1_data = $this->policyPremium1Model->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Policy Premium 1 data count : " . count($policy_premium1_data ?? []));
+
+    //     if (!empty($policy_premium1_data)) {
+    //         $is_deleted = $this->policyPremium1Model->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Policy Premium 1 data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Policy Premium 1 record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Policy Premium 1 data not found.");
+    //     }
+
+    //     // 9. Policy Premium 2 Model
+    //     $policy_premium2_data = $this->policyPremium2Model->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Policy Premium 2 data count: " . count($policy_premium2_data ?? []));
+
+    //     if (!empty($policy_premium2_data)) {
+    //         $is_deleted = $this->policyPremium2Model->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Policy Premium 2 data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Policy Premium 2 record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Policy Premium 2 data not found.");
+    //     }
+
+    //     // 10. Notification Model
+    //     $notification_data = $this->notificationModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Notification data : " . json_encode($notification_data ?? []));
+
+    //     if (!empty($notification_data)) {
+    //         $is_deleted = $this->notificationModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Notification data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "Notification record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Notification data not found.");
+    //     }
+
+    //     // 11. CD Master Model
+    //     $cd_master_data = $this->CDMasterModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "CD Master data : " . json_encode($cd_master_data ?? []));
+
+    //     if (!empty($cd_master_data)) {
+    //         $is_deleted = $this->CDMasterModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "CD Master data removed successfully.");
+    //         } else {
+    //             $this->myLogger->logme('error', "CD Master record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "CD Master data not found.");
+    //     }
+
+    //     // 12. Policy Transaction Model
+    //     $policy_transaction_data = $this->policyTransactionModel->where('client_id', $client_id)->findAll();
+    //     $this->myLogger->logme('error', "Policy Transaction data : " . json_encode($policy_transaction_data ?? []));
+
+    //     $pt_ids = array_column($policy_transaction_data, 'id') ?? [];
+    //     $this->myLogger->logme('error', "Policy Transaction id count : " . count($pt_ids ?? []));
+
+    //     if (!empty($policy_transaction_data)) {
+    //         $is_deleted = $this->policyTransactionModel->where('client_id', $client_id)->delete();
+    //         if ($is_deleted) {
+    //             $this->myLogger->logme('error', "Policy Transaction data removed successfully.");
+
+    //             if(!empty($pt_ids)){
+
+    //                 $pt_co_share_data = $this->PTCOShareDetailsModel->whereIn('pt_id', $pt_ids)->findAll();
+    //                 $this->myLogger->logme('error', "PT CO Share data : " . json_encode($pt_co_share_data ?? []));
+
+    //                 $is_deleted = $this->PTCOShareDetailsModel->whereIn('pt_id', $pt_ids)->delete();
+    //                 if ($is_deleted) {
+    //                     $this->myLogger->logme('error', "PT CO Share data removed successfully.");
+    //                 } else {
+    //                     $this->myLogger->logme('error', "PT CO Share record does not exist. To delete");
+    //                 }
+
+    //             }else{
+    //                  $this->myLogger->logme('error', "PT CO Share data not found.");
+    //             }
+
+    //         } else {
+    //             $this->myLogger->logme('error', "Policy Transaction record does not exist. To delete");
+    //         }
+    //     } else {
+    //         $this->myLogger->logme('error', "Policy Transaction data not found.");
+    //     }
+
+    //     $this->myLogger->logme('error', "Wipe Demo Client function closed");
+    //     return $this->respond(['status' => true, 'message' => 'Demo client data wiped successfully'], 200);
+    // }
+
+    public function wipeDemoClient()
+    {
+        $this->myLogger->logme('error', "========================================");
+        $this->myLogger->logme('error', "WIPE DEMO CLIENT FUNCTION STARTED");
+        $this->myLogger->logme('error', "========================================");
+
+        $this->myLogger->logme('error', "Request Payload: " . json_encode($this->request->getPost() ?? []));
+        $client_id = $this->request->getPost('client_id');
+
+        if (empty($client_id)) {
+            $this->myLogger->logme('error', "ERROR: Client ID is required");
+            return $this->respond(['status' => false, 'message' => 'Client id required'], 404);
+        }
+
+        $this->myLogger->logme('error', "Client ID to wipe: " . $client_id);
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 1. CLIENT MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "1. PROCESSING CLIENT MODEL");
+        $client_data = $this->clientModel->where('id', $client_id)->where('is_active', 1)->first();
+        $this->myLogger->logme('error', "   Found Client Data: " . json_encode($client_data ?? []));
+
+        if (!empty($client_data)) {
+            $is_deleted = $this->clientModel->where('id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete client record");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ✗ Client not found or inactive");
+            return $this->respond(['status' => false, 'message' => 'Client not found'], 404);
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 2. CLIENT RM MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "2. PROCESSING CLIENT RM MODEL");
+        $client_rm_data = $this->clientRMModel->where('client_id', $client_id)->first();
+        $this->myLogger->logme('error', "   Found Client RM Data: " . json_encode($client_rm_data ?? []));
+
+        if (!empty($client_rm_data)) {
+            $is_deleted = $this->clientRMModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client RM data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Client RM record");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Client RM data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 3. CLIENT KYC DOCS MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "3. PROCESSING CLIENT KYC DOCS MODEL");
+        $client_kyc_data = $this->clientKYCDocsModel->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "   Found Client KYC Records: " . count($client_kyc_data ?? []));
+        $this->myLogger->logme('error', "   Client KYC Data: " . json_encode($client_kyc_data ?? []));
+
+        if (!empty($client_kyc_data)) {
+            $is_deleted = $this->clientKYCDocsModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client KYC Docs data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Client KYC Docs records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Client KYC Docs data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 4. CLIENT BRANCH MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "4. PROCESSING CLIENT BRANCH MODEL");
+        $client_branch_data = $this->clientBranchModel->where('client_id', $client_id)->findAll();
+        $branch_ids = array_column($client_branch_data, 'id') ?? [];
+        $this->myLogger->logme('error', "   Found Client Branch Records: " . count($client_branch_data ?? []));
+        $this->myLogger->logme('error', "   Branch IDs: " . json_encode($branch_ids));
+        $this->myLogger->logme('error', "   Client Branch Data: " . json_encode($client_branch_data ?? []));
+
+        if (!empty($client_branch_data)) {
+            $is_deleted = $this->clientBranchModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client Branch data removed successfully");
+
+                // Delete related Level Contact data
+                if (!empty($branch_ids)) {
+                    $this->myLogger->logme('error', "   4a. PROCESSING RELATED LEVEL CONTACT DATA");
+                    $level_contact_data = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->findAll();
+                    $this->myLogger->logme('error', "      Found Level Contact Records: " . count($level_contact_data ?? []));
+                    $this->myLogger->logme('error', "      Level Contact Data: " . json_encode($level_contact_data ?? []));
+
+                    $is_deleted = $this->levelContactModel->where('contact_type', 'client')->whereIn('ref_id', $branch_ids)->delete();
+                    if ($is_deleted) {
+                        $this->myLogger->logme('error', "      ✓ Level Contact data removed successfully");
+                    } else {
+                        $this->myLogger->logme('error', "      ✗ Failed to delete Level Contact records");
+                    }
+                } else {
+                    $this->myLogger->logme('error', "   ℹ No Branch IDs available for Level Contact deletion");
+                }
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Client Branch records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Client Branch data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 5. CLIENT POLICY MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "5. PROCESSING CLIENT POLICY MODEL");
+        $client_policy_data = $this->clientPolicyModel->where('client_id', $client_id)->findAll();
+        $policy_ids = array_column($client_policy_data, 'id') ?? [];
+        $this->myLogger->logme('error', "   Found Client Policy Records: " . count($client_policy_data ?? []));
+        $this->myLogger->logme('error', "   Policy IDs: " . json_encode($policy_ids));
+        $this->myLogger->logme('error', "   Client Policy Data: " . json_encode($client_policy_data ?? []));
+
+        if (!empty($client_policy_data)) {
+            $is_deleted = $this->clientPolicyModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client Policy data removed successfully");
+
+                // Delete related Employee Policy data
+                if (!empty($policy_ids)) {
+                    $this->myLogger->logme('error', "   5a. PROCESSING RELATED EMPLOYEE POLICY DATA");
+                    $employee_policy_data = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->findAll();
+                    $this->myLogger->logme('error', "      Found Employee Policy Records: " . count($employee_policy_data ?? []));
+
+                    $is_deleted = $this->employeePolicyModel->whereIn('client_policy_id', $policy_ids)->delete();
+                    if ($is_deleted) {
+                        $this->myLogger->logme('error', "      ✓ Employee Policy data removed successfully");
+                    } else {
+                        $this->myLogger->logme('error', "      ✗ Failed to delete Employee Policy records");
+                    }
+                } else {
+                    $this->myLogger->logme('error', "   ℹ No Policy IDs available for Employee Policy deletion");
+                }
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Client Policy records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Client Policy data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 6. EMPLOYEE MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "6. PROCESSING EMPLOYEE MODEL");
+        $employee_data = $this->employeeModel->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "   Found Employee Records: " . count($employee_data ?? []));
+
+        if (!empty($employee_data)) {
+            $is_deleted = $this->employeeModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Employee data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Employee records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Employee data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 7. CLIENT DEPOSIT MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "7. PROCESSING CLIENT DEPOSIT MODEL");
+        $client_deposit_data = $this->clientDepositModel->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "   Found Client Deposit Records: " . count($client_deposit_data ?? []));
+        $this->myLogger->logme('error', "   Client Deposit Data: " . json_encode($client_deposit_data ?? []));
+
+        if (!empty($client_deposit_data)) {
+            $is_deleted = $this->clientDepositModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Client Deposit data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Client Deposit records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Client Deposit data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 8. POLICY PREMIUM 1 MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "8. PROCESSING POLICY PREMIUM 1 MODEL");
+        $policy_premium1_data = $this->policyPremium1Model->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "   Found Policy Premium 1 Records: " . count($policy_premium1_data ?? []));
+
+        if (!empty($policy_premium1_data)) {
+            $is_deleted = $this->policyPremium1Model->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Policy Premium 1 data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Policy Premium 1 records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Policy Premium 1 data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 9. POLICY PREMIUM 2 MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "9. PROCESSING POLICY PREMIUM 2 MODEL");
+        $policy_premium2_data = $this->policyPremium2Model->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "   Found Policy Premium 2 Records: " . count($policy_premium2_data ?? []));
+
+        if (!empty($policy_premium2_data)) {
+            $is_deleted = $this->policyPremium2Model->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "   ✓ Policy Premium 2 data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "   ✗ Failed to delete Policy Premium 2 records");
+            }
+        } else {
+            $this->myLogger->logme('error', "   ℹ No Policy Premium 2 data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 10. NOTIFICATION MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "10. PROCESSING NOTIFICATION MODEL");
+        $notification_data = $this->notificationModel->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "    Found Notification Records: " . count($notification_data ?? []));
+        $this->myLogger->logme('error', "    Notification Data: " . json_encode($notification_data ?? []));
+
+        if (!empty($notification_data)) {
+            $is_deleted = $this->notificationModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "    ✓ Notification data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "    ✗ Failed to delete Notification records");
+            }
+        } else {
+            $this->myLogger->logme('error', "    ℹ No Notification data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 11. CD MASTER MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "11. PROCESSING CD MASTER MODEL");
+        $cd_master_data = $this->CDMasterModel->where('client_id', $client_id)->findAll();
+        $this->myLogger->logme('error', "    Found CD Master Records: " . count($cd_master_data ?? []));
+        $this->myLogger->logme('error', "    CD Master Data: " . json_encode($cd_master_data ?? []));
+
+        if (!empty($cd_master_data)) {
+            $is_deleted = $this->CDMasterModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "    ✓ CD Master data removed successfully");
+            } else {
+                $this->myLogger->logme('error', "    ✗ Failed to delete CD Master records");
+            }
+        } else {
+            $this->myLogger->logme('error', "    ℹ No CD Master data found");
+        }
+        $this->myLogger->logme('error', "----------------------------------------");
+
+        // ========================================
+        // 12. POLICY TRANSACTION MODEL DELETION
+        // ========================================
+        $this->myLogger->logme('error', "12. PROCESSING POLICY TRANSACTION MODEL");
+        $policy_transaction_data = $this->policyTransactionModel->where('client_id', $client_id)->findAll();
+        $pt_ids = array_column($policy_transaction_data, 'id') ?? [];
+        $this->myLogger->logme('error', "    Found Policy Transaction Records: " . count($policy_transaction_data ?? []));
+        $this->myLogger->logme('error', "    Policy Transaction IDs: " . json_encode($pt_ids));
+        $this->myLogger->logme('error', "    Policy Transaction Data: " . json_encode($policy_transaction_data ?? []));
+
+        if (!empty($policy_transaction_data)) {
+            $is_deleted = $this->policyTransactionModel->where('client_id', $client_id)->delete();
+            if ($is_deleted) {
+                $this->myLogger->logme('error', "    ✓ Policy Transaction data removed successfully");
+
+                // Delete related PT CO Share data
+                if (!empty($pt_ids)) {
+                    $this->myLogger->logme('error', "    12a. PROCESSING RELATED PT CO SHARE DATA");
+                    $pt_co_share_data = $this->PTCOShareDetailsModel->whereIn('pt_id', $pt_ids)->findAll();
+                    $this->myLogger->logme('error', "         Found PT CO Share Records: " . count($pt_co_share_data ?? []));
+                    $this->myLogger->logme('error', "         PT CO Share Data: " . json_encode($pt_co_share_data ?? []));
+
+                    $is_deleted = $this->PTCOShareDetailsModel->whereIn('pt_id', $pt_ids)->delete();
+                    if ($is_deleted) {
+                        $this->myLogger->logme('error', "         ✓ PT CO Share data removed successfully");
+                    } else {
+                        $this->myLogger->logme('error', "         ✗ Failed to delete PT CO Share records");
+                    }
+                } else {
+                    $this->myLogger->logme('error', "    ℹ No Policy Transaction IDs available for PT CO Share deletion");
+                }
+            } else {
+                $this->myLogger->logme('error', "    ✗ Failed to delete Policy Transaction records");
+            }
+        } else {
+            $this->myLogger->logme('error', "    ℹ No Policy Transaction data found");
+        }
+
+        $this->myLogger->logme('error', "========================================");
+        $this->myLogger->logme('error', "WIPE DEMO CLIENT FUNCTION COMPLETED");
+        $this->myLogger->logme('error', "Client ID: " . $client_id . " - Successfully processed");
+        $this->myLogger->logme('error', "========================================");
+
+        return $this->respond(['status' => true, 'message' => 'Demo client data wiped successfully'], 200);
+    }
 }
 
 
diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php
index 9d3eeecf..506b39a1 100755
--- a/app/Controllers/EmpDataServiceController.php
+++ b/app/Controllers/EmpDataServiceController.php
@@ -36,13 +36,13 @@ use App\Models\PTCOShareDetailsModel;
 
 use App\Controllers\Jobs;
 use App\Controllers\JobWorker;
-
-
+use App\Models\PolicyTypeModel;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use PhpOffice\PhpSpreadsheet\Reader\Exception as SpreadsheetReaderException;
 use PhpParser\Node\Expr\Cast\Double;
+use Kint\Kint;
 
 use function PHPUnit\Framework\returnSelf;
 
@@ -199,13 +199,21 @@ class EmpDataServiceController extends BaseController
         
         $totals = round($totals, 2);
 
-        if($export_data['insurer_or_tpa'] == 'insurer') //check CD amt related issue for only insurer, not tpa
+        //check CD amt insufficient only insurer, not tpa // DO NOT REMOVE THIS
+        if($export_data['insurer_or_tpa'] == 'insurer')
         {
             if (!empty($cash_balance)) {
                 if ((int) $cash_balance['balance']  < (int) $totals) {
                     $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
                     $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.  CASH BALANCE : {balance}  and  TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
-                    return 0;
+                     session()->set('cd_balance', false);
+                     session()->set('cd_amount', $cash_balance['balance']);
+                     session()->set('excel_file_amt', $totals);
+                }else{
+                     session()->set('cd_balance', true);
+                     session()->set('cd_amount', $cash_balance['balance']);
+                     session()->set('excel_file_amt', $totals);
+
                 }
             }
         }
@@ -700,13 +708,21 @@ class EmpDataServiceController extends BaseController
         // echo '
';
         // print_r($ids); die;
 
-        if($export_data['insurer_or_tpa'] == 'insurer') //check CD amt related issue for only insurer, not tpa
+        //check CD amt insufficiend for only insurer, not tpa // DO NOT REMOVE THIS
+        if($export_data['insurer_or_tpa'] == 'insurer')
         {
             if (!empty($cash_balance)) {
                 if ((int) $cash_balance['balance']  < (int) $rounded_totals) {
                     $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
                     $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.  CASH BALANCE : {balance}  and  TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
-                    return 0;
+                    session()->set('cd_balance', false);
+                    session()->set('cd_amount', $cash_balance['balance']);
+                    session()->set('excel_file_amt', $rounded_totals);
+                }else{
+                    session()->set('cd_balance', true);
+                    session()->set('cd_amount', $cash_balance['balance']);
+                    session()->set('excel_file_amt', $rounded_totals);
+
                 }
             }
         }
@@ -1003,22 +1019,29 @@ class EmpDataServiceController extends BaseController
                 $cash_balance['balance'] = $balance['opening_bal'];
             }
 
+            // Calculate the total amount from the objects
+            $totals = 0;
+            foreach ($inceptionData as $item) {
+                $totals =  $totals + $item->total;
+            }
 
-            
-                // Calculate the total amount from the objects
-                $totals = 0;
-                foreach ($inceptionData as $item) {
-                    $totals =  $totals + $item->total;
-                }
              $totals = round($totals, 2);
             
-            if($export_data['insurer_or_tpa'] != 'tpa')// check overal emp premium amt with cd balance only for insurer export, not tpa export
+            
+             if($export_data['insurer_or_tpa'] != 'tpa')// check overal emp premium amt with cd balance only for insurer export, not tpa export
             { 
                 if (!empty($cash_balance)) {
                     if ((int) $cash_balance['balance']  < (int) $totals) {
                         $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
                         $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.  CASH BALANCE : {balance}  and  TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
-                        return 0;
+                        session()->set('cd_balance', false);
+                        session()->set('cd_amount', $cash_balance['balance']);
+                        session()->set('excel_file_amt', $totals);
+                    }else{
+                        session()->set('cd_balance', true);
+                        session()->set('cd_amount', $cash_balance['balance']);
+                        session()->set('excel_file_amt', $totals);
+
                     }
                 }
             }
@@ -1359,6 +1382,8 @@ class EmpDataServiceController extends BaseController
         $batch_code = $file['batch_code'];
         $user_id = $file['created_by'];
 
+        $client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+
         $insurer_or_tpa = $file['insurer_or_tpa'];
         if ($insurer_or_tpa == 'tpa') {
             $id = 'tpa_id';
@@ -1516,38 +1541,42 @@ class EmpDataServiceController extends BaseController
 
             //--- TPA ID Duplicate check start ---
 
-            $current_tpa_id = $excel_data[$key][13];
+            // Duplicate checking for only GMC's and GPA
+            if(in_array($client_policy_data['policy_type_id'], [1,2,3,4,5])){
+                $current_tpa_id = $excel_data[$key][13];
 
-            if (isset($tpa_id_all[$current_tpa_id])) {
+                if (isset($tpa_id_all[$current_tpa_id])) {
 
-                // Add the current row to errors
-                $errors[$key][] = [
-                    'row' => $key,
-                    'column' => 13,
-                    'db_data' => "Duplicate TPA ID Found",
-                    'excel_data' => $current_tpa_id
-                ];
-            
-                // Add all existing rows with the same TPA ID to errors
-                foreach ($tpa_id_all[$current_tpa_id] as $existing_row) {
-                    $errors[$existing_row][] = [
-                        'row' => $existing_row,
+                    // Add the current row to errors
+                    $errors[$key][] = [
+                        'row' => $key,
                         'column' => 13,
                         'db_data' => "Duplicate TPA ID Found",
                         'excel_data' => $current_tpa_id
                     ];
-                }
+                
+                    // Add all existing rows with the same TPA ID to errors
+                    foreach ($tpa_id_all[$current_tpa_id] as $existing_row) {
+                        $errors[$existing_row][] = [
+                            'row' => $existing_row,
+                            'column' => 13,
+                            'db_data' => "Duplicate TPA ID Found",
+                            'excel_data' => $current_tpa_id
+                        ];
+                    }
 
-            } else {
-                if($current_tpa_id != "" && $current_tpa_id != null){
-                    $tpa_id_all[$current_tpa_id][] = $key;
-                }            
+                } else {
+                    if($current_tpa_id != "" && $current_tpa_id != null){
+                        $tpa_id_all[$current_tpa_id][] = $key;
+                    }            
+                }
             }
             
             //--- TPA ID Duplicate check end ---
 
-            if ($insurer_or_tpa == 'tpa') {
+            if ($insurer_or_tpa == 'tpa' && in_array($client_policy_data['policy_type_id'], [1,2,3,4,5])) {
 
+                //verify the TPA ID is not null
                 if ($excel_data[$key][13] === null) {
                     $missing_id[$key][] = [
                         'row' => $key,
@@ -1557,6 +1586,8 @@ class EmpDataServiceController extends BaseController
                     ];
                 }
             } else if ($insurer_or_tpa == 'insurer') {
+
+                //verify the UHID or Risk ID is not null
                 if ($excel_data[$key][14] === null) {
                     $missing_id[$key][] = [
                         'row' => $key,
@@ -1699,7 +1730,7 @@ class EmpDataServiceController extends BaseController
                     ];
                 }
 
-            } else if ($insurer_or_tpa == 'insurer') {
+            } else if ($insurer_or_tpa == 'insurer' && in_array($client_policy_data['policy_type_id'], [1,2,3,4,5])) {
 
                  if ($emp_value['tpa_id'] != $excel_data[$key][13]) {
                     $errors[$key][] = [
@@ -1867,6 +1898,9 @@ class EmpDataServiceController extends BaseController
         $emp_endorsement_table_data = [];
         $enrollment_file_id = null;
         $endorsement_id = null;
+        $no_of_insured = [];
+        $no_of_dependent = [];
+
 
         $emp_count = count($excel_data);
         $db = \Config\Database::connect();
@@ -1886,7 +1920,7 @@ class EmpDataServiceController extends BaseController
                 $totals = $totals + floatval($amount);
 
                 $query = $db->table('employee_polices');
-                $query->select('employee_polices.id');
+                $query->select('employee_polices.id, employees.id as emp_id, employees.emp_code, employees.name as emp_name, employees.relationship');
                 $query->join('employees', 'employees.id = employee_polices.employee_id');
                 $query->where('employee_polices.client_policy_id', $client_policy_id);
                 $query->where('employees.client_id', $client_id);
@@ -1907,11 +1941,20 @@ class EmpDataServiceController extends BaseController
                 $query->limit(1);
 
                 $result = $query->get()->getRowArray();
+                // Kint::dump($result);    
+
                 if (isset($result['id']) && $result['id'] !== null) {
                     $emp_policy_ids[] = $result['id']; //for cash deposite
                     $emp_details[] = array('id' => $result['id'], 'tpa_id' => $value[13], 'uhid' => $value[14]);
+                    if (strtolower($result['relationship']) == 'self') {
+                        $no_of_insured[] = ['emp_id' => $result['emp_id'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                    }else{
+                        $no_of_dependent[] = ['emp_id' => $result['emp_id'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                    }
                 }
 
+
+
                 if(in_array($file['event_type'], ['missed_inception']) && isset($value[18])){
                     $endorsement_id = $value[18];
 
@@ -1973,7 +2016,7 @@ class EmpDataServiceController extends BaseController
 
         }
 
-        // dd($emp_endorsement_table_data, $enrollment_file_id);
+        // dd($emp_endorsement_table_data, $enrollment_file_id, $no_of_insured, $no_of_dependent);
 
         //update the employee policy data (TPAID or UHID)
         $return = $this->employeePolicyModel->bulkUpdate($emp_details);
@@ -1993,6 +2036,10 @@ class EmpDataServiceController extends BaseController
         $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]);
 
+        //get the BASE PREMIUM and GST for BDS Entry
+        $base_bremium_and_gst = $this->getInceptionBasePremium($emp_policy_ids);
+        $this->myLogger->logme('error', 'Inception Base Premium and GST :'. json_encode($base_bremium_and_gst ?? []));
+        
         //update CD transaction entry if only insurer
         if ($file['insurer_or_tpa'] == 'insurer') {
 
@@ -2035,6 +2082,10 @@ class EmpDataServiceController extends BaseController
                 'endorsement_no' => $endorsement_id ?? null,
                 'emp_count' => $emp_count ?? null,
                 'action_type' => $file['event_type'] ?? null,
+                'no_of_insured' => count($no_of_insured ?? []) ?? null,
+                'no_of_dependent' => count($no_of_dependent ?? []) ?? null,
+                'base_premium' => $base_bremium_and_gst['base_premium'] ?? null,
+                'gst' => $base_bremium_and_gst['gst'] ?? null,
             ]]);
 
             // $this->cashDepositCalculationForInception($depositeData);
@@ -2977,6 +3028,8 @@ class EmpDataServiceController extends BaseController
         $endorsement_id = '';
         $enrollment_file_id = '';
         $endorsement_details = [];
+        $no_of_insured = [];
+        $no_of_dependent = [];
         $totals = 0;
 
         foreach ($excel_data as $key => $value) {
@@ -2989,7 +3042,14 @@ class EmpDataServiceController extends BaseController
 
             $result =  $this->empEndorsementModel
 
-                ->select('emp_endorsement.*, employees.id as emp_id, employee_polices.id as emp_policy_id')
+                ->select('
+                    emp_endorsement.*, 
+                    employees.id as emp_id, 
+                    employees.name as emp_name, 
+                    employees.emp_code, 
+                    employees.relationship, 
+                    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)
@@ -3015,6 +3075,11 @@ class EmpDataServiceController extends BaseController
                 $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');
+                if (strtolower($result['relationship']) == 'self') {
+                    $no_of_insured[] = ['emp_id' => $result['emp_id'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                }else{
+                    $no_of_dependent[] = ['emp_id' => $result['emp_id'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                }
             }
 
             $empData = $this->employeePolicyModel
@@ -3082,6 +3147,11 @@ class EmpDataServiceController extends BaseController
         $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]);
 
+        //get the BASE PREMIUM and GST for BDS Entry
+        $base_bremium_and_gst = $this->getInceptionBasePremium($employeeIds);
+        $this->myLogger->logme('error', 'SI Enhancement Base Premium and GST :'. json_encode($base_bremium_and_gst ?? []));
+
+
         //call the cash deposite function
         if ($file['insurer_or_tpa'] == 'insurer') {
 
@@ -3105,6 +3175,10 @@ class EmpDataServiceController extends BaseController
                 'endorsement_no' => $endorsement_id ?? null,
                 'emp_count' => $emp_count ?? null,
                 'action_type' => $file['event_type'] ?? null,
+                'no_of_insured' => count($no_of_insured ?? []) ?? null,
+                'no_of_dependent' => count($no_of_dependent ?? []) ?? null,
+                'base_premium' => $base_bremium_and_gst['base_premium'] ?? null,
+                'gst' => $base_bremium_and_gst['gst'] ?? null,
             ]]);
 
         }
@@ -3493,6 +3567,8 @@ class EmpDataServiceController extends BaseController
         $employee_policy_table_primaryKey = [];
         $endorsement_id = '';
         $enrollment_file_id = null; //files table primary key
+        $no_of_insured = [];
+        $no_of_dependent = [];
 
         $totals = 0;
 
@@ -3526,6 +3602,12 @@ class EmpDataServiceController extends BaseController
                     $employee_policy_table_data[] = array('id' => $result['emp_policy_primarykey'], 'date_of_exit' => change_date_format($result['date_of_exit']), 'reason_for_exit' => $result['reason_for_exit'], 'claim_status' => $result['claim_status'], 'status' => $result['status']);
                     // $employees_table_data[] = array('id' => $result['employees_id'], 'emp_status' => $result['status']);
                     $emp_endorsement_table_data[] = array('id' => $result['emp_endorsement_primarykey'], 'group_key' => $result['group_key'], 'endorsement_id' => $value[15], 'status' => 'complete');
+                   
+                    if (strtolower($result['relationship']) == 'self') {
+                        $no_of_insured[] = ['emp_id' => $result['employees_primarykey'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                    }else{
+                        $no_of_dependent[] = ['emp_id' => $result['employees_primarykey'], 'emp_code' => $result['emp_code'], 'emp_name' => $result['emp_name'] ];
+                    }
                 }
 
             }
@@ -3575,6 +3657,9 @@ class EmpDataServiceController extends BaseController
         $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]);
 
+        $base_bremium_and_gst = $this->getDeletionBasePremium($employee_policy_table_primaryKey, ['client_policy_id' => $client_policy_id]);
+        $this->myLogger->logme('error', 'Deletion Base Premium and GST :'. json_encode($base_bremium_and_gst ?? []));
+
         //call the cash deposite function
         if ($file['insurer_or_tpa'] == 'insurer') {
 
@@ -3598,6 +3683,10 @@ class EmpDataServiceController extends BaseController
                 'endorsement_no' => $endorsement_id ?? null,
                 'emp_count' => $emp_count ?? null,
                 'action_type' => $file['event_type'] ?? null,
+                'no_of_insured' => count($no_of_insured ?? []) ?? null,
+                'no_of_dependent' => count($no_of_dependent ?? []) ?? null,
+                'base_premium' => $base_bremium_and_gst['base_premium'] ?? null,
+                'gst' => $base_bremium_and_gst['gst'] ?? null,
             ]]);
         }
 
@@ -4262,8 +4351,6 @@ class EmpDataServiceController extends BaseController
     }
 
 
-
-
     /**
      * Below function retrieves the policy name associated with a given client policy ID.
      *
@@ -4280,8 +4367,6 @@ class EmpDataServiceController extends BaseController
     }
 
 
-
-
     /**
      * Below function converts row data into column data format for SI enhancement.
      *
@@ -4838,8 +4923,8 @@ class EmpDataServiceController extends BaseController
             $this->myLogger->logme("error", "Policy transaction inserted successfully: " . json_encode(['insert_id' => $insert_id]));
 
             //do not remove this commented item
-            // $coShareDetails = $this->ConstructPTShareData($policy_data, $insert_id);
-            // $pt_co_share_id = $this->PTCOShareDetailsModel->insert($coShareDetails);
+            $coShareDetails = $this->ConstructPTShareData($policy_data, $insert_id, $params);
+            $pt_co_share_id = $this->PTCOShareDetailsModel->insert($coShareDetails);
 
             // $this->myLogger->logme("error", "PT Co share data inserted successfully: " . json_encode(['pt_co_share_id' => $pt_co_share_id]));
 
@@ -4875,11 +4960,12 @@ class EmpDataServiceController extends BaseController
 
     private function constructBDSData($policy_data, $lead_data, $params)
     {   
-
+        
+        $this->myLogger->logme("error", "constructBDSData Params: " . json_encode(['policy_data' => $policy_data, 'lead_data' => $lead_data, 'params' => $params]));
         $action_type_string = $params['action_type'];
-         if(in_array($params['action_type'], ['dependent_addition', 'missed_inception'])){
+        if(in_array($params['action_type'], ['dependent_addition', 'missed_inception'])){
             $action_type_string = "addition";
-         }
+        }
 
         $policyTransactionData = [
 
@@ -4900,9 +4986,9 @@ class EmpDataServiceController extends BaseController
             'policy_end_date' => $policy_data['policy_end_date'] ?? null,
             'data_received_date' => $policy_data['data_received_date'] ?? null,
             'closure_date' => $policy_data['closure_date'] ?? null,
-            'emp_count' => $policy_data['emp_count'] ?? null,
-            'dependent_count' => $policy_data['dependent_count'] ?? null,
-            'revenue_type' => ($lead_data['lead_type'] == 1 ? "NA" : ($lead_data['lead_type'] == 2 ? "EA" : "EANR") ) ?? null,
+            'emp_count' => $params['no_of_insured'] ?? null,
+            'dependent_count' => $params['no_of_dependent'] ?? null,
+            'revenue_type' => isset($lead_data['lead_type']) ?($lead_data['lead_type'] == 1 ? "NA" : ($lead_data['lead_type'] == 2 ? "EA" : "EANR") ) : null,
             'co_share' => $policy_data['co_share'] ?? 0,
             'pre_payable_by' => $policy_data['pre_payable_by'] ?? 1,
             'renewal_date' => $policy_data['policy_end_date'] ?? null,
@@ -4910,8 +4996,10 @@ class EmpDataServiceController extends BaseController
             'ct_type' => 1,
             'is_cd_reduce_from_bds' => 0,
             'client_type_id' => 0,
+            'bro_payable_by' => 1,
 
-            'status' => "co_insurer_pending",
+            // 'status' => "co_insurer_pending",
+            'status' => "completed",
             'action_type' => $action_type_string ?? null,
             'endorsement_no' => $params['endorsement_no'] ?? null,
 
@@ -4926,17 +5014,29 @@ class EmpDataServiceController extends BaseController
         return $policyTransactionData;
     }
 
-    private function ConstructPTShareData($policy_data, $pt_id)
+    private function ConstructPTShareData($policy_data, $pt_id, $params)
     {   
+        $policyTypeModel = new PolicyTypeModel();
+        $policy_type_data = $policyTypeModel->where('is_active', 1)->where('id', $policy_data['policy_type_id'])->first();
+
         $coShareData = [
             'pt_id' => $pt_id,
             'insurer_id' => $policy_data['insurer_id'],
             'insurer_branch_id' => $policy_data['insurer_branch_id'],
+            'bp_amt' => $params['base_premium'],
+            'cop_amt' => $params['base_premium'],
+            'bp_gst_amt' => $params['gst'],
+            'bp_sgst' => 9,
+            'bp_cgst' => 9,
             'co_share_type' => 1,
+            'co_share_per' => 100,
+            'standerd_bp_per' => $policy_type_data['ebp'],
+            'amount' => ($params['base_premium'] ?? 0) + ($params['gst'] ?? 0),
         ];
 
-        $this->myLogger->logme("error", "Constructed PT co-share data: " . json_encode($coShareData));
+        $coShareData['exp_amt'] = (($params['base_premium'] ?? 0) * ($policy_type_data['ebp'] ?? 0)) / 100;
 
+        $this->myLogger->logme("error", "Constructed PT co-share data: " . json_encode($coShareData));
 
         return $coShareData;
     }
@@ -5085,8 +5185,117 @@ class EmpDataServiceController extends BaseController
 
     }
 
+    // --------------------------------------------------------------------------------------------------------------------------------
+    
+    public function getInceptionBasePremium($ids)
+    {   
+        $this->myLogger->logme('error', 'getInceptionBasePremium called with the params : ' . json_encode($ids ?? ""));
+       
+        // Validate input
+        if (empty($ids) || !is_array($ids)) {
+            return ['base_premium' => 0, 'gst' => 0];
+        }
 
+        // Sanitize IDs to ensure they are integers
+        $sanitizedIds = array_filter(array_map('intval', $ids), function ($id) {
+            return $id > 0;
+        });
 
+        if (empty($sanitizedIds)) {
+            return ['base_premium' => 0, 'gst' => 0];
+        }
 
+        // Use parameter binding for security
+        $placeholders = str_repeat('?,', count($sanitizedIds) - 1) . '?';
 
+        $amount = $this->employeePolicyModel->query("
+            SELECT SUM(employee_polices.rata_premimum) AS base_premium, 
+                SUM(employee_polices.gst) AS gst
+            FROM employee_polices
+            JOIN employees ON employees.id = employee_polices.employee_id
+            WHERE employee_polices.id IN ($placeholders)
+        ", $sanitizedIds)->getRowArray();
+
+        $this->myLogger->logme('error', 'Get Last Executed Query : '.db_connect()->getLastQuery());
+
+        // Ensure we return proper numeric values
+        return [
+            'base_premium' => round($amount['base_premium'] ?? 0, 2),
+            'gst' => round($amount['gst'] ?? 0, 2)
+        ];
+    }
+
+    public function getDeletionBasePremium($ids, $params)
+    {   
+        $this->myLogger->logme('error', 'getDeletionBasePremium called with the params : ' . json_encode(['emp_policy_id' => $ids ?? [], 'params' => $params ?? []] ?? ""));
+
+        // Validate input
+        if (empty($ids) || !is_array($ids)) {
+            return ['base_premium' => 0, 'gst' => 0];
+        }
+
+        // Sanitize IDs to ensure they are integers
+        $sanitizedIds = array_filter(array_map('intval', $ids), function ($id) {
+            return $id > 0;
+        });
+
+        if (empty($sanitizedIds)) {
+            return ['base_premium' => 0, 'gst' => 0];
+        }
+
+        // Validate client_policy_id parameter
+        if (empty($params['client_policy_id'])) {
+            return ['base_premium' => 0, 'gst' => 0];
+        }
+
+        $get_insurer_id_from_client_policy = $this->clientPolicyModel
+            ->select('insurers.deletion_add_day')
+            ->join('insurers', 'client_policy.insurer_id = insurers.id')
+            ->where('client_policy.id', intval($params['client_policy_id']))
+            ->first();
+
+        $add_one_day = 0;
+        if (isset($get_insurer_id_from_client_policy['deletion_add_day']) && $get_insurer_id_from_client_policy['deletion_add_day'] == 1) {
+            $add_one_day = 1;
+        }
+
+        // Use parameter binding for security
+        $placeholders = str_repeat('?,', count($sanitizedIds) - 1) . '?';
+
+        // Prepare parameters array (ids repeated twice for both IN clauses)
+        $queryParams = array_merge($sanitizedIds, $sanitizedIds);
+
+        $amount = $this->employeePolicyModel->query("
+            SELECT 
+                SUM(ROUND(
+                    ((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + ?)) / 365), 
+                    2
+                )) AS base_premium,
+                SUM(ROUND(
+                    (((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + ?)) / 365) * 0.18), 
+                    2
+                )) AS gst
+            FROM 
+                employee_polices
+            JOIN 
+                employees ON employees.id = employee_polices.employee_id
+            JOIN 
+                emp_endorsement ON emp_endorsement.pk = employee_polices.id
+            WHERE 
+                employee_polices.id IN ($placeholders)
+                AND emp_endorsement.pk IN ($placeholders)
+                AND employee_polices.claim_status = 0
+                AND emp_endorsement.field_name = 'date_of_exit'
+                AND emp_endorsement.is_active = 1
+                AND emp_endorsement.actions = 'd'
+                AND emp_endorsement.status != 'truncated'
+        ", array_merge([$add_one_day, $add_one_day], $queryParams))->getRowArray();
+
+        $this->myLogger->logme('error', 'Get Last Executed Query : '.db_connect()->getLastQuery());
+        // Ensure we return proper numeric values with rounding
+        return [
+            'base_premium' => round($amount['base_premium'] ?? 0, 2),
+            'gst' => round($amount['gst'] ?? 0, 2)
+        ];
+    }
 }
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index 512122c6..dd80cd05 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -302,9 +302,11 @@ class EmployeeController extends AdminController
         //for TPA/insurer upload
         $data['events'] = ['inception' => 'Inception (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
         //for inception upload
-        $data['actions'] = ['inception' => 'Inception (Employee + Dependents)',  'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement','enrollment' => 'Enrolment'];
-
-        $data['import_or_export'] = ['import' => 'Import', 'export' => 'Export'];
+        $data['actions'] = ['inception' => 'Inception (Employee + Dependents)', 'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
+        // $data['actions'] = ['inception' => 'Inception (Employee + Dependents)',  'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement','enrollment' => 'Enrolment'];
+        
+        // $data['import_or_export'] = ['import' => 'Import', 'export' => 'Export'];
+        $data['import_or_export'] = ['import' => 'Upload', 'export' => 'Download'];
         $data['insurer_or_tpa'] = ['insurer' => 'Insurer', 'tpa' => 'TPA'];
 
         // $data['fileList'] = $this->fileModel
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index e973a33a..2cc47520 100755
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -394,7 +394,7 @@ class EmployeeServiceController extends AdminController
                         'is_mandatory' => true,
                         'data_type' => 'str',
                         'format' => null,
-                        'allowed_values' => ['name', 'dob', 'relationship']
+                        'allowed_values' => ['name', 'dob', 'relationship', 'email_corporate']
                     ],
                     'value' => [
                         'col_idx' => 4,
@@ -1319,6 +1319,7 @@ class EmployeeServiceController extends AdminController
         //get file name
         $file_id = $params['file_id'];
         $file = $this->fileModel->find($file_id);
+        // dd($file);
 
         $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
 
@@ -1330,6 +1331,7 @@ class EmployeeServiceController extends AdminController
         $excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
         // $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
         
+        // dd($excel_data);
         unset($excel_data[0]);
         // kint::dump($excel_data);
         $endorsement_data = [];
@@ -1379,10 +1381,14 @@ class EmployeeServiceController extends AdminController
                         ->where('employee_polices.client_policy_id',$file['policy_id'])
                         ->where('employees.emp_status !=','truncated')
                         ->where('employees.is_active', 1)
+                        ->where('employee_polices.status !=','truncated')
+                        ->where('employee_polices.is_active', 1)
                         ->first();
 
             // $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first();
             // dd($employee);
+            // kint::dump($employee);
+
             if(is_array($employee) && count($employee))
             {
                 // dd($employee);
@@ -1406,7 +1412,13 @@ class EmployeeServiceController extends AdminController
                                 
                                 if(!in_array($employee['id'],$endorsement_data))//make entry in endorsement firsttime only with checking that PK of emp exisintg in variable $endorsement_data
                                 {
-                                    $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first();
+                                    $employee_policy = $this->employeePolicyModel
+                                                            ->where('employee_id',$employee['id'])
+                                                            ->where('client_policy_id',$file['policy_id'])
+                                                            ->where('status !=','truncated')
+                                                            ->where('is_active', 1)
+                                                            ->first();
+
                                     $data = ['emp_id' => $employee['id'],'name' => $employee['name'],'emp_status' => $employee['emp_status'],'emp_policy_id' => $employee_policy['id'],'emp_code' => $employee['emp_code'],'change_event' => $employee['change_event'],'date_of_exit' => $employee_policy['date_of_exit'],'reason_for_exit' => $employee_policy['reason_for_exit'],'status' => $employee_policy['status'],'claim_status' => $employee_policy['claim_status']];
                                     $endorsement($data,$file,$row);
                                     $endorsement_data[] = $employee['id'];
@@ -1447,7 +1459,7 @@ class EmployeeServiceController extends AdminController
 
         //set success msg to pull notifications
         $this->setPullNotification($this->getFileMetaDataByFileId($file_id,'success'));
-         return $endorsement_data; 
+        return $endorsement_data; 
 
     }
 
diff --git a/app/Controllers/Home.php b/app/Controllers/Home.php
index 9f76bf77..09d3dc19 100755
--- a/app/Controllers/Home.php
+++ b/app/Controllers/Home.php
@@ -2,6 +2,12 @@
 
 namespace App\Controllers;
 
+
+use GeminiAPI\Client;
+use GeminiAPI\Resources\ModelName;
+use GeminiAPI\Resources\Parts\TextPart;
+
+
 class Home extends PublicController
 {
     public function index(): string
@@ -28,4 +34,26 @@ class Home extends PublicController
         return $payload['a'] + $payload['b'];
     }
 
+    public function check_Gemini()
+    {
+         try {
+            $apiKey = 'AIzaSyBbx-uotRBqkYhqLpmD60420E_a0G0duP8';
+            // Initialize the Gemini client
+            $client = new Client($apiKey);
+
+            // Send a prompt to the Gemini Pro model
+            $response = $client->generativeModel(ModelName::GEMINI_PRO)->generateContent(
+                new TextPart('Write a short, creative story about a knight and a dragon.')
+            );
+
+            // Display the generated text
+            $data['gemini_response'] = $response->text();
+        } catch (\Exception $e) {
+            // Handle any errors that occur during the API call
+            $data['gemini_response'] = 'An error occurred: ' . $e->getMessage();
+        }
+
+        print_rr($data);
+    }
+
 }
diff --git a/app/Controllers/ICICILombardController.php b/app/Controllers/ICICILombardController.php
index e1c09e30..9433f7f1 100644
--- a/app/Controllers/ICICILombardController.php
+++ b/app/Controllers/ICICILombardController.php
@@ -62,9 +62,15 @@ class ICICILombardController extends AdminController
             //'Scope: esbgpabatchcreation'
         ];
 
+        #old policy info start
+        #"PolicyNumber" => "4016/A/51974976/00/000",
+        # "CDBGAccountNumber" => "CD-MUM-3344",
+        #"CorrelationId" => "86383c78-4c67-4e4d-9aa0-8f926fb0d55f",
+        #old policy inf end
+
         $body = [
-            "PolicyNumber" => "4016/A/51974976/00/000",
-            "CDBGAccountNumber" => "CD-MUM-3344",
+            "PolicyNumber" => "4016/A/O/53077718/00/000",
+            "CDBGAccountNumber" => "CD-MUM-0026",
             "CorrelationId" => "86383c78-4c67-4e4d-9aa0-8f926fb0d55f",
             "MemberDetails" => [
                 [
@@ -74,8 +80,8 @@ class ICICILombardController extends AdminController
                     "DOB" => "7-JUL-1983",
                     "Relationship" => "SELF",
                     "Gender" => "MALE",
-                    "DOC" => "20-JAN-2020",
-                    "SumInsured" => "600000",
+                    "DOC" => "08-JUL-2025",
+                    "SumInsured" => "400000",
                     "EmailId" => "ABC@GMAIL.COM",
                     "FlagStatus" => "A"
                 ],
@@ -86,8 +92,8 @@ class ICICILombardController extends AdminController
                     "DOB" => "8-AUG-1970",
                     "Relationship" => "MOTHER",
                     "Gender" => "FEMALE",
-                    "DOC" => "20-JAN-2020",
-                    "SumInsured" => "600000",
+                    "DOC" => "08-JUL-2025",
+                    "SumInsured" => "400000",
                     "EmailId" => "ABC@GMAIL.COM",
                     "FlagStatus" => "A"
                 ],
@@ -97,13 +103,13 @@ class ICICILombardController extends AdminController
                     "InsuredName" => "ABC28142",
                     "DOB" => "8-SEP-1970",
                     "Gender" => "MALE",
-                    "SumInsured" => "600000",
+                    "SumInsured" => "400000",
                     "EmailId" => "ABC@GMAIL.COM",
                     "FlagStatus" => "M"
                 ],
                 [
                     "UHID" => "IL00688842552",
-                    "DOL" => "20-JAN-2020",
+                    "DOL" => "08-JUL-2025",
                     "FlagStatus" => "D"
                 ]
             ]
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index 2c90ed53..b1db3311 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -121,6 +121,7 @@ class LeadsController extends BaseController
         ];
 
         $this->claim_type_for_gpa = [
+            'nil' => 'Nil',
             'accident_death' => 'Accident Death',
             'permanent_total_disablement' => 'Permanent Total Disablement',
             'permanent_partial_disablement' => 'Permanent Partial Disablement',
@@ -207,6 +208,8 @@ class LeadsController extends BaseController
     private function prepareLeadData()
     {
         $data = $this->request->getPost();
+        $data['client_type'] = 1;
+        $data['pan'] = "";
 
         if ($data['lead_type'] != 1) {
             $client_data = $this->clientModel->where('id', $data['client_id'])->where('is_active', 1)->first();
@@ -1273,8 +1276,8 @@ class LeadsController extends BaseController
                     'Total Lives' => $rfq_data['incept_no_of_lives'],
 
                     'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d-m-Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d-m-Y', strtotime($rfq_data['policy_end_date'])) : "To be decided",
-                    'Insurer' => $rfq_data['insurer_name'] ?? " - ",
-                    'TPA' => $rfq_data['tpa_name'] ?? " - ",
+                    // 'Insurer' => $rfq_data['insurer_name'] ?? " - ",
+                    // 'TPA' => $rfq_data['tpa_name'] ?? " - ",
                     // 'Policy Run Days' => $rfq_data['policy_run_days'],
                 ];
             } else if (in_array($rfq_data['policy_type_id'], [1, 6, 7])) {
@@ -1344,6 +1347,7 @@ class LeadsController extends BaseController
         $sheetName = 'Worksheet';
         if ($type == 2) {
             $sheetName = 'QCR';
+            // $propsal_and_insurer = "Proposal 1-ICICIPRU-ICICI001";
             $data = $this->convertJsonForQCR($data, $type);
             if ($propsal_and_insurer !== null) {
                 list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
@@ -1485,9 +1489,16 @@ class LeadsController extends BaseController
 
         $columnLetter = 'A';
         $header_actual_count = 0;
+        $headerIndex = 0;
         foreach ($headers as $header) {
             // Kint::dump($header);
 
+            if($is_placement == true){
+                //for placement proposal only
+                $nxt_ro = $rowNumber + 1;
+                $sheet->mergeCells("C{$rowNumber}:C{$nxt_ro}");
+            }
+
             if (in_array($header['parentHeader'], ['Item Key', 'Action'])) {
                 continue;
             }
@@ -1499,10 +1510,18 @@ class LeadsController extends BaseController
             if ($header['parentHeader'] === 'Sno') {
                 $header['parentHeader'] = 'S.No.';
                 $sheet->getColumnDimension('A')->setWidth(10);
+
+                //merge the 2 row cells of the S.No.
+                $nxt_ro = $rowNumber + 1;
+                $sheet->mergeCells("{$columnLetter}{$rowNumber}:{$columnLetter}{$nxt_ro}");
             }
 
             if ($header['parentHeader'] === 'Particulars') {
                 $sheet->getColumnDimension('B')->setWidth(35);
+
+                //merge the 2 row cells of the particulars
+                $nxt_ro = $rowNumber + 1;
+                $sheet->mergeCells("{$columnLetter}{$rowNumber}:{$columnLetter}{$nxt_ro}");
             }
 
             $startColumn = $columnLetter; // Start of the current header range
@@ -1512,9 +1531,12 @@ class LeadsController extends BaseController
                 $sheet->setCellValue("{$startColumn}{$rowNumber}", "Terms");
             } else {
                 if(in_array($header['parentHeader'], ["Existing Renewal", "Existing Rollover"])){
-                    $sheet->setCellValue("{$startColumn}{$rowNumber}", "Terms");
-                }else{
+                    $sheet->setCellValue("{$startColumn}{$rowNumber}", "Existing Terms");
+                }else if(in_array($header['parentHeader'], ["Particulars", "S.No."])){
                     $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']);
+                }else{
+                    $headerIndex = $headerIndex + 1;
+                    $sheet->setCellValue("{$startColumn}{$rowNumber}", "Proposal Terms " . $headerIndex);
                 }
             }
             $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([
@@ -1585,9 +1607,9 @@ class LeadsController extends BaseController
         $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height
 
         if ($is_placement == true) {
-            $rowNumber = $subHeaderRow;
+            $rowNumber = $subHeaderRow + 1;
         } else {
-            $rowNumber = $subHeaderRow + 2;
+            $rowNumber = $subHeaderRow + 1;
         }
 
         // dd($rowNumber);
@@ -1629,6 +1651,7 @@ class LeadsController extends BaseController
         //premium data 
         if ($type == 2) {
 
+            if($is_placement == true){$columnLetterForPremium = "B";}else{$columnLetterForPremium = "C";}
             $rowNumber += 2;
 
             // Add premium data
@@ -1636,19 +1659,26 @@ class LeadsController extends BaseController
             // $labelArray = ["Premium", "GST (%)", "GST Amount (₹)", "Total"];
             $labelArray = ["Premium", "GST Amount (₹)", "Total"];
             $premiumData = $data['premium_data']['data'];
+            // dd($premiumData);
             // $premium = [$labelArray[0]];
             // $gst = [$labelArray[1]];
             // $gstAmt = [$labelArray[1]];
             // $total = [$labelArray[2]];
 
+            if($is_placement == true){
+                $premium[] =  $labelArray[0];
+                $gstAmt[] =  $labelArray[1];
+                $total[] =  $labelArray[2];
+            }
+
             foreach ($premiumData as $proposal => $insurers) {
                 if ($proposal != 'Particulars') {
                     foreach ($insurers as $insurer => $values) {
                         if($insurer == 'Quote Asked'){
-                            $premium[] = $labelArray[0];
+                            $premium[] = count($insurers ?? []) > 1 ? $labelArray[0] : "";
                             // $gst[] = "";
-                            $gstAmt[] = $labelArray[1];
-                            $total[] = $labelArray[2];
+                            $gstAmt[] = count($insurers ?? []) > 1 ? $labelArray[1] : "";
+                            $total[] = count($insurers ?? []) > 1 ? $labelArray[2] : "";
                         }else{
                             $premium[] = formatIndianCurrency($values[$labelArray[0]]);
                             // $gst[] = $values[$labelArray[1]];
@@ -1659,8 +1689,10 @@ class LeadsController extends BaseController
                 }
             }
 
+            // dd([$premium, $gstAmt, $total]); die;
+
             foreach ([$premium, $gstAmt, $total] as $index => $rowData) {
-                $columnLetter = 'C';
+                $columnLetter = $columnLetterForPremium;
                 foreach ($rowData as $key => $value) {
                     $sheet->setCellValue("{$columnLetter}{$rowNumber}", $value);
                     if (in_array($value, $labelArray)) {
@@ -1677,8 +1709,8 @@ class LeadsController extends BaseController
                 $prevColumn3 = $this->getPreviousColumn($columnLetter, 2);
             }
 
-            $premiumRange = "C" . ($rowNumber - 3) . ":" . "{$prevColumn3}" . ($rowNumber - 1);
-            // dd($premiumRange);
+            $premiumRange = $columnLetterForPremium . ($rowNumber - 3) . ":" . "{$prevColumn3}" . ($rowNumber - 1);
+            // dd($prevColumn3, $premiumRange, $this->getPreviousColumn($columnLetter, 2), $columnLetter, $rowNumber);
 
             $sheet->getStyle($premiumRange)->applyFromArray([
                 'borders' => [
@@ -1792,6 +1824,72 @@ class LeadsController extends BaseController
             $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '_'  . '.xlsx';
         }
 
+        //claim history new sheet;
+        if (!empty($rfq_data['fin_years_claims'])) {
+
+            $claim_details = json_decode($rfq_data['fin_years_claims'], true) ?? [];
+
+            if (!empty($claim_details['finyear'])) {
+
+                // Get headers dynamically
+                $headers = array_map(function ($key) {
+                    return ucwords(str_replace('_', ' ', $key));
+                }, array_keys($claim_details['finyear'][0]));
+
+                $newSheet = new Worksheet($spreadsheet, 'Claims Experience');
+                $spreadsheet->addSheet($newSheet);
+                $spreadsheet->setActiveSheetIndexByName('Claims Experience');
+                $sheet = $spreadsheet->getActiveSheet();
+
+                // Set headers
+                $sheet->fromArray($headers, NULL, 'A1');
+
+                // Apply background color and bold style to headers
+                $headerCellRange = 'A1:' . chr(64 + count($headers)) . '1'; // e.g., A1:G1
+
+                $sheet->getStyle($headerCellRange)->getFont()->setBold(true);
+                $sheet->getStyle($headerCellRange)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('ADD8E6');
+
+                // Add border to header
+                $sheet->getStyle($headerCellRange)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
+
+                // Fill data and apply borders
+                $row = 2;
+                foreach ($claim_details['finyear'] as $record) {
+                    $col = 'A';
+                    foreach ($record as $value) {
+                        $label = ucwords(str_replace('_', ' ', ($value ??  "")));
+                        $sheet->setCellValue($col . $row, $label);
+                        $col++;
+                    }
+
+                    // Apply border to each data row
+                    $sheet->getStyle('A' . $row . ':' . chr(64 + count($headers)) . $row)
+                        ->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
+
+                    $row++;
+                }
+                // Auto-size all columns based on header count
+                for ($i = 0; $i < count($headers); $i++) {
+                    $colLetter = chr(65 + $i); // 'A', 'B', etc.
+                    $sheet->getColumnDimension($colLetter)->setAutoSize(true);
+                }
+
+                // Enable wrap text for all cells
+                $maxColLetter = chr(64 + count($headers)); // Last column letter
+                $sheet->getStyle("A2:{$maxColLetter}{$row}")->getAlignment()->setWrapText(true);
+
+                // Optional: center vertically for neatness
+                $sheet->getStyle("A2:{$maxColLetter}{$row}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
+
+                // Optional: Make row height auto (helps when wrap text is on)
+                for ($i = 2; $i < $row; $i++) {
+                    $sheet->getRowDimension($i)->setRowHeight(-1);
+                }
+
+            }
+        }
+
         // Save to temporary location
         $uploadFilePath = WRITEPATH . 'tmp/' . $filename;
         $writer = new Xlsx($spreadsheet);
diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php
index 0a3c357d..61c5aedf 100755
--- a/app/Controllers/MasterController.php
+++ b/app/Controllers/MasterController.php
@@ -1225,53 +1225,204 @@ class MasterController extends AdminController
         $data['page_name'] = 'CD Master List';
         $data['CD_Master_Data'] = $this->CDMasterModel->getCDMasterList();
         $data['insurers'] = $this->insurerModel->where('is_active', 1)->findAll();
+        $data['insurer_branch'] = $this->insurerBranchModel->where('is_active', 1)->findAll();
         $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
         $this->loadLayout('cd_master_list', $data);
     }
 
-    public function createCDMasterData()
-    {
+    // public function createCDMasterData()
+    // {
 
+    //     $data = $this->request->getPost();
+    //     $id =  $data['PrimaryKey'];
+    //     $date = (string) $this->request->getPost('opening_date');
+    //     $data['opening_date'] = date('Y-m-d', strtotime($date));
+    //     // print_rr($data);die();
+
+    //     $loggedInUserID = get_session_userid();
+
+    //     if (empty($id)) {
+
+    //         if ($data) {
+
+    //             $insert = $this->CDMasterModel->insert($data);
+
+    //             if ($insert) {
+
+    //                 // Prepare the array with data
+    //                 $cd_tranction_data = [
+    //                     'amount' => $data['opening_bal'],
+    //                     'sub_type_id' => 7,
+    //                     'client_id' => $data['client_id'],
+    //                     'client_policy_id' => null,
+    //                     'cd_ac_no' => $data['cd_ac_no'],
+    //                     'endorsement_no' => null,
+    //                     'insurer_id' => $data['insurer_id'],
+    //                     'description' => 'opening Amount',
+    //                     'transaction_type' => 'Credit',
+    //                     'event_name' => null,
+    //                     'updated_by' => 1,
+    //                 ];
+
+    //                 $cd_tranction_data['cd_ac_pk'] = $this->CDMasterModel->insertID();
+    //                 $response = DepositHelper::saveDeposit($cd_tranction_data, $loggedInUserID);
+
+    //                 session()->setFlashdata('success', "Cash Deposite Master Added Successfully");
+    //                 return redirect()->to(base_url('/master/cash_deposite/list'));
+    //             } else {
+
+    //                 session()->setFlashdata('error', "Cash Deposite Master Added Failed");
+    //                 return redirect()->to(base_url('/master/cash_deposite/list'));
+    //             }
+    //         } else {
+
+    //             session()->setFlashdata('error', "Cash Deposite Master Added Failed. Data Not Found");
+    //             return redirect()->to(base_url('/master/cash_deposite/list'));
+    //         }
+
+    //     } else {
+
+    //         if ($data) {
+
+    //             $insert = $this->CDMasterModel->where('id', $id)->set($data)->update();
+
+    //             $data = $this->CDMasterModel->where('id', $id)->first();
+
+    //             $cd_transaction_updated_data = [
+    //                 'balance' => $data['opening_bal'],
+    //                 'amount' => $data['opening_bal']
+    //             ];
+
+    //             $cd_tranction = $this->clientDepositModel
+    //                 ->where('client_id', $data['client_id'])
+    //                 ->where('insurer_id', $data['insurer_id'])
+    //                 ->where('cd_ac_no', $data['cd_ac_no'])
+    //                 ->where('sub_type', 7)
+    //                 ->set($cd_transaction_updated_data)->update();
+
+    //             if ($insert) {
+
+    //                 session()->setFlashdata('success', "Cash Deposite Master Updated Successfully");
+    //                 return redirect()->to(base_url('/master/cash_deposite/list'));
+    //             } else {
+
+    //                 session()->setFlashdata('error', "Cash Deposite Master Update Failed");
+    //                 return redirect()->to(base_url('/master/cash_deposite/list'));
+    //             }
+    //         } else {
+
+    //             session()->setFlashdata('error', "Cash Deposite Master Update Failed. Data Not Found");
+    //             return redirect()->to(base_url('/master/cash_deposite/list'));
+    //         }
+    //     }
+    // }
+
+    public function createCDMasterData()
+    {   
+        $this->myLogger->logme("error", 'Create CD Master Data API called.');
         $data = $this->request->getPost();
-        $date = (string) $this->request->getPost('opening_date');
+        $this->myLogger->logme("error", 'Received POST data: ' . json_encode($data));
+
+        $id = $data['PrimaryKey'] ?? null;
+        $date = (string) ($data['opening_date'] ?? '');
         $data['opening_date'] = date('Y-m-d', strtotime($date));
-        // print_rr($data);die();
-        // Prepare the array with data
-        $cd_tranction_data = [
-            'amount' => $data['opening_bal'],
-            'sub_type_id' => 7,
-            'client_id' => $data['client_id'],
-            'client_policy_id' => null,
-            'cd_ac_no' => $data['cd_ac_no'],
-            'endorsement_no' => null,
-            'insurer_id' => $data['insurer_id'],
-            'description' => 'opening Amount',
-            'transaction_type' => 'Credit',
-            'event_name' => null,
-            'updated_by' => 1,
-        ];
+        $this->myLogger->logme("error", 'Formatted opening_date: ' . $data['opening_date']);
 
         $loggedInUserID = get_session_userid();
-        
-        if ($data) {
+        $this->myLogger->logme("error", 'Logged in user ID: ' . $loggedInUserID);
 
+        // === INSERT ===
+        if (empty($id)) {
+
+            $this->myLogger->logme("error", 'Performing INSERT operation.');
             $insert = $this->CDMasterModel->insert($data);
+            $this->myLogger->logme("error", 'Insert result: ' . json_encode($insert));
 
             if ($insert) {
-                $cd_tranction_data['cd_ac_pk'] = $this->CDMasterModel->insertID();
-                $response = DepositHelper::saveDeposit($cd_tranction_data, $loggedInUserID);
 
-                session()->setFlashdata('success', "Cash Deposite Master Added Successfully");
-                return redirect()->to(base_url('/master/cash_deposite/list'));
+                $cd_tranction_data = [
+                    'amount' => $data['opening_bal'],
+                    'sub_type_id' => 7,
+                    'client_id' => $data['client_id'],
+                    'client_policy_id' => null,
+                    'cd_ac_no' => $data['cd_ac_no'],
+                    'endorsement_no' => null,
+                    'insurer_id' => $data['insurer_id'],
+                    'description' => 'Opening Amount',
+                    'transaction_type' => 'Credit',
+                    'event_name' => null,
+                    'updated_by' => 1,
+                    'cd_ac_pk' => $insert,
+                ];
+
+                $this->myLogger->logme("error", 'Saving initial deposit with data: ' . json_encode($cd_tranction_data));
+                $response = DepositHelper::saveDeposit($cd_tranction_data, $loggedInUserID);
+                $this->myLogger->logme("error", 'Deposit save response: ' . json_encode($response));
+
+                $cd_master_data = $this->CDMasterModel->where('is_active', 1)->where('id', $insert)->first();
+                $this->myLogger->logme("error", 'Inserted CD Master data: ' . json_encode($cd_master_data));
+
+                $cd_master_full_data = $this->CDMasterModel->where('is_active', 1)
+                                        ->where('client_id', $data['client_id'])
+                                        ->where('insurer_id', $data['insurer_id'])
+                                        ->where('insurer_branch_id', $data['insurer_branch_id'])
+                                        ->findAll();
+
+                return $this->respond([
+                    'status' => true,
+                    'code' => 500,
+                    'message' => "CD Master Added Successfully",
+                    'cd_master_data' => $cd_master_data,
+                    'data' => $cd_master_full_data
+                ]);
+
             } else {
 
-                session()->setFlashdata('error', "Cash Deposite Master Added Failed");
-                return redirect()->to(base_url('/master/cash_deposite/list'));
+                 $this->myLogger->logme('error', 'CD Master Insert Failed.');
+                 return $this->respond([
+                    'status' => true,
+                    'code' => 500,
+                    'message' => "CD Master Add Failed",
+                 ], 200);
             }
-        } else {
+        }
 
-            session()->setFlashdata('error', "Cash Deposite Master Added Failed. Data Not Found");
-            return redirect()->to(base_url('/master/cash_deposite/list'));
+        // === UPDATE ===
+        $this->myLogger->logme("error", 'Performing UPDATE operation for ID: ' . $id);
+
+        $updated = $this->CDMasterModel->where('id', $id)->set($data)->update();
+        $this->myLogger->logme("error", 'Update result: ' . json_encode($updated));
+
+        $existingData = $this->CDMasterModel->where('is_active', 1)->where('id', $id)->first();
+        $this->myLogger->logme("error", 'Existing data after update: ' . json_encode($existingData));
+
+        $cd_transaction_updated_data = [
+            'balance' => $existingData['opening_bal'],
+            'amount' => $existingData['opening_bal']
+        ];
+
+        $updateDeposit =$this->clientDepositModel
+            ->where('client_id', $existingData['client_id'])
+            ->where('insurer_id', $existingData['insurer_id'])
+            ->where('cd_ac_no', $existingData['cd_ac_no'])
+            ->where('sub_type', 7)
+            ->set($cd_transaction_updated_data)
+        ->update();
+        $this->myLogger->logme("error", 'Client Deposit Update result: ' . json_encode($updateDeposit));
+
+        if ($updated) {
+            $this->myLogger->logme("error", 'CD Master Updated Successfully.');
+            return $this->respond([
+                'status' => true,
+                'message' => "CD Master Updated Successfully"
+            ]);
+        } else {
+           $this->myLogger->logme('error', 'CD Master Update Failed.');
+           return $this->respond([
+                'status' => true,
+                'code' => 500,
+                'message' => "CD Master Updated Failed",
+            ], 200);
         }
     }
 
@@ -1598,7 +1749,6 @@ class MasterController extends AdminController
         }
     }
 
-
     public function generateNewGmailAPIToken()
     {
         $gmailapi = \Config\Services::gmailapi();
@@ -1609,49 +1759,46 @@ class MasterController extends AdminController
     //testing a sample mail from front end
     public function testGmailAPI()
     {
-        
-         if ($this->request->getMethod() == 'post') {
-           // $gmailapi = \Config\Services::gmailapi();
 
-           $to = $this->request->getPost('to');
-           $subject = $this->request->getPost('subject');
-           $mail_content = $this->request->getPost('content');
-           $common = ['mail_type'=>'test_mail_ui'];
-           /*****CHOOSE ANY ONE AT A TIME, COMMENT ANOTHER ONE******/
+        if ($this->request->getMethod() == 'post') {
+            // $gmailapi = \Config\Services::gmailapi();
 
-           /*****CALLING DIRECLT USING LIB******/
-           // $res = $gmailapi->sendMessage($to, $subject, $mail_content, 'info@nhanceindia.in', 'info@nhanceindia.in', $cc = [], $bcc = []);
+            $to = $this->request->getPost('to');
+            $subject = $this->request->getPost('subject');
+            $mail_content = $this->request->getPost('content');
+            $common = ['mail_type' => 'test_mail_ui'];
+            /*****CHOOSE ANY ONE AT A TIME, COMMENT ANOTHER ONE******/
 
-           // if($res['status'])
-           // {
-           //   return $this->respond(['status' => 'success','code' => 200,'data' => $res],200);
-           // }
-           // else
-           // {
-           //      $this->respond(['status' => 'failed','code' => 500,'data' => $res],200);
-           // }
-           /*****CALLING DIRECLT USING LIB******/
+            /*****CALLING DIRECLT USING LIB******/
+            // $res = $gmailapi->sendMessage($to, $subject, $mail_content, 'info@nhanceindia.in', 'info@nhanceindia.in', $cc = [], $bcc = []);
 
-           /*****CALLING VIA MAIL HELPER******/
-           $res = MailHelper::send_email(['mail' => $to, 'subject' => $subject,'common'=>$common ,'message' => $mail_content]);
-           return $this->respond(['status' => 'success','code' => 200,'data' => $res],200);
-           /*****CALLING VIA MAIL HELPER******/
+            // if($res['status'])
+            // {
+            //   return $this->respond(['status' => 'success','code' => 200,'data' => $res],200);
+            // }
+            // else
+            // {
+            //      $this->respond(['status' => 'failed','code' => 500,'data' => $res],200);
+            // }
+            /*****CALLING DIRECLT USING LIB******/
 
-         }
+            /*****CALLING VIA MAIL HELPER******/
+            $res = MailHelper::send_email(['mail' => $to, 'subject' => $subject, 'common' => $common, 'message' => $mail_content]);
+            return $this->respond(['status' => 'success', 'code' => 200, 'data' => $res], 200);
+            /*****CALLING VIA MAIL HELPER******/
+        }
 
         $this->loadLayout('mail_test');
-
     }
-
-
-     //testing a sample mail from cli
+    
+    //testing a sample mail from cli
     public function testGmailAPIViaCLI(string $email_id = 'velmurugan.s@venbainfotech.com')
     {
-        
+
         $email_id = CLI::getOption('to') ? CLI::getOption('to') : $email_id;
         // print_r($email_id);die();
-         // $gmailapi = \Config\Services::gmailapi();
-         $message = '';
+        // $gmailapi = \Config\Services::gmailapi();
+        $message = '';
 
         // $attachments = [
         //     ["filePath" => WRITEPATH."uploads/excel/sample/correction.xls","fileName" => "correction.xls"],
@@ -1661,34 +1808,34 @@ class MasterController extends AdminController
         // ];
 
         $attachments = [
-            ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"],
-            ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"],
-            ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"]
+            ["filePath" => ROOTPATH . "public/sample_excel/sample_addition.xls", "fileName" => "sample_addition.xls"],
+            ["filePath" => ROOTPATH . "public/sample_excel/sample_inception.xls", "fileName" => "sample_inception.xls"],
+            ["filePath" => ROOTPATH . "public/assets/images/login_bg.jpg", "fileName" => "login_bg.jpg"]
         ];
-        $common = ['mail_type'=>'test_mail_cli'];
+        $common = ['mail_type' => 'test_mail_cli'];
         $email_id = CLI::getOption('to') ? CLI::getOption('to') : $email_id;
-          $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Mail Via CLI', 'message' => $message,'attachments' => $attachments,'common'=>$common]);
-          echo "Inside the master controller";
-           print_r($res);
-
+        $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Mail Via CLI', 'message' => $message, 'attachments' => $attachments, 'common' => $common]);
+        echo "Inside the master controller";
+        print_r($res);
     }
 
-    public function testZeptoSMTP() {
+    public function testZeptoSMTP()
+    {
         $message = '';
         $attachments =  [
-            ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"],
-            ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"],
-            ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"]
+            ["filePath" => ROOTPATH . "public/sample_excel/sample_addition.xls", "fileName" => "sample_addition.xls"],
+            ["filePath" => ROOTPATH . "public/sample_excel/sample_inception.xls", "fileName" => "sample_inception.xls"],
+            ["filePath" => ROOTPATH . "public/assets/images/login_bg.jpg", "fileName" => "login_bg.jpg"]
         ];
-        $email_id = ['srinivas.saravanan@venbainfotech.com','srinivassaravanan2002@gmail.com'];
-        $params = ['mail'=>$email_id];
-        $common = ['mail_type'=>'test_mail_cli'];
+        $email_id = ['srinivas.saravanan@venbainfotech.com', 'srinivassaravanan2002@gmail.com'];
+        $params = ['mail' => $email_id];
+        $common = ['mail_type' => 'test_mail_cli'];
         // $bcc = "vijayalakshmi@nhanceindia.in,vitvelz@gmail.com,velmurugan.s@venbainfotech.com,hariharan@nhanceindia.in,hariharan@jubiliant.in,srinivas.saravanan@venbainfotech.com";
         // Send email and get response
-        $result = MailHelper::send_email(['mail' => $email_id, 'params'=>$params,'subject' => 'Mail Via CLI','message' => $message,'attachments' => $attachments,'common'=>$common]);
-                
+        $result = MailHelper::send_email(['mail' => $email_id, 'params' => $params, 'subject' => 'Mail Via CLI', 'message' => $message, 'attachments' => $attachments, 'common' => $common]);
 
-        log_message('error',json_encode($result));
+
+        log_message('error', json_encode($result));
         // Format the response for display/debugging
         $response = [
             'success' => $result['success'] ?? false,
@@ -1703,15 +1850,16 @@ class MasterController extends AdminController
         // Return JSON response
         return $this->response->setJSON($result);
     }
+
     public function testCheckBounceMails()
     {
-         $gmailapi = \Config\Services::gmailapi();
-         $from_date = CLI::getOption('from') ? CLI::getOption('from') : null;
-         $to_date = CLI::getOption('to') ? CLI::getOption('to') : null;
-         $count = CLI::getOption('count') ? CLI::getOption('count') : null;
-         $page = CLI::getOption('page') ? CLI::getOption('page') : null;
-         $res = $gmailapi->checkBounceStatus(from_date:$from_date,to_date:$to_date,count:$count,page:$page);
-         print_r($res);
+        $gmailapi = \Config\Services::gmailapi();
+        $from_date = CLI::getOption('from') ? CLI::getOption('from') : null;
+        $to_date = CLI::getOption('to') ? CLI::getOption('to') : null;
+        $count = CLI::getOption('count') ? CLI::getOption('count') : null;
+        $page = CLI::getOption('page') ? CLI::getOption('page') : null;
+        $res = $gmailapi->checkBounceStatus(from_date: $from_date, to_date: $to_date, count: $count, page: $page);
+        print_r($res);
     }
 
     public function appCheckList()
@@ -1721,7 +1869,6 @@ class MasterController extends AdminController
         $this->checkGoogleOAuthCredentialsinDB();
         $this->getCronJobsList();
         $this->checkGdriveRootFolderID();
-
     }
 
     public function checkAndCreateDirectories()
@@ -1740,7 +1887,7 @@ class MasterController extends AdminController
             'tmp' => WRITEPATH . 'tmp/',
             'e_card_imgs' => ROOTPATH . 'public/e_card_imgs',
             'uploads' => ROOTPATH . 'public/uploads',
-            'add_image_upload' => ROOTPATH . 'public/uploads/add_image_upload/',//adverdisement images for enrollment app
+            'add_image_upload' => ROOTPATH . 'public/uploads/add_image_upload/', //adverdisement images for enrollment app
             'logo' => ROOTPATH . 'public/uploads/logo/',
             'template_bg' => ROOTPATH . 'public/uploads/template_bg/',
             'attachments' => WRITEPATH . 'uploads/attachments/',
@@ -1776,21 +1923,18 @@ class MasterController extends AdminController
 
         echo "################ CHECKING GMAIL OAUTH FOR EMAIL ###################\n";
         if (is_array($token) &&  is_null($token['gmail_api_oauth_credentials'])) {
-            
+
             echo "Email OAuth credentials not found in database.\n";
             echo "Check the following..!\n";
             echo "1. Update Gmail Oauth credentials in 'gmail_api_oauth_credentials' field in 'settings' table in JSON format.\n";
             echo "2. Call this cli route to generate new access token: 'php public/index.php cli/new_gmail_token' from root of the project.\n";
             echo "3. Call this cli route : 'php public/index.php cli/send_mail_cli --to someone@gmail.com' to send test mail to testGmailAPIViaCLI ( replace someone@gmail.com with real time mail).\n";
-        }
-        else
-        {
+        } else {
             echo "Gmail OAuth for sending email is set in DB\n";
         }
         echo "################################################################\n\n";
     }
 
-
     function getCronJobsList()
     {
         // Execute the shell command to get cron jobs
@@ -1806,7 +1950,7 @@ class MasterController extends AdminController
         } elseif ($output) {
             // Return the cron job list
             echo nl2br($output);
-            echo "\n" ;// Convert newlines to 
for easier HTML rendering + echo "\n"; // Convert newlines to
for easier HTML rendering } else { echo "Error retrieving cron jobs or no cron jobs set.\n"; } @@ -1818,13 +1962,10 @@ class MasterController extends AdminController { echo "#################### CHECKING GDRIVE FOLDER ID IN ENV FILE ############################\n"; $id = getenv('GDRIVE_ROOT_FOLDER_ID'); - if($id) - { - echo $this->cli_colors['green'] . "ID is :". $id . $this->cli_colors['reset']. "\n"; - } - else - { - echo $this->cli_colors['red'] ."Gdrive Folder id not set in env file. set it under 'GDRIVE_ROOT_FOLDER_ID' in env file.". $this->cli_colors['reset'] ."\n"; + if ($id) { + echo $this->cli_colors['green'] . "ID is :" . $id . $this->cli_colors['reset'] . "\n"; + } else { + echo $this->cli_colors['red'] . "Gdrive Folder id not set in env file. set it under 'GDRIVE_ROOT_FOLDER_ID' in env file." . $this->cli_colors['reset'] . "\n"; } echo "################################################################\n\n"; } @@ -1834,16 +1975,16 @@ class MasterController extends AdminController $message = ''; $attachments = [ - ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"], - ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"], - ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] + ["filePath" => ROOTPATH . "public/sample_excel/sample_addition.xls", "fileName" => "sample_addition.xls"], + ["filePath" => ROOTPATH . "public/sample_excel/sample_inception.xls", "fileName" => "sample_inception.xls"], + ["filePath" => ROOTPATH . "public/assets/images/login_bg.jpg", "fileName" => "login_bg.jpg"] ]; $email_id = 'venkateshraman786@gmail.com'; - $params = ['mail'=>$email_id]; + $params = ['mail' => $email_id]; $multi_mails = ['venkateshraman786@gmail.com', 'gowtham.manavalan.la@gmail.com', 'venkatesh.r@venbainfotech.com']; - $common = ['mail_type'=>'test_mail_cli']; + $common = ['mail_type' => 'test_mail_cli']; $bcc = "vitvelz@gmail.com,velmurugan.s@venbainfotech.com,srinivas.saravanan@venbainfotech.com"; - $result = MailHelper::send_email(['mail' => $multi_mails, 'bcc'=>$bcc, 'params'=>$params,'subject' => 'Send Multiple " To " emails','message' => $message,'attachments' => $attachments,'common'=>$common]); + $result = MailHelper::send_email(['mail' => $multi_mails, 'bcc' => $bcc, 'params' => $params, 'subject' => 'Send Multiple " To " emails', 'message' => $message, 'attachments' => $attachments, 'common' => $common]); dd($result); } diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 3d9ee4f6..dddedd54 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -1209,6 +1209,10 @@ class PolicyTransactionController extends BaseController $client_branch_id = $issue_type['client_branch_id']; } + // if($data['bro_payable_by'] == ""){ + // $data['bro_payable_by'] = $issue_type['bro_payable_by']; + // } + if (!$data['id']) { $data += [ @@ -1224,7 +1228,7 @@ class PolicyTransactionController extends BaseController 'policy_end_date' => $issue_type['policy_end_date'] ?? null, 'revenue_type' => $issue_type['revenue_type'] ?? null, 'co_share' => $issue_type['co_share'] ?? 0, - 'bro_payable_by' => $issue_type['bro_payable_by'] ?? 0, + 'bro_payable_by' => $data['bro_payable_by'] == "" ? $issue_type['bro_payable_by'] ?? 0 : $data['bro_payable_by'], 'installment' => $issue_type['installment'] ?? null, 'installment_data' => $issue_type['installment_data'] ?? null, 'location' => $issue_type['location'] ?? null, @@ -2279,7 +2283,9 @@ class PolicyTransactionController extends BaseController // if all good return true, otherwise return false with messssage foreach ($excel_data as $excel_key => $excel_row) { $is_row_empty = check_row_is_empty_or_null($excel_row); + if (!$is_row_empty) { + // $excel_row = ExcelSanitizeHelper::sanitizeArrayData($excel_row); $is_source_found = 0; // Kint::dump($excel_key,$excel_row[1],$excel_row[2]); @@ -2297,8 +2303,17 @@ class PolicyTransactionController extends BaseController // Kint::dump($excel_key,$policy_no,$endorsement_no,$policy_start_date,$policy_end_date);//die(); foreach ($source_data as $source_key => $source_row) { $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null; - // Kint::dump($source_endorsement_no); - if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) + // Kint::dump($source_row, $source_endorsement_no, $policy_no, $endorsement_no); + + // if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) + // { + // $is_source_found = 1; + // $line_items = $line_items + 1; + // unset($source_data[$source_key]); + // continue 2; + // } + + if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no) { $is_source_found = 1; $line_items = $line_items + 1; @@ -2395,7 +2410,8 @@ class PolicyTransactionController extends BaseController foreach ($source_data as $source_key => $source_row) { // Kint::dump(change_date_format($excel_row[3],'d-m-Y','Y-m-d')); $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null; - if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) { + // if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) { + if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no) { $is_source_found = 1; //calculate percentage first diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php index 0c2089b6..b2567d9c 100755 --- a/app/Controllers/RestAuthenticationController.php +++ b/app/Controllers/RestAuthenticationController.php @@ -484,7 +484,7 @@ class RestAuthenticationController extends AdminController $this->authHistoryModel->insert($data); } - + $employeeData['token_type'] = "post"; $result = JWTToken::encode($employeeData); if(isset($this->request->getJSON()->otp)){ @@ -1081,6 +1081,7 @@ class RestAuthenticationController extends AdminController ]); } + $employeeData['token_type'] = "post"; $token = JWTToken::encode($employeeData); log_message('error', ' '); diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 91ec3aae..5e119628 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -20,6 +20,7 @@ use App\Models\EmployeePolicyModel; use App\Models\InsurerModel; use App\Models\EmployeeModel; use App\Models\TPAModel; +use App\Models\ClaimFilesModel; use DOMDocument; use Psr\Log\LoggerInterface; @@ -41,6 +42,8 @@ class TicketController extends BaseController public $placeHolders; public $extraFields; public $nonIDReason; + public $removeArrayKey; + protected $clientModel; protected $ticketMasterModel; @@ -56,6 +59,7 @@ class TicketController extends BaseController protected $extraFieldsDisplayForFrontend; protected $insurerModel; protected $TPAModel; + protected $claimFilesModel; public function __construct() { @@ -278,7 +282,6 @@ class TicketController extends BaseController 58 => ['cancel_remark' => 'Cancel Remark'] ]; - $this->nonIDReason = [ "Newborn Baby" => "Newborn Baby", "Newly Wedded Spouse" => "Newly Wedded Spouse", @@ -287,6 +290,46 @@ class TicketController extends BaseController "Exceptional Case" => "Exceptional Case" ]; + $this->removeArrayKey = [ + 2 => [], + 6 => [], + 12 => [], + 15 => [], + 16 => [], + 17 => [], + 18 => [], + 19 => [], + 21 => [], + 22 => [], + 23 => [], + 25 => [], + 26 => [], + 27 => [], + 28 => [], + 29 => [], + 31 => [], + 32 => [], + 33 => [], + 35 => [], + 36 => [], + 37 => [], + 38 => [], + 39 => [], + 41 => [], + 42 => [], + 43 => [], + 45 => [], + 46 => [], + 49 => [], + 50 => [], + 51 => [], + 52 => [], + 55 => [], + 56 => [], + 57 => [], + 60 => [] + ]; + $this->ticketMasterModel = new TicketMasterModel(); $this->claimStatus = new TicketClaimStatusModel(); $this->clientModel = new ClientModel(); @@ -300,6 +343,7 @@ class TicketController extends BaseController $this->employeePolicyModel = new EmployeePolicyModel(); $this->insurerModel = new InsurerModel(); $this->TPAModel = new TPAModel(); + $this->claimFilesModel = new ClaimFilesModel(); } public function ticketList() @@ -784,8 +828,12 @@ class TicketController extends BaseController // dd($data); $data['ticket_data'] = $ticket_data; $data['acms'] = $this->employeeModel->getAcmUsingClientID($ticket_data['client_id']); + + $raw_json = $this->ticketMasterModel->getPolicyTermsJson($ticket_id) ; + + $decoded_top = json_decode($raw_json ?? "", true) ?? []; + $data['policy_terms'] = $this->recursive_json_decode($decoded_top); - // dd($data); return $this->loadLayout('ticket_edit_onbording', $data); } @@ -1705,9 +1753,22 @@ class TicketController extends BaseController $lastMatchedStatus = $incoming_form_values['claim_status_id']; // Use the provided `extra_fields_array_for_validate` from the incoming data - $statusMapping = json_decode($incoming_form_values['extra_fields_array_for_validate']); + $statusMapping = json_decode($incoming_form_values['extra_fields_array_for_validate'], true); + // print_r($statusMapping); + // echo "-------------------------------"; + + //for remove the non used arrays + foreach ($statusMapping as $key1 => $value1) { + foreach ($this->removeArrayKey as $key2 => $value2) { + if($key1 === $key2){ + unset($statusMapping[$key1]); + } + } + } + // print_r($statusMapping); die; - if($incoming_form_values['claim_status_id'] != $old_ticket_data['claim_status_id']){ + // if($incoming_form_values['claim_status_id'] != $old_ticket_data['claim_status_id']){ + foreach ($statusMapping as $status => $requiredFields) { if(!empty($requiredFields) && $status != $old_ticket_data['claim_status_id']){ @@ -1742,7 +1803,8 @@ class TicketController extends BaseController $lastMatchedStatus = 2; } } - } + + // } return $lastMatchedStatus; } @@ -2080,7 +2142,117 @@ class TicketController extends BaseController $date = \DateTime::createFromFormat($format, $value); return $date && $date->format($format) === $value; } + + public function upload_url(){ + + $data = $this->request->getPost(); + + $insertArr = []; + + foreach ($data['docs_name'] as $key => $eachData) { + + if (!empty($eachData) ) { + + $insertData = [ + 'doc_name' => $data['docs_name'][$key]??'', + 'url' => $data['url'][$key]??'', + 'ticket_id'=> $data['ticket_id_url']??'', + 'created_by' => get_session_userid(), + 'is_active' => 1 + ]; + + $insertArr[] = $insertData; + + } + } + + if(!empty($insertArr)){ + // Insert into database + $insert = $this->claimFilesModel->insertBatch($insertArr); + } + + + if (isset($insert) && !empty($insert)) { + return $this->respond(['status' => true, 'message' => 'File uploaded successfully ']); + } else { + return $this->respond(['status' => false, 'message' => 'Failed to upload file ']); + } + } + + public function getUrlDataByTicketId() + { + $ticket_id = $this->request->getPost('ticket_id'); + + if (!$ticket_id) { + return $this->response->setJSON([ + 'status' => false, + 'message' => 'Ticket ID is required', + 'data' => [] + ]); + } + + $urlData = $this->claimFilesModel + ->where('ticket_id', $ticket_id) + ->where('is_active',1) + ->findAll(); + + return $this->response->setJSON([ + 'status' => true, + 'data' => $urlData + ]); + } + + public function remove_url() + { + $id = $this->request->getGet('id'); + + if (empty(trim($id))) { + return $this->response->setJSON([ + 'status' => false, + 'message' => 'Invalid ID' + ]); + } + + $updated = $this->claimFilesModel + ->where('id', $id) + ->set(['is_active' => 0]) + ->update(); + + if ($updated) { + return $this->response->setJSON([ + 'status' => true, + 'message' => 'URL successfully marked inactive.' + ]); + } else { + return $this->response->setJSON([ + 'status' => false, + 'message' => 'Failed to update record.' + ]); + } + } + + public function recursive_json_decode($input) { + if (is_string($input)) { + $decoded = json_decode($input, true); + if (json_last_error() === JSON_ERROR_NONE) { + return $this->recursive_json_decode($decoded); // continue decoding recursively + } else { + return $input; + } + } + + if (is_array($input)) { + foreach ($input as $key => $value) { + $input[$key] = $this->recursive_json_decode($value); + } + } + + return $input; + } + + + } diff --git a/app/Helpers/excel_import_export_helper.php b/app/Helpers/excel_import_export_helper.php index ad484ffe..9c72c973 100755 --- a/app/Helpers/excel_import_export_helper.php +++ b/app/Helpers/excel_import_export_helper.php @@ -664,12 +664,18 @@ if(!function_exists('generate_insurer_based_excel')){ $rowData = []; foreach ($excel_header_array as $header) { + $fieldName = $header['db_column_name']; + $defaultValue = isset($header['default_value']) ? $header['default_value'] : null; if ($fieldName === 'index') { $value = $serialNumber; } else { - $value = $row->$fieldName ?? ''; + if(empty($fieldName) && !empty($defaultValue)){ + $value = $defaultValue; + }else{ + $value = $row->$fieldName ?? ''; + } } $rowData[] = $value; diff --git a/app/Libraries/Gemini.php b/app/Libraries/Gemini.php new file mode 100644 index 00000000..da610e96 --- /dev/null +++ b/app/Libraries/Gemini.php @@ -0,0 +1,46 @@ +myLogger = \Config\Services::mylogger(); + // $this->client = new Google_Client(); + // $this->client->setAuthConfig(ROOTPATH . 'nhance-app-google-drive.json'); // App credentials + // // putenv('GOOGLE_APPLICATION_CREDENTIALS=' . ROOTPATH . 'nhance-app-google-drive.json'); + // $this->client->useApplicationDefaultCredentials(); + + // $this->client->addScope(Google_Service_Drive::DRIVE); // Full access to Google Drive + } + + public function check() + { + try { + // Initialize the Gemini client + $client = new Client($apiKey); + + // Send a prompt to the Gemini Pro model + $response = $client->generativeModel(ModelName::GEMINI_PRO)->generateContent( + new TextPart('Write a short, creative story about a knight and a dragon.') + ); + + // Display the generated text + $data['gemini_response'] = $response->text(); + } catch (\Exception $e) { + // Handle any errors that occur during the API call + $data['gemini_response'] = 'An error occurred: ' . $e->getMessage(); + } + } + +} diff --git a/app/Models/CDMasterModel.php b/app/Models/CDMasterModel.php index 663ea3bc..ee503a86 100755 --- a/app/Models/CDMasterModel.php +++ b/app/Models/CDMasterModel.php @@ -17,6 +17,7 @@ class CDMasterModel extends Model 'id', 'client_id', 'insurer_id', + 'insurer_branch_id', 'cd_ac_no', 'opening_bal', 'opening_date', @@ -66,9 +67,10 @@ class CDMasterModel extends Model $query = $this->db->table('cd_master') - ->select('cd_master.*, clients.client_name, clients.short_name, insurers.name AS insurer_name, user_profiles.first_name AS user_name, IFNULL(cd_ac_counts.cd_ac_no_count, 0) AS cd_ac_no_count, IFNULL(cd_ac_counts_for_cdt.cd_ac_no_count_cd_tranction, 0) AS cd_ac_no_count_cd_tranction') + ->select('cd_master.*, clients.client_name, clients.short_name, insurers.name AS insurer_name, user_profiles.first_name AS user_name, IFNULL(cd_ac_counts.cd_ac_no_count, 0) AS cd_ac_no_count, IFNULL(cd_ac_counts_for_cdt.cd_ac_no_count_cd_tranction, 0) AS cd_ac_no_count_cd_tranction, insurer_branch.branch_name as insurer_branch_name') ->join('clients', 'clients.id = cd_master.client_id') ->join('insurers', 'insurers.id = cd_master.insurer_id') + ->join('insurer_branch', 'cd_master.insurer_branch_id = insurer_branch.id', "left") ->join('user_profiles', 'user_profiles.id = cd_master.created_by') ->join( '(SELECT cd_master.cd_ac_no, cd_master.id, COUNT(client_policy.cd_ac_no) AS cd_ac_no_count @@ -102,6 +104,7 @@ class CDMasterModel extends Model ->where('clients.is_active', 1) ->where('insurers.is_active', 1) ->where('user_profiles.is_active', 1) + ->orderBy('cd_master.id', "desc") ->get(); $result = $query->getResultArray(); diff --git a/app/Models/ClaimFilesModel.php b/app/Models/ClaimFilesModel.php new file mode 100644 index 00000000..2a5ec138 --- /dev/null +++ b/app/Models/ClaimFilesModel.php @@ -0,0 +1,55 @@ +db->table('client_policy') ->select('client_policy.*, cd_master.cd_ac_no as cd_master_account_no') - ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('insurers.name as insurer_name, insurers.short_name as insurer_short, insurer_branch.branch_name as insurer_branch_name') ->select('clients.client_name as client_name') ->join('clients', 'clients.id = client_policy.client_id') ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id', 'left') ->join('cd_master', 'cd_master.insurer_id = insurers.id AND cd_master.client_id = client_policy.client_id') ->where('client_policy.client_id', $id) ->where('cd_master.id = client_policy.cd_ac_pk') @@ -190,7 +191,9 @@ class ClientPolicyModel extends Model $builder->whereIn('client_policy.id', $policyId); } - return $builder->get()->getResult(); + $data = $builder->get()->getResult(); + // dd($this->db->getLastQuery()); + return $data; diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index ec4b9222..82a8cb3b 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -1085,10 +1085,10 @@ class EmployeePolicyModel extends Model } $status_condition = "{$insurer_or_tpa}" === 'tpa' - ? "employee_polices.status = 'inactive' AND employees.emp_status = 'active'" + ? "employee_polices.status = 'active' AND employees.emp_status = 'active'" : "employee_polices.status = 'active' AND employees.emp_status = 'active'"; - $endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "AND (a.endorsement_id IS NOT NULL OR a.endorsement_id != '')" : "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')"; + $endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')" : "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')"; $query = $this->db->query(" SELECT DISTINCT @@ -1251,6 +1251,9 @@ class EmployeePolicyModel extends Model ee.id as emp_endorsement_primarykey, ep.id as emp_policy_primarykey, e.id as employees_primarykey, + e.relationship, + e.emp_code, + e.name as emp_name, ee.file_id, ee.group_key, ( @@ -2098,4 +2101,6 @@ class EmployeePolicyModel extends Model // var_dump($this->db->getLastQuery()); return $data; } + + } \ No newline at end of file diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index 5eabf684..ba9b2fcd 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -765,7 +765,12 @@ class PolicyTransactionModel extends Model ), 2 ) AS unbilled_amt, - created_user.first_name as user_name + created_user.first_name as user_name, + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ") ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') @@ -986,7 +991,12 @@ class PolicyTransactionModel extends Model pt_co_share_details.tp_amt AS tp, clients.pan, DATE_FORMAT(policy_transaction.created_at, '%d %b %Y %h:%i %p') AS created_at, - user_profiles.first_name as user_name + user_profiles.first_name as user_name, + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ") ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('clients', 'clients.id = policy_transaction.client_id', 'left') @@ -1049,8 +1059,8 @@ class PolicyTransactionModel extends Model // Optimize Query Execution $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); + $data = $builder->get()->getResultArray(); + return $data; } @@ -1065,7 +1075,12 @@ class PolicyTransactionModel extends Model client_branch.branch_name as client_branch_name, insurers.name AS insurer_name, insurers.short_name AS insurer_short_name, - policy_type.policy_type + policy_type.policy_type , + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ') ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('clients', 'policy_transaction.client_id = clients.id', 'left') @@ -1228,7 +1243,12 @@ class PolicyTransactionModel extends Model AND co_share_stmt_details.is_active = 1 ), 2 - ) AS variance_amt + ) AS variance_amt, + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ") @@ -1317,7 +1337,6 @@ class PolicyTransactionModel extends Model 'clients.client_name', 'insurers.name AS insurer_name', 'policy_type.policy_type', - 'policy_transaction.policy_no', 'policy_transaction.endorsement_no', "CASE WHEN policy_transaction.action_type = 'inception' THEN 'I' @@ -1327,7 +1346,12 @@ class PolicyTransactionModel extends Model 'pt_co_share_details.bp_amt', 'pt_co_share_details.tp_amt', 'pt_co_share_details.tep_amt', - 'policy_transaction.status' + 'policy_transaction.status', + 'CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no`' ]) ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('clients', 'clients.id = policy_transaction.client_id', 'left') @@ -1417,7 +1441,12 @@ class PolicyTransactionModel extends Model policy_transaction.action_type AS action_type_full, pt_co_share_details.exp_amt, pt_co_share_details.variance, - policy_transaction.status + policy_transaction.status, + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ") ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('clients', 'clients.id = policy_transaction.client_id', 'left') @@ -1490,7 +1519,6 @@ class PolicyTransactionModel extends Model clients.client_name, insurers.name AS insurer_name, policy_type.policy_type, - policy_transaction.policy_no, policy_transaction.endorsement_no, CASE WHEN policy_transaction.action_type = 'inception' THEN 'I' @@ -1525,7 +1553,12 @@ class PolicyTransactionModel extends Model inv_payment_details.statement_id = insurer_statements.id AND inv_payment_details.is_active = 1 ), - 2) AS outstanding_amount + 2) AS outstanding_amount, + CASE + WHEN `pt_co_share_details`.`co_share_type` IN (0, 1) THEN `policy_transaction`.`policy_no` + WHEN `pt_co_share_details`.`co_share_type` > 1 THEN `pt_co_share_details`.`follower_policy_no` + ELSE `policy_transaction`.`policy_no` -- Default fallback + END AS `policy_no` ") ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id', 'left') diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index b85dad62..3a7c191a 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -953,4 +953,29 @@ class TicketMasterModel extends Model 'ticket_ids' => $ticketIdsString ]; } + + public function getPolicyTermsJson($ticket_id) + { + $sql = " SELECT cp.policy_terms + FROM ticket_master tm + JOIN client_policy cp ON cp.id = tm.client_policy_id + WHERE tm.id = ? + AND tm.is_active = 1 + AND cp.is_active = 1 + "; + + $binds = [$ticket_id]; + $query = $this->db->query($sql, $binds); + + if ($query && $query->getNumRows() > 0) { + $row = $query->getRowArray(); + return json_encode(['policy_terms' => $row['policy_terms']]); + } + + return json_encode(['policy_terms' => null]); + } + + + + } diff --git a/app/Views/UserList.php b/app/Views/UserList.php index be654b8d..b7de1d73 100755 --- a/app/Views/UserList.php +++ b/app/Views/UserList.php @@ -1,4 +1,4 @@ - --> + + +
@@ -96,7 +286,7 @@ table.dataTable tbody td { -