diff --git a/app/Config/Routes.php b/app/Config/Routes.php index a685eb1f..9adc88fb 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -426,14 +426,14 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { $routes->get("remove/(:any)", "PolicyTransactionController::removeCDMaster/$1"); }); - $routes->group("report", ["filter" => "authMVC"], function ($routes) { - $routes->match(['get', 'post'],"list", "PolicyTransactionController::reportBDSNew"); - $routes->match(['get', 'post'],"listNew", "PolicyTransactionController::reportBDSNew"); - $routes->get("report-varience-list", "PolicyTransactionController::reportVarience"); - $routes->get("report-business-list", "PolicyTransactionController::reportBusinessList"); - $routes->get("report-finance-list", "PolicyTransactionController::reportFinanceList"); - $routes->get("report-outstanding-list", "PolicyTransactionController::reportOutstanding"); - }); + $routes->group("report", ["filter" => "authMVC"], function ($routes) { + $routes->match(['get', 'post'],"list", "PolicyTransactionController::reportBDSNew"); + $routes->match(['get', 'post'],"listNew", "PolicyTransactionController::reportBDSNew"); + $routes->get("report-varience-list", "PolicyTransactionController::reportVarience"); + $routes->get("report-business-list", "PolicyTransactionController::reportBusinessList"); + $routes->get("report-finance-list", "PolicyTransactionController::reportFinanceList"); + $routes->get("report-outstanding-list", "PolicyTransactionController::reportOutstanding"); + }); $routes->group("statement", ["filter" => "authMVC"], function ($routes) { $routes->get("list", "PolicyTransactionController::statementList"); diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index bf508a48..2719ae7f 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -1,1483 +1,894 @@ myLogger = \Config\Services::mylogger(); + use ResponseTrait; - $this->clientModel = new ClientModel(); - $this->clientBranchModel = new ClientBranchModel(); - $this->policyTypeModel = new PolicyTypeModel(); - $this->clientDepositModel = new ClientDepositModel(); - $this->clientPolicyModel = new ClientPolicyModel(); - $this->insurerBranchModel = new InsurerBranchModel(); - $this->insurerModel = new InsurerModel(); - $this->policyTransactionModel = new PolicyTransactionModel(); - $this->policyTransactionStatusModel = new PolicyTransactionStatusModel(); - $this->kycEntityTypeModel = new KYCEntityTypeModel(); - $this->clientKYCDocsModel = new ClientKYCDocsModel(); - $this->tpaBranchModel = new TPABranchModel(); - $this->tpaModel = new TPAModel(); - $this->PTFileModel = new PTFileModel(); - $this->PTCOShareDetailsModel = new PTCOShareDetailsModel(); - $this->employeeModel = new EmployeeModel(); - $this->userTeamsModel = new UserTeamsModel(); - $this->userModel = new UserModel(); - $this->employeePolicyModel = new EmployeePolicyModel(); - $this->insurerStatements = new InsurerStatements(); - $this->invPaymentDetailsModel = new InvPaymentDetailsModel(); - $this->batchFileModel = new BatchFileModel(); - $this->filesModel = new FileModel(); - $this->coShareStmtDetailsModel = new COShareStmtDetailsModel(); - $this->BdsPlacementModel = new BdsPlacementModel(); - $this->nhanceBranchModel = new NhanceBranchModel(); - $this->invoiceStatus = [ - 'pending' => 'Pending', - 'generated' => 'Generated', - 'sent' => 'Sent', - 'payment_received' => 'Payment
Received', - ]; - } + protected $myLogger; + protected $policyTransactionModel; + protected $policyTransactionStatusModel; + protected $clientModel; + protected $clientPolicyModel; + protected $clientBranchModel; + protected $clientDepositModel; + protected $policyTypeModel; + protected $insurerBranchModel; + protected $insurerModel; + protected $kycEntityTypeModel; + protected $clientKYCDocsModel; + protected $tpaBranchModel; + protected $tpaModel; + protected $PTFileModel; + protected $PTCOShareDetailsModel; + protected $employeeModel; + protected $userTeamsModel; + protected $userModel; + protected $employeePolicyModel; + protected $insurerStatements; + protected $invoiceStatus; + protected $invPaymentDetailsModel; + protected $batchFileModel; + protected $filesModel; + protected $coShareStmtDetailsModel; + protected $BdsPlacementModel; + protected $nhanceBranchModel; - // Policy Transaction Inception - public function viewInception() - { - $bds_edit_pt_id = $this->request->getGet('pt_id') ?? null; - $data['tab_name'] = 'Policy'; - $data['page_name'] = 'Policy'; + public function __construct() + { + set_session_context('Policy Tranction'); + $this->myLogger = \Config\Services::mylogger(); - // Static arrays for dropdowns - $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; - $data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll(); - $data['client_type'] = [1 => 'Group', 2 => 'Individual']; - $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; - $data['policy_status'] = [ - 'under_process' => 'Under Process', - 'client_pending' => 'Client Pending', - 'insurer_pending' => 'Insurer Pending', - 'co_insurer_pending' => 'Co-Insurer Pending', - 'tpa_pending' => 'TPA Pending', - 'validated' => 'Validated', - 'cancelled' => 'Cancelled', - 'instalment_pending' => 'Instalment Pending', - 'completed' => 'Completed', - 'lost' => 'Lost', - ]; - $data['invoice_status_array'] = [ - 'yet_to_generate' => 'Pending', - 'generated' => 'Generated', - 'send' => 'Sent', - 'recived' => 'Payment Received', - ]; - // $data['vehicle_type'] = [ - // 'two_wheeler' => 'Two Wheeler', - // 'four_wheeler' => 'Four Wheeler', - // 'truck' => 'Truck', - // 'bus' => 'Bus', - // 'van' => 'Van', - // 'suv' => 'SUV', - // 'motorcycle' => 'Motorcycle', - // 'bicycle' => 'Bicycle' - // ]; - $data['vehicle_type'] = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray(); - $data['rto_details'] = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray(); + $this->clientModel = new ClientModel(); + $this->clientBranchModel = new ClientBranchModel(); + $this->policyTypeModel = new PolicyTypeModel(); + $this->clientDepositModel = new ClientDepositModel(); + $this->clientPolicyModel = new ClientPolicyModel(); + $this->insurerBranchModel = new InsurerBranchModel(); + $this->insurerModel = new InsurerModel(); + $this->policyTransactionModel = new PolicyTransactionModel(); + $this->policyTransactionStatusModel = new PolicyTransactionStatusModel(); + $this->kycEntityTypeModel = new KYCEntityTypeModel(); + $this->clientKYCDocsModel = new ClientKYCDocsModel(); + $this->tpaBranchModel = new TPABranchModel(); + $this->tpaModel = new TPAModel(); + $this->PTFileModel = new PTFileModel(); + $this->PTCOShareDetailsModel = new PTCOShareDetailsModel(); + $this->employeeModel = new EmployeeModel(); + $this->userTeamsModel = new UserTeamsModel(); + $this->userModel = new UserModel(); + $this->employeePolicyModel = new EmployeePolicyModel(); + $this->insurerStatements = new InsurerStatements(); + $this->invPaymentDetailsModel = new InvPaymentDetailsModel(); + $this->batchFileModel = new BatchFileModel(); + $this->filesModel = new FileModel(); + $this->coShareStmtDetailsModel = new COShareStmtDetailsModel(); + $this->BdsPlacementModel = new BdsPlacementModel(); + $this->nhanceBranchModel = new NhanceBranchModel(); + $this->invoiceStatus = [ + 'pending' => 'Pending', + 'generated' => 'Generated', + 'sent' => 'Sent', + 'payment_received' => 'Payment
Received', + ]; + } - $data['vehicle_des'] = [ - 'commercial' => 'Commercial', - 'private' => 'Private', - ]; - $data['date_type'] = [ - 'policy_issue_date' => 'Policy Issue Date', - 'policy_start_date' => 'Policy Start Date', - 'policy_end_date' => 'Policy End Date', - ]; + // Policy Transaction Inception + public function viewInception() + { + $bds_edit_pt_id = $this->request->getGet('pt_id') ?? null; + $data['tab_name'] = 'Policy'; + $data['page_name'] = 'Policy'; - // Filter data - $start_date = $this->request->getGet('start_date'); - $end_date = $this->request->getGet('end_date'); - $client_id = $this->request->getGet('client_id'); - $insurer_id = $this->request->getGet('insurer_id'); - $policy_type_id = $this->request->getGet('policy_type_id'); - $date_type = $this->request->getGet('date_type'); - $issuer = $this->request->getGet('issuer'); - $status = $this->request->getGet('status'); + // Static arrays for dropdowns + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll(); + $data['client_type'] = [1 => 'Group', 2 => 'Individual']; + $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; + $data['policy_status'] = [ + 'under_process' => 'Under Process', + 'client_pending' => 'Client Pending', + 'insurer_pending' => 'Insurer Pending', + 'co_insurer_pending' => 'Co-Insurer Pending', + 'tpa_pending' => 'TPA Pending', + 'validated' => 'Validated', + 'cancelled' => 'Cancelled', + 'instalment_pending' => 'Instalment Pending', + 'completed' => 'Completed', + 'lost' => 'Lost', + ]; + $data['invoice_status_array'] = [ + 'yet_to_generate' => 'Pending', + 'generated' => 'Generated', + 'send' => 'Sent', + 'recived' => 'Payment Received', + ]; + // $data['vehicle_type'] = [ + // 'two_wheeler' => 'Two Wheeler', + // 'four_wheeler' => 'Four Wheeler', + // 'truck' => 'Truck', + // 'bus' => 'Bus', + // 'van' => 'Van', + // 'suv' => 'SUV', + // 'motorcycle' => 'Motorcycle', + // 'bicycle' => 'Bicycle' + // ]; + $data['vehicle_type'] = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray(); + $data['rto_details'] = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray(); - // Handle null or empty values - $start_date = empty($start_date) ? 0 : $start_date; - $end_date = empty($end_date) ? 0 : $end_date; - $client_id = empty($client_id) ? 0 : $client_id; - $insurer_id = empty($insurer_id) ? 0 : $insurer_id; - $policy_type_id = empty($policy_type_id) ? 0 : $policy_type_id; - $date_type = empty($date_type) ? 0 : $date_type; - $issuer = empty($issuer) ? 0 : $issuer; - $status = empty($status) ? 0 : $status; // Corrected from `$issuer` + $data['vehicle_des'] = [ + 'commercial' => 'Commercial', + 'private' => 'Private', + ]; + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + ]; - if(empty($bds_edit_pt_id)){ - if ($this->request->is('get')) { + // Filter data + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + $status = $this->request->getGet('status'); - // Fetch inception data list - $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( - $start_date, - $end_date, - $client_id, - $insurer_id, - $policy_type_id, - $date_type, - $issuer, - $status - ); + // Handle null or empty values + $start_date = empty($start_date) ? 0 : $start_date; + $end_date = empty($end_date) ? 0 : $end_date; + $client_id = empty($client_id) ? 0 : $client_id; + $insurer_id = empty($insurer_id) ? 0 : $insurer_id; + $policy_type_id = empty($policy_type_id) ? 0 : $policy_type_id; + $date_type = empty($date_type) ? 0 : $date_type; + $issuer = empty($issuer) ? 0 : $issuer; + $status = empty($status) ? 0 : $status; // Corrected from `$issuer` + + if(empty($bds_edit_pt_id)){ + if ($this->request->is('get')) { + + // Fetch inception data list + $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( + $start_date, + $end_date, + $client_id, + $insurer_id, + $policy_type_id, + $date_type, + $issuer, + $status + ); + } else { + + $ids = $this->request->getPost('ids'); + $ids = array_filter(explode(',', $ids)); + $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( + $start_date = 0, + $end_date = 0, + $client_id = 0, + $insurer_id = 0, + $policy_type_id = 0, + $date_type = 0, + $issuer = 0, + $status = 0, + $ids + ); + } + }else{ + $data['inception_data_list'] = []; + } + + + + // Fetch additional data + $data['client'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll(); + $data['policy_type'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['entity'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames(); + $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames(); + + // Fetch PP Teams Data + $data['ppTeamsData'] = $this->userModel + ->where('is_active', 1) + ->findAll(); + + // Fetch Sales Team + $data['salse_team'] = $this->userModel + ->select('user_profiles.*') + ->join('user_teams', 'user_profiles.id = user_teams.user_id') + ->where('user_teams.team_id', 5) + ->where('user_teams.is_active', 1) + ->where('user_profiles.is_active', 1) + ->findAll(); + + // Fetch ACM + $data['ACM'] = $this->userModel + ->where('role', 3) // Assuming `role` is in `user_profiles` + ->where('is_active', 1) + ->findAll(); + // echo '
';
+            // print_r($data['ppTeamsData']); die;
+
+            // dd($data);
+
+            // Load view
+            $this->loadLayout('policy_transaction_inception_list', $data);
+        }
+
+        // policy Transaction Create function start
+        public function createInceptionPolicy()
+        {   
+            $post_data = $this->request->getPost() ?? [];
+            $this->myLogger->logme('error', 'Policy Trancaction form data : '. json_encode($post_data));
+
+            $id = $this->request->getPost('id');
+            $data = $this->preparePolicyData();
+            $data['cd_ac_pk'] = $this->request->getPost('cd_ac_no');
+            $data['issuer'] = 2;
+            $data['status'] = 'completed';
+            $this->myLogger->logme('error', 'Policy Trancaction modified form data ( insert data ) : '. json_encode($data));
+
+
+            if (!$id) {
+                return $this->insertInceptionPolicy($data);
             } else {
-
-                $ids = $this->request->getPost('ids');
-                $ids = array_filter(explode(',', $ids));
-                $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData(
-                    $start_date = 0,
-                    $end_date = 0,
-                    $client_id = 0,
-                    $insurer_id = 0,
-                    $policy_type_id = 0,
-                    $date_type = 0,
-                    $issuer = 0,
-                    $status = 0,
-                    $ids
-                );
-            }
-        }else{
-            $data['inception_data_list'] = [];
-        }
-
-
-
-        // Fetch additional data
-        $data['client'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll();
-        $data['policy_type'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['entity'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
-        $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
-
-        // Fetch PP Teams Data
-        $data['ppTeamsData'] = $this->userModel
-            ->where('is_active', 1)
-            ->findAll();
-
-        // Fetch Sales Team
-        $data['salse_team'] = $this->userModel
-            ->select('user_profiles.*')
-            ->join('user_teams', 'user_profiles.id = user_teams.user_id')
-            ->where('user_teams.team_id', 5)
-            ->where('user_teams.is_active', 1)
-            ->where('user_profiles.is_active', 1)
-            ->findAll();
-
-        // Fetch ACM
-        $data['ACM'] = $this->userModel
-            ->where('role', 3)  // Assuming `role` is in `user_profiles`
-            ->where('is_active', 1)
-            ->findAll();
-            // echo '
';
-        // print_r($data['ppTeamsData']); die;
-
-        // dd($data);
-
-        // Load view
-        $this->loadLayout('policy_transaction_inception_list', $data);
-    }
-
-    // policy Transaction Create function start
-    public function createInceptionPolicy()
-    {   
-        $post_data = $this->request->getPost() ?? [];
-        $this->myLogger->logme('error', 'Policy Trancaction form data : '. json_encode($post_data));
-
-        $id = $this->request->getPost('id');
-        $data = $this->preparePolicyData();
-        $data['cd_ac_pk'] = $this->request->getPost('cd_ac_no');
-        $data['issuer'] = 2;
-        $data['status'] = 'completed';
-        $this->myLogger->logme('error', 'Policy Trancaction modified form data ( insert data ) : '. json_encode($data));
-
-
-        if (!$id) {
-            return $this->insertInceptionPolicy($data);
-        } else {
-            return $this->updateInceptionPolicy($id, $data);
-        }
-    }
-
-    private function preparePolicyData()
-    {
-        $data = $this->request->getPost();
-
-        // print_r($data); die;
-
-        if (empty($data['policy_issue_date'])) {
-            $data['policy_issue_date'] = null;
-        }
-
-        if (empty($data['policy_start_date'])) {
-            $data['policy_start_date'] = null;
-        }
-
-        if (empty($data['policy_end_date'])) {
-            $data['policy_end_date'] = null;
-        }
-
-        if (empty($data['renewal_date'])) {
-            $data['renewal_date'] = null;
-        }
-
-        if (empty($data['rollover_date'])) {
-            $data['rollover_date'] = null;
-        }
-
-        if (empty($data['last_action_date'])) {
-            $data['last_action_date'] = null;
-        } else {
-            $data['last_action_date'] = change_date_format($data['last_action_date']);
-        }
-
-        // Separate Insurer and TPA Branch IDs and IDs
-        if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
-            list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
-            if (isset($data['tpa']) && !empty($data['tpa'])) {
-                list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
+                return $this->updateInceptionPolicy($id, $data);
             }
         }
 
-        $data['tsi'] = generate_tsi_code($data['issue_type']);
-        $data['action_type'] = 'inception';
+        private function preparePolicyData()
+        {
+            $data = $this->request->getPost();
 
-        if (!isset($data['co_share'])) {
-            $data['co_share'] = 0;
-        } elseif ($data['co_share']) {
-            $data['co_share'] = 1;
-        }
+            // print_r($data); die;
 
-        if (!isset($data['bro_payable_by'])) {
-            $data['bro_payable_by'] = 0;
-        } elseif ($data['bro_payable_by']) {
-            $data['bro_payable_by'] = 1;
-        }
+            if (empty($data['policy_issue_date'])) {
+                $data['policy_issue_date'] = null;
+            }
 
-        if (!isset($data['same_as_proposer'])) {
-            $data['same_as_proposer'] = 0;
-        } elseif ($data['same_as_proposer']) {
-            $data['same_as_proposer'] = 1;
-        }
+            if (empty($data['policy_start_date'])) {
+                $data['policy_start_date'] = null;
+            }
 
-        if (!isset($data['policy_with_corr'])) {
-            $data['policy_with_corr'] = 0;
-        } elseif ($data['policy_with_corr']) {
-            $data['policy_with_corr'] = 1;
-        }
+            if (empty($data['policy_end_date'])) {
+                $data['policy_end_date'] = null;
+            }
 
-        $data['is_cd_reduce_from_bds'] = ($data['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
+            if (empty($data['renewal_date'])) {
+                $data['renewal_date'] = null;
+            }
 
+            if (empty($data['rollover_date'])) {
+                $data['rollover_date'] = null;
+            }
 
-        if ($data['ct_type'] == "") {
-            $data['ct_type'] = 1;
-        }
+            if (empty($data['last_action_date'])) {
+                $data['last_action_date'] = null;
+            } else {
+                $data['last_action_date'] = change_date_format($data['last_action_date']);
+            }
 
-        // $month = '01-'.(string)$this->request->getPost('month');
-        // $data['month'] = empty($data['month']) ? null : date('Y-m-d', strtotime($month));    
-
-        // Determine $is_addon value
-        $data['is_addon'] = in_array($data['policy_type_id'], [1, 2, 6, 7]) ? 1 : (in_array($data['policy_type_id'], [4, 5]) ? 2 : ($data['policy_type_id'] == 3 && isset($data['base_policy']) ? 3 : 1));
-
-        // print_r($data); die;
-
-        return $data;
-    }
-
-    private function insertInceptionPolicy($data)
-    {
-        // print_r($data); die;
-
-        $insert = $this->policyTransactionModel->insert($data);
-
-        if ($insert) {
-
-            $this->insertTransactionStatus($insert, $data, 1);
-            $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
-
-            if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
-
-                $pt_co_share_details = $this->insertOrUpdateCoShareDetails($data, $insert);
-
-                $client_policy_id = null;
-                if ($data['ct_type'] == 2) {
-                    $client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
-                    $client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
-                    $this->policyTransactionModel->update($insert, ['client_policy_id' => $client_policy_id]);
-                    $emp_policy_insert = $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
-                }
-
-                if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
-                    $this->processCompletedStatus($data, $client_policy_id, $data['insurer_id'], $insert);
+            // Separate Insurer and TPA Branch IDs and IDs
+            if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
+                list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
+                if (isset($data['tpa']) && !empty($data['tpa'])) {
+                    list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
                 }
             }
 
-            $client_data = $this->clientModel->where('id', $data['client_id'])->first();
-            $data['client_kyc'] = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
-            
-            $clientController = new ClientController();
-            $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
-            $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
-            $data['entity_type_id'] =  $client_data['entity_type_id'];
+            $data['tsi'] = generate_tsi_code($data['issue_type']);
+            $data['action_type'] = 'inception';
 
-            return $this->respondSuccess($insert, "Policy transaction created successfully", $data);
+            if (!isset($data['co_share'])) {
+                $data['co_share'] = 0;
+            } elseif ($data['co_share']) {
+                $data['co_share'] = 1;
+            }
+
+            if (!isset($data['bro_payable_by'])) {
+                $data['bro_payable_by'] = 0;
+            } elseif ($data['bro_payable_by']) {
+                $data['bro_payable_by'] = 1;
+            }
+
+            if (!isset($data['same_as_proposer'])) {
+                $data['same_as_proposer'] = 0;
+            } elseif ($data['same_as_proposer']) {
+                $data['same_as_proposer'] = 1;
+            }
+
+            if (!isset($data['policy_with_corr'])) {
+                $data['policy_with_corr'] = 0;
+            } elseif ($data['policy_with_corr']) {
+                $data['policy_with_corr'] = 1;
+            }
+
+            $data['is_cd_reduce_from_bds'] = ($data['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
+
+
+            if ($data['ct_type'] == "") {
+                $data['ct_type'] = 1;
+            }
+
+            // $month = '01-'.(string)$this->request->getPost('month');
+            // $data['month'] = empty($data['month']) ? null : date('Y-m-d', strtotime($month));    
+
+            // Determine $is_addon value
+            $data['is_addon'] = in_array($data['policy_type_id'], [1, 2, 6, 7]) ? 1 : (in_array($data['policy_type_id'], [4, 5]) ? 2 : ($data['policy_type_id'] == 3 && isset($data['base_policy']) ? 3 : 1));
+
+            // print_r($data); die;
+
+            return $data;
         }
 
-        return $this->respondError("Failed to create policy transaction");
-    }
+        private function insertInceptionPolicy($data)
+        {
+            // print_r($data); die;
 
-    private function updateInceptionPolicy($id, $data)
-    {
-        // print_r($data); die;
-        $old_pt_data = $this->policyTransactionModel->where('is_active', 1)->where("id", $id)->first();
-        $old_pt_co_share_data = $this->PTCOShareDetailsModel->where('is_active', 1)->where("id", $id)->first();
-        if ($this->policyTransactionModel->update($id, $data)) {
+            $insert = $this->policyTransactionModel->insert($data);
 
-            $this->insertTransactionStatus($id, $data, 1);
-            $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
+            if ($insert) {
 
-            if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
+                $this->insertTransactionStatus($insert, $data, 1);
+                $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
 
-                $this->insertOrUpdateCoShareDetails($data, $id);
+                if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
 
-                if ($data['ct_type'] == 1) {
-                    $this->policyTransactionModel->update($id, ['client_policy_id' => $data['client_policy_id']]);
-                }
-
-                if (empty($data['client_policy_id']) || $data['client_policy_id'] == 0) {
+                    $pt_co_share_details = $this->insertOrUpdateCoShareDetails($data, $insert);
 
+                    $client_policy_id = null;
                     if ($data['ct_type'] == 2) {
                         $client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
                         $client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
-                        $this->policyTransactionModel->update($id, ['client_policy_id' => $client_policy_id]);
-                        $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
+                        $this->policyTransactionModel->update($insert, ['client_policy_id' => $client_policy_id]);
+                        $emp_policy_insert = $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
                     }
-                } else {
-                    if (isset($data['emp_policy_id']) && !empty($data['emp_policy_id'][0])) {
-                        $this->InsertIndividualEmpPolicyTable($emp_data, $data['client_policy_id']);
+
+                    if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
+                        $this->processCompletedStatus($data, $client_policy_id, $data['insurer_id'], $insert);
                     }
                 }
 
-                // if($old_pt_data['status'] != "completed"){
-                //     if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
-                //         if ($data['client_type'] == 1 && $data['is_cd_reduce_from_bds'] == 1) {
-                //             $this->processCompletedStatus($data, $data['client_policy_id'], $data['insurer_id'], $id);
-                //         }
-                //     }
-                // }
-
-                $data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $id)->where('is_active', 1)->findAll();
-            }
-
-            if(isset($data['cd_amt_changed']) && !empty($data['cd_amt_changed'])){
-                $policy_data = $this->policyTransactionModel->where('is_active', 1)->where('id', $id)->first();
-                $this->cdCorrection($policy_data, $data['cd_amt_changed'], $id);
-            }
-
-            $client_data = $this->clientModel->where('id', $data['client_id'])->first();
-            $data['client_kyc']       = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
-            
-            $clientController = new ClientController();
-            $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
-            $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
-
-            $data['entity_type_id'] =  $client_data['entity_type_id'];
-
-            return $this->respondSuccess($id, "Policy transaction updated successfully", $data);
-        }
-
-        return $this->respondError("Failed to update policy transaction");
-    }
-
-    private function insertOrUpdateCoShareDetails($data, $pt_id)
-    {
-        // Prepare data for insertion and updating
-        $coShareDetails = [];
-        if (isset($data['co_share_id']) && !empty($data['co_share_id'])) {
-            $this->removePtCoShareRecords($data['co_share_id'], $pt_id);
-        }
-
-        if (isset($data['follow_insurer_id'])) {
-
-            foreach ($data['follow_insurer_id'] as $index => $insurer) {
-
-                // Separate the insurer and insurer branch
-                if (isset($insurer) && !empty($insurer)) {
-                    list($insurer_branch_id, $insurer_id) = explode('-', $insurer);
-                } else {
-                    $insurer_branch_id = null;
-                    $insurer_id = null;
-                }
-
-                if ($data['bro_payable_by'] == 1) {
-                    $cop_amt = isset($data['co_premium'][$index]) && ($data['co_premium'][$index] != "0.00" && !empty($data['co_premium'][$index])) ? $data['co_premium'][$index] : ($data['base_premium'][$index] ?? 0);
-                    // print_r($cop_amt);die();
-                } else {
-                    $cop_amt = $data['co_premium'][$index] ?? 0;
-                }
-
-                // Prepare each co-share detail entry
-                $coShareDetails[] = [
-                    'pt_id' => $pt_id,
-                    'insurer_id' => $insurer_id ?? 0,
-                    'insurer_branch_id' => $insurer_branch_id ?? 0,
-                    'co_share_type' => $data['co_share_type'][$index] ?? 1,
-                    'co_share_per' => $data['co_share_per'][$index] ?? 0,
-                    'bp_amt' => $data['base_premium'][$index] ?? 0,
-                    'bp_gst_amt' => $data['gst_amount'][$index] ?? 0,
-                    'bp_igst' => $data['igst'][$index] ?? 0,
-                    'bp_sgst' => $data['sgst'][$index] ?? 0,
-                    'bp_cgst' => $data['cgst'][$index] ?? 0,
-                    'tp_amt' => $data['tp_premium'][$index] ?? 0,
-                    'tep_amt' => $data['ter_premium'][$index] ?? 0,
-                    'cotp_amt' => $data['co_tp_premium'][$index] ?? 0,
-                    'cotep_amt' => $data['co_ter_premium'][$index] ?? 0,
-                    'agreed_amt' => $data['agreed_amount'][$index] ?? 0,
-                    'agreed_bp_per' => $data['agreed_bp'][$index] ?? 0,
-                    'agreed_tp_per' => $data['agreed_tp'][$index] ?? 0,
-                    'agreed_tep_per' => $data['agreed_ter'][$index] ?? 0,
-                    'standerd_bp_per' => $data['standard_bp'][$index] ?? 0,
-                    'standerd_tp_per' => $data['standard_tp'][$index] ?? 0,
-                    'standerd_tep_per' => $data['standard_ter'][$index] ?? 0,
-                    'actual_bp_amt' => $data['actual_bp_amt'][$index] ?? 0,
-                    'actual_tp_amt' => $data['actual_tp_amt'][$index] ?? 0,
-                    'actual_tep_amt' => $data['actual_tep_amt'][$index] ?? 0,
-                    'actual_bp_per' => $data['actual_bp_per'][$index] ?? 0,
-                    'actual_tp_per' => $data['actual_tp_per'][$index] ?? 0,
-                    'actual_tep_per' => $data['actual_tep_per'][$index] ?? 0,
-                    'actual_bp_brokerage_amt' => $data['actual_bp_brokerage_amt'][$index] ?? 0,
-                    'actual_tp_brokerage_amt' => $data['actual_tp_brokerage_amt'][$index] ?? 0,
-                    'actual_tep_brokerage_amt' => $data['actual_tep_brokerage_amt'][$index] ?? 0,
-                    'exp_amt' => isset($data['exp_amt'][$index]) && !empty($data['exp_amt'][$index]) ? $data['exp_amt'][$index] : expected_amount_calc($data, $index),
-                    'amount' => $data['total'][$index] ?? 0,
-                    'stamp_duty' => $data['stamp_duty'][$index] ?? 0,
-                    'cop_amt' => $cop_amt,
-                    'variance' => $data['variance'][$index] ?? 0,
-                    'reward' => $data['reward'][$index] ?? null,
-                    'created_by' => get_session_userid() ?? null,
-                    'updated_by' => get_session_userid() ?? null,
-                    'id' => $data['co_share_id'][$index] ?? null, // Assuming this is the ID to identify existing records
-                    'follower_policy_no' => $data['follower_policy_no'][$index] ?? null,
-                    'non_comm_per_amt' => $data['non_comm_per_amt'][$index] ?? null,
-                ];
-            }
-
-            // print_r($pt_id); 
-            // print_r($coShareDetails); 
-            // die;
-
-            // Separate data into insert and update batches
-            $insertData = array_filter($coShareDetails, function ($detail) {
-                return empty($detail['id']); // Only insert new records
-            });
-
-            $updateData = array_filter($coShareDetails, function ($detail) {
-                return !empty($detail['id']); // Only update existing records
-            });
-
-            // Insert new records
-            if (!empty($insertData)) {
-                $this->PTCOShareDetailsModel->insertBatch($insertData);
-            }
-
-            // Update existing records
-            if (!empty($updateData)) {
-                $this->PTCOShareDetailsModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
-            }
-
-            // print_r($this->PTCOShareDetailsModel->getLastQuery()); die;
-            // print_r($coShareDetails); 
-            // die;
-
-            return true;
-        }
-
-        // print_r($data); 
-        // die;
-    }
-
-    private function prepareClientPolicyInsertData($data)
-    {
-        return [
-            'client_id' => $data['client_id'] ?? null,
-            'insurer_id' => $data['insurer_id'] ?? null,
-            'insurer_branch_id' => $data['insurer_branch_id'] ?? null,
-            'tpa_id' => $data['tpa_id'] ?? null,
-            'tpa_branch_id' => $data['tpa_branch_id'] ?? null,
-            'policy_type_id' => $data['policy_type_id'] ?? null,
-            'policy_start_date' => $data['policy_start_date'] ?? null,
-            'policy_end_date' => $data['policy_end_date'] ?? null,
-            'policy_status' => 1,
-            'is_addon' => $data['is_addon'] ?? null,
-            'base_policy' => $data['base_policy'] ?? 0,
-            'created_by' => get_session_userid(),
-            'policy_no' => $data['policy_no'] ?? null,
-            'client_branch_id' => $data['client_branch_id'] ?? 0,
-            'cd_ac_pk' => $data['cd_ac_no'] ?? null,
-            'gst' => 18,
-            'policy_entry_from' => 2,
-        ];
-    }
-
-    private function insertTransactionStatus($policyTranId, $data, $statusType)
-    {
-        $statusData = [
-            'policy_tran_id' => $policyTranId,
-            'status' => $data['status'],
-            'last_action_date' => $data['last_action_date'],
-            'status_type' => $statusType,
-            'created_by' => get_session_userid(),
-        ];
-        $this->policyTransactionStatusModel->insert($statusData);
-    }
-
-    private function processCompletedStatus($data, $client_policy_id, $insurer_id, $policyTranId)
-    {
-        $totalAmount = (int)$data['total'][0] ?? 0;
-        $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited for the ' . $data['emp_count'] . ' employees at Inception (BDS).';
-
-        $cdTransactionData = [
-            'amount' => $totalAmount,
-            'sub_type_id' => 4,
-            'client_id' => $data['client_id'],
-            'client_policy_id' => $client_policy_id ?? 0,
-            'endorsement_no' => null,
-            'cd_ac_no' => $data['cd_ac_no'] ?? null,
-            'insurer_id' => $insurer_id,
-            'description' => $description,
-            'transaction_type' => 'Debit',
-            'updated_by' => get_session_userid(),
-            'event_name' => 'inception',
-            'is_active' => 1,
-            'cd_ac_pk'  => $data['cd_ac_pk'],
-            'pt_id' => $policyTranId ?? null,
-        ];
-
-        $result = DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
-
-        if(isset($result) && $result['success'] == true){
-            $update_data['ct_tran_id'] = $result['insert_id'];
-            $this->policyTransactionModel->where('id', $policyTranId)->set($update_data)->update();
-        }
-    }
-
-    private function cdCorrection($data, $amt, $policyTranId)
-    {
-        $totalAmount = (int)($amt ?? 0);
-        $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited towards the difference arising from the change in the BDS base premium.';
-
-        $cdTransactionData = [
-            'amount' => abs($totalAmount),
-            'sub_type_id' => 4,
-            'client_id' => $data['client_id'],
-            'client_policy_id' => $data['client_policy_id'] ?? 0,
-            'endorsement_no' => null,
-            'cd_ac_no' => $data['cd_ac_no'] ?? null,
-            'insurer_id' => $data['insurer_id'],
-            'description' => $description,
-            'transaction_type' => $totalAmount < 0 ? 'Credit' : 'Debit',
-            'updated_by' => get_session_userid(),
-            'event_name' => 'inception',
-            'is_active' => 1,
-            'cd_ac_pk'  => $data['cd_ac_pk'],
-            'pt_id' => $policyTranId ?? null,
-        ];
-
-        DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
-    }
-
-    private function processInsertIndividualMemberInEmpTable($data)
-    {
-        // print_r($data);
-        if (isset($data['family_name']) && !empty($data['family_name'])) {
-
-            $emp_data = [];
-            $emp_ids = [];
-            $random_code = generateRandomCode(); // Generate random code once
-
-            foreach ($data['family_name'] as $index => $val) {
-
-                // Determine the gender based on the relationship
-                $relationship = $data['relationship'][$index] ?? '';
-                $gender = 'M'; // Default to Male
-
-                // Set gender based on relationship
-                if (in_array($relationship, ['Mother', 'Daughter', 'Mother in law', 'Spouse'])) {
-                    $gender = 'F';
-                }
-
-                $emp_data[] = [
-                    'client_id' => $data['client_id'] ?? 0,
-                    'client_branch_id' => $data['client_branch_id'] ?? 0,
-                    'name' => $val,
-                    'relationship' => $relationship,
-                    'gender' => $gender,
-                    'emp_status' => 'active',
-                    'created_by' => get_session_userid(),
-                    'emp_code' => $random_code, // Use the same random code for all
-                    'id' => $data['emp_id'][$index] ?? null
-                ];
-
-                $emp_ids[] = $data['emp_id'][$index] ?? 0;
-            }
-
-
-            // print_r($emp_data); die;
-
-            // Separate data into insert and update batches
-            $insertData = array_filter($emp_data, function ($detail) {
-                return empty($detail['id']); // Only insert new records
-            });
-
-            $updateData = array_filter($emp_data, function ($detail) {
-                return !empty($detail['id']); // Only update existing records
-            });
-
-            // Insert new records
-            if (!empty($insertData)) {
-                $this->employeeModel->insertBatch($insertData);
-            }
-
-            // Update existing records
-            if (!empty($updateData)) {
-                $this->employeeModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
-            }
-
-            return $emp_ids;
-        }
-    }
-
-    private function InsertIndividualEmpPolicyTable($emp_ids, $client_policy_id)
-    {
-        if (!empty($emp_ids)) {
-
-            $emp_policy_data = [];
-
-            foreach ($emp_ids as $index => $emp_id) {
-
-                $emp_policy_data[] = [
-                    'employee_id' => $emp_id ?? 0,
-                    'client_policy_id' => $client_policy_id ?? 0,
-                    'created_by' => get_session_userid(),
-                    'status' => 'active',
-                ];
-            }
-
-            // print_r($emp_policy_data); die;
-
-            // Insert new records
-            if (!empty($emp_policy_data)) {
-                $this->employeePolicyModel->insertBatch($emp_policy_data);
-            }
-
-
-            return true;
-        }
-    }
-
-    private function respondSuccess($id, $message, $data)
-    {
-        return $this->respond(['status' => true, 'pt_id' => $id, 'message' => $message, 'data' => $data], 200);
-    }
-
-    private function respondError($message)
-    {
-        return $this->respond(['status' => false, 'message' => $message], 200);
-    }
-    // policy Transaction Create function End
-
-    // Get the Single Inception Tranction data for edit
-    public function getInceptionDataForEdit($id)
-    {
-        $data = $this->policyTransactionModel
-            ->select('
-                        policy_transaction.*, 
-                        clients.short_name as client_short_name, 
-                        clients.client_type, 
-                        clients.entity_type_id, 
-                        policy_type.policy_type,
-                        client_policy.tpa_id as master_tpa_id,
-                        client_policy.tpa_branch_id as master_tpa_branch_id,
-                        client_policy.policy_type_id as master_policy_type_id,
-                        client_policy.is_addon,
-                        client_policy.base_policy,
-                        ( 
-                            select last_action_date
-                            from policy_transaction_status
-                            where policy_tran_id = policy_transaction.id
-                            and status = policy_transaction.status
-                            order by id desc
-                            limit 1
-
-                        ) as last_action_date
-                    ')
-            ->join('clients', 'clients.id = policy_transaction.client_id')
-            ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
-            ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
-            ->where('policy_transaction.id', $id)
-            ->where('policy_transaction.is_active', 1)
-            ->first();
-
-        $data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '')
-            ? date('d/m/Y h:i:s A', strtotime($data['created_at']))
-            : null;
-
-        $data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '')
-            ? date('d/m/Y h:i:s A', strtotime($data['updated_at']))
-            : null;
-
-
-        if (!empty($data['policy_issue_date'])) {
-            $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['policy_start_date'])) {
-            $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['policy_end_date'])) {
-            $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['renewal_date'])) {
-            $data['renewal_date'] =  change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['rollover_date'])) {
-            $data['rollover_date'] =  change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['endorse_eff_date'])) {
-            $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['last_action_date'])) {
-            $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['month'])) {
-            $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
-        } else {
-            $data['month'] = null;
-        }
-
-        // print_r($data); die;
-
-        $data['renewal_policy'] = $this->clientPolicyModel
-            ->select('client_policy.*, policy_type.policy_type')
-            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
-            ->where('client_policy.client_id', $data['client_id'])
-            ->where('client_policy.client_branch_id', $data['client_branch_id'])
-            ->where('client_policy.is_active', 1)
-            ->findAll();
-
-        $data['base_policy_data'] = $this->clientPolicyModel
-            ->select('client_policy.*, policy_type.policy_type')
-            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
-            ->where('client_policy.client_id', $data['client_id'])
-            ->where('client_policy.client_branch_id', $data['client_branch_id'])
-            ->whereIn('client_policy.policy_type_id', [2, 3])
-            ->where('client_policy.is_active', 1)
-            ->findAll();
-
-        $pt_bp_amt = $this->PTCOShareDetailsModel
-            ->select('bp_amt, amount')
-            ->where('pt_id', $id)
-            ->where('co_share_type', 1)
-            ->where('is_active', 1)
-            ->first();
-
-        // dd(db_connect()->getLastQuery() ,$pt_bp_amt);
-        $data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
-
-
-        $ptFileQuery = $this->PTFileModel
-            ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
-            ->where('pt_files.pt_id', $id)
-            ->where('pt_files.is_active', 1);
-
-        if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
-
-            if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
-                $ptFileQuery->where('pt_files.created_by', get_session_userid());
-            }
-        }
-
-        $data['pt_files'] = $ptFileQuery->findAll();
-
-
-
-        $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
-            ->select("
-                    pt_co_share_details.*,
-            
-                    (
-                        SELECT
-                            COUNT(*)
-                        FROM
-                            co_share_stmt_details
-                        WHERE
-                            co_share_stmt_details.co_share_id = pt_co_share_details.id
-                            AND co_share_stmt_details.is_active = 1
-                    ) AS record_count,
-
-                        (
-                            SELECT 
-                                SUM(actual_bp_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_bp_amount,
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tp_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tp_amount,
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tep_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tep_amount,
-                        
-                        (
-                            SELECT 
-                                SUM(actual_bp_per) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_bp_percentage,
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tp_per) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tp_percentage,
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tep_per) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tep_percentage,
-                        
-                        
-                        (
-                            SELECT 
-                                SUM(actual_bp_brokerage_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_bp_brokerage_amount,
-                        
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tp_brokerage_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tp_brokerage_amount,
-                        
-                        
-                        (
-                            SELECT 
-                                SUM(actual_tep_brokerage_amt) 
-                            FROM 
-                                co_share_stmt_details 
-                            WHERE 
-                                co_share_id = pt_co_share_details.id 
-                                AND is_active = 1
-                                
-                        ) AS actual_tep_brokerage_amount
-
-                ")
-            ->where('pt_id', $id)
-            ->where('is_active', 1)
-            ->orderBy('id', 'asc')
-            ->findAll();
-
-        $data['emp_data'] = $this->employeeModel
-            ->select('employees.*, employee_polices.id as emp_policy_id')
-            ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
-            ->where('employees.client_id', $data['client_id'])
-            ->where('employees.is_active', 1)->findAll();
-        // $data['client_kyc']   = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
-
-        $clientController = new ClientController();
-        $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
-        $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
-
-        $data['vehicle_docs'] = $this->clientKYCDocsModel
-            ->where('client_id',  $data['client_id'])
-            ->where('vehicle_id', $data['vehicle_id'])
-            ->findAll();
-
-        // print_r( $data['pt_co_share_details']); die;
-        // return $data;
-        if ($data) {
-            return $this->respond(['status' => true, 'data' => $data], 200);
-        } else {
-            return $this->respond(['status' => false], 200);
-        }
-    }
-
-    public function removePolicyTransaction($id, $type = 0)
-    {   
-        if ($id) {
-            $data['is_active']  = 0;
-            $policy_transaction_data = $this->policyTransactionModel->where('id', $id)->first();
-            if($policy_transaction_data['policy_type_id'] > 7 && $type == 0){
-
-                $this->policyTransactionModel->where('id', $id)->set($data)->update();
-                $this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
-                $this->clientPolicyModel->where('id', $policy_transaction_data['client_policy_id'])->set($data)->update();
-                $this->policyTransactionModel->where('client_policy_id', $policy_transaction_data['client_policy_id'])->set($data)->update();
-
-                $cd_transaction_model = new ClientDepositModel();
-                $cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
-
-            }else{
-                $this->policyTransactionModel->where('id', $id)->set($data)->update();
-                $this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
+                $client_data = $this->clientModel->where('id', $data['client_id'])->first();
+                $data['client_kyc'] = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
                 
-                $cd_transaction_model = new ClientDepositModel();
-                $cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
+                $clientController = new ClientController();
+                $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
+                $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
+                $data['entity_type_id'] =  $client_data['entity_type_id'];
 
+                return $this->respondSuccess($insert, "Policy transaction created successfully", $data);
             }
-            return $this->respond(['status' => true, 'code' => 200, 'message' => 'Policy Transaction removed successfully'], 200);
-        } else {
 
-            return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove policy transaction'], 200);
-        }
-    }
-
-    //function for soft delete for pt_co_share_details records
-    public function removePtCoShareRecords($primaryKeys, $pt_id)
-    {
-        if (empty($primaryKeys)) {
-            return false;
+            return $this->respondError("Failed to create policy transaction");
         }
 
-        // Convert array to a comma-separated string of placeholders for query binding
-        $placeholders = implode(',', array_fill(0, count($primaryKeys), '?'));
+        private function updateInceptionPolicy($id, $data)
+        {
+            // print_r($data); die;
+            $old_pt_data = $this->policyTransactionModel->where('is_active', 1)->where("id", $id)->first();
+            $old_pt_co_share_data = $this->PTCOShareDetailsModel->where('is_active', 1)->where("id", $id)->first();
+            if ($this->policyTransactionModel->update($id, $data)) {
 
-        // Prepare the query with proper binding
-        $sql = "UPDATE pt_co_share_details SET is_active = 0 WHERE pt_id = ? AND id NOT IN ($placeholders)";
+                $this->insertTransactionStatus($id, $data, 1);
+                $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
 
-        // Merge pt_id with primary keys for binding
-        $params = array_merge([$pt_id], $primaryKeys);
+                if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
 
-        // Execute the query with bound parameters
-        return db_connect()->query($sql, $params);
-    }
+                    $this->insertOrUpdateCoShareDetails($data, $id);
 
+                    if ($data['ct_type'] == 1) {
+                        $this->policyTransactionModel->update($id, ['client_policy_id' => $data['client_policy_id']]);
+                    }
 
-    //------------------------------------------------------------------------------------------------
+                    if (empty($data['client_policy_id']) || $data['client_policy_id'] == 0) {
 
-    // Policy Transaction Endorsement
-    public function viewEndorsement()
-    {
-        // echo '
';
-        // !dd($this->getEndorsementDataForEdit(17));
-        $bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
-        $data['tab_name'] = 'Endorsement';
-        $data['page_name'] = 'Endorsement';
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
-        $data['client_type'] = [1 => 'Group', 2 => 'Individual'];
+                        if ($data['ct_type'] == 2) {
+                            $client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
+                            $client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
+                            $this->policyTransactionModel->update($id, ['client_policy_id' => $client_policy_id]);
+                            $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
+                        }
+                    } else {
+                        if (isset($data['emp_policy_id']) && !empty($data['emp_policy_id'][0])) {
+                            $this->InsertIndividualEmpPolicyTable($emp_data, $data['client_policy_id']);
+                        }
+                    }
 
-        $data['policy_status'] = [
-            'under_process' => 'Under Process',
-            'client_pending' => 'Client Pending',
-            'insurer_pending' => 'Insurer Pending',
-            'co_insurer_pending' => 'Co-Insurer Pending',
-            'tpa_pending' => 'TPA Pending',
-            'validated' => 'Validated',
-            'cancelled' => 'Cancelled',
-            'instalment_pending' => 'Instalment Pending',
-            'completed' => 'Completed',
-        ];
+                    // if($old_pt_data['status'] != "completed"){
+                    //     if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
+                    //         if ($data['client_type'] == 1 && $data['is_cd_reduce_from_bds'] == 1) {
+                    //             $this->processCompletedStatus($data, $data['client_policy_id'], $data['insurer_id'], $id);
+                    //         }
+                    //     }
+                    // }
 
-        $data['invoice_status'] = [
-            'yet_to_generate' => 'Pending',
-            'generated' => 'Generated',
-            'send' => 'Sent',
-            'recived' => 'Payment Received',
-        ];
+                    $data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $id)->where('is_active', 1)->findAll();
+                }
 
-        $data['action_type'] = [
-            'addition' => 'Addition',
-            'deletion' => 'Deletion',
-            'addition_deletion' => 'Addition & Deletion',
-            'si_enhancement' => 'SI Enhancement',
-            'combo_a_d_si' => 'Combo A, D & SI',
-            'correction' => 'Correction',
-            'baby_addition' => 'Baby Addition',
-            'policy_instalment' => 'Policy Instalment',
-            'addition_inception' => 'Addition-Inception',
-            'bds_correction' => 'BDS Correction',
-            'policy_correction' => 'Policy Correction',
-            'policy_cancellation' => 'Policy Cancellation',
-        ];
+                if(isset($data['cd_amt_changed']) && !empty($data['cd_amt_changed'])){
+                    $policy_data = $this->policyTransactionModel->where('is_active', 1)->where('id', $id)->first();
+                    $this->cdCorrection($policy_data, $data['cd_amt_changed'], $id);
+                }
 
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-        ];
+                $client_data = $this->clientModel->where('id', $data['client_id'])->first();
+                $data['client_kyc']       = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
+                
+                $clientController = new ClientController();
+                $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
+                $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
 
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-        $status = $this->request->getGet('status');
+                $data['entity_type_id'] =  $client_data['entity_type_id'];
 
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-        $status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;
-
-        if($bds_edit_pt_id == null){
-            $data['endorsement_data_list'] = $this->policyTransactionModel->getEndorsementTranctionListData($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status);
-        }else{
-            $data['endorsement_data_list'] = [];
-        }
-        $data['client'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        // $data['tpa']           = $this->tpaModel->where('is_active', 1)->findAll();
-        $data['insurer_branch']      = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
-        $data['tpa']           = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
-        list($policyList, $policyListByClient) = $this->getPolicyForEndorsment();
-
-        $data['endorsementPolicies'] = $policyList;
-        $data['endorsementPolicyListByClient'] = $policyListByClient;
-
-        // dd($data);
-        // print_r($data['endorsementPolicies']);die();
-
-        $this->loadLayout('policy_transaction_endorsement_list', $data);
-    }
-
-    public function createEndorsementPolicy()
-    {
-        $id = $this->request->getPost('id');
-        $data = $this->preparePolicyTransactionData();
-        $data['status'] = 'completed';
-        // print_r($data); die;
-
-        if (!$id) {
-            return $this->insertEndorsementTransaction($data);
-        } else {
-            return $this->updateEndorsementTransaction($id, $data);
-        }
-    }
-
-    private function preparePolicyTransactionData()
-    {
-        $data = $this->request->getPost();
-
-        // echo '
';
-        // print_r($data); 
-        // die;
-
-        if (!isset($data['policy_with_corr'])) {
-            $data['policy_with_corr'] = 0;
-        } elseif ($data['policy_with_corr']) {
-            $data['policy_with_corr'] = 1;
-        }
-
-        // if (!isset($data['is_cd_reduce_from_bds'])) {
-        //     $data['is_cd_reduce_from_bds'] = 0;
-        // } elseif ($data['is_cd_reduce_from_bds']) {
-        //     $data['is_cd_reduce_from_bds'] = 1;
-        // }
-
-        if (empty($data['data_received_date'])) {
-            $data['data_received_date'] = null;
-        } else {
-            $data['data_received_date'] =  change_date_format($data['data_received_date'], 'd/m/Y', 'Y-m-d');
-        }
-
-        if (empty($data['policy_issue_date'])) {
-            $data['policy_issue_date'] = null;
-        } else {
-            $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'd/m/Y', 'Y-m-d');
-        }
-
-        if (empty($data['endorse_eff_date'])) {
-            $data['endorse_eff_date'] = null;
-        } else {
-            $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'd/m/Y', 'Y-m-d');
-        }
-
-        if (empty($data['install_due_date'])) {
-            $data['install_due_date'] = null;
-        } else {
-            $data['install_due_date'] =  change_date_format($data['install_due_date'], 'd/m/Y', 'Y-m-d');
-        }
-
-        if (!empty($data['month'])) {
-            $month = '01/' . $data['month'];
-            $data['month'] =  change_date_format($month, 'd/M/Y', 'Y-m-d');
-        }
-
-        if (empty($data['last_action_date'])) {
-            $data['last_action_date'] = null;
-        } else {
-            $data['last_action_date'] = change_date_format($data['last_action_date']);
-        }
-
-        // print_r($data); die;   
-
-        // Separate Insurer and TPA Branch IDs and IDs
-        if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
-            list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
-            if (isset($data['tpa']) && !empty($data['tpa'])) {
-                list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
+                return $this->respondSuccess($id, "Policy transaction updated successfully", $data);
             }
+
+            return $this->respondError("Failed to update policy transaction");
         }
 
-        $issue_type = $this->policyTransactionModel
-            ->where('action_type', 'inception')
-            ->where('client_id', $this->request->getPost('client_id'))
-            // ->where('client_policy_id', $this->request->getPost('client_policy_id'))
-            ->where('id', $this->request->getPost('client_policy_id'))
-            ->where('policy_transaction.is_active', 1)
-            ->first();
+        private function insertOrUpdateCoShareDetails($data, $pt_id)
+        {
+            // Prepare data for insertion and updating
+            $coShareDetails = [];
+            if (isset($data['co_share_id']) && !empty($data['co_share_id'])) {
+                $this->removePtCoShareRecords($data['co_share_id'], $pt_id);
+            }
 
-        $data['tsi'] = generate_tsi_code($issue_type['issue_type'] ?? 1);
+            if (isset($data['follow_insurer_id'])) {
 
-        if (!isset($data['client_branch_id']) || $data['client_branch_id'] == "") {
-            $client_branch_id = $issue_type['client_branch_id'];
-        }else{
-            $client_branch_id = $data['client_branch_id'];
+                foreach ($data['follow_insurer_id'] as $index => $insurer) {
+
+                    // Separate the insurer and insurer branch
+                    if (isset($insurer) && !empty($insurer)) {
+                        list($insurer_branch_id, $insurer_id) = explode('-', $insurer);
+                    } else {
+                        $insurer_branch_id = null;
+                        $insurer_id = null;
+                    }
+
+                    if ($data['bro_payable_by'] == 1) {
+                        $cop_amt = isset($data['co_premium'][$index]) && ($data['co_premium'][$index] != "0.00" && !empty($data['co_premium'][$index])) ? $data['co_premium'][$index] : ($data['base_premium'][$index] ?? 0);
+                        // print_r($cop_amt);die();
+                    } else {
+                        $cop_amt = $data['co_premium'][$index] ?? 0;
+                    }
+
+                    // Prepare each co-share detail entry
+                    $coShareDetails[] = [
+                        'pt_id' => $pt_id,
+                        'insurer_id' => $insurer_id ?? 0,
+                        'insurer_branch_id' => $insurer_branch_id ?? 0,
+                        'co_share_type' => $data['co_share_type'][$index] ?? 1,
+                        'co_share_per' => $data['co_share_per'][$index] ?? 0,
+                        'bp_amt' => $data['base_premium'][$index] ?? 0,
+                        'bp_gst_amt' => $data['gst_amount'][$index] ?? 0,
+                        'bp_igst' => $data['igst'][$index] ?? 0,
+                        'bp_sgst' => $data['sgst'][$index] ?? 0,
+                        'bp_cgst' => $data['cgst'][$index] ?? 0,
+                        'tp_amt' => $data['tp_premium'][$index] ?? 0,
+                        'tep_amt' => $data['ter_premium'][$index] ?? 0,
+                        'cotp_amt' => $data['co_tp_premium'][$index] ?? 0,
+                        'cotep_amt' => $data['co_ter_premium'][$index] ?? 0,
+                        'agreed_amt' => $data['agreed_amount'][$index] ?? 0,
+                        'agreed_bp_per' => $data['agreed_bp'][$index] ?? 0,
+                        'agreed_tp_per' => $data['agreed_tp'][$index] ?? 0,
+                        'agreed_tep_per' => $data['agreed_ter'][$index] ?? 0,
+                        'standerd_bp_per' => $data['standard_bp'][$index] ?? 0,
+                        'standerd_tp_per' => $data['standard_tp'][$index] ?? 0,
+                        'standerd_tep_per' => $data['standard_ter'][$index] ?? 0,
+                        'actual_bp_amt' => $data['actual_bp_amt'][$index] ?? 0,
+                        'actual_tp_amt' => $data['actual_tp_amt'][$index] ?? 0,
+                        'actual_tep_amt' => $data['actual_tep_amt'][$index] ?? 0,
+                        'actual_bp_per' => $data['actual_bp_per'][$index] ?? 0,
+                        'actual_tp_per' => $data['actual_tp_per'][$index] ?? 0,
+                        'actual_tep_per' => $data['actual_tep_per'][$index] ?? 0,
+                        'actual_bp_brokerage_amt' => $data['actual_bp_brokerage_amt'][$index] ?? 0,
+                        'actual_tp_brokerage_amt' => $data['actual_tp_brokerage_amt'][$index] ?? 0,
+                        'actual_tep_brokerage_amt' => $data['actual_tep_brokerage_amt'][$index] ?? 0,
+                        'exp_amt' => isset($data['exp_amt'][$index]) && !empty($data['exp_amt'][$index]) ? $data['exp_amt'][$index] : expected_amount_calc($data, $index),
+                        'amount' => $data['total'][$index] ?? 0,
+                        'stamp_duty' => $data['stamp_duty'][$index] ?? 0,
+                        'cop_amt' => $cop_amt,
+                        'variance' => $data['variance'][$index] ?? 0,
+                        'reward' => $data['reward'][$index] ?? null,
+                        'created_by' => get_session_userid() ?? null,
+                        'updated_by' => get_session_userid() ?? null,
+                        'id' => $data['co_share_id'][$index] ?? null, // Assuming this is the ID to identify existing records
+                        'follower_policy_no' => $data['follower_policy_no'][$index] ?? null,
+                        'non_comm_per_amt' => $data['non_comm_per_amt'][$index] ?? null,
+                    ];
+                }
+
+                // print_r($pt_id); 
+                // print_r($coShareDetails); 
+                // die;
+
+                // Separate data into insert and update batches
+                $insertData = array_filter($coShareDetails, function ($detail) {
+                    return empty($detail['id']); // Only insert new records
+                });
+
+                $updateData = array_filter($coShareDetails, function ($detail) {
+                    return !empty($detail['id']); // Only update existing records
+                });
+
+                // Insert new records
+                if (!empty($insertData)) {
+                    $this->PTCOShareDetailsModel->insertBatch($insertData);
+                }
+
+                // Update existing records
+                if (!empty($updateData)) {
+                    $this->PTCOShareDetailsModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
+                }
+
+                // print_r($this->PTCOShareDetailsModel->getLastQuery()); die;
+                // print_r($coShareDetails); 
+                // die;
+
+                return true;
+            }
+
+            // print_r($data); 
+            // die;
         }
 
-        $data['is_cd_reduce_from_bds'] = (isset($issue_type['policy_type_id']) && $issue_type['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
+        private function prepareClientPolicyInsertData($data)
+        {
+            return [
+                'client_id' => $data['client_id'] ?? null,
+                'insurer_id' => $data['insurer_id'] ?? null,
+                'insurer_branch_id' => $data['insurer_branch_id'] ?? null,
+                'tpa_id' => $data['tpa_id'] ?? null,
+                'tpa_branch_id' => $data['tpa_branch_id'] ?? null,
+                'policy_type_id' => $data['policy_type_id'] ?? null,
+                'policy_start_date' => $data['policy_start_date'] ?? null,
+                'policy_end_date' => $data['policy_end_date'] ?? null,
+                'policy_status' => 1,
+                'is_addon' => $data['is_addon'] ?? null,
+                'base_policy' => $data['base_policy'] ?? 0,
+                'created_by' => get_session_userid(),
+                'policy_no' => $data['policy_no'] ?? null,
+                'client_branch_id' => $data['client_branch_id'] ?? 0,
+                'cd_ac_pk' => $data['cd_ac_no'] ?? null,
+                'gst' => 18,
+                'policy_entry_from' => 2,
+            ];
+        }
 
-        // if($data['bro_payable_by'] == ""){
-        //     $data['bro_payable_by'] = $issue_type['bro_payable_by'];
-        // }
+        private function insertTransactionStatus($policyTranId, $data, $statusType)
+        {
+            $statusData = [
+                'policy_tran_id' => $policyTranId,
+                'status' => $data['status'],
+                'last_action_date' => $data['last_action_date'],
+                'status_type' => $statusType,
+                'created_by' => get_session_userid(),
+            ];
+            $this->policyTransactionStatusModel->insert($statusData);
+        }
 
-        if (!$data['id']) {
+        private function processCompletedStatus($data, $client_policy_id, $insurer_id, $policyTranId)
+        {
+            $totalAmount = (int)$data['total'][0] ?? 0;
+            $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited for the ' . $data['emp_count'] . ' employees at Inception (BDS).';
 
-            $data += [
-                'issuer' => 2,
-                'issuer_branch' => $data['issuer_branch'] ?? 1,
-                'client_type' => $data['client_type'] ?? $issue_type['client_type'] ?? null,
-                'policy_type_id' => $issue_type['policy_type_id'] ?? null,
-                'issue_type' => $issue_type['issue_type'] ?? null,
-                'source_client_policy_id' => $issue_type['source_client_policy_id'] ?? null,
-                'cd_ac_no' => isset($data['cd_ac_no']) && !empty($data['cd_ac_no']) ? $data['cd_ac_no'] : $issue_type['cd_ac_no'] ?? null,
-                'cd_ac_pk' => isset($data['cd_ac_pk']) && !empty($data['cd_ac_pk']) ? $data['cd_ac_pk'] : $issue_type['cd_ac_pk'] ?? null,
-                // 'policy_issue_date' => $issue_type['policy_issue_date'] ?? null,
-                'policy_start_date' => $issue_type['policy_start_date'] ?? null,
-                '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' =>  $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,
-                'links' =>  $issue_type['links'] ?? null,
-                'stage' => $issue_type['stage'] ?? null,
-                'etat' => $issue_type['etat'] ?? null,
-                'etat_band' => $issue_type['etat_band'] ?? null,
-                'edate' => $issue_type['edate'] ?? null,
-                'renewal_date' => $issue_type['renewal_date'] ?? null,
-                'rollover_date' => $issue_type['rollover_date'] ?? null,
-                'policy_holder_name' => $issue_type['policy_holder_name'] ?? null,
-                'same_as_proposer' => $issue_type['same_as_proposer'] ?? 1,
-                'ref' => $issue_type['ref'] ?? null,
-                'spl' => $issue_type['spl'] ?? null,
-                'fund_received' => $issue_type['fund_received'] ?? null,
-                'listed_insurers' => $issue_type['listed_insurers'] ?? null,
-                'ppteam' => $issue_type['ppteam'] ?? null,
-                'sales_generated_by' => $issue_type['sales_generated_by'] ?? null,
-                'serviced_by' => $issue_type['serviced_by'] ?? null
+            $cdTransactionData = [
+                'amount' => $totalAmount,
+                'sub_type_id' => 4,
+                'client_id' => $data['client_id'],
+                'client_policy_id' => $client_policy_id ?? 0,
+                'endorsement_no' => null,
+                'cd_ac_no' => $data['cd_ac_no'] ?? null,
+                'insurer_id' => $insurer_id,
+                'description' => $description,
+                'transaction_type' => 'Debit',
+                'updated_by' => get_session_userid(),
+                'event_name' => 'inception',
+                'is_active' => 1,
+                'cd_ac_pk'  => $data['cd_ac_pk'],
+                'pt_id' => $policyTranId ?? null,
             ];
 
-            $data['client_branch_id'] = $client_branch_id;
+            $result = DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
+
+            if(isset($result) && $result['success'] == true){
+                $update_data['ct_tran_id'] = $result['insert_id'];
+                $this->policyTransactionModel->where('id', $policyTranId)->set($update_data)->update();
+            }
         }
 
-        // print_r($issue_type); 
-        // print_r($data); 
-        // die;
+        private function cdCorrection($data, $amt, $policyTranId)
+        {
+            $totalAmount = (int)($amt ?? 0);
+            $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited towards the difference arising from the change in the BDS base premium.';
 
-        return $data;
-    }
+            $cdTransactionData = [
+                'amount' => abs($totalAmount),
+                'sub_type_id' => 4,
+                'client_id' => $data['client_id'],
+                'client_policy_id' => $data['client_policy_id'] ?? 0,
+                'endorsement_no' => null,
+                'cd_ac_no' => $data['cd_ac_no'] ?? null,
+                'insurer_id' => $data['insurer_id'],
+                'description' => $description,
+                'transaction_type' => $totalAmount < 0 ? 'Credit' : 'Debit',
+                'updated_by' => get_session_userid(),
+                'event_name' => 'inception',
+                'is_active' => 1,
+                'cd_ac_pk'  => $data['cd_ac_pk'],
+                'pt_id' => $policyTranId ?? null,
+            ];
 
-    private function insertEndorsementTransaction($data)
-    {
-        $insert = $this->policyTransactionModel->insert($data);
-
-        if ($insert) {
-
-            $this->insertTransactionStatus($insert, $data, 1);
-            $this->handleCompletedStatus($data, $insert);
-            $this->insertOrUpdateCoShareDetails($data, $insert);
-
-            return $this->respond(['status' => true, 'message' => 'Endorsement transaction created successfully'], 200);
+            DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
         }
 
-        return $this->respond(['status' => false, 'message' => 'Endorsement transaction creation failed'], 400);
-    }
+        private function processInsertIndividualMemberInEmpTable($data)
+        {
+            // print_r($data);
+            if (isset($data['family_name']) && !empty($data['family_name'])) {
 
-    private function updateEndorsementTransaction($id, $data)
-    {   
-        $old_endorse_data =  $this->policyTransactionModel->where('id', $id)->where('is_active', 1)->first();
-        $update = $this->policyTransactionModel->where('id', $id)->set($data)->update();
+                $emp_data = [];
+                $emp_ids = [];
+                $random_code = generateRandomCode(); // Generate random code once
 
-        if ($update) {
+                foreach ($data['family_name'] as $index => $val) {
 
-            $this->insertTransactionStatus($id, $data, 1);
-            // if($old_endorse_data['status'] != "completed"){
-            //     $this->handleCompletedStatus($data, $id);
-            // }
-            $this->insertOrUpdateCoShareDetails($data, $id);
+                    // Determine the gender based on the relationship
+                    $relationship = $data['relationship'][$index] ?? '';
+                    $gender = 'M'; // Default to Male
+
+                    // Set gender based on relationship
+                    if (in_array($relationship, ['Mother', 'Daughter', 'Mother in law', 'Spouse'])) {
+                        $gender = 'F';
+                    }
+
+                    $emp_data[] = [
+                        'client_id' => $data['client_id'] ?? 0,
+                        'client_branch_id' => $data['client_branch_id'] ?? 0,
+                        'name' => $val,
+                        'relationship' => $relationship,
+                        'gender' => $gender,
+                        'emp_status' => 'active',
+                        'created_by' => get_session_userid(),
+                        'emp_code' => $random_code, // Use the same random code for all
+                        'id' => $data['emp_id'][$index] ?? null
+                    ];
+
+                    $emp_ids[] = $data['emp_id'][$index] ?? 0;
+                }
 
 
-            return $this->respond(['status' => true, 'message' => 'Endorsement transaction updated successfully'], 200);
+                // print_r($emp_data); die;
+
+                // Separate data into insert and update batches
+                $insertData = array_filter($emp_data, function ($detail) {
+                    return empty($detail['id']); // Only insert new records
+                });
+
+                $updateData = array_filter($emp_data, function ($detail) {
+                    return !empty($detail['id']); // Only update existing records
+                });
+
+                // Insert new records
+                if (!empty($insertData)) {
+                    $this->employeeModel->insertBatch($insertData);
+                }
+
+                // Update existing records
+                if (!empty($updateData)) {
+                    $this->employeeModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
+                }
+
+                return $emp_ids;
+            }
         }
 
-        return $this->respond(['status' => false, 'message' => 'Endorsement transaction update failed'], 400);
-    }
+        private function InsertIndividualEmpPolicyTable($emp_ids, $client_policy_id)
+        {
+            if (!empty($emp_ids)) {
 
-    private function handleCompletedStatus($data, $policy_tran_id)
-    {   
-        if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
+                $emp_policy_data = [];
 
-            $tolamt = (int) $data['total'][0] ?? 0;
+                foreach ($emp_ids as $index => $emp_id) {
 
-            if(!empty($tolamt)){
-                $description = 'The following amount of Rs. ' . round($tolamt, 2) . '/- has been' .
-                    ($data['action_type'] == 'deletion' ? ' Credit ' : ' Debit ') . 'from the policy transaction (BDS)';
-                
-                $cd_tranction_data = [
-                    'amount' => abs($tolamt),
-                    'sub_type_id' => $data['action_type'] == 'deletion' ? 3 : 4,
-                    'client_id' => $data['client_id'],
-                    'client_policy_id' => $data['client_policy_id'],
-                    'endorsement_no' => null,
-                    'cd_ac_no' => $data['cd_ac_no'] ?? null,
-                    'insurer_id' => $data['insurer_id'],
-                    'description' => $description,
-                    'transaction_type' => $data['action_type'] == 'deletion' ? 'Credit' : 'Debit',
-                    'updated_by' => get_session_userid(),
-                    'event_name' => $data['action_type'],
-                    'is_active' => 1,
-                    'cd_ac_pk' => $data['cd_ac_pk'] ?? null,
-                    'pt_id' => $policy_tran_id ?? null,
-                ];
+                    $emp_policy_data[] = [
+                        'employee_id' => $emp_id ?? 0,
+                        'client_policy_id' => $client_policy_id ?? 0,
+                        'created_by' => get_session_userid(),
+                        'status' => 'active',
+                    ];
+                }
 
-                $result = DepositHelper::saveDeposit($cd_tranction_data, get_session_userid());
+                // print_r($emp_policy_data); die;
 
-                if(isset($result['success']) && $result['success']){
-                    $update_data['ct_tran_id'] = $result['insert_id'];
-                    $this->policyTransactionModel->where('id', $policy_tran_id)->set($update_data)->update();
+                // Insert new records
+                if (!empty($emp_policy_data)) {
+                    $this->employeePolicyModel->insertBatch($emp_policy_data);
+                }
+
+
+                return true;
+            }
+        }
+
+        private function respondSuccess($id, $message, $data)
+        {
+            return $this->respond(['status' => true, 'pt_id' => $id, 'message' => $message, 'data' => $data], 200);
+        }
+
+        private function respondError($message)
+        {
+            return $this->respond(['status' => false, 'message' => $message], 200);
+        }
+        // policy Transaction Create function End
+
+        // Get the Single Inception Tranction data for edit
+        public function getInceptionDataForEdit($id)
+        {
+            $data = $this->policyTransactionModel
+                ->select('
+                            policy_transaction.*, 
+                            clients.short_name as client_short_name, 
+                            clients.client_type, 
+                            clients.entity_type_id, 
+                            policy_type.policy_type,
+                            client_policy.tpa_id as master_tpa_id,
+                            client_policy.tpa_branch_id as master_tpa_branch_id,
+                            client_policy.policy_type_id as master_policy_type_id,
+                            client_policy.is_addon,
+                            client_policy.base_policy,
+                            ( 
+                                select last_action_date
+                                from policy_transaction_status
+                                where policy_tran_id = policy_transaction.id
+                                and status = policy_transaction.status
+                                order by id desc
+                                limit 1
+
+                            ) as last_action_date
+                        ')
+                ->join('clients', 'clients.id = policy_transaction.client_id')
+                ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
+                ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
+                ->where('policy_transaction.id', $id)
+                ->where('policy_transaction.is_active', 1)
+                ->first();
+
+            $data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '')
+                ? date('d/m/Y h:i:s A', strtotime($data['created_at']))
+                : null;
+
+            $data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '')
+                ? date('d/m/Y h:i:s A', strtotime($data['updated_at']))
+                : null;
+
+
+            if (!empty($data['policy_issue_date'])) {
+                $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['policy_start_date'])) {
+                $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['policy_end_date'])) {
+                $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['renewal_date'])) {
+                $data['renewal_date'] =  change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['rollover_date'])) {
+                $data['rollover_date'] =  change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['endorse_eff_date'])) {
+                $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['last_action_date'])) {
+                $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
+            }
+
+            if (!empty($data['month'])) {
+                $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
+            } else {
+                $data['month'] = null;
+            }
+
+            // print_r($data); die;
+
+            $data['renewal_policy'] = $this->clientPolicyModel
+                ->select('client_policy.*, policy_type.policy_type')
+                ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
+                ->where('client_policy.client_id', $data['client_id'])
+                ->where('client_policy.client_branch_id', $data['client_branch_id'])
+                ->where('client_policy.is_active', 1)
+                ->findAll();
+
+            $data['base_policy_data'] = $this->clientPolicyModel
+                ->select('client_policy.*, policy_type.policy_type')
+                ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
+                ->where('client_policy.client_id', $data['client_id'])
+                ->where('client_policy.client_branch_id', $data['client_branch_id'])
+                ->whereIn('client_policy.policy_type_id', [2, 3])
+                ->where('client_policy.is_active', 1)
+                ->findAll();
+
+            $pt_bp_amt = $this->PTCOShareDetailsModel
+                ->select('bp_amt, amount')
+                ->where('pt_id', $id)
+                ->where('co_share_type', 1)
+                ->where('is_active', 1)
+                ->first();
+
+            // dd(db_connect()->getLastQuery() ,$pt_bp_amt);
+            $data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
+
+
+            $ptFileQuery = $this->PTFileModel
+                ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
+                ->where('pt_files.pt_id', $id)
+                ->where('pt_files.is_active', 1);
+
+            if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
+
+                if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
+                    $ptFileQuery->where('pt_files.created_by', get_session_userid());
                 }
             }
 
-        }
-    }
+            $data['pt_files'] = $ptFileQuery->findAll();
 
-    public function getEndorsementDataForEdit($id)
-    {
-        $data = $this->policyTransactionModel
-            ->select('
-                        policy_transaction.*, 
-                        clients.short_name as client_short_name, 
-                        clients.client_type, 
-                        ( 
-                            select last_action_date
-                            from policy_transaction_status
-                            where policy_tran_id = policy_transaction.id
-                            and status = policy_transaction.status
-                            order by id desc
-                            limit 1
 
-                        ) as last_action_date
-                    ')
-            ->join('clients', 'clients.id = policy_transaction.client_id')
-            ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
-            ->where('policy_transaction.id', $id)
-            ->where('policy_transaction.is_active', 1)
-            ->orderBy('id', 'asc')
-            ->first();
 
-        $pt_id = null;   
-
-        if(!empty($data)){
-            $inception_data = $this->policyTransactionModel
-                    ->where('policy_no', $data['policy_no'])
-                    ->where('client_id', $data['client_id'])
-                    ->where('action_type', 'inception')
-                    ->first();
-            $pt_id = $inception_data['id'];
-        }    
-
-        if (!empty($data['policy_start_date'])) {
-            $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['policy_end_date'])) {
-            $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['data_received_date'])) {
-            $data['data_received_date'] =  change_date_format($data['data_received_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['policy_issue_date'])) {
-            $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['endorse_eff_date'])) {
-            $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['install_due_date'])) {
-            $data['install_due_date'] =  change_date_format($data['install_due_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['last_action_date'])) {
-            $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
-        }
-
-        if (!empty($data['month'])) {
-            $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
-        }
-
-        // print_r($data); die;
-
-        //get PT Co-Share Details
-        $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
-
-            ->select("
+            $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
+                ->select("
                         pt_co_share_details.*,
                 
                         (
@@ -1489,7 +900,7 @@ class PolicyTransactionController extends BaseController
                                 co_share_stmt_details.co_share_id = pt_co_share_details.id
                                 AND co_share_stmt_details.is_active = 1
                         ) AS record_count,
-    
+
                             (
                                 SELECT 
                                     SUM(actual_bp_amt) 
@@ -1591,1702 +1002,2291 @@ class PolicyTransactionController extends BaseController
                                     AND is_active = 1
                                     
                             ) AS actual_tep_brokerage_amount
-    
+
                     ")
-            ->where('pt_id', $id)
-            ->where('is_active', 1)
-            ->orderBy('id', 'asc')
-            ->findAll();
+                ->where('pt_id', $id)
+                ->where('is_active', 1)
+                ->orderBy('id', 'asc')
+                ->findAll();
 
-        // print_r($data['endorse_eff_date']); die;
+            $data['emp_data'] = $this->employeeModel
+                ->select('employees.*, employee_polices.id as emp_policy_id')
+                ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
+                ->where('employees.client_id', $data['client_id'])
+                ->where('employees.is_active', 1)->findAll();
+            // $data['client_kyc']   = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
 
-        $pt_bp_amt = $this->PTCOShareDetailsModel
-            ->select('bp_amt, amount')
-            ->where('pt_id', $id)
-            ->where('co_share_type', 1)
-            ->where('is_active', 1)
-            ->first();
+            $clientController = new ClientController();
+            $data['client_kyc_primary_table']  =  $clientController->generateKycPrimaryTable($data['client_id']);
+            $data['client_kyc_other_table']  =  $clientController->generateKycOthersTable($data['client_id']);
 
-        // dd(db_connect()->getLastQuery() ,$pt_bp_amt);
-        $data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
+            $data['vehicle_docs'] = $this->clientKYCDocsModel
+                ->where('client_id',  $data['client_id'])
+                ->where('vehicle_id', $data['vehicle_id'])
+                ->findAll();
 
-        if ($data) {
-            return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200);
-        } else {
-            return $this->respond(['status' => false], 200);
+            // print_r( $data['pt_co_share_details']); die;
+            // return $data;
+            if ($data) {
+                return $this->respond(['status' => true, 'data' => $data], 200);
+            } else {
+                return $this->respond(['status' => false], 200);
+            }
         }
-    }
 
-    //------------------------------------------------------------------------------------------------
+        public function removePolicyTransaction($id, $type = 0)
+        {   
+            if ($id) {
+                $data['is_active']  = 0;
+                $policy_transaction_data = $this->policyTransactionModel->where('id', $id)->first();
+                if($policy_transaction_data['policy_type_id'] > 7 && $type == 0){
 
-    //file upload function 
-    public function uploadFile()
-    {
-        $GoogleDriveController = new GoogleDriveController();
-        $files = $this->request->getFiles();
-        $doc_name = $this->request->getPost('doc_name[]');
-        $pt_id = $this->request->getPost('pt_id');
-        $client_policy_id = $this->request->getPost('client_policy_id');
-        $data = $this->request->getPost();
+                    $this->policyTransactionModel->where('id', $id)->set($data)->update();
+                    $this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
+                    $this->clientPolicyModel->where('id', $policy_transaction_data['client_policy_id'])->set($data)->update();
+                    $this->policyTransactionModel->where('client_policy_id', $policy_transaction_data['client_policy_id'])->set($data)->update();
 
-        $uploadFilePath = WRITEPATH . 'uploads/client_kyc_documents';
+                    $cd_transaction_model = new ClientDepositModel();
+                    $cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
 
-        $uploadData = [];
+                }else{
+                    $this->policyTransactionModel->where('id', $id)->set($data)->update();
+                    $this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
+                    
+                    $cd_transaction_model = new ClientDepositModel();
+                    $cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
 
-        foreach ($data['doc_name'] as $key => $docName) {
+                }
+                return $this->respond(['status' => true, 'code' => 200, 'message' => 'Policy Transaction removed successfully'], 200);
+            } else {
 
-            // Get the corresponding file for this document name
-            $file = $files['file'][$key];
+                return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove policy transaction'], 200);
+            }
+        }
 
-            if (!empty($docName) && $file->isValid() && !$file->hasMoved()) {
+        //function for soft delete for pt_co_share_details records
+        public function removePtCoShareRecords($primaryKeys, $pt_id)
+        {
+            if (empty($primaryKeys)) {
+                return false;
+            }
 
-                // Upload the file
-                $uploadedFileName = file_Upload($file, $uploadFilePath);
+            // Convert array to a comma-separated string of placeholders for query binding
+            $placeholders = implode(',', array_fill(0, count($primaryKeys), '?'));
 
-                if ($uploadedFileName) {
-                    // Prepare data for each document upload
-                    $docData = [
-                        'pt_id' => $pt_id,
-                        'doc_name' => $docName,
-                        'file_name' => $uploadedFileName,
-                        'created_by' => get_session_userid(),
+            // Prepare the query with proper binding
+            $sql = "UPDATE pt_co_share_details SET is_active = 0 WHERE pt_id = ? AND id NOT IN ($placeholders)";
+
+            // Merge pt_id with primary keys for binding
+            $params = array_merge([$pt_id], $primaryKeys);
+
+            // Execute the query with bound parameters
+            return db_connect()->query($sql, $params);
+        }
+
+
+        //------------------------------------------------------------------------------------------------
+
+        // Policy Transaction Endorsement
+        public function viewEndorsement()
+        {
+            // echo '
';
+            // !dd($this->getEndorsementDataForEdit(17));
+            $bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
+            $data['tab_name'] = 'Endorsement';
+            $data['page_name'] = 'Endorsement';
+            $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
+            $data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
+            $data['client_type'] = [1 => 'Group', 2 => 'Individual'];
+
+            $data['policy_status'] = [
+                'under_process' => 'Under Process',
+                'client_pending' => 'Client Pending',
+                'insurer_pending' => 'Insurer Pending',
+                'co_insurer_pending' => 'Co-Insurer Pending',
+                'tpa_pending' => 'TPA Pending',
+                'validated' => 'Validated',
+                'cancelled' => 'Cancelled',
+                'instalment_pending' => 'Instalment Pending',
+                'completed' => 'Completed',
+            ];
+
+            $data['invoice_status'] = [
+                'yet_to_generate' => 'Pending',
+                'generated' => 'Generated',
+                'send' => 'Sent',
+                'recived' => 'Payment Received',
+            ];
+
+            $data['action_type'] = [
+                'addition' => 'Addition',
+                'deletion' => 'Deletion',
+                'addition_deletion' => 'Addition & Deletion',
+                'si_enhancement' => 'SI Enhancement',
+                'combo_a_d_si' => 'Combo A, D & SI',
+                'correction' => 'Correction',
+                'baby_addition' => 'Baby Addition',
+                'policy_instalment' => 'Policy Instalment',
+                'addition_inception' => 'Addition-Inception',
+                'bds_correction' => 'BDS Correction',
+                'policy_correction' => 'Policy Correction',
+                'policy_cancellation' => 'Policy Cancellation',
+            ];
+
+            $data['date_type'] = [
+                'policy_issue_date' => 'Policy Issue Date',
+                'policy_start_date' => 'Policy Start Date',
+                'policy_end_date' => 'Policy End Date',
+            ];
+
+            //filter datas
+            $start_date = $this->request->getGet('start_date');
+            $end_date = $this->request->getGet('end_date');
+            $client_id = $this->request->getGet('client_id');
+            $insurer_id = $this->request->getGet('insurer_id');
+            $policy_type_id = $this->request->getGet('policy_type_id');
+            $date_type = $this->request->getGet('date_type');
+            $issuer = $this->request->getGet('issuer');
+            $status = $this->request->getGet('status');
+
+            $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
+            $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
+
+            $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
+            $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+            $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+            $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+            $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
+            $status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;
+
+            if($bds_edit_pt_id == null){
+                $data['endorsement_data_list'] = $this->policyTransactionModel->getEndorsementTranctionListData($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status);
+            }else{
+                $data['endorsement_data_list'] = [];
+            }
+            $data['client'] = $this->clientModel->where('is_active', 1)->findAll();
+            $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
+
+            $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
+            // $data['tpa']           = $this->tpaModel->where('is_active', 1)->findAll();
+            $data['insurer_branch']      = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
+            $data['tpa']           = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
+            list($policyList, $policyListByClient) = $this->getPolicyForEndorsment();
+
+            $data['endorsementPolicies'] = $policyList;
+            $data['endorsementPolicyListByClient'] = $policyListByClient;
+
+            // dd($data);
+            // print_r($data['endorsementPolicies']);die();
+
+            $this->loadLayout('policy_transaction_endorsement_list', $data);
+        }
+
+        public function createEndorsementPolicy()
+        {
+            $id = $this->request->getPost('id');
+            $data = $this->preparePolicyTransactionData();
+            $data['status'] = 'completed';
+            // print_r($data); die;
+
+            if (!$id) {
+                return $this->insertEndorsementTransaction($data);
+            } else {
+                return $this->updateEndorsementTransaction($id, $data);
+            }
+        }
+
+        private function preparePolicyTransactionData()
+        {
+            $data = $this->request->getPost();
+
+            // echo '
';
+            // print_r($data); 
+            // die;
+
+            if (!isset($data['policy_with_corr'])) {
+                $data['policy_with_corr'] = 0;
+            } elseif ($data['policy_with_corr']) {
+                $data['policy_with_corr'] = 1;
+            }
+
+            // if (!isset($data['is_cd_reduce_from_bds'])) {
+            //     $data['is_cd_reduce_from_bds'] = 0;
+            // } elseif ($data['is_cd_reduce_from_bds']) {
+            //     $data['is_cd_reduce_from_bds'] = 1;
+            // }
+
+            if (empty($data['data_received_date'])) {
+                $data['data_received_date'] = null;
+            } else {
+                $data['data_received_date'] =  change_date_format($data['data_received_date'], 'd/m/Y', 'Y-m-d');
+            }
+
+            if (empty($data['policy_issue_date'])) {
+                $data['policy_issue_date'] = null;
+            } else {
+                $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'd/m/Y', 'Y-m-d');
+            }
+
+            if (empty($data['endorse_eff_date'])) {
+                $data['endorse_eff_date'] = null;
+            } else {
+                $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'd/m/Y', 'Y-m-d');
+            }
+
+            if (empty($data['install_due_date'])) {
+                $data['install_due_date'] = null;
+            } else {
+                $data['install_due_date'] =  change_date_format($data['install_due_date'], 'd/m/Y', 'Y-m-d');
+            }
+
+            if (!empty($data['month'])) {
+                $month = '01/' . $data['month'];
+                $data['month'] =  change_date_format($month, 'd/M/Y', 'Y-m-d');
+            }
+
+            if (empty($data['last_action_date'])) {
+                $data['last_action_date'] = null;
+            } else {
+                $data['last_action_date'] = change_date_format($data['last_action_date']);
+            }
+
+            // print_r($data); die;   
+
+            // Separate Insurer and TPA Branch IDs and IDs
+            if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
+                list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
+                if (isset($data['tpa']) && !empty($data['tpa'])) {
+                    list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
+                }
+            }
+
+            $issue_type = $this->policyTransactionModel
+                ->where('action_type', 'inception')
+                ->where('client_id', $this->request->getPost('client_id'))
+                // ->where('client_policy_id', $this->request->getPost('client_policy_id'))
+                ->where('id', $this->request->getPost('client_policy_id'))
+                ->where('policy_transaction.is_active', 1)
+                ->first();
+
+            $data['tsi'] = generate_tsi_code($issue_type['issue_type'] ?? 1);
+
+            if (!isset($data['client_branch_id']) || $data['client_branch_id'] == "") {
+                $client_branch_id = $issue_type['client_branch_id'];
+            }else{
+                $client_branch_id = $data['client_branch_id'];
+            }
+
+            $data['is_cd_reduce_from_bds'] = (isset($issue_type['policy_type_id']) && $issue_type['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
+
+            // if($data['bro_payable_by'] == ""){
+            //     $data['bro_payable_by'] = $issue_type['bro_payable_by'];
+            // }
+
+            if (!$data['id']) {
+
+                $data += [
+                    'issuer' => 2,
+                    'issuer_branch' => $data['issuer_branch'] ?? 1,
+                    'client_type' => $data['client_type'] ?? $issue_type['client_type'] ?? null,
+                    'policy_type_id' => $issue_type['policy_type_id'] ?? null,
+                    'issue_type' => $issue_type['issue_type'] ?? null,
+                    'source_client_policy_id' => $issue_type['source_client_policy_id'] ?? null,
+                    'cd_ac_no' => isset($data['cd_ac_no']) && !empty($data['cd_ac_no']) ? $data['cd_ac_no'] : $issue_type['cd_ac_no'] ?? null,
+                    'cd_ac_pk' => isset($data['cd_ac_pk']) && !empty($data['cd_ac_pk']) ? $data['cd_ac_pk'] : $issue_type['cd_ac_pk'] ?? null,
+                    // 'policy_issue_date' => $issue_type['policy_issue_date'] ?? null,
+                    'policy_start_date' => $issue_type['policy_start_date'] ?? null,
+                    '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' =>  $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,
+                    'links' =>  $issue_type['links'] ?? null,
+                    'stage' => $issue_type['stage'] ?? null,
+                    'etat' => $issue_type['etat'] ?? null,
+                    'etat_band' => $issue_type['etat_band'] ?? null,
+                    'edate' => $issue_type['edate'] ?? null,
+                    'renewal_date' => $issue_type['renewal_date'] ?? null,
+                    'rollover_date' => $issue_type['rollover_date'] ?? null,
+                    'policy_holder_name' => $issue_type['policy_holder_name'] ?? null,
+                    'same_as_proposer' => $issue_type['same_as_proposer'] ?? 1,
+                    'ref' => $issue_type['ref'] ?? null,
+                    'spl' => $issue_type['spl'] ?? null,
+                    'fund_received' => $issue_type['fund_received'] ?? null,
+                    'listed_insurers' => $issue_type['listed_insurers'] ?? null,
+                    'ppteam' => $issue_type['ppteam'] ?? null,
+                    'sales_generated_by' => $issue_type['sales_generated_by'] ?? null,
+                    'serviced_by' => $issue_type['serviced_by'] ?? null
+                ];
+
+                $data['client_branch_id'] = $client_branch_id;
+            }
+
+            // print_r($issue_type); 
+            // print_r($data); 
+            // die;
+
+            return $data;
+        }
+
+        private function insertEndorsementTransaction($data)
+        {
+            $insert = $this->policyTransactionModel->insert($data);
+
+            if ($insert) {
+
+                $this->insertTransactionStatus($insert, $data, 1);
+                $this->handleCompletedStatus($data, $insert);
+                $this->insertOrUpdateCoShareDetails($data, $insert);
+
+                return $this->respond(['status' => true, 'message' => 'Endorsement transaction created successfully'], 200);
+            }
+
+            return $this->respond(['status' => false, 'message' => 'Endorsement transaction creation failed'], 400);
+        }
+
+        private function updateEndorsementTransaction($id, $data)
+        {   
+            $old_endorse_data =  $this->policyTransactionModel->where('id', $id)->where('is_active', 1)->first();
+            $update = $this->policyTransactionModel->where('id', $id)->set($data)->update();
+
+            if ($update) {
+
+                $this->insertTransactionStatus($id, $data, 1);
+                // if($old_endorse_data['status'] != "completed"){
+                //     $this->handleCompletedStatus($data, $id);
+                // }
+                $this->insertOrUpdateCoShareDetails($data, $id);
+
+
+                return $this->respond(['status' => true, 'message' => 'Endorsement transaction updated successfully'], 200);
+            }
+
+            return $this->respond(['status' => false, 'message' => 'Endorsement transaction update failed'], 400);
+        }
+
+        private function handleCompletedStatus($data, $policy_tran_id)
+        {   
+            if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
+
+                $tolamt = (int) $data['total'][0] ?? 0;
+
+                if(!empty($tolamt)){
+                    $description = 'The following amount of Rs. ' . round($tolamt, 2) . '/- has been' .
+                        ($data['action_type'] == 'deletion' ? ' Credit ' : ' Debit ') . 'from the policy transaction (BDS)';
+                    
+                    $cd_tranction_data = [
+                        'amount' => abs($tolamt),
+                        'sub_type_id' => $data['action_type'] == 'deletion' ? 3 : 4,
+                        'client_id' => $data['client_id'],
+                        'client_policy_id' => $data['client_policy_id'],
+                        'endorsement_no' => null,
+                        'cd_ac_no' => $data['cd_ac_no'] ?? null,
+                        'insurer_id' => $data['insurer_id'],
+                        'description' => $description,
+                        'transaction_type' => $data['action_type'] == 'deletion' ? 'Credit' : 'Debit',
+                        'updated_by' => get_session_userid(),
+                        'event_name' => $data['action_type'],
+                        'is_active' => 1,
+                        'cd_ac_pk' => $data['cd_ac_pk'] ?? null,
+                        'pt_id' => $policy_tran_id ?? null,
                     ];
 
-                    // $uploadFilePath = $uploadFilePath . '/' . $uploadedFileName;
+                    $result = DepositHelper::saveDeposit($cd_tranction_data, get_session_userid());
 
-                    // $GoogleDriveController->uploadFiletoGdrive(client_policy_id: $client_policy_id, doc_type: 'POLICY', file_path: $uploadFilePath, file_name: $uploadedFileName);
-
-                    // Insert into database
-                    $insert = $this->PTFileModel->insert($docData);
-
-                    if ($insert) {
-                        $uploadData[] = $docData;
+                    if(isset($result['success']) && $result['success']){
+                        $update_data['ct_tran_id'] = $result['insert_id'];
+                        $this->policyTransactionModel->where('id', $policy_tran_id)->set($update_data)->update();
                     }
                 }
+
             }
         }
 
-        // print_r($uploadData); die;
+        public function getEndorsementDataForEdit($id)
+        {
+            $data = $this->policyTransactionModel
+                ->select('
+                            policy_transaction.*, 
+                            clients.short_name as client_short_name, 
+                            clients.client_type, 
+                            ( 
+                                select last_action_date
+                                from policy_transaction_status
+                                where policy_tran_id = policy_transaction.id
+                                and status = policy_transaction.status
+                                order by id desc
+                                limit 1
 
-        // $uploadData = uploadFilesToGoogleDrive($files['file'], $doc_name, $pt_id);
+                            ) as last_action_date
+                        ')
+                ->join('clients', 'clients.id = policy_transaction.client_id')
+                ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
+                ->where('policy_transaction.id', $id)
+                ->where('policy_transaction.is_active', 1)
+                ->orderBy('id', 'asc')
+                ->first();
 
-        if (!empty($uploadData)) {
+            $pt_id = null;   
 
-            $ptFileQuery = $this->PTFileModel
-                ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
-                ->where('pt_files.pt_id', $pt_id)
-                ->where('pt_files.is_active', 1);
+            if(!empty($data)){
+                $inception_data = $this->policyTransactionModel
+                        ->where('policy_no', $data['policy_no'])
+                        ->where('client_id', $data['client_id'])
+                        ->where('action_type', 'inception')
+                        ->first();
+                $pt_id = $inception_data['id'];
+            }    
 
-            if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
-
-                if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
-                    $ptFileQuery->where('pt_files.created_by', get_session_userid());
-                }
+            if (!empty($data['policy_start_date'])) {
+                $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
             }
 
-            $data['pt_files'] = $ptFileQuery->findAll();
-
-            return $this->respond(['status' => true, 'message' => 'File uploaded successfully in G-Drive', 'data' => $data]);
-        } else {
-            return $this->respond(['status' => false, 'message' => 'Failed to upload file in G-Drive']);
-        }
-    }
-
-    // update Invoice Status 
-    public function updateInvoiceStatus()
-    {
-        $ids = $this->request->getPost('ids');
-        $ids = json_decode($ids);
-
-        // var_dump($ids); die;
-
-        $data['invoice_status'] = $this->request->getPost('invoice_status');
-        if ($this->request->getPost('invoice_status') == 'generated') {
-            $data['invoice_no'] = $this->request->getPost('invoice_no');
-        }
-
-
-        $update = $this->policyTransactionModel
-            ->whereIn('id', $ids)
-            ->set($data)
-            ->update();
-
-
-        if ($update) {
-
-            return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Invoice status updated successfully'], 200);
-        } else {
-            return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Failed to update invoice status'], 200);
-        }
-    }
-
-    public function removeCoShareData($id)
-    {
-        $this->myLogger->logme('error', 'PT Co Share Detailes Remove function called');
-
-        $data = [
-            'updated_by' => get_session_userid(),
-            'is_active' => 0
-        ];
-
-        $update = $this->PTCOShareDetailsModel->where('id', $id)->set($data)->update();
-
-        if ($update) {
-            return $this->respond(['status' => true, 'code' => 200, 'message' => 'Data removed successfully'], 200);
-        } else {
-            return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove data'], 200);
-        }
-    }
-
-    public function getPTCOShareCount($client_id, $client_policy_id)
-    {
-        $totalCount = $this->PTCOShareDetailsModel
-            ->select("
-                    pt_co_share_details.*,
-                    policy_transaction.bro_payable_by,
-                    policy_transaction.cd_ac_pk,
-                    (
-                        select cd_ac_no
-                        from cd_master
-                        where id = policy_transaction.cd_ac_pk
-                    ) as cd_account_no,
-                    (
-                        select balance
-                        from cash_deposit
-                        where cd_ac_pk = policy_transaction.cd_ac_pk
-                        and is_active = 1
-                        order by id desc
-                        limit 1
-                    ) as cd_amount,
-                ")
-            ->join('policy_transaction', 'policy_transaction.id = pt_co_share_details.pt_id')
-            ->where('policy_transaction.client_id', $client_id)
-            // ->where('policy_transaction.client_policy_id', $client_policy_id)
-            ->where('policy_transaction.id', $client_policy_id)
-            ->where('policy_transaction.action_type', 'inception')
-            ->where('policy_transaction.is_active', 1)
-            ->findAll();
-
-        $is_copay_yes = $this->policyTransactionModel
-            ->where('client_id', $client_id)
-            // ->where('client_policy_id', $client_policy_id)
-            ->where('id', $client_policy_id)
-            ->where('action_type', 'inception')
-            ->where('is_active', 1)
-            ->first();
-
-        $cd_ac_no = db_connect()->table('cd_master')->where('id', $is_copay_yes['cd_ac_pk'] ?? null)->get()->getRowArray();
-
-        if ($totalCount) {
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $totalCount, 'is_copay_yes' => $is_copay_yes, "cd_master_data" => $cd_ac_no], 200);
-        } else {
-            $insurer_data = $this->clientPolicyModel->where('id', $client_policy_id)->where('is_active', 1)->first();
-            return $this->respond(['status' => false, 'code' => 404, 'message' => 'There is no policy inception data.'], 200);
-        }
-    }
-
-    public function checkInvoiceStatus($pt_id)
-    {
-        $data = $this->policyTransactionModel
-            ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id')
-            ->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id')
-            ->where('policy_transaction.id', $pt_id)
-            ->where('policy_transaction.is_active', 1)
-            ->where('pt_co_share_details.is_active', 1)
-            ->where('pt_co_share_details.statement_id IS NOT NULL')
-            ->where('insurer_statements.invoice_no IS NOT NULL')
-            ->countAllResults();
-
-        if ($data) {
-            return $this->respond(['status' => true, 'count' => $data,  'code' => 200], 200);
-        } else {
-            return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
-        }
-    }
-
-    public function getBasePolicy($client_id, $client_branch_id)
-    {
-        $data = $this->clientPolicyModel
-            ->select('client_policy.*, policy_type.policy_type')
-            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
-            ->where('client_policy.client_id', $client_id)
-            ->where('client_policy.client_branch_id', $client_branch_id)
-            ->whereIn('client_policy.policy_type_id', [2, 3])
-            ->where('client_policy.is_active', 1)
-            ->findAll();
-
-        if ($data) {
-            return $this->respond(['status' => true, 'data' => $data,  'code' => 200], 200);
-        } else {
-            return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
-        }
-    }
-
-    //---------------------------------------------------------------------------------------------------
-
-    //get BDS Reports data old function
-    public function reportBDSOld()
-    {
-        $data['tab_name'] = 'BDS Report';
-        $data['page_name'] = 'BDS Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['client_type'] = [1 => 'Group', 2 => 'Individual'];
-        $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
-        $data['policy_status'] = [
-            'pending' => 'Pending',
-            'exported_to_insurer' => 'Exported to Insurer',
-            'imported_from_insurer' => 'Imported from Insurer',
-            'exported_to_tpa' => 'Exported to TPA',
-            'imported_from_tpa' => 'Imported from TPA',
-            'completed' => 'Completed'
-        ];
-        $data['invoice_status_array'] = [
-            'yet_to_generate' => 'Yet to Generate',
-            'generated' => 'Generated',
-            'send' => 'Send',
-            'recived' => 'Recived',
-        ];
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-        ];
-
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-
-
-        //Actual data for the list
-        $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
-        // dd($data);
-
-        $this->loadLayout('report_bds_filter', $data);
-    }
-
-    //get BDS Reports data New Function
-    public function reportBDS()
-    {
-
-        $data['tab_name'] = 'BDS Report';
-        $data['page_name'] = 'BDS Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['client_type'] = [1 => 'Group', 2 => 'Individual'];
-        $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
-        $data['policy_status'] = [
-            'pending' => 'Pending',
-            'exported_to_insurer' => 'Exported to Insurer',
-            'imported_from_insurer' => 'Imported from Insurer',
-            'exported_to_tpa' => 'Exported to TPA',
-            'imported_from_tpa' => 'Imported from TPA',
-            'completed' => 'Completed'
-        ];
-        $data['invoice_status_array'] = [
-            'yet_to_generate' => 'Yet to Generate',
-            'generated' => 'Generated',
-            'send' => 'Send',
-            'recived' => 'Recived',
-        ];
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-            'statement_month' => 'Statement Month',
-        ];
-
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['users'] = $this->userModel->where('is_active', 1)->findAll();
-        $data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults();
-
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-        $client_branch_id = $this->request->getGet('client_branch_id');
-        $insurer_branch_id = $this->request->getGet('insurer_branch_id');
-        $client_policy_id = $this->request->getGet('client_policy_id');
-        $user_id = $this->request->getGet('user_id');
-
-        if ($date_type == 'statement_month') {
-            $start_date = (string)date('Y-m-01', strtotime($start_date));
-            $end_date = (string)date('Y-m-31', strtotime($end_date));
-        }
-
-        // dd($start_date, $end_date, $date_type);
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
-        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
-        $user_id = (!isset($user_id) || $user_id === '' || $user_id === null) ? 0 : $user_id;
-        if ($this->request->is('post')) {
-            $isFromDashboard = $this->request->getPost("is_dashboard");
-
-            if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) {
-                $ids = $this->request->getPost('ids');
-
-                $ids = array_filter(explode(',', $ids));
-
-                if (!empty($ids)) {
-                    $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers
-                    $where = "policy_transaction.id IN ($idsStr)";
-                } else {
-                    $where = []; // No valid IDs, return empty result
-                }
-            }
-            // dd($ids);
-        }
-        //Actual data for the list
-        $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id, $user_id, isset($where) ? $where : '');
-        // dd($data);
-
-        $this->loadLayout('report_bds_filter', $data);
-    }
-
-    public function reportVarience()
-    {
-        $data['tab_name'] = 'Variance Report';
-        $data['page_name'] = 'Variance Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-        ];
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-        $client_branch_id = $this->request->getGet('client_branch_id');
-        $insurer_branch_id = $this->request->getGet('insurer_branch_id');
-        $client_policy_id = $this->request->getGet('client_policy_id');
-
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-
-        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
-        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
-
-
-        $data['varience_list'] = $this->policyTransactionModel->getVarienceReportLIst($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id);
-        // !dd($data['varience_list']);
-        $this->loadLayout('variance_report_list', $data);
-    }
-
-
-    public function reportBusinessList()
-    {
-        $data['tab_name'] = 'Business Report';
-        $data['page_name'] = 'Business Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-        ];
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-
-
-        $data['business_list'] = $this->policyTransactionModel->getBusinessReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
-        $this->loadLayout('business_team_list', $data);
-    }
-
-
-    public function reportFinanceList()
-    {
-        $data['tab_name'] = 'Finance Report';
-        $data['page_name'] = 'Finance Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-        ];
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $policy_type_id = $this->request->getGet('policy_type_id');
-        $date_type = $this->request->getGet('date_type');
-        $issuer = $this->request->getGet('issuer');
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
-
-
-
-        $data['finance_list'] = $this->policyTransactionModel->getFinanceReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
-        $this->loadLayout('finance_team_list', $data);
-    }
-
-    public function reportOutstanding()
-    {
-        $data['tab_name'] = 'Outstanding Report';
-        $data['page_name'] = 'Outstanding Report';
-
-        $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
-        $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
-        $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
-        $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
-        $data['date_type'] = [
-            'policy_issue_date' => 'Policy Issue Date',
-            'policy_start_date' => 'Policy Start Date',
-            'policy_end_date' => 'Policy End Date',
-            'data_received_date' => 'Data Received Date',
-            'closure_date' => 'Closure Date',
-        ];
-
-        //filter datas
-        $start_date = $this->request->getGet('start_date');
-        $end_date = $this->request->getGet('end_date');
-        $client_id = $this->request->getGet('client_id');
-        $insurer_id = $this->request->getGet('insurer_id');
-        $insurer_branch_id = $this->request->getGet('insurer_branch_id');
-
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : change_date_format($start_date, 'd-m-Y', 'Y-m-01');
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : change_date_format($end_date, 'd-m-Y', 'Y-m-31');
-        // dd([$start_date,$end_date]);
-
-
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
-
-        $data['outstanting_list'] = $this->policyTransactionModel->getOutstandingReportLIst($start_date, $end_date, $insurer_id, $insurer_branch_id);
-        // dd($this->policyTransactionModel->getLastQuery());
-        // dd($data);
-        $this->loadLayout('outstanding_report_list', $data);
-    }
-
-    //---------------------------------------------------------------------------------------------------
-
-    //insurer statement list page
-    public function statementList()
-    {
-        // dd($this->updateInsurerStatement(['file_id' => 133])); // for check validateInsurerStatementfunction with hard coded file id always un command
-        $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll();
-        $today = date('Y-m-d');
-        $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today)));
-        // echo $fromday;die();
-        $data['invoice_status_array'] = $this->invoiceStatus;
-        $data['insurers'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
-
-        // dd( $data['insurers']);
-        $data['insurer_statement_list'] = $this->insurerStatements
-            ->select(
-                'insurer_statements.*, 
-                                                          insurers.name AS insurer_name, 
-                                                          insurers.short_name, 
-                                                          user_profiles.first_name, 
-                                                          insurer_branch.branch_code,
-                                                          (SELECT SUM(pt_co_share_details.exp_amt) 
-                                                           FROM pt_co_share_details 
-                                                           WHERE pt_co_share_details.is_active = 1 
-                                                             AND pt_co_share_details.statement_id = insurer_statements.id
-                                                          ) AS exp_inv_amt,
-                                                          (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)  + SUM(inv_payment_details.gst)
-                                                           FROM inv_payment_details 
-                                                           WHERE inv_payment_details.is_active = 1 
-                                                             AND inv_payment_details.statement_id = insurer_statements.id
-                                                          ) AS received_inv_amt'
-            )
-            ->join('insurers', 'insurer_statements.insurer_id = insurers.id')
-            ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
-            ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
-            ->where('insurer_statements.is_active', 1)
-            // ->where('insurer_statements.file_status','success')
-            ->where('date(insurer_statements.created_at) >= ', $from_date)
-            ->where('date(insurer_statements.created_at) <= ', $today)
-            ->orderBy('insurer_statements.id', 'DESC')
-            ->findAll();
-
-        // dd( $this->insurerStatements->getLastQuery());
-        $data['tab_name'] = 'Statement Upload';
-        $data['page_name'] = 'Statement Upload';
-
-        $this->loadLayout('insurer_statement_list',  $data);
-    }
-
-    // public function failedStatementList(){
-    //     $today = date('Y-m-d');
-    //     $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today)));
-    //     // echo $fromday;die();
-    //      $data['invoice_status_array'] = $this->invoiceStatus;
-    //      $data['insurers'] = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames();
-
-    //      // dd( $data['insurers']);
-    //      $data['insurer_statement_list'] = $this->insurerStatements
-    //                                             ->select('insurer_statements.*, 
-    //                                                       insurers.name AS insurer_name, 
-    //                                                       insurers.short_name, 
-    //                                                       user_profiles.first_name, 
-    //                                                       insurer_branch.branch_code,
-    //                                                       (SELECT SUM(pt_co_share_details.exp_amt) 
-    //                                                        FROM pt_co_share_details 
-    //                                                        WHERE pt_co_share_details.is_active = 1 
-    //                                                          AND pt_co_share_details.statement_id = insurer_statements.id
-    //                                                       ) AS exp_inv_amt,
-    //                                                       (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)  + SUM(inv_payment_details.gst)
-    //                                                        FROM inv_payment_details 
-    //                                                        WHERE inv_payment_details.is_active = 1 
-    //                                                          AND inv_payment_details.statement_id = insurer_statements.id
-    //                                                       ) AS received_inv_amt'
-    //                                             )
-    //                                             ->join('insurers', 'insurer_statements.insurer_id = insurers.id')
-    //                                             ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
-    //                                             ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
-    //                                             ->where('insurer_statements.is_active', 1)
-    //                                             ->where('insurer_statements.file_status','failed')
-    //                                             ->where('date(insurer_statements.created_at) >= ', $from_date)
-    //                                             ->where('date(insurer_statements.created_at) <= ', $today)
-    //                                             ->orderBy('insurer_statements.id', 'DESC')
-    //                                             ->findAll();
-    //         if($data['insurer_statement_list']){
-    //             return $this->respond(['status' => true, 'code' => 200,'data'=>$data ], 200);
-    //         }else{
-    //             return $this->respond(['status'=>false,'message'=>'Data Not Fount'],404);
-    //         }
-
-    // }
-
-    public function uploadInsurerStatement()
-    {
-
-        //validate uploaded file
-        $filename = '';
-        $validated = $this->validate([
-            'statement' => [
-                'uploaded[statement]',
-                'mime_in[statement,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
-                'max_size[statement,16384]',
-            ],
-        ]);
-        // $this->createStatementFolder();
-        if ($validated) {
-            $avatar = $this->request->getFile('statement');
-            if (!$avatar) {
-                $this->myLogger->logme("error", 'Statement File not found');
-                return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400);
+            if (!empty($data['policy_end_date'])) {
+                $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
             }
 
-            $is_moved = $avatar->move(WRITEPATH . 'uploads/statements/');
-            if ($is_moved) {
-                $filename = $avatar->getName();
-                // Handle successful upload, e.g., log success or further processing
-                $this->myLogger->logme("error", 'Statement File moved successful');
-            } else {
-                $this->myLogger->logme("error", 'Statement File move failed');
-                return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500);
+            if (!empty($data['data_received_date'])) {
+                $data['data_received_date'] =  change_date_format($data['data_received_date'], 'Y-m-d', 'd/m/Y');
             }
-        } else {
-            $this->myLogger->logme("error", 'Statement Upload failed Invalid file');
-            return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
-        }
 
-        //process post variable entry in file table
-        $loggedInUserID = get_session_userid();
-        // dd($loggedInUserID);
-        // $loggedInUserID = 8;
-
-        $insurer = $this->request->getPost('insurer');
-
-        $insurer_id = explode('-', $insurer)[0];
-        $branch_id = explode('-', $insurer)[1];
-        // print_r($insurer_id);
-        // print_r($branch_id);
-        // die();
-        $month = $this->request->getPost('statement_month');
-        $month = $month . '-01';
-        // print_r($month);die;
-        $month = change_date_format($month, 'Y-M-d', 'Y-m-d');
-        $stmt_sno = $this->request->getPost('statement_no');
-        // print_r($month);die;
-
-        $file_id = $this->insurerStatements->insert(['insurer_id' => $insurer_id, 'branch_id' => $branch_id, 'file_name' => $filename, 'month' => $month, 'created_by' => $loggedInUserID, 'stmt_sno' => $stmt_sno]); //here field policy_id have client_policy_id and not policy id from policy master
-        $this->myLogger->logme("error", '{file_id} statement uploaded success', ['file_id' => $file_id]);
-
-        //validate file
-        $validation_result = $this->validateInsurerStatement(['file_id' => $file_id]);
-        //update file content to DB
-        if ($validation_result['status']) {
-            $this->updateInsurerStatement(['file_id' => $file_id]);
-        }
-
-        if (!isset($file_id) || !$validation_result['status']) {
-            return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file not uploaded', 'error_data' => $validation_result['error_data'], 'error_code' =>   $validation_result['error_code']], 200);
-        }
-
-        if (isset($file_id) || $validation_result['status']) {
-            $this->insurerStatements->where('id', $file_id)->set(['invoice_status' => 'pending'])->update();
-        }
-
-
-
-        return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => 'file upload success'], 200);
-    }
-
-    public function createStatementFolder()
-    {
-        $folderPath = WRITEPATH . 'uploads/statements/';
-
-        // Check if the folder doesn't exist
-        if (!file_exists($folderPath)) {
-            // Create the folder
-            if (mkdir($folderPath, 0777, true)) {
-                $this->myLogger->logme('error', 'statement upload folder created successfully');
-
-                // Set permissions to a+rwx (read, write, execute for all)
-                chmod($folderPath, 0777);
-                $this->myLogger->logme('error', 'Permissions set to a+rwx.');
-            } else {
-                // echo "Failed to create folder.";
-                $this->myLogger->logme('error', 'Failed to create statement upload folder.');
+            if (!empty($data['policy_issue_date'])) {
+                $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
             }
-        } else {
-            $this->myLogger->logme('error', 'upload folder exists.');
-        }
-    }
 
-    public function validateInsurerStatement($params)
-    {
-        helper('excel_util_helper');
-        //get file info
-        $file_id = $params['file_id'];
-        $file = $this->insurerStatements->find($file_id);
-        // dd($file);
-        $date = new \DateTime($file['month']);
+            if (!empty($data['endorse_eff_date'])) {
+                $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
+            }
 
-        $month = $date->format('m');
-        $year = $date->format('Y');
+            if (!empty($data['install_due_date'])) {
+                $data['install_due_date'] =  change_date_format($data['install_due_date'], 'Y-m-d', 'd/m/Y');
+            }
 
-        $error_data = ['error_code' => '', 'error_data' => []];
-        $status = 'success';
-        $ret_status = true;
-        // dd($month.'-'.$year);
-        $return = [];
-        if (!isset($file)) {
-            //file not found in DB
-            return array('status' => false, 'msg' => 'statement file not found in DB');
-        }
-        $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
+            if (!empty($data['last_action_date'])) {
+                $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
+            }
 
-        //check physical file
-        if (!file_exists($file_name_with_path)) {
-            //file not found  update status and reason 
-            $message = "Physcial file not found";
-            // echo $message;
-            $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
-            $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
-            return  array('status' => false, 'error_code' => 0); //0 - Physcial file not found
-        }
+            if (!empty($data['month'])) {
+                $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
+            }
 
-        //get excel data to php array
-        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
-        $sheet = $spreadsheet->getActiveSheet();
+            // print_r($data); die;
 
-        $highestRowAndColumn = $sheet->getHighestRowAndColumn();
-        // dd($highestRowAndColumn);
-        $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
-        unset($excel_data[0]);
-        $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
-        // Kint::dump($excel_data);die();
-        //get no of line items and update in DB
-        $line_items = 0;
-        // get uploaded month transactions data
-        $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']);
-        // var_dump($source_data);die();
-        // Kint::dump($source_data);die();
+            //get PT Co-Share Details
+            $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
 
-
-        // check policy no,insurer and etc in DB for this month
-        // 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]);
-                // $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel
-                // $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel
-                
-                $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel
-                $policy_no = preg_replace(  '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '',  $excel_row[1]); //policy_end_date from excel
-                
-                // $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel
-                
-                $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]??''); //policy_end_date from excel
-                $endorsement_no = preg_replace(  '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '',  $excel_row[2]??''); //policy_end_date from excel
-
-                // 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_row, $source_endorsement_no, $policy_no, $endorsement_no);
+                ->select("
+                            pt_co_share_details.*,
                     
-                    // 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;
-                        unset($source_data[$source_key]);
-                        continue 2;
-                    }
-                }
+                            (
+                                SELECT
+                                    COUNT(*)
+                                FROM
+                                    co_share_stmt_details
+                                WHERE
+                                    co_share_stmt_details.co_share_id = pt_co_share_details.id
+                                    AND co_share_stmt_details.is_active = 1
+                            ) AS record_count,
+        
+                                (
+                                    SELECT 
+                                        SUM(actual_bp_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_bp_amount,
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tp_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tp_amount,
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tep_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tep_amount,
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_bp_per) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_bp_percentage,
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tp_per) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tp_percentage,
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tep_per) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tep_percentage,
+                                
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_bp_brokerage_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_bp_brokerage_amount,
+                                
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tp_brokerage_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tp_brokerage_amount,
+                                
+                                
+                                (
+                                    SELECT 
+                                        SUM(actual_tep_brokerage_amt) 
+                                    FROM 
+                                        co_share_stmt_details 
+                                    WHERE 
+                                        co_share_id = pt_co_share_details.id 
+                                        AND is_active = 1
+                                        
+                                ) AS actual_tep_brokerage_amount
+        
+                        ")
+                ->where('pt_id', $id)
+                ->where('is_active', 1)
+                ->orderBy('id', 'asc')
+                ->findAll();
 
-                if ($is_source_found == 0) {
-                    // echo $excel_key.'-'.$excel_row[1] . '- not found
'; - $error_data['error_code'] = 1; //match not found - // $error_data['error_data'] = ($error_data['error_data'] ?? []); - $error_data['error_data'] = array_merge($error_data['error_data'], [$excel_row[0]]); //match not found - } + // print_r($data['endorse_eff_date']); die; + + $pt_bp_amt = $this->PTCOShareDetailsModel + ->select('bp_amt, amount') + ->where('pt_id', $id) + ->where('co_share_type', 1) + ->where('is_active', 1) + ->first(); + + // dd(db_connect()->getLastQuery() ,$pt_bp_amt); + $data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null; + + if ($data) { + return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200); + } else { + return $this->respond(['status' => false], 200); } } - // dd($error_data); + //------------------------------------------------------------------------------------------------ - if ($error_data['error_code']) { - $status = 'failed'; - $ret_status = false; - } - //update in DB - $this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items, 'file_status' => $status, 'reason' => json_encode($error_data)])->update(); - return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); - } + //file upload function + public function uploadFile() + { + $GoogleDriveController = new GoogleDriveController(); + $files = $this->request->getFiles(); + $doc_name = $this->request->getPost('doc_name[]'); + $pt_id = $this->request->getPost('pt_id'); + $client_policy_id = $this->request->getPost('client_policy_id'); + $data = $this->request->getPost(); + $uploadFilePath = WRITEPATH . 'uploads/client_kyc_documents'; - public function updateInsurerStatement($params) - { - helper('excel_util_helper'); - //get file info - $file_id = $params['file_id']; - $file = $this->insurerStatements->find($file_id); - // dd($file); - $date = new \DateTime($file['month']); + $uploadData = []; - $month = $date->format('m'); - $year = $date->format('Y'); + foreach ($data['doc_name'] as $key => $docName) { - $error_data = ['error_code' => '', 'error_data' => []]; - $status = 'success'; - $ret_status = true; - // dd($month.'-'.$year); - $return = []; - if (!isset($file)) { - //file not found in DB - return array('status' => false, 'msg' => 'statement file not found in DB'); - } - $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name']; + // Get the corresponding file for this document name + $file = $files['file'][$key]; - //check physical file - if (!file_exists($file_name_with_path)) { - //file not found update status and reason - $message = "Physcial file not found"; - // echo $message; - $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id)); - $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update(); - return array('status' => false, 'error_code' => 0); //0 - Physcial file not found - } + if (!empty($docName) && $file->isValid() && !$file->hasMoved()) { - //get excel data to php array - $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); - $sheet = $spreadsheet->getActiveSheet(); + // Upload the file + $uploadedFileName = file_Upload($file, $uploadFilePath); - $highestRowAndColumn = $sheet->getHighestRowAndColumn(); - // dd($highestRowAndColumn); - $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); - unset($excel_data[0]); - $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data); - // dd($excel_data); - //get no of line items and update in DB - $line_items = count($excel_data); - // get uploaded month transactions data - $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']); - // Kint::dump($source_data);//die; - // Kint::dump($excel_data); - // die; - // check policy no,insurer and etc in DB for this month - // if all good return true, otherwise return false with messssage - $data_to_update = []; - foreach ($excel_data as $excel_key => $excel_row) { - $is_row_empty = check_row_is_empty_or_null($excel_row); - if (!$is_row_empty) { + if ($uploadedFileName) { + // Prepare data for each document upload + $docData = [ + 'pt_id' => $pt_id, + 'doc_name' => $docName, + 'file_name' => $uploadedFileName, + 'created_by' => get_session_userid(), + ]; - $is_source_found = 0; - // $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel - // $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel - $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel - $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]); // - // $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel - $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel + // $uploadFilePath = $uploadFilePath . '/' . $uploadedFileName; - 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) { - $is_source_found = 1; + // $GoogleDriveController->uploadFiletoGdrive(client_policy_id: $client_policy_id, doc_type: 'POLICY', file_path: $uploadFilePath, file_name: $uploadedFileName); - //calculate percentage first - $total_amt = 0; + // Insert into database + $insert = $this->PTFileModel->insert($docData); - // $actual_bp_per = trim($excel_row[9]); //commented becoz this filed removed tfrom excel file - $actual_bp_per = 0; //set default value 0 for maintaining existing code flow - $actual_bp_brokerage = trim($excel_row[5]); - $actual_bp_amt = trim($excel_row[3]); - - if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) { - $total_amt += $actual_bp_brokerage; - //percentage reverse calculation - if (($actual_bp_per == 0 || $actual_bp_per == 0) && !empty($actual_bp_amt)) { - $actual_bp_per = round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2); - } - } else { - $actual_bp_brokerage = $actual_bp_amt * ($actual_bp_per / 100); - $total_amt += $actual_bp_brokerage; + if ($insert) { + $uploadData[] = $docData; } - - // $actual_tp_per = trim($excel_row[10]);//commented becoz this filed removed tfrom excel file - $actual_tp_per = 0;//set default value 0 for maintaining existing code flow - $actual_tp_brokerage = trim($excel_row[6]); - $actual_tp_amt = trim($excel_row[4]); - - if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") { - $total_amt += $actual_tp_brokerage; - //percentage reverse calculation - if (($actual_tp_per == 0 || $actual_tp_per == "") && !empty($actual_tp_amt)) { - $actual_tp_per = ($actual_tp_brokerage / $actual_tp_amt) * 100; - } - } else { - $actual_tp_brokerage = $actual_tp_amt * ($actual_tp_per / 100); - $total_amt += $actual_tp_brokerage; - } - - // $actual_tep_per = trim($excel_row[11]); - // $actual_tep_brokerage = trim($excel_row[14]); - // $actual_tep_amt = trim($excel_row[8]); - - $actual_tep_per = 0; - $actual_tep_brokerage = 0; - $actual_tep_amt = 0; - - if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") { - $total_amt += $actual_tep_brokerage; - //percentage reverse calculation - if (($actual_tep_per == 0 || $actual_tep_per == "") && !empty($actual_tep_amt)) { - $actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100; - } - } else { - $actual_tep_brokerage = $actual_tep_amt * ($actual_tep_per / 100); - $total_amt += $actual_tep_brokerage; - } - - //find variance - $variance_amt = $source_row['exp_amt'] - $total_amt; - - $data_to_update[] = ['co_share_id' => $source_row['id'], 'actual_bp_amt' => $actual_bp_amt, 'actual_tp_amt' => $actual_tp_amt, 'actual_tep_amt' => $actual_tep_amt, 'actual_bp_per' => $actual_bp_per, 'actual_tp_per' => $actual_tp_per, 'actual_tep_per' => $actual_tep_per, 'variance' => $variance_amt, 'actual_tep_brokerage_amt' => $actual_tep_brokerage, 'actual_tp_brokerage_amt' => $actual_tp_brokerage, 'actual_bp_brokerage_amt' => $actual_bp_brokerage, 'reward' => trim($excel_row[7]), 'statement_id' => $file_id]; - - unset($source_data[$source_key]); - continue 2; } } } + + // print_r($uploadData); die; + + // $uploadData = uploadFilesToGoogleDrive($files['file'], $doc_name, $pt_id); + + if (!empty($uploadData)) { + + $ptFileQuery = $this->PTFileModel + ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id') + ->where('pt_files.pt_id', $pt_id) + ->where('pt_files.is_active', 1); + + if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) { + + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $ptFileQuery->where('pt_files.created_by', get_session_userid()); + } + } + + $data['pt_files'] = $ptFileQuery->findAll(); + + return $this->respond(['status' => true, 'message' => 'File uploaded successfully in G-Drive', 'data' => $data]); + } else { + return $this->respond(['status' => false, 'message' => 'Failed to upload file in G-Drive']); + } } - // dd($data_to_update); - $this->coShareStmtDetailsModel->insertBatch($data_to_update, 'id'); - // dd($data_to_update); - // if($error_data['error_code']) - // { - // $status = 'failed'; - // $ret_status = false; + + // update Invoice Status + public function updateInvoiceStatus() + { + $ids = $this->request->getPost('ids'); + $ids = json_decode($ids); + + // var_dump($ids); die; + + $data['invoice_status'] = $this->request->getPost('invoice_status'); + if ($this->request->getPost('invoice_status') == 'generated') { + $data['invoice_no'] = $this->request->getPost('invoice_no'); + } + + + $update = $this->policyTransactionModel + ->whereIn('id', $ids) + ->set($data) + ->update(); + + + if ($update) { + + return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Invoice status updated successfully'], 200); + } else { + return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Failed to update invoice status'], 200); + } + } + + public function removeCoShareData($id) + { + $this->myLogger->logme('error', 'PT Co Share Detailes Remove function called'); + + $data = [ + 'updated_by' => get_session_userid(), + 'is_active' => 0 + ]; + + $update = $this->PTCOShareDetailsModel->where('id', $id)->set($data)->update(); + + if ($update) { + return $this->respond(['status' => true, 'code' => 200, 'message' => 'Data removed successfully'], 200); + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove data'], 200); + } + } + + public function getPTCOShareCount($client_id, $client_policy_id) + { + $totalCount = $this->PTCOShareDetailsModel + ->select(" + pt_co_share_details.*, + policy_transaction.bro_payable_by, + policy_transaction.cd_ac_pk, + ( + select cd_ac_no + from cd_master + where id = policy_transaction.cd_ac_pk + ) as cd_account_no, + ( + select balance + from cash_deposit + where cd_ac_pk = policy_transaction.cd_ac_pk + and is_active = 1 + order by id desc + limit 1 + ) as cd_amount, + ") + ->join('policy_transaction', 'policy_transaction.id = pt_co_share_details.pt_id') + ->where('policy_transaction.client_id', $client_id) + // ->where('policy_transaction.client_policy_id', $client_policy_id) + ->where('policy_transaction.id', $client_policy_id) + ->where('policy_transaction.action_type', 'inception') + ->where('policy_transaction.is_active', 1) + ->findAll(); + + $is_copay_yes = $this->policyTransactionModel + ->where('client_id', $client_id) + // ->where('client_policy_id', $client_policy_id) + ->where('id', $client_policy_id) + ->where('action_type', 'inception') + ->where('is_active', 1) + ->first(); + + $cd_ac_no = db_connect()->table('cd_master')->where('id', $is_copay_yes['cd_ac_pk'] ?? null)->get()->getRowArray(); + + if ($totalCount) { + return $this->respond(['status' => true, 'code' => 200, 'data' => $totalCount, 'is_copay_yes' => $is_copay_yes, "cd_master_data" => $cd_ac_no], 200); + } else { + $insurer_data = $this->clientPolicyModel->where('id', $client_policy_id)->where('is_active', 1)->first(); + return $this->respond(['status' => false, 'code' => 404, 'message' => 'There is no policy inception data.'], 200); + } + } + + public function checkInvoiceStatus($pt_id) + { + $data = $this->policyTransactionModel + ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id') + ->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id') + ->where('policy_transaction.id', $pt_id) + ->where('policy_transaction.is_active', 1) + ->where('pt_co_share_details.is_active', 1) + ->where('pt_co_share_details.statement_id IS NOT NULL') + ->where('insurer_statements.invoice_no IS NOT NULL') + ->countAllResults(); + + if ($data) { + return $this->respond(['status' => true, 'count' => $data, 'code' => 200], 200); + } else { + return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200); + } + } + + public function getBasePolicy($client_id, $client_branch_id) + { + $data = $this->clientPolicyModel + ->select('client_policy.*, policy_type.policy_type') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.client_branch_id', $client_branch_id) + ->whereIn('client_policy.policy_type_id', [2, 3]) + ->where('client_policy.is_active', 1) + ->findAll(); + + if ($data) { + return $this->respond(['status' => true, 'data' => $data, 'code' => 200], 200); + } else { + return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200); + } + } + + //--------------------------------------------------------------------------------------------------- + + //get BDS Reports data old function + public function reportBDSOld() + { + $data['tab_name'] = 'BDS Report'; + $data['page_name'] = 'BDS Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['client_type'] = [1 => 'Group', 2 => 'Individual']; + $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; + $data['policy_status'] = [ + 'pending' => 'Pending', + 'exported_to_insurer' => 'Exported to Insurer', + 'imported_from_insurer' => 'Imported from Insurer', + 'exported_to_tpa' => 'Exported to TPA', + 'imported_from_tpa' => 'Imported from TPA', + 'completed' => 'Completed' + ]; + $data['invoice_status_array'] = [ + 'yet_to_generate' => 'Yet to Generate', + 'generated' => 'Generated', + 'send' => 'Send', + 'recived' => 'Recived', + ]; + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + ]; + + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date; + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date; + + $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id; + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id; + $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type; + $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer; + + + //Actual data for the list + $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer); + // dd($data); + + $this->loadLayout('report_bds_filter', $data); + } + + //get BDS Reports data New Function + public function reportBDS() + { + + $data['tab_name'] = 'BDS Report'; + $data['page_name'] = 'BDS Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['client_type'] = [1 => 'Group', 2 => 'Individual']; + $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; + $data['policy_status'] = [ + 'pending' => 'Pending', + 'exported_to_insurer' => 'Exported to Insurer', + 'imported_from_insurer' => 'Imported from Insurer', + 'exported_to_tpa' => 'Exported to TPA', + 'imported_from_tpa' => 'Imported from TPA', + 'completed' => 'Completed' + ]; + $data['invoice_status_array'] = [ + 'yet_to_generate' => 'Yet to Generate', + 'generated' => 'Generated', + 'send' => 'Send', + 'recived' => 'Recived', + ]; + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + 'statement_month' => 'Statement Month', + ]; + + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['users'] = $this->userModel->where('is_active', 1)->findAll(); + $data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults(); + + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + $client_branch_id = $this->request->getGet('client_branch_id'); + $insurer_branch_id = $this->request->getGet('insurer_branch_id'); + $client_policy_id = $this->request->getGet('client_policy_id'); + $user_id = $this->request->getGet('user_id'); + + if ($date_type == 'statement_month') { + $start_date = (string)date('Y-m-01', strtotime($start_date)); + $end_date = (string)date('Y-m-31', strtotime($end_date)); + } + + // dd($start_date, $end_date, $date_type); + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date; + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date; + + $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id; + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id; + $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type; + $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer; + $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id; + $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id; + $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id; + $user_id = (!isset($user_id) || $user_id === '' || $user_id === null) ? 0 : $user_id; + if ($this->request->is('post')) { + $isFromDashboard = $this->request->getPost("is_dashboard"); + + if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) { + $ids = $this->request->getPost('ids'); + + $ids = array_filter(explode(',', $ids)); + + if (!empty($ids)) { + $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers + $where = "policy_transaction.id IN ($idsStr)"; + } else { + $where = []; // No valid IDs, return empty result + } + } + // dd($ids); + } + //Actual data for the list + $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id, $user_id, isset($where) ? $where : ''); + // dd($data); + + $this->loadLayout('report_bds_filter', $data); + } + + public function reportVarience() + { + $data['tab_name'] = 'Variance Report'; + $data['page_name'] = 'Variance Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + ]; + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + $client_branch_id = $this->request->getGet('client_branch_id'); + $insurer_branch_id = $this->request->getGet('insurer_branch_id'); + $client_policy_id = $this->request->getGet('client_policy_id'); + + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date; + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date; + + $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id; + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id; + $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type; + $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer; + + $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id; + $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id; + $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id; + + + $data['varience_list'] = $this->policyTransactionModel->getVarienceReportLIst($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id); + // !dd($data['varience_list']); + $this->loadLayout('variance_report_list', $data); + } + + + public function reportBusinessList() + { + $data['tab_name'] = 'Business Report'; + $data['page_name'] = 'Business Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + ]; + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date; + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date; + + $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id; + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id; + $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type; + $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer; + + + $data['business_list'] = $this->policyTransactionModel->getBusinessReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer); + $this->loadLayout('business_team_list', $data); + } + + + public function reportFinanceList() + { + $data['tab_name'] = 'Finance Report'; + $data['page_name'] = 'Finance Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + ]; + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date; + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date; + + $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id; + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id; + $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type; + $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer; + + + + $data['finance_list'] = $this->policyTransactionModel->getFinanceReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer); + $this->loadLayout('finance_team_list', $data); + } + + public function reportOutstanding() + { + $data['tab_name'] = 'Outstanding Report'; + $data['page_name'] = 'Outstanding Report'; + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + ]; + + //filter datas + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $insurer_branch_id = $this->request->getGet('insurer_branch_id'); + + $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : change_date_format($start_date, 'd-m-Y', 'Y-m-01'); + $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : change_date_format($end_date, 'd-m-Y', 'Y-m-31'); + // dd([$start_date,$end_date]); + + + $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id; + $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id; + + $data['outstanting_list'] = $this->policyTransactionModel->getOutstandingReportLIst($start_date, $end_date, $insurer_id, $insurer_branch_id); + // dd($this->policyTransactionModel->getLastQuery()); + // dd($data); + $this->loadLayout('outstanding_report_list', $data); + } + + //--------------------------------------------------------------------------------------------------- + + //insurer statement list page + public function statementList() + { + // dd($this->updateInsurerStatement(['file_id' => 133])); // for check validateInsurerStatementfunction with hard coded file id always un command + $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll(); + $today = date('Y-m-d'); + $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today))); + // echo $fromday;die(); + $data['invoice_status_array'] = $this->invoiceStatus; + $data['insurers'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames(); + + // dd( $data['insurers']); + $data['insurer_statement_list'] = $this->insurerStatements + ->select( + 'insurer_statements.*, + insurers.name AS insurer_name, + insurers.short_name, + user_profiles.first_name, + insurer_branch.branch_code, + (SELECT SUM(pt_co_share_details.exp_amt) + FROM pt_co_share_details + WHERE pt_co_share_details.is_active = 1 + AND pt_co_share_details.statement_id = insurer_statements.id + ) AS exp_inv_amt, + (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds) + SUM(inv_payment_details.gst) + FROM inv_payment_details + WHERE inv_payment_details.is_active = 1 + AND inv_payment_details.statement_id = insurer_statements.id + ) AS received_inv_amt' + ) + ->join('insurers', 'insurer_statements.insurer_id = insurers.id') + ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id') + ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id') + ->where('insurer_statements.is_active', 1) + // ->where('insurer_statements.file_status','success') + ->where('date(insurer_statements.created_at) >= ', $from_date) + ->where('date(insurer_statements.created_at) <= ', $today) + ->orderBy('insurer_statements.id', 'DESC') + ->findAll(); + + // dd( $this->insurerStatements->getLastQuery()); + $data['tab_name'] = 'Statement Upload'; + $data['page_name'] = 'Statement Upload'; + + $this->loadLayout('insurer_statement_list', $data); + } + + // public function failedStatementList(){ + // $today = date('Y-m-d'); + // $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today))); + // // echo $fromday;die(); + // $data['invoice_status_array'] = $this->invoiceStatus; + // $data['insurers'] = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames(); + + // // dd( $data['insurers']); + // $data['insurer_statement_list'] = $this->insurerStatements + // ->select('insurer_statements.*, + // insurers.name AS insurer_name, + // insurers.short_name, + // user_profiles.first_name, + // insurer_branch.branch_code, + // (SELECT SUM(pt_co_share_details.exp_amt) + // FROM pt_co_share_details + // WHERE pt_co_share_details.is_active = 1 + // AND pt_co_share_details.statement_id = insurer_statements.id + // ) AS exp_inv_amt, + // (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds) + SUM(inv_payment_details.gst) + // FROM inv_payment_details + // WHERE inv_payment_details.is_active = 1 + // AND inv_payment_details.statement_id = insurer_statements.id + // ) AS received_inv_amt' + // ) + // ->join('insurers', 'insurer_statements.insurer_id = insurers.id') + // ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id') + // ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id') + // ->where('insurer_statements.is_active', 1) + // ->where('insurer_statements.file_status','failed') + // ->where('date(insurer_statements.created_at) >= ', $from_date) + // ->where('date(insurer_statements.created_at) <= ', $today) + // ->orderBy('insurer_statements.id', 'DESC') + // ->findAll(); + // if($data['insurer_statement_list']){ + // return $this->respond(['status' => true, 'code' => 200,'data'=>$data ], 200); + // }else{ + // return $this->respond(['status'=>false,'message'=>'Data Not Fount'],404); + // } + // } - //update in DB - $this->insurerStatements->where('id', $file_id)->set(['file_status' => $status, 'reason' => json_encode($error_data), 'invoice_status' => 'pending'])->update(); - return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); - } - public function getInvoicePaymentDetails() - { - $statement_id = $this->request->getUri()->getSegment(4); + public function uploadInsurerStatement() + { - $inv_details = $this->insurerStatements->find($statement_id); - $inv_payment_details = $this->invPaymentDetailsModel - ->where('statement_id', $statement_id) - ->where('is_active', 1) - ->get() - ->getResultArray(); - if (!$inv_details['invoice_value']) { - $stmt_level_value = $this->coShareStmtDetailsModel->select('sum(actual_tep_brokerage_amt) + sum(actual_tp_brokerage_amt) + sum(actual_bp_brokerage_amt) + sum(reward) as invoice_value') + //validate uploaded file + $filename = ''; + $validated = $this->validate([ + 'statement' => [ + 'uploaded[statement]', + 'mime_in[statement,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]', + 'max_size[statement,16384]', + ], + ]); + // $this->createStatementFolder(); + if ($validated) { + $avatar = $this->request->getFile('statement'); + if (!$avatar) { + $this->myLogger->logme("error", 'Statement File not found'); + return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400); + } + + $is_moved = $avatar->move(WRITEPATH . 'uploads/statements/'); + if ($is_moved) { + $filename = $avatar->getName(); + // Handle successful upload, e.g., log success or further processing + $this->myLogger->logme("error", 'Statement File moved successful'); + } else { + $this->myLogger->logme("error", 'Statement File move failed'); + return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500); + } + } else { + $this->myLogger->logme("error", 'Statement Upload failed Invalid file'); + return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404); + } + + //process post variable entry in file table + $loggedInUserID = get_session_userid(); + // dd($loggedInUserID); + // $loggedInUserID = 8; + + $insurer = $this->request->getPost('insurer'); + + $insurer_id = explode('-', $insurer)[0]; + $branch_id = explode('-', $insurer)[1]; + // print_r($insurer_id); + // print_r($branch_id); + // die(); + $month = $this->request->getPost('statement_month'); + $month = $month . '-01'; + // print_r($month);die; + $month = change_date_format($month, 'Y-M-d', 'Y-m-d'); + $stmt_sno = $this->request->getPost('statement_no'); + // print_r($month);die; + + $file_id = $this->insurerStatements->insert(['insurer_id' => $insurer_id, 'branch_id' => $branch_id, 'file_name' => $filename, 'month' => $month, 'created_by' => $loggedInUserID, 'stmt_sno' => $stmt_sno]); //here field policy_id have client_policy_id and not policy id from policy master + $this->myLogger->logme("error", '{file_id} statement uploaded success', ['file_id' => $file_id]); + + //validate file + $validation_result = $this->validateInsurerStatement(['file_id' => $file_id]); + //update file content to DB + if ($validation_result['status']) { + $this->updateInsurerStatement(['file_id' => $file_id]); + } + + if (!isset($file_id) || !$validation_result['status']) { + return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file not uploaded', 'error_data' => $validation_result['error_data'], 'error_code' => $validation_result['error_code']], 200); + } + + if (isset($file_id) || $validation_result['status']) { + $this->insurerStatements->where('id', $file_id)->set(['invoice_status' => 'pending'])->update(); + } + + + + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => 'file upload success'], 200); + } + + public function createStatementFolder() + { + $folderPath = WRITEPATH . 'uploads/statements/'; + + // Check if the folder doesn't exist + if (!file_exists($folderPath)) { + // Create the folder + if (mkdir($folderPath, 0777, true)) { + $this->myLogger->logme('error', 'statement upload folder created successfully'); + + // Set permissions to a+rwx (read, write, execute for all) + chmod($folderPath, 0777); + $this->myLogger->logme('error', 'Permissions set to a+rwx.'); + } else { + // echo "Failed to create folder."; + $this->myLogger->logme('error', 'Failed to create statement upload folder.'); + } + } else { + $this->myLogger->logme('error', 'upload folder exists.'); + } + } + + public function validateInsurerStatement($params) + { + helper('excel_util_helper'); + //get file info + $file_id = $params['file_id']; + $file = $this->insurerStatements->find($file_id); + // dd($file); + $date = new \DateTime($file['month']); + + $month = $date->format('m'); + $year = $date->format('Y'); + + $error_data = ['error_code' => '', 'error_data' => []]; + $status = 'success'; + $ret_status = true; + // dd($month.'-'.$year); + $return = []; + if (!isset($file)) { + //file not found in DB + return array('status' => false, 'msg' => 'statement file not found in DB'); + } + $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name']; + + //check physical file + if (!file_exists($file_name_with_path)) { + //file not found update status and reason + $message = "Physcial file not found"; + // echo $message; + $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id)); + $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update(); + return array('status' => false, 'error_code' => 0); //0 - Physcial file not found + } + + //get excel data to php array + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $sheet = $spreadsheet->getActiveSheet(); + + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + // dd($highestRowAndColumn); + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + unset($excel_data[0]); + $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data); + // Kint::dump($excel_data);die(); + //get no of line items and update in DB + $line_items = 0; + // get uploaded month transactions data + $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']); + // var_dump($source_data);die(); + // Kint::dump($source_data);die(); + + + // check policy no,insurer and etc in DB for this month + // 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]); + // $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel + // $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel + + $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel + $policy_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[1]); //policy_end_date from excel + + // $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel + + $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]??''); //policy_end_date from excel + $endorsement_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[2]??''); //policy_end_date from excel + + // 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_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; + unset($source_data[$source_key]); + continue 2; + } + } + + if ($is_source_found == 0) { + // echo $excel_key.'-'.$excel_row[1] . '- not found
'; + $error_data['error_code'] = 1; //match not found + // $error_data['error_data'] = ($error_data['error_data'] ?? []); + $error_data['error_data'] = array_merge($error_data['error_data'], [$excel_row[0]]); //match not found + } + } + } + + // dd($error_data); + + if ($error_data['error_code']) { + $status = 'failed'; + $ret_status = false; + } + //update in DB + $this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items, 'file_status' => $status, 'reason' => json_encode($error_data)])->update(); + return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); + } + + + public function updateInsurerStatement($params) + { + helper('excel_util_helper'); + //get file info + $file_id = $params['file_id']; + $file = $this->insurerStatements->find($file_id); + // dd($file); + $date = new \DateTime($file['month']); + + $month = $date->format('m'); + $year = $date->format('Y'); + + $error_data = ['error_code' => '', 'error_data' => []]; + $status = 'success'; + $ret_status = true; + // dd($month.'-'.$year); + $return = []; + if (!isset($file)) { + //file not found in DB + return array('status' => false, 'msg' => 'statement file not found in DB'); + } + $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name']; + + //check physical file + if (!file_exists($file_name_with_path)) { + //file not found update status and reason + $message = "Physcial file not found"; + // echo $message; + $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id)); + $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update(); + return array('status' => false, 'error_code' => 0); //0 - Physcial file not found + } + + //get excel data to php array + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $sheet = $spreadsheet->getActiveSheet(); + + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + // dd($highestRowAndColumn); + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + unset($excel_data[0]); + $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data); + // dd($excel_data); + //get no of line items and update in DB + $line_items = count($excel_data); + // get uploaded month transactions data + $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']); + // Kint::dump($source_data);//die; + // Kint::dump($excel_data); + // die; + // check policy no,insurer and etc in DB for this month + // if all good return true, otherwise return false with messssage + $data_to_update = []; + foreach ($excel_data as $excel_key => $excel_row) { + $is_row_empty = check_row_is_empty_or_null($excel_row); + if (!$is_row_empty) { + + $is_source_found = 0; + // $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel + // $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel + $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel + $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]); // + // $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel + $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel + + 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) { + $is_source_found = 1; + + //calculate percentage first + $total_amt = 0; + + // $actual_bp_per = trim($excel_row[9]); //commented becoz this filed removed tfrom excel file + $actual_bp_per = 0; //set default value 0 for maintaining existing code flow + $actual_bp_brokerage = trim($excel_row[5]); + $actual_bp_amt = trim($excel_row[3]); + + if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) { + $total_amt += $actual_bp_brokerage; + //percentage reverse calculation + if (($actual_bp_per == 0 || $actual_bp_per == 0) && !empty($actual_bp_amt)) { + $actual_bp_per = round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2); + } + } else { + $actual_bp_brokerage = $actual_bp_amt * ($actual_bp_per / 100); + $total_amt += $actual_bp_brokerage; + } + + // $actual_tp_per = trim($excel_row[10]);//commented becoz this filed removed tfrom excel file + $actual_tp_per = 0;//set default value 0 for maintaining existing code flow + $actual_tp_brokerage = trim($excel_row[6]); + $actual_tp_amt = trim($excel_row[4]); + + if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") { + $total_amt += $actual_tp_brokerage; + //percentage reverse calculation + if (($actual_tp_per == 0 || $actual_tp_per == "") && !empty($actual_tp_amt)) { + $actual_tp_per = ($actual_tp_brokerage / $actual_tp_amt) * 100; + } + } else { + $actual_tp_brokerage = $actual_tp_amt * ($actual_tp_per / 100); + $total_amt += $actual_tp_brokerage; + } + + // $actual_tep_per = trim($excel_row[11]); + // $actual_tep_brokerage = trim($excel_row[14]); + // $actual_tep_amt = trim($excel_row[8]); + + $actual_tep_per = 0; + $actual_tep_brokerage = 0; + $actual_tep_amt = 0; + + if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") { + $total_amt += $actual_tep_brokerage; + //percentage reverse calculation + if (($actual_tep_per == 0 || $actual_tep_per == "") && !empty($actual_tep_amt)) { + $actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100; + } + } else { + $actual_tep_brokerage = $actual_tep_amt * ($actual_tep_per / 100); + $total_amt += $actual_tep_brokerage; + } + + //find variance + $variance_amt = $source_row['exp_amt'] - $total_amt; + + $data_to_update[] = ['co_share_id' => $source_row['id'], 'actual_bp_amt' => $actual_bp_amt, 'actual_tp_amt' => $actual_tp_amt, 'actual_tep_amt' => $actual_tep_amt, 'actual_bp_per' => $actual_bp_per, 'actual_tp_per' => $actual_tp_per, 'actual_tep_per' => $actual_tep_per, 'variance' => $variance_amt, 'actual_tep_brokerage_amt' => $actual_tep_brokerage, 'actual_tp_brokerage_amt' => $actual_tp_brokerage, 'actual_bp_brokerage_amt' => $actual_bp_brokerage, 'reward' => trim($excel_row[7]), 'statement_id' => $file_id]; + + unset($source_data[$source_key]); + continue 2; + } + } + } + } + // dd($data_to_update); + $this->coShareStmtDetailsModel->insertBatch($data_to_update, 'id'); + // dd($data_to_update); + // if($error_data['error_code']) + // { + // $status = 'failed'; + // $ret_status = false; + // } + //update in DB + $this->insurerStatements->where('id', $file_id)->set(['file_status' => $status, 'reason' => json_encode($error_data), 'invoice_status' => 'pending'])->update(); + return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); + } + + public function getInvoicePaymentDetails() + { + $statement_id = $this->request->getUri()->getSegment(4); + + $inv_details = $this->insurerStatements->find($statement_id); + $inv_payment_details = $this->invPaymentDetailsModel ->where('statement_id', $statement_id) - ->groupBy('statement_id') + ->where('is_active', 1) ->get() ->getResultArray(); - // print_r($stmt_level_value); - if ($stmt_level_value && count($stmt_level_value) && isset($stmt_level_value[0])) { - $inv_details['invoice_value'] = $stmt_level_value[0]['invoice_value']; + if (!$inv_details['invoice_value']) { + $stmt_level_value = $this->coShareStmtDetailsModel->select('sum(actual_tep_brokerage_amt) + sum(actual_tp_brokerage_amt) + sum(actual_bp_brokerage_amt) + sum(reward) as invoice_value') + ->where('statement_id', $statement_id) + ->groupBy('statement_id') + ->get() + ->getResultArray(); + // print_r($stmt_level_value); + if ($stmt_level_value && count($stmt_level_value) && isset($stmt_level_value[0])) { + $inv_details['invoice_value'] = $stmt_level_value[0]['invoice_value']; + } } - } - // ~dd($inv_details); - $data = [ - 'invoice_status' => $inv_details['invoice_status'], - 'gst_per' => isset($inv_details['gst_per']) ? $inv_details['gst_per'] : 18, - 'invoice_value' => $inv_details['invoice_value'], - 'gst_value' => $inv_details['gst_value'], - 'invoice_no' => $inv_details['invoice_no'], - 'invoice_amount' => $inv_details['invoice_amount'], - 'invoice_date' => isset($inv_details['invoice_date']) ? change_date_format($inv_details['invoice_date'], 'Y-m-d', 'd/m/Y') : null - ]; - $data['payments'] = $inv_payment_details; - return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $data], 200); - } - - public function saveInvoicePaymentDetails() - { - $jsonData = $this->request->getJSON(); - $jsonData = (array)$jsonData; - // echo 'Hi'; - // print_r($jsonData);die(); - - $invoiceStatus = $jsonData['invoice_status']; - $hiddenStatementId = $jsonData['hidden_statement_id']; - $invoiceNo = $jsonData['invoice_no']; - $invoiceDate = change_date_format($jsonData['invoice_date'], 'd/m/Y', 'Y-m-d'); - $invoice_amount = $jsonData['invoice_amount']; - $invoice_value = $jsonData['invoice_value']; - $gst_per = $jsonData['invoice_gst_per']; - $gst_value = $jsonData['invoice_gst']; - - //Update statement table - $parentData = [ - 'invoice_status' => $invoiceStatus, - 'invoice_no' => $invoiceNo, - 'invoice_date' => $invoiceDate, - 'invoice_amount' => $invoice_amount, - 'gst_per' => $gst_per, - 'gst_value' => $gst_value, - 'invoice_value' => $invoice_value, - 'updated_by' => get_session_userid() - ]; - - - - $this->insurerStatements->update($hiddenStatementId, $parentData); - - // Process child data - $receivedAmounts = $jsonData['received_amount']; - $utrNos = $jsonData['utr_no']; - $tdsTotal = $jsonData['tds']; - $gstTotal = $jsonData['gst_amount']; - $paymentDates = $jsonData['payment_date']; - $pks = $jsonData['pk']; - - foreach ($receivedAmounts as $index => $receivedAmount) { - $pk = $pks[$index]; // Get the pk for the current record - $utrNo = $utrNos[$index]; - $tds = $tdsTotal[$index]; - $gst = $gstTotal[$index]; - $paymentDate = $paymentDates[$index]; - - if($utrNo == "" && $tds == "" && $gst == "" && $receivedAmount == "") - { - continue; - } - // Prepare data for insert/update - $childData = [ - 'inv_amt' => $receivedAmount, - 'utr_no' => $utrNo, - 'tds' => $tds, - 'gst' => $gst, - 'received_date' => change_date_format($paymentDate, 'd/m/Y', 'Y-m-d'), - 'statement_id' => $hiddenStatementId + // ~dd($inv_details); + $data = [ + 'invoice_status' => $inv_details['invoice_status'], + 'gst_per' => isset($inv_details['gst_per']) ? $inv_details['gst_per'] : 18, + 'invoice_value' => $inv_details['invoice_value'], + 'gst_value' => $inv_details['gst_value'], + 'invoice_no' => $inv_details['invoice_no'], + 'invoice_amount' => $inv_details['invoice_amount'], + 'invoice_date' => isset($inv_details['invoice_date']) ? change_date_format($inv_details['invoice_date'], 'Y-m-d', 'd/m/Y') : null ]; - if ($pk) { - $childData['updated_by'] = get_session_userid(); - $childData['id'] = (int)$pk; - } else { - $childData['created_by'] = get_session_userid(); - } - // print_r($childData); - // Insert or update - $this->invPaymentDetailsModel->save($childData); - // print_r($this->invPaymentDetailsModel->errors()); - + $data['payments'] = $inv_payment_details; + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $data], 200); } - return $this->respond(['dataStatus' => true, 'code' => 200], 200); - //return $this->response->setJSON(['dataStatus' => 'true']); - } - - public function deletePaymentEntry() - { - $payment_id = $this->request->getUri()->getSegment(4); - //echo $payment_id; - $this->invPaymentDetailsModel->update($payment_id, ['is_active' => 0]); - return $this->respond(['dataStatus' => true, 'code' => 200], 200); - } - - public function downloadSampleInsurerStatement() - { - - $filePath = ROOTPATH . 'public/sample_excel/insurer_stament_sample.xlsx'; - // Check if the file exists - if (file_exists($filePath)) { - - // Set the appropriate MIME type - $mimeType = mime_content_type($filePath); - - // Send the file to the client for download - return $this->response->download($filePath, null, $mimeType); - } else { - // File not found, show an error message or redirect - echo view('errors/html/production'); - } - } - - public function getFileErr() - { - $file_id = $this->request->getUri()->getSegment(4); - $file = $this->insurerStatements->find($file_id); - return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason']], 200); - } - - public function dmsSearch() - { - // echo 'scbsc';die(); - if ($this->request->is('post')) { - // $jsonData = (array)$this->request->getJSON(); - $customer_id = $this->request->getPost('customer_id'); - $policy_id = $this->request->getPost('policy_id'); - $cus_doc_name = $this->request->getPost('cus_doc_name'); - $policy_doc_name = $this->request->getPost('policy_doc_name'); - $pt_files = []; - $kyc_files = []; - $batch_files = []; - $files = []; + public function saveInvoicePaymentDetails() + { + $jsonData = $this->request->getJSON(); + $jsonData = (array)$jsonData; + // echo 'Hi'; // print_r($jsonData);die(); - if ($policy_id != "") { - //get policy docs from policy transation related tables - $pt_files = $this->PTFileModel->getPolicyDriveFilesIndex($policy_id, $policy_doc_name); - $batch_files = $this->batchFileModel->getBatchFilesDataForDocumentSearch($policy_id, $policy_doc_name); - $files = $this->filesModel->getFilesDataForDocumentSearch($policy_id, $policy_doc_name); - // dd($files); - // dd($this->PTFileModel->getLastQuery()); - // ~dd($pt_files); - } - if ($customer_id != "") { - $kyc_files = $this->clientKYCDocsModel->getClientKYCDriveFilesIndex($customer_id, $cus_doc_name); - // dd($this->clientKYCDocsModel->getLastQuery()); - // !dd($kyc_files); + + $invoiceStatus = $jsonData['invoice_status']; + $hiddenStatementId = $jsonData['hidden_statement_id']; + $invoiceNo = $jsonData['invoice_no']; + $invoiceDate = change_date_format($jsonData['invoice_date'], 'd/m/Y', 'Y-m-d'); + $invoice_amount = $jsonData['invoice_amount']; + $invoice_value = $jsonData['invoice_value']; + $gst_per = $jsonData['invoice_gst_per']; + $gst_value = $jsonData['invoice_gst']; + + //Update statement table + $parentData = [ + 'invoice_status' => $invoiceStatus, + 'invoice_no' => $invoiceNo, + 'invoice_date' => $invoiceDate, + 'invoice_amount' => $invoice_amount, + 'gst_per' => $gst_per, + 'gst_value' => $gst_value, + 'invoice_value' => $invoice_value, + 'updated_by' => get_session_userid() + ]; + + + + $this->insurerStatements->update($hiddenStatementId, $parentData); + + // Process child data + $receivedAmounts = $jsonData['received_amount']; + $utrNos = $jsonData['utr_no']; + $tdsTotal = $jsonData['tds']; + $gstTotal = $jsonData['gst_amount']; + $paymentDates = $jsonData['payment_date']; + $pks = $jsonData['pk']; + + foreach ($receivedAmounts as $index => $receivedAmount) { + $pk = $pks[$index]; // Get the pk for the current record + $utrNo = $utrNos[$index]; + $tds = $tdsTotal[$index]; + $gst = $gstTotal[$index]; + $paymentDate = $paymentDates[$index]; + + if($utrNo == "" && $tds == "" && $gst == "" && $receivedAmount == "") + { + continue; + } + // Prepare data for insert/update + $childData = [ + 'inv_amt' => $receivedAmount, + 'utr_no' => $utrNo, + 'tds' => $tds, + 'gst' => $gst, + 'received_date' => change_date_format($paymentDate, 'd/m/Y', 'Y-m-d'), + 'statement_id' => $hiddenStatementId + ]; + if ($pk) { + $childData['updated_by'] = get_session_userid(); + $childData['id'] = (int)$pk; + } else { + $childData['created_by'] = get_session_userid(); + } + // print_r($childData); + // Insert or update + $this->invPaymentDetailsModel->save($childData); + // print_r($this->invPaymentDetailsModel->errors()); + } - $data['files'] = array_merge($pt_files, $kyc_files, $batch_files, $files); - // dd($data['files']); - } - $data['tab_name'] = 'Documents Search'; - $data['page_name'] = 'Documents'; - - $data['customers'] = $this->clientModel->select('id,client_name,short_name as display_value')->where('is_active', 1)->get()->getResultarray(); - $data['policies'] = $this->clientPolicyModel->select("client_policy.id,client_policy.policy_no,policy_type.policy_type,concat(policy_type.policy_type,' - ',client_policy.policy_no) as display_value") - ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') - ->where('client_policy.is_active', 1)->get()->getResultarray(); - // dd($data); - $this->loadLayout('dms_search', $data); - } - - //--------------------------------------------------------------------------------------------------- - - public function getCoShareStatementDetails($pt_id) - { - if (!$pt_id) { - return $this->respond([ - 'status' => false, - 'code' => 400, - 'message' => 'No data found' - ], 200); + return $this->respond(['dataStatus' => true, 'code' => 200], 200); + //return $this->response->setJSON(['dataStatus' => 'true']); } - // Fetch data from the database - $data = db_connect()->table("co_share_stmt_details") - ->select(" - co_share_stmt_details.*, - insurer_statements.month, - insurer_statements.invoice_status, - insurer_statements.invoice_date, - insurer_statements.invoice_no, - insurer_statements.invoice_amount, - insurer_statements.stmt_sno, - (co_share_stmt_details.actual_bp_amt + co_share_stmt_details.actual_tp_amt + co_share_stmt_details.actual_tep_amt) AS sum_of_actual_amt - ") - ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id') - ->where([ - 'co_share_stmt_details.is_active' => 1, - 'insurer_statements.is_active' => 1, - 'co_share_stmt_details.co_share_id' => $pt_id - ]) - ->get() - ->getResultArray(); + public function deletePaymentEntry() + { + $payment_id = $this->request->getUri()->getSegment(4); + //echo $payment_id; + $this->invPaymentDetailsModel->update($payment_id, ['is_active' => 0]); + return $this->respond(['dataStatus' => true, 'code' => 200], 200); + } - // Check if data exists before formatting - if ($data) { + public function downloadSampleInsurerStatement() + { - foreach ($data as &$row) { - // Check if invoice_date is not null before formatting - $row['invoice_date'] = $row['invoice_date'] ? change_date_format($row['invoice_date'], 'Y-m-d', 'd/m/Y') : null; + $filePath = ROOTPATH . 'public/sample_excel/insurer_stament_sample.xlsx'; + // Check if the file exists + if (file_exists($filePath)) { - // Check if month is not null before formatting - $row['month'] = $row['month'] ? change_date_format($row['month'], 'Y-m-d', 'M-Y') : null; + // Set the appropriate MIME type + $mimeType = mime_content_type($filePath); + + // Send the file to the client for download + return $this->response->download($filePath, null, $mimeType); + } else { + // File not found, show an error message or redirect + echo view('errors/html/production'); + } + } + + public function getFileErr() + { + $file_id = $this->request->getUri()->getSegment(4); + $file = $this->insurerStatements->find($file_id); + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason']], 200); + } + + public function dmsSearch() + { + // echo 'scbsc';die(); + if ($this->request->is('post')) { + // $jsonData = (array)$this->request->getJSON(); + $customer_id = $this->request->getPost('customer_id'); + $policy_id = $this->request->getPost('policy_id'); + $cus_doc_name = $this->request->getPost('cus_doc_name'); + $policy_doc_name = $this->request->getPost('policy_doc_name'); + $pt_files = []; + $kyc_files = []; + $batch_files = []; + $files = []; + // print_r($jsonData);die(); + if ($policy_id != "") { + //get policy docs from policy transation related tables + $pt_files = $this->PTFileModel->getPolicyDriveFilesIndex($policy_id, $policy_doc_name); + $batch_files = $this->batchFileModel->getBatchFilesDataForDocumentSearch($policy_id, $policy_doc_name); + $files = $this->filesModel->getFilesDataForDocumentSearch($policy_id, $policy_doc_name); + // dd($files); + // dd($this->PTFileModel->getLastQuery()); + // ~dd($pt_files); + } + if ($customer_id != "") { + $kyc_files = $this->clientKYCDocsModel->getClientKYCDriveFilesIndex($customer_id, $cus_doc_name); + // dd($this->clientKYCDocsModel->getLastQuery()); + // !dd($kyc_files); + } + + $data['files'] = array_merge($pt_files, $kyc_files, $batch_files, $files); + // dd($data['files']); + } + $data['tab_name'] = 'Documents Search'; + $data['page_name'] = 'Documents'; + + $data['customers'] = $this->clientModel->select('id,client_name,short_name as display_value')->where('is_active', 1)->get()->getResultarray(); + $data['policies'] = $this->clientPolicyModel->select("client_policy.id,client_policy.policy_no,policy_type.policy_type,concat(policy_type.policy_type,' - ',client_policy.policy_no) as display_value") + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') + ->where('client_policy.is_active', 1)->get()->getResultarray(); + // dd($data); + $this->loadLayout('dms_search', $data); + } + + //--------------------------------------------------------------------------------------------------- + + public function getCoShareStatementDetails($pt_id) + { + if (!$pt_id) { + return $this->respond([ + 'status' => false, + 'code' => 400, + 'message' => 'No data found' + ], 200); } - return $this->respond([ - 'status' => true, - 'code' => 200, - 'data' => $data - ], 200); - } else { - return $this->respond([ - 'status' => false, - 'code' => 400, - 'message' => 'No data found' - ], 200); - } - } + // Fetch data from the database + $data = db_connect()->table("co_share_stmt_details") + ->select(" + co_share_stmt_details.*, + insurer_statements.month, + insurer_statements.invoice_status, + insurer_statements.invoice_date, + insurer_statements.invoice_no, + insurer_statements.invoice_amount, + insurer_statements.stmt_sno, + (co_share_stmt_details.actual_bp_amt + co_share_stmt_details.actual_tp_amt + co_share_stmt_details.actual_tep_amt) AS sum_of_actual_amt + ") + ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id') + ->where([ + 'co_share_stmt_details.is_active' => 1, + 'insurer_statements.is_active' => 1, + 'co_share_stmt_details.co_share_id' => $pt_id + ]) + ->get() + ->getResultArray(); - public function getClientPolicyDataBasedOnClientAndInsuer() - { + // Check if data exists before formatting + if ($data) { - $client_id = $this->request->getGet('client_id') ?? 0; - $client_branch_id = $this->request->getGet('client_branch_id') ?? 0; - $insurer_id = $this->request->getGet('insurer_id') ?? 0; - $insurer_branch_id = $this->request->getGet('insurer_branch_id') ?? 0; - $policy_type_id = $this->request->getGet('policy_type_id') ?? 0; + foreach ($data as &$row) { + // Check if invoice_date is not null before formatting + $row['invoice_date'] = $row['invoice_date'] ? change_date_format($row['invoice_date'], 'Y-m-d', 'd/m/Y') : null; - $builder = db_connect()->table("client_policy") - ->select(" - client_policy.*, - policy_type.policy_type, - ") - ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') - ->where([ - 'client_policy.is_active' => 1, - ]); + // Check if month is not null before formatting + $row['month'] = $row['month'] ? change_date_format($row['month'], 'Y-m-d', 'M-Y') : null; + } - if (!empty($client_id)) { - $builder->where('client_policy.client_id', $client_id); - } - if (!empty($client_branch_id)) { - $builder->where('client_policy.client_branch_id', $client_branch_id); - } - if (!empty($insurer_id)) { - $builder->where('client_policy.insurer_id', $insurer_id); - } - if (!empty($insurer_branch_id)) { - $builder->where('client_policy.insurer_branch_id', $insurer_branch_id); - } - if (!empty($policy_type_id)) { - $builder->where('client_policy.policy_type_id', $policy_type_id); + return $this->respond([ + 'status' => true, + 'code' => 200, + 'data' => $data + ], 200); + } else { + return $this->respond([ + 'status' => false, + 'code' => 400, + 'message' => 'No data found' + ], 200); + } } - $result = $builder->get()->getResultArray(); + public function getClientPolicyDataBasedOnClientAndInsuer() + { - if ($result) { - return $this->respond(['status' => true, 'code' => 200, 'data' => $result, 'getData' => $this->request->getGet()], 200); - } else { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found'], 200); - } - } + $client_id = $this->request->getGet('client_id') ?? 0; + $client_branch_id = $this->request->getGet('client_branch_id') ?? 0; + $insurer_id = $this->request->getGet('insurer_id') ?? 0; + $insurer_branch_id = $this->request->getGet('insurer_branch_id') ?? 0; + $policy_type_id = $this->request->getGet('policy_type_id') ?? 0; - public function checkCDAmountForBasePremium() - { - $base_premium = $this->request->getGet('base_premium') ?? 0; - $cd_ac_no = $this->request->getGet('cd_ac_no') ?? 0; + $builder = db_connect()->table("client_policy") + ->select(" + client_policy.*, + policy_type.policy_type, + ") + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') + ->where([ + 'client_policy.is_active' => 1, + ]); - // Validate inputs - if (empty($cd_ac_no)) { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'CD Account Number is required'], 200); + if (!empty($client_id)) { + $builder->where('client_policy.client_id', $client_id); + } + if (!empty($client_branch_id)) { + $builder->where('client_policy.client_branch_id', $client_branch_id); + } + if (!empty($insurer_id)) { + $builder->where('client_policy.insurer_id', $insurer_id); + } + if (!empty($insurer_branch_id)) { + $builder->where('client_policy.insurer_branch_id', $insurer_branch_id); + } + if (!empty($policy_type_id)) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + $result = $builder->get()->getResultArray(); + + if ($result) { + return $this->respond(['status' => true, 'code' => 200, 'data' => $result, 'getData' => $this->request->getGet()], 200); + } else { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found'], 200); + } } - // Build query - $db = db_connect(); - $builder = $db->table("cash_deposit") - ->where('cd_ac_pk', $cd_ac_no) - ->where('is_active', 1) - ->orderBy('id', 'desc') - ->limit(1); + public function checkCDAmountForBasePremium() + { + $base_premium = $this->request->getGet('base_premium') ?? 0; + $cd_ac_no = $this->request->getGet('cd_ac_no') ?? 0; - $result = $builder->get()->getRowArray(); + // Validate inputs + if (empty($cd_ac_no)) { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'CD Account Number is required'], 200); + } - if ($result) { - // Check if base premium exceeds balance - $base_premium_greater_than_balance = $base_premium > $result['balance']; + // Build query + $db = db_connect(); + $builder = $db->table("cash_deposit") + ->where('cd_ac_pk', $cd_ac_no) + ->where('is_active', 1) + ->orderBy('id', 'desc') + ->limit(1); - return $this->respond([ - 'status' => true, - 'code' => 200, - 'data' => $result, - 'base_premium' => $base_premium, - 'cd_ac_no' => $cd_ac_no, - 'base_premium_greater_than_balance' => $base_premium_greater_than_balance, - ], 200); + $result = $builder->get()->getRowArray(); + + if ($result) { + // Check if base premium exceeds balance + $base_premium_greater_than_balance = $base_premium > $result['balance']; + + return $this->respond([ + 'status' => true, + 'code' => 200, + 'data' => $result, + 'base_premium' => $base_premium, + 'cd_ac_no' => $cd_ac_no, + 'base_premium_greater_than_balance' => $base_premium_greater_than_balance, + ], 200); + } + + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found for this CD'], 200); } - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found for this CD'], 200); - } + public function getInsurerStatementMonth() + { + $insurer_id = $this->request->getGet('insurer_id'); + $month = $this->request->getGet('month'); + // echo $month; + $insurer_branch_id = explode('-', $insurer_id)[1]; + $insurer_id = explode('-', $insurer_id)[0]; + $month = $month . '-01'; + $month = change_date_format($month, 'Y-M-d', 'Y-m-d'); + // echo $month; - public function getInsurerStatementMonth() - { - $insurer_id = $this->request->getGet('insurer_id'); - $month = $this->request->getGet('month'); - // echo $month; - $insurer_branch_id = explode('-', $insurer_id)[1]; - $insurer_id = explode('-', $insurer_id)[0]; - $month = $month . '-01'; - $month = change_date_format($month, 'Y-M-d', 'Y-m-d'); - // echo $month; + $res_data = $this->insurerStatements + ->where('insurer_id', $insurer_id) + ->where('branch_id', $insurer_branch_id) + ->where('month', $month) + ->where('is_active', 1) + ->where('file_status', 'success') + ->findAll(); - $res_data = $this->insurerStatements - ->where('insurer_id', $insurer_id) - ->where('branch_id', $insurer_branch_id) - ->where('month', $month) - ->where('is_active', 1) - ->where('file_status', 'success') - ->findAll(); + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $res_data], 200); + } - return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $res_data], 200); - } + public function deleteStatement($id) + { + // echo $id;die(); + $this->coShareStmtDetailsModel->where('statement_id', $id) + ->set(['is_active' => 0]) + ->update(); + $this->invPaymentDetailsModel->where('statement_id', $id) + ->set(['is_active' => 0]) + ->update(); + $this->insurerStatements->where('id', $id) + ->set(['is_active' => 0]) + ->update(); + return $this->respond(['dataStatus' => true, 'code' => 200], 200); + } - public function deleteStatement($id) - { - // echo $id;die(); - $this->coShareStmtDetailsModel->where('statement_id', $id) - ->set(['is_active' => 0]) - ->update(); - $this->invPaymentDetailsModel->where('statement_id', $id) - ->set(['is_active' => 0]) - ->update(); - $this->insurerStatements->where('id', $id) - ->set(['is_active' => 0]) - ->update(); - return $this->respond(['dataStatus' => true, 'code' => 200], 200); - } + public function sendInstallmentRemainderMail() + { - public function sendInstallmentRemainderMail() - { - - $this->myLogger->logme("error", "Cron Job For Send Installment Remainder Mail Started"); - - try { + $this->myLogger->logme("error", "Cron Job For Send Installment Remainder Mail Started"); try { - $bdsInstallmentData = $this->BdsPlacementModel->getClientInstallmentDetails(); + try { + + $bdsInstallmentData = $this->BdsPlacementModel->getClientInstallmentDetails(); + } catch (Exception $e) { + + $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); + } + $this->myLogger->logme("error", "Data for BDS Installment " . json_encode($bdsInstallmentData)); + // dd($bdsInstallmentData); + + if (empty($bdsInstallmentData)) { + + $this->myLogger->logme("error", "No Client Installment is Due in the 15th Day"); + + return false; + } + + foreach ($bdsInstallmentData as $installmentData) { + + $mailData = $this->PrepareBDSMailData($installmentData); + $to_mail = $mailData['to_mail']; + $message = $mailData['message']; + $subject = $mailData['subject']; + + $this->myLogger->logme("error", "Installment Pending for" . $subject); + + $common = ['mail_type' => 'installment_amount_due_remainder_mail']; + + $res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]); + + $res = json_decode($res); + $this->myLogger->logme('error', 'res: ' . json_encode($res)); + + if ($res->status == 'success') { + return true; + } else { + return false; + } + } } catch (Exception $e) { $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); } - $this->myLogger->logme("error", "Data for BDS Installment " . json_encode($bdsInstallmentData)); - // dd($bdsInstallmentData); + } - if (empty($bdsInstallmentData)) { + protected function PrepareBDSMailData($data) + { - $this->myLogger->logme("error", "No Client Installment is Due in the 15th Day"); + try { - return false; + $installment_amount = $data['installment_amount']; + $payment_date = date('d-m-Y', strtotime($data['payment_date'])); + $client = $data['client_name']; + $branch = $data['branch_name']; + $sales_person_mail = $data['sales_person']; + $heads = $data['heads']; + $admins = $data['admins']; + $buisness_team = $data['buisness_team']; + $policy_no = $data['policy_no']; + $client_short_name = isset($data['short_name']) && $data['short_name'] != null ? $data['short_name'] : $data['client_name']; + + $subject = "Installment Amount Due For Client - {$client_short_name} - Policy NO({$policy_no}) is Due On - {$payment_date}"; + + $message = "Policy Installment for Client - {$client}, Branch - {$branch} is Due on {$payment_date} + with amount of {$installment_amount}.
+ Policy No : {$policy_no}"; + + + $to_mail = array_merge( + array_column($heads, 'email'), + array_column($admins, 'email'), + array_column($buisness_team, 'email'), + [$sales_person_mail] + ); + + $to_mail = array_unique($to_mail); + + $this->myLogger->logme("error", "Selected To Address : " . json_encode($to_mail)); + + // dd($to_mail); + return [ + 'to_mail' => $to_mail, + 'message' => $message, + 'subject' => $subject + ]; + } catch (Exception $e) { + + $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); + } + } + + public function getMoreInfo() + { + + $pt_id = $this->request->getPost("pt_id"); + $data_to_send['bds_data'] = $this->BdsPlacementModel->where("is_active", 1)->where("pt_id", $pt_id)->findAll(); + + foreach ($data_to_send['bds_data'] as &$data) { + + $data['payment_date'] = (new \DateTime($data['payment_date']))->format('d-m-Y'); } - foreach ($bdsInstallmentData as $installmentData) { + if (!empty($data_to_send)) { - $mailData = $this->PrepareBDSMailData($installmentData); - $to_mail = $mailData['to_mail']; - $message = $mailData['message']; - $subject = $mailData['subject']; + return $this->respond(['status' => true, "data" => $data_to_send], 200); + } else { - $this->myLogger->logme("error", "Installment Pending for" . $subject); + return $this->respond(['status' => false, "No Data Found For the Policy Transaction"], 404); + } + } - $common = ['mail_type' => 'installment_amount_due_remainder_mail']; + public function saveInstallment() + { - $res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]); + $installments = $this->request->getPost('installments'); - $res = json_decode($res); - $this->myLogger->logme('error', 'res: ' . json_encode($res)); + if (!$installments || !is_array($installments)) { + return $this->respond(['status' => false, 'message' => 'No data received'], 400); + } - if ($res->status == 'success') { - return true; - } else { - return false; + $this->myLogger->logme("error", json_encode($installments)); + // die(); + + foreach ($installments as &$row) { + // Convert date from d-m-Y to Y-m-d + if (!empty($row['payment_date'])) { + $date = \DateTime::createFromFormat('d-m-Y', $row['payment_date']); + if ($date) { + $row['payment_date'] = $date->format('Y-m-d'); + } } + $this->BdsPlacementModel->save($row); } - } catch (Exception $e) { - $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); - } - } - - protected function PrepareBDSMailData($data) - { - - try { - - $installment_amount = $data['installment_amount']; - $payment_date = date('d-m-Y', strtotime($data['payment_date'])); - $client = $data['client_name']; - $branch = $data['branch_name']; - $sales_person_mail = $data['sales_person']; - $heads = $data['heads']; - $admins = $data['admins']; - $buisness_team = $data['buisness_team']; - $policy_no = $data['policy_no']; - $client_short_name = isset($data['short_name']) && $data['short_name'] != null ? $data['short_name'] : $data['client_name']; - - $subject = "Installment Amount Due For Client - {$client_short_name} - Policy NO({$policy_no}) is Due On - {$payment_date}"; - - $message = "Policy Installment for Client - {$client}, Branch - {$branch} is Due on {$payment_date} - with amount of {$installment_amount}.
- Policy No : {$policy_no}"; - - - $to_mail = array_merge( - array_column($heads, 'email'), - array_column($admins, 'email'), - array_column($buisness_team, 'email'), - [$sales_person_mail] - ); - - $to_mail = array_unique($to_mail); - - $this->myLogger->logme("error", "Selected To Address : " . json_encode($to_mail)); - - // dd($to_mail); - return [ - 'to_mail' => $to_mail, - 'message' => $message, - 'subject' => $subject - ]; - } catch (Exception $e) { - - $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); - } - } - - public function getMoreInfo() - { - - $pt_id = $this->request->getPost("pt_id"); - $data_to_send['bds_data'] = $this->BdsPlacementModel->where("is_active", 1)->where("pt_id", $pt_id)->findAll(); - - foreach ($data_to_send['bds_data'] as &$data) { - - $data['payment_date'] = (new \DateTime($data['payment_date']))->format('d-m-Y'); + return $this->respond(['status' => true, 'message' => 'Data saved successfully'], 200); } - if (!empty($data_to_send)) { + protected function getPolicyForEndorsment() + { - return $this->respond(['status' => true, "data" => $data_to_send], 200); - } else { - - return $this->respond(['status' => false, "No Data Found For the Policy Transaction"], 404); - } - } - - public function saveInstallment() - { - - $installments = $this->request->getPost('installments'); - - if (!$installments || !is_array($installments)) { - return $this->respond(['status' => false, 'message' => 'No data received'], 400); - } - - $this->myLogger->logme("error", json_encode($installments)); - // die(); - - foreach ($installments as &$row) { - // Convert date from d-m-Y to Y-m-d - if (!empty($row['payment_date'])) { - $date = \DateTime::createFromFormat('d-m-Y', $row['payment_date']); - if ($date) { - $row['payment_date'] = $date->format('Y-m-d'); - } - } - $this->BdsPlacementModel->save($row); - } - - return $this->respond(['status' => true, 'message' => 'Data saved successfully'], 200); - } - - protected function getPolicyForEndorsment() - { - - $policyList = []; - $policyListByClient = []; + $policyList = []; + $policyListByClient = []; - $clients = $this->clientModel - ->select("*, DATE_FORMAT(dob, '%d-%m-%Y') as dob") - ->where('is_active', 1) + $clients = $this->clientModel + ->select("*, DATE_FORMAT(dob, '%d-%m-%Y') as dob") + ->where('is_active', 1) + ->findAll(); + + $clientIds = array_column($clients, 'id'); + + // $policies = $this->clientPolicyModel + // ->select(" + // client_policy.*, + // policy_type.policy_type, + // policy_type.ebp, + // policy_type.etp, + // policy_type.iep, + // policy_type.itp, + // policy_type.bap, + // policy_type.allocg, + // DATE_FORMAT(client_policy.policy_start_date, '%d/%m/%Y') as policy_start_date, + // DATE_FORMAT(client_policy.policy_end_date, '%d/%m/%Y') as policy_end_date + // ") + // ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + // ->join('policy_transaction pt', 'pt.client_policy_id = client_policy.id and pt.action_type = "inception" and pt.is_active = 1 and pt.client_policy_id is not null') + // ->whereIn('client_policy.client_id', $clientIds) + // ->where('client_policy.is_active', 1) + // ->findAll(); + + $policies = $this->policyTransactionModel + ->select(" + policy_transaction.*, + policy_type.policy_type, + policy_type.ebp, + policy_type.etp, + policy_type.iep, + policy_type.itp, + policy_type.bap, + policy_type.allocg, + DATE_FORMAT(policy_transaction.policy_start_date, '%d/%m/%Y') as policy_start_date, + DATE_FORMAT(policy_transaction.policy_end_date, '%d/%m/%Y') as policy_end_date + ") + ->join('policy_type', 'policy_type.id = policy_transaction.policy_type_id') + ->whereIn('policy_transaction.client_id', $clientIds) + ->where('policy_transaction.is_active', 1) + ->where('policy_transaction.action_type', "inception") ->findAll(); - $clientIds = array_column($clients, 'id'); + foreach ($policies as $policy) { + $policyList[$policy['client_branch_id']][] = $policy; + $policyListByClient[$policy['client_id']][] = $policy; + if (isset($policyCount[$policy['client_id']])) { + $policyCount[$policy['client_id']]++; + } else { + $policyCount[$policy['client_id']] = 1; + } + } - // $policies = $this->clientPolicyModel - // ->select(" - // client_policy.*, - // policy_type.policy_type, - // policy_type.ebp, - // policy_type.etp, - // policy_type.iep, - // policy_type.itp, - // policy_type.bap, - // policy_type.allocg, - // DATE_FORMAT(client_policy.policy_start_date, '%d/%m/%Y') as policy_start_date, - // DATE_FORMAT(client_policy.policy_end_date, '%d/%m/%Y') as policy_end_date - // ") - // ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') - // ->join('policy_transaction pt', 'pt.client_policy_id = client_policy.id and pt.action_type = "inception" and pt.is_active = 1 and pt.client_policy_id is not null') - // ->whereIn('client_policy.client_id', $clientIds) - // ->where('client_policy.is_active', 1) - // ->findAll(); + return [$policyList, $policyListByClient]; + } - $policies = $this->policyTransactionModel - ->select(" - policy_transaction.*, - policy_type.policy_type, - policy_type.ebp, - policy_type.etp, - policy_type.iep, - policy_type.itp, - policy_type.bap, - policy_type.allocg, - DATE_FORMAT(policy_transaction.policy_start_date, '%d/%m/%Y') as policy_start_date, - DATE_FORMAT(policy_transaction.policy_end_date, '%d/%m/%Y') as policy_end_date - ") - ->join('policy_type', 'policy_type.id = policy_transaction.policy_type_id') - ->whereIn('policy_transaction.client_id', $clientIds) - ->where('policy_transaction.is_active', 1) - ->where('policy_transaction.action_type', "inception") - ->findAll(); - foreach ($policies as $policy) { - $policyList[$policy['client_branch_id']][] = $policy; - $policyListByClient[$policy['client_id']][] = $policy; - if (isset($policyCount[$policy['client_id']])) { - $policyCount[$policy['client_id']]++; - } else { - $policyCount[$policy['client_id']] = 1; + public function reportBDSNew() + { + // 🧭 Basic Page Info + $data['tab_name'] = 'BDS Report'; + $data['page_name'] = 'BDS Report'; + + // 📋 Dropdown Data + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['client_type'] = [1 => 'Group', 2 => 'Individual']; + $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; + $data['policy_status'] = [ + 'pending' => 'Pending', + 'exported_to_insurer' => 'Exported to Insurer', + 'imported_from_insurer'=> 'Imported from Insurer', + 'exported_to_tpa' => 'Exported to TPA', + 'imported_from_tpa' => 'Imported from TPA', + 'completed' => 'Completed' + ]; + $data['invoice_status_array'] = [ + 'yet_to_generate' => 'Yet to Generate', + 'generated' => 'Generated', + 'send' => 'Send', + 'recived' => 'Recived', + ]; + $data['date_type'] = [ + 'policy_issue_date' => 'Policy Issue Date', + 'policy_start_date' => 'Policy Start Date', + 'policy_end_date' => 'Policy End Date', + 'data_received_date' => 'Data Received Date', + 'closure_date' => 'Closure Date', + 'statement_month' => 'Statement Month', + ]; + + // 🏢 Fetch Active Data + $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); + $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); + $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); + $data['users'] = $this->userModel->where('is_active', 1)->findAll(); + $data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults(); + + // 🕐 Filters + $start_date = $this->request->getGet('start_date'); + $end_date = $this->request->getGet('end_date'); + $client_id = $this->request->getGet('client_id'); + $insurer_id = $this->request->getGet('insurer_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $date_type = $this->request->getGet('date_type'); + $issuer = $this->request->getGet('issuer'); + $client_branch_id = $this->request->getGet('client_branch_id'); + $insurer_branch_id = $this->request->getGet('insurer_branch_id'); + $client_policy_id = $this->request->getGet('client_policy_id'); + $user_id = $this->request->getGet('user_id'); + + // Handle statement month range + if ($date_type == 'statement_month') { + $start_date = (string) date('Y-m-01', strtotime($start_date)); + $end_date = (string) date('Y-m-31', strtotime($end_date)); + } + + // Ensure default values + $start_date = $start_date ?: 0; + $end_date = $end_date ?: 0; + $client_id = $client_id ?: 0; + $insurer_id = $insurer_id ?: 0; + $policy_type_id = $policy_type_id ?: 0; + $date_type = $date_type ?: 0; + $issuer = $issuer ?: 0; + $client_branch_id = $client_branch_id ?: 0; + $insurer_branch_id = $insurer_branch_id ?: 0; + $client_policy_id = $client_policy_id ?: 0; + $user_id = $user_id ?: 0; + + // 🧾 Handle POST requests (Dashboard filters) + if ($this->request->is('post')) { + $isFromDashboard = $this->request->getPost('is_dashboard'); + + if (!empty($isFromDashboard) && $isFromDashboard == 1) { + $ids = array_filter(explode(',', $this->request->getPost('ids'))); + + if (!empty($ids)) { + $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs + $where = "policy_transaction.id IN ($idsStr)"; + } else { + $where = []; // No valid IDs + } } } - return [$policyList, $policyListByClient]; + // 📊 Fetch report data + $data['report_list'] = $this->policyTransactionModel->reportBDSNew( + $start_date, + $end_date, + $client_id, + $insurer_id, + $policy_type_id, + $date_type, + $issuer, + $client_branch_id, + $insurer_branch_id, + $client_policy_id, + $user_id, + $where ?? '' + ); + + // 🧩 Load View + $this->loadLayout('report_bds_filter', $data); } -public function reportBDSNew() -{ - // 🧭 Basic Page Info - $data['tab_name'] = 'BDS Report'; - $data['page_name'] = 'BDS Report'; - // 📋 Dropdown Data - $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; - $data['client_type'] = [1 => 'Group', 2 => 'Individual']; - $data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; - $data['policy_status'] = [ - 'pending' => 'Pending', - 'exported_to_insurer' => 'Exported to Insurer', - 'imported_from_insurer'=> 'Imported from Insurer', - 'exported_to_tpa' => 'Exported to TPA', - 'imported_from_tpa' => 'Imported from TPA', - 'completed' => 'Completed' - ]; - $data['invoice_status_array'] = [ - 'yet_to_generate' => 'Yet to Generate', - 'generated' => 'Generated', - 'send' => 'Send', - 'recived' => 'Recived', - ]; - $data['date_type'] = [ - 'policy_issue_date' => 'Policy Issue Date', - 'policy_start_date' => 'Policy Start Date', - 'policy_end_date' => 'Policy End Date', - 'data_received_date' => 'Data Received Date', - 'closure_date' => 'Closure Date', - 'statement_month' => 'Statement Month', - ]; - - // 🏢 Fetch Active Data - $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll(); - $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); - $data['clients'] = $this->clientModel->where('is_active', 1)->findAll(); - $data['users'] = $this->userModel->where('is_active', 1)->findAll(); - $data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults(); - - // 🕐 Filters - $start_date = $this->request->getGet('start_date'); - $end_date = $this->request->getGet('end_date'); - $client_id = $this->request->getGet('client_id'); - $insurer_id = $this->request->getGet('insurer_id'); - $policy_type_id = $this->request->getGet('policy_type_id'); - $date_type = $this->request->getGet('date_type'); - $issuer = $this->request->getGet('issuer'); - $client_branch_id = $this->request->getGet('client_branch_id'); - $insurer_branch_id = $this->request->getGet('insurer_branch_id'); - $client_policy_id = $this->request->getGet('client_policy_id'); - $user_id = $this->request->getGet('user_id'); - - // Handle statement month range - if ($date_type == 'statement_month') { - $start_date = (string) date('Y-m-01', strtotime($start_date)); - $end_date = (string) date('Y-m-31', strtotime($end_date)); } - - // Ensure default values - $start_date = $start_date ?: 0; - $end_date = $end_date ?: 0; - $client_id = $client_id ?: 0; - $insurer_id = $insurer_id ?: 0; - $policy_type_id = $policy_type_id ?: 0; - $date_type = $date_type ?: 0; - $issuer = $issuer ?: 0; - $client_branch_id = $client_branch_id ?: 0; - $insurer_branch_id = $insurer_branch_id ?: 0; - $client_policy_id = $client_policy_id ?: 0; - $user_id = $user_id ?: 0; - - // 🧾 Handle POST requests (Dashboard filters) - if ($this->request->is('post')) { - $isFromDashboard = $this->request->getPost('is_dashboard'); - - if (!empty($isFromDashboard) && $isFromDashboard == 1) { - $ids = array_filter(explode(',', $this->request->getPost('ids'))); - - if (!empty($ids)) { - $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs - $where = "policy_transaction.id IN ($idsStr)"; - } else { - $where = []; // No valid IDs - } - } - } - - // 📊 Fetch report data - $data['report_list'] = $this->policyTransactionModel->reportBDSNew( - $start_date, - $end_date, - $client_id, - $insurer_id, - $policy_type_id, - $date_type, - $issuer, - $client_branch_id, - $insurer_branch_id, - $client_policy_id, - $user_id, - $where ?? '' - ); - - // 🧩 Load View - $this->loadLayout('report_bds_filter', $data); -} - - - -} diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index e9f6e8cc..e988f0c3 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -1,1095 +1,772 @@ db->table('policy_transaction') + ->select(" + policy_transaction.*, + DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, + DATE_FORMAT( + IF(policy_transaction.month IS NULL, + policy_transaction.policy_issue_date, + policy_transaction.month), + '%b %Y') AS policy_issue_month, + CASE + WHEN clients.client_type = 1 THEN 'Group' + WHEN clients.client_type = 2 THEN 'Retail' + ELSE '-' + END AS client_type, + CASE + WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' + ELSE 'Renewal' + END AS revenue_type, + CASE + WHEN policy_transaction.action_type = 'inception' THEN 'Policy' + ELSE 'Endorsement' + END AS action_type, + clients.client_name AS client_name, + clients.short_name AS client_short_name, + client_branch.branch_name AS client_branch_name, + client_branch.address1 AS client_address, + policy_type.policy_type, + policy_type.bap, + insurers.name AS insurer_name, + insurers.short_name AS insurer_short_name, + insurer_branch.branch_name AS insurer_branch_name, + insurer_branch.branch_code AS insurer_branch_code, + user_profiles.first_name as user_name, + vehicle.vehicle_no, + tpa.name as tpa_name, + pt_co_share_details.remark as remarks, + pt_co_share_details.reward, + pt_co_share_details.bp_amt, + sales_user.first_name as salse_person_name, + service_user.first_name as service_person_name, - // BDS Report OLD Functin for QUERY - // public function getBDSReportList($client_id, $policy_id, $branch_id, $issuer) - public function getBDSReportListOld($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0) - { - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.*, - DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, - DATE_FORMAT( - IF(policy_transaction.month IS NULL, - policy_transaction.policy_issue_date, - policy_transaction.month), - '%b %Y') AS policy_issue_month, - CASE - WHEN clients.client_type = 1 THEN 'Group' - WHEN clients.client_type = 2 THEN 'Retail' - ELSE '-' - END AS client_type, - CASE - WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' - ELSE 'Renewal' - END AS revenue_type, - CASE - WHEN policy_transaction.action_type = 'inception' THEN 'Policy' - ELSE 'Endorsement' - END AS action_type, - clients.client_name AS client_name, - clients.short_name AS client_short_name, - client_branch.branch_name AS client_branch_name, - client_branch.address1 AS client_address, - policy_type.policy_type, - policy_type.bap, - insurers.name AS insurer_name, - insurers.short_name AS insurer_short_name, - insurer_branch.branch_name AS insurer_branch_name, - insurer_branch.branch_code AS insurer_branch_code, - user_profiles.first_name as user_name, - vehicle.vehicle_no, - tpa.name as tpa_name, - pt_co_share_details.remark as remarks, - pt_co_share_details.reward, - pt_co_share_details.bp_amt, - sales_user.first_name as salse_person_name, - service_user.first_name as service_person_name, + ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS premium_wo_gst, - ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS premium_wo_gst, + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2) AS gst_amount, - ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2) AS gst_amount, + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, - ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, + ROUND((pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS tp_or_ter, - ROUND((pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS tp_or_ter, + DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, + pt_co_share_details.agreed_bp_per, - pt_co_share_details.agreed_bp_per, - - ROUND( - (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + - (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, - 2) AS total_irda, - - ROUND( - (ROUND( + ROUND( (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, - 2) * 18 / 100), - 2) AS gst_on_revenue, + 2) AS total_irda, - ROUND( - (ROUND( - (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + - (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, - 2) + ROUND( (ROUND( (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, 2) * 18 / 100), - 2)), - 2) AS total_amt_received, - insurer_statements.invoice_date, - insurer_statements.invoice_no, - insurer_statements.invoice_amount, - - ( - SELECT - (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) AS realization_amount - FROM - inv_payment_details - WHERE - inv_payment_details.statement_id = insurer_statements.id - AND inv_payment_details.is_active = 1 - - ) AS realization_amount, + 2) AS gst_on_revenue, ROUND( - insurer_statements.invoice_amount - - ( - SELECT - (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) - FROM - inv_payment_details - WHERE - inv_payment_details.statement_id = insurer_statements.id - AND inv_payment_details.is_active = 1 - ), - 2) AS outstanding_amount, + (ROUND( + (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + + (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, + 2) + + ROUND( + (ROUND( + (pt_co_share_details.bp_amt * pt_co_share_details.agreed_bp_per + + (pt_co_share_details.tp_amt + pt_co_share_details.tep_amt) * + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per)) / 100, + 2) * 18 / 100), + 2)), + 2) AS total_amt_received, + insurer_statements.invoice_date, + insurer_statements.invoice_no, + insurer_statements.invoice_amount, ( - SELECT - GROUP_CONCAT(inv_payment_details.utr_no SEPARATOR ', ') AS utr_numbers - FROM - inv_payment_details - WHERE - inv_payment_details.statement_id = insurer_statements.id - AND inv_payment_details.is_active = 1 - ) AS utr_numbers, - - ( - SELECT - GROUP_CONCAT(inv_payment_details.received_date SEPARATOR ', ') AS payment_dates - FROM - inv_payment_details - WHERE - inv_payment_details.statement_id = insurer_statements.id - AND inv_payment_details.is_active = 1 - ) AS payment_dates - - ") - ->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') - ->join('clients', 'clients.id = policy_transaction.client_id') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join('insurers', 'policy_transaction.insurer_id = insurers.id', 'left') - ->join('insurer_branch', 'policy_transaction.insurer_branch_id = insurer_branch.id', 'left') - ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') - ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') - ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') - ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->where('policy_transaction.is_active', 1); - - // Check if the start date and end date are provided - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { - - // $fromDate = date('Y-m-d', strtotime('-30 days')); - // $toDate = date('Y-m-d 23:59:59'); - - // $builder->where('policy_transaction.created_at >=', $fromDate) - // ->where('policy_transaction.created_at <=', $toDate); - } - - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { - - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - // BDS Report NEW Functin for QUERY - // public function getBDSReportList($client_id, $policy_id, $branch_id, $issuer) - - // public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0) - // { - - // $date_condition = ''; - // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - // $date_condition = " - // AND insurer_statements.month >= '".$start_date ."' - // AND insurer_statements.month <= '".$end_date ."' - // "; - // } - - // $builder = $this->db->table('policy_transaction') - // ->select(" - // policy_transaction.*, - // DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, - // DATE_FORMAT( - // IF(policy_transaction.month IS NULL, - // policy_transaction.policy_issue_date, - // policy_transaction.month), - // '%b %Y') AS policy_issue_month, - // CASE - // WHEN clients.client_type = 1 THEN 'Group' - // WHEN clients.client_type = 2 THEN 'Retail' - // ELSE '-' - // END AS client_type, - // CASE - // WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' - // ELSE 'Renewal' - // END AS revenue_type, - // CASE - // WHEN policy_transaction.action_type = 'inception' THEN 'Policy' - // ELSE 'Endorsement' - // END AS action_type, - // clients.client_name AS client_name, - // clients.short_name AS client_short_name, - // client_branch.branch_name AS client_branch_name, - // client_branch.address1 AS client_address, - // policy_type.policy_type, - // policy_type.bap, - // insurers.name AS insurer_name, - // insurers.short_name AS insurer_short_name, - // insurer_branch.branch_name AS insurer_branch_name, - // insurer_branch.branch_code AS insurer_branch_code, - // user_profiles.first_name as user_name, - // vehicle.vehicle_no, - // tpa.name as tpa_name, - // pt_co_share_details.remark as remarks, - // pt_co_share_details.bp_amt, - // pt_co_share_details.exp_amt, - // pt_co_share_details.id as pt_id, - // sales_user.first_name as salse_person_name, - // service_user.first_name as service_person_name, - - // ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS premium_wo_gst, - - // ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2) AS gst_amount, - - // ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, - - // ROUND((pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS tp_or_ter, - - // DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - - // (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - - // pt_co_share_details.agreed_bp_per, - // ROUND( - // ( - // SELECT - // ( - // SUM(co_share_stmt_details.actual_bp_brokerage_amt) + - // SUM(co_share_stmt_details.actual_tp_brokerage_amt) + - // SUM(co_share_stmt_details.actual_tep_brokerage_amt) + - // SUM(co_share_stmt_details.reward) - - // ) AS total_irda_amt - // FROM - // co_share_stmt_details - // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - // WHERE - // co_share_stmt_details.co_share_id = pt_co_share_details.id - // AND co_share_stmt_details.is_active = 1 - // AND insurer_statements.is_active = 1 - // $date_condition - // ), - // 2 - // ) AS total_irda_amt, - // ROUND( - // ( - // SELECT - // ( - // SUM(co_share_stmt_details.reward) - - // ) AS reward - // FROM - // co_share_stmt_details - // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - // WHERE - // co_share_stmt_details.co_share_id = pt_co_share_details.id - // AND co_share_stmt_details.is_active = 1 - // AND insurer_statements.is_active = 1 - // $date_condition - // ), - // 2 - // ) AS reward, - - // ROUND( - // ( - // SELECT - // SUM( - // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + - // COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + - // COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + - // COALESCE(co_share_stmt_details.reward, 0) - // ) AS total_irda_amt - // FROM - // co_share_stmt_details - // JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id - // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - // WHERE - // co_share_stmt_details.co_share_id = pt_co_share_details.id - // AND co_share_stmt_details.is_active = 1 - // AND pt_table.is_active = 1 - // AND insurer_statements.is_active = 1 - // AND insurer_statements.invoice_status IS NOT NULL - // $date_condition - - // ), - // 2 - // ) AS billed_amt, - - // ROUND( - // ( - // ( - // SELECT - // SUM( - // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.reward, 0) - // ) - // FROM - // co_share_stmt_details - // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - // WHERE - // co_share_stmt_details.co_share_id = pt_co_share_details.id - // AND co_share_stmt_details.is_active = 1 - // $date_condition - // ) - // - - // ( - // SELECT - // SUM( - // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) - // + COALESCE(co_share_stmt_details.reward, 0) - // ) - // FROM - // co_share_stmt_details - // JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id - // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - // WHERE - // co_share_stmt_details.co_share_id = pt_co_share_details.id - // AND co_share_stmt_details.is_active = 1 - // AND pt_table.is_active = 1 - // AND insurer_statements.is_active = 1 - // AND insurer_statements.invoice_status IS NULL - // $date_condition - // ) - // ), - // 2 - // ) AS unbilled_amt - - // ") - // ->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') - // ->join('clients', 'clients.id = policy_transaction.client_id') - // ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - // ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - // ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - // ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') - // ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - // ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - // ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') - // ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') - // ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') - // ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') - // ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - // ->where('policy_transaction.is_active', 1) - // ->where('pt_co_share_details.is_active', 1); - - // // Check if the start date and end date are provided - // if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { - - // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - // $builder->where('policy_transaction.'.$date_type.'>=', $startDate) - // ->where('policy_transaction.'.$date_type.'<=', $endDate); - - // } - - // // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){ - - // // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - // // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - // // $builder->where('policy_transaction.month >=', $startDate) - // // ->where('policy_transaction.month <=', $endDate); - // // } - - // // Conditionally join insurer_statements if $date_type == 'statement_month' - // if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - // $startDate = date('Y-m-d', strtotime($start_date)); - // $endDate = date('Y-m-d', strtotime($end_date)); - - // $builder->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id', 'left') - // ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id','left') - // ->where('insurer_statements.is_active', 1) - // ->where('insurer_statements.month >=', $startDate) - // ->where('insurer_statements.month <=', $endDate) - // ->groupBy('co_share_stmt_details.co_share_id'); - // } - - // if ($client_id != 0) { - // $builder->where('policy_transaction.client_id', $client_id); - // } - - // if ($insurer_id != 0) { - // $builder->where('policy_transaction.insurer_id', $insurer_id); - // } - - // if ($client_branch_id != 0) { - // $builder->where('policy_transaction.client_branch_id', $client_branch_id); - // } - - // if ($insurer_branch_id != 0) { - // $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); - // } - - // if ($client_policy_id != 0) { - // $builder->where('policy_transaction.client_policy_id', $client_policy_id); - // } - - - - // if ($policy_type_id != 0) { - // $builder->where('client_policy.policy_type_id', $policy_type_id); - // } - - // if ($issuer != 0) { - // $builder->where('policy_transaction.issuer', $issuer); - // } - - // if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ - - // $fromDate = date('Y-m-d', strtotime('-30 days')); - // $toDate = date('Y-m-d 23:59:59'); - - // $builder->where('policy_transaction.created_at >=', $fromDate) - // ->where('policy_transaction.created_at <=', $toDate); - - // } - - // $builder->orderBy('policy_transaction.id', 'desc'); - - // $result = $builder->get()->getResultArray(); - - // // dd($this->db->getLastQuery()); - - // return $result; - // } - - public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = []) - { - - $date_condition = ''; - if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - $date_condition = " - AND insurer_statements.month >= '" . $start_date . "' - AND insurer_statements.month <= '" . $end_date . "' - "; - } - - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.*, - DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, - DATE_FORMAT( - IF(policy_transaction.month IS NULL, - policy_transaction.policy_issue_date, - policy_transaction.month), - '%b %Y') AS policy_issue_month, - CASE - WHEN clients.client_type = 1 THEN 'Group' - WHEN clients.client_type = 2 THEN 'Retail' - ELSE '-' - END AS client_type, - CASE - WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' - ELSE 'Renewal' - END AS revenue_type, - CASE - WHEN policy_transaction.action_type = 'inception' THEN 'Policy' - ELSE 'Endorsement' - END AS action_type, - clients.client_name AS client_name, - clients.short_name AS client_short_name, - client_branch.branch_name AS client_branch_name, - client_branch.address1 AS client_address, - policy_type.policy_type, - policy_type.bap, - insurers.name AS insurer_name, - insurers.short_name AS insurer_short_name, - insurer_branch.branch_name AS insurer_branch_name, - insurer_branch.branch_code AS insurer_branch_code, - user_profiles.first_name as user_name, - vehicle.vehicle_no, - tpa.name as tpa_name, - pt_co_share_details.remark as remarks, - pt_co_share_details.cop_amt as bp_amt, - pt_co_share_details.exp_amt, - pt_co_share_details.id as pt_id, - sales_user.first_name as salse_person_name, - service_user.first_name as service_person_name, - - ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) AS premium_wo_gst, - - ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) * 18 / 100), 2) AS gst_amount, - - ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) + ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, - - ROUND((pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) AS tp_or_ter, - - DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - - pt_co_share_details.agreed_bp_per, - ROUND( - ( - SELECT - ( - SUM(co_share_stmt_details.actual_bp_brokerage_amt) + - SUM(co_share_stmt_details.actual_tp_brokerage_amt) + - SUM(co_share_stmt_details.actual_tep_brokerage_amt) + - SUM(co_share_stmt_details.reward) - - ) AS total_irda_amt - FROM - co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND insurer_statements.is_active = 1 - $date_condition - ), - 2 - ) AS total_irda_amt, - ROUND( - ( - SELECT - ( - SUM(co_share_stmt_details.reward) - - ) AS reward - FROM - co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND insurer_statements.is_active = 1 - $date_condition - ), - 2 - ) AS reward, - - ROUND( - ( - SELECT - SUM( - COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.reward, 0) - ) AS total_irda_amt - FROM - co_share_stmt_details - JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND pt_table.is_active = 1 - AND insurer_statements.is_active = 1 - AND insurer_statements.invoice_status IS NOT NULL - $date_condition - - ), - 2 - ) AS billed_amt, - - ROUND( - ( - ( - SELECT - SUM( - COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.reward, 0) - ) - FROM - co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - $date_condition - ) - - - ( - SELECT - SUM( - COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) - + COALESCE(co_share_stmt_details.reward, 0) - ) - FROM - co_share_stmt_details - JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND pt_table.is_active = 1 - AND insurer_statements.is_active = 1 - AND insurer_statements.invoice_status IS NULL - $date_condition - ) - ), - 2 - ) AS unbilled_amt, - 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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('clients', 'clients.id = policy_transaction.client_id') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') - ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') - ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') - ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') - ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') - ->where('policy_transaction.is_active', 1) - ->where('pt_co_share_details.is_active', 1); - - if ( - (!in_array(get_role_id(), [1, 5])) && - !( - in_array(MANAGEMENT_TEAM_ID, user_team()) || - in_array(FINANCE_TEAM_ID, user_team()) || - in_array(BUSINESS_TEAM_ID, user_team()) - ) - ) { - if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { - $builder->where('policy_transaction.created_by', get_session_userid()); + SELECT + (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) AS realization_amount + FROM + inv_payment_details + WHERE + inv_payment_details.statement_id = insurer_statements.id + AND inv_payment_details.is_active = 1 + + ) AS realization_amount, + + ROUND( + insurer_statements.invoice_amount - + ( + SELECT + (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) + FROM + inv_payment_details + WHERE + inv_payment_details.statement_id = insurer_statements.id + AND inv_payment_details.is_active = 1 + ), + 2) AS outstanding_amount, + + ( + SELECT + GROUP_CONCAT(inv_payment_details.utr_no SEPARATOR ', ') AS utr_numbers + FROM + inv_payment_details + WHERE + inv_payment_details.statement_id = insurer_statements.id + AND inv_payment_details.is_active = 1 + ) AS utr_numbers, + + ( + SELECT + GROUP_CONCAT(inv_payment_details.received_date SEPARATOR ', ') AS payment_dates + FROM + inv_payment_details + WHERE + inv_payment_details.statement_id = insurer_statements.id + AND inv_payment_details.is_active = 1 + ) AS payment_dates + + ") + ->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') + ->join('clients', 'clients.id = policy_transaction.client_id') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join('insurers', 'policy_transaction.insurer_id = insurers.id', 'left') + ->join('insurer_branch', 'policy_transaction.insurer_branch_id = insurer_branch.id', 'left') + ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') + ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') + ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') + ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') + ->where('policy_transaction.is_active', 1); + + // Check if the start date and end date are provided + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { + + // $fromDate = date('Y-m-d', strtotime('-30 days')); + // $toDate = date('Y-m-d 23:59:59'); + + // $builder->where('policy_transaction.created_at >=', $fromDate) + // ->where('policy_transaction.created_at <=', $toDate); } - } - if (!empty($where)) { - log_message('info', 'Where condition: ' . json_encode($where)); - $builder->where($where); - } - // Check if the start date and end date are provided - if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } - // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){ + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } - // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - // $builder->where('policy_transaction.month >=', $startDate) - // ->where('policy_transaction.month <=', $endDate); - // } + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } - // Conditionally join insurer_statements if $date_type == 'statement_month' - if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - $startDate = date('Y-m-d', strtotime($start_date)); - $endDate = date('Y-m-d', strtotime($end_date)); + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { - $builder->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id', 'left') - ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id', 'left') - ->where('insurer_statements.is_active', 1) - ->where('insurer_statements.month >=', $startDate) - ->where('insurer_statements.month <=', $endDate) - ->groupBy('co_share_stmt_details.co_share_id'); - } + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($client_branch_id != 0) { - $builder->where('policy_transaction.client_branch_id', $client_branch_id); - } - - if ($insurer_branch_id != 0) { - $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); - } - - if ($client_policy_id != 0) { - $builder->where('policy_transaction.client_policy_id', $client_policy_id); - } - - if ($user_id != 0) { - $builder->where('policy_transaction.created_by', $user_id); - } - - - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { - - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - if (empty($where)) { $builder->where('policy_transaction.created_at >=', $fromDate) ->where('policy_transaction.created_at <=', $toDate); } + + $builder->orderBy('policy_transaction.id', 'desc'); + + return $builder->get()->getResultArray(); } - $builder->orderBy('policy_transaction.id', 'desc'); + // BDS Report NEW Functin for QUERY + // public function getBDSReportList($client_id, $policy_id, $branch_id, $issuer) - $result = $builder->get()->getResultArray(); + // public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0) + // { - // dd($this->db->getLastQuery()); + // $date_condition = ''; + // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + // $date_condition = " + // AND insurer_statements.month >= '".$start_date ."' + // AND insurer_statements.month <= '".$end_date ."' + // "; + // } - return $result; - } + // $builder = $this->db->table('policy_transaction') + // ->select(" + // policy_transaction.*, + // DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, + // DATE_FORMAT( + // IF(policy_transaction.month IS NULL, + // policy_transaction.policy_issue_date, + // policy_transaction.month), + // '%b %Y') AS policy_issue_month, + // CASE + // WHEN clients.client_type = 1 THEN 'Group' + // WHEN clients.client_type = 2 THEN 'Retail' + // ELSE '-' + // END AS client_type, + // CASE + // WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' + // ELSE 'Renewal' + // END AS revenue_type, + // CASE + // WHEN policy_transaction.action_type = 'inception' THEN 'Policy' + // ELSE 'Endorsement' + // END AS action_type, + // clients.client_name AS client_name, + // clients.short_name AS client_short_name, + // client_branch.branch_name AS client_branch_name, + // client_branch.address1 AS client_address, + // policy_type.policy_type, + // policy_type.bap, + // insurers.name AS insurer_name, + // insurers.short_name AS insurer_short_name, + // insurer_branch.branch_name AS insurer_branch_name, + // insurer_branch.branch_code AS insurer_branch_code, + // user_profiles.first_name as user_name, + // vehicle.vehicle_no, + // tpa.name as tpa_name, + // pt_co_share_details.remark as remarks, + // pt_co_share_details.bp_amt, + // pt_co_share_details.exp_amt, + // pt_co_share_details.id as pt_id, + // sales_user.first_name as salse_person_name, + // service_user.first_name as service_person_name, - // public function getInceptionTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) - // { - // // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); - // $builder = $this->db->table('policy_transaction') - // ->select(' - // policy_transaction.*, - // clients.short_name AS client_short_name, - // clients.client_code, - // clients.client_type, - // clients.client_name, - // client_branch.branch_name AS client_branch_name, - // insurers.name AS insurer_name, - // insurers.short_name AS insurer_short_name, - // policy_type.policy_type, - // pt_co_share_details.agreed_amt AS amount, - // pt_co_share_details.bp_amt AS bp, - // pt_co_share_details.tp_amt AS tp - // ') - // ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') - // ->join('clients', 'clients.id = policy_transaction.client_id', 'left') - // ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - // ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - // ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - // ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - // ->where('policy_transaction.is_active', 1) - // ->where('policy_transaction.action_type', 'inception'); + // ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS premium_wo_gst, - // if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + // ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2) AS gst_amount, - // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + // ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) + ROUND((ROUND((pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, - // $builder->where('policy_transaction.'.$date_type.'>=', $startDate) - // ->where('policy_transaction.'.$date_type.'<=', $endDate); - // }else{ + // ROUND((pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 2) AS tp_or_ter, - // // $fromDate = date('Y-m-d', strtotime('-30 days')); - // // $toDate = date('Y-m-d 23:59:59'); + // DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - // // $builder->where('policy_transaction.created_at >=', $fromDate) - // // ->where('policy_transaction.created_at <=', $toDate); - // } + // (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - // if ($client_id != 0) { - // $builder->where('policy_transaction.client_id', $client_id); - // } + // pt_co_share_details.agreed_bp_per, + // ROUND( + // ( + // SELECT + // ( + // SUM(co_share_stmt_details.actual_bp_brokerage_amt) + + // SUM(co_share_stmt_details.actual_tp_brokerage_amt) + + // SUM(co_share_stmt_details.actual_tep_brokerage_amt) + + // SUM(co_share_stmt_details.reward) - // if ($insurer_id != 0) { - // $builder->where('policy_transaction.insurer_id', $insurer_id); - // } + // ) AS total_irda_amt + // FROM + // co_share_stmt_details + // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + // WHERE + // co_share_stmt_details.co_share_id = pt_co_share_details.id + // AND co_share_stmt_details.is_active = 1 + // AND insurer_statements.is_active = 1 + // $date_condition + // ), + // 2 + // ) AS total_irda_amt, + // ROUND( + // ( + // SELECT + // ( + // SUM(co_share_stmt_details.reward) - // if ($policy_type_id != 0) { - // $builder->where('client_policy.policy_type_id', $policy_type_id); - // } + // ) AS reward + // FROM + // co_share_stmt_details + // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + // WHERE + // co_share_stmt_details.co_share_id = pt_co_share_details.id + // AND co_share_stmt_details.is_active = 1 + // AND insurer_statements.is_active = 1 + // $date_condition + // ), + // 2 + // ) AS reward, - // if ($issuer != 0) { - // $builder->where('policy_transaction.issuer', $issuer); - // } - // if ($status != 0) { - // $builder->where('policy_transaction.status', $status); - // } + // ROUND( + // ( + // SELECT + // SUM( + // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + + // COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + + // COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + + // COALESCE(co_share_stmt_details.reward, 0) + // ) AS total_irda_amt + // FROM + // co_share_stmt_details + // JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id + // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + // WHERE + // co_share_stmt_details.co_share_id = pt_co_share_details.id + // AND co_share_stmt_details.is_active = 1 + // AND pt_table.is_active = 1 + // AND insurer_statements.is_active = 1 + // AND insurer_statements.invoice_status IS NOT NULL + // $date_condition - // if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + // ), + // 2 + // ) AS billed_amt, - // $fromDate = date('Y-m-d', strtotime('-30 days')); - // $toDate = date('Y-m-d 23:59:59'); + // ROUND( + // ( + // ( + // SELECT + // SUM( + // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.reward, 0) + // ) + // FROM + // co_share_stmt_details + // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + // WHERE + // co_share_stmt_details.co_share_id = pt_co_share_details.id + // AND co_share_stmt_details.is_active = 1 + // $date_condition + // ) + // - + // ( + // SELECT + // SUM( + // COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + // + COALESCE(co_share_stmt_details.reward, 0) + // ) + // FROM + // co_share_stmt_details + // JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id + // JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + // WHERE + // co_share_stmt_details.co_share_id = pt_co_share_details.id + // AND co_share_stmt_details.is_active = 1 + // AND pt_table.is_active = 1 + // AND insurer_statements.is_active = 1 + // AND insurer_statements.invoice_status IS NULL + // $date_condition + // ) + // ), + // 2 + // ) AS unbilled_amt - // $builder->where('policy_transaction.created_at >=', $fromDate) - // ->where('policy_transaction.created_at <=', $toDate); + // ") + // ->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') + // ->join('clients', 'clients.id = policy_transaction.client_id') + // ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + // ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + // ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + // ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') + // ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + // ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + // ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') + // ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') + // ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') + // ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') + // ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') + // ->where('policy_transaction.is_active', 1) + // ->where('pt_co_share_details.is_active', 1); - // } + // // Check if the start date and end date are provided + // if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { - // $builder->orderBy('policy_transaction.id', 'desc')->limit(10); + // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - // $result = $builder->get()->getResultArray(); + // $builder->where('policy_transaction.'.$date_type.'>=', $startDate) + // ->where('policy_transaction.'.$date_type.'<=', $endDate); - // // dd($this->db->getLastQuery()); + // } - // return $result; - // } + // // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){ - public function getInceptionTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0, $where = null) - { - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.*, - clients.short_name AS client_short_name, - clients.client_code, - clients.client_type, - clients.client_name, - client_branch.branch_name AS client_branch_name, - insurers.name AS insurer_name, - insurers.short_name AS insurer_short_name, - policy_type.policy_type, - pt_co_share_details.agreed_amt AS amount, - pt_co_share_details.bp_amt AS bp, - 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, - 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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - ->where('policy_transaction.is_active', 1) - ->where('policy_transaction.action_type', 'inception'); + // // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + // // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + // // $builder->where('policy_transaction.month >=', $startDate) + // // ->where('policy_transaction.month <=', $endDate); + // // } - if ( - (!in_array(get_role_id(), [1, 5])) && - !( - in_array(MANAGEMENT_TEAM_ID, user_team()) || - in_array(FINANCE_TEAM_ID, user_team()) || - in_array(BUSINESS_TEAM_ID, user_team()) - ) - ) { - if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { - $builder->where('policy_transaction.created_by', get_session_userid()); + // // Conditionally join insurer_statements if $date_type == 'statement_month' + // if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + // $startDate = date('Y-m-d', strtotime($start_date)); + // $endDate = date('Y-m-d', strtotime($end_date)); + + // $builder->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id', 'left') + // ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id','left') + // ->where('insurer_statements.is_active', 1) + // ->where('insurer_statements.month >=', $startDate) + // ->where('insurer_statements.month <=', $endDate) + // ->groupBy('co_share_stmt_details.co_share_id'); + // } + + // if ($client_id != 0) { + // $builder->where('policy_transaction.client_id', $client_id); + // } + + // if ($insurer_id != 0) { + // $builder->where('policy_transaction.insurer_id', $insurer_id); + // } + + // if ($client_branch_id != 0) { + // $builder->where('policy_transaction.client_branch_id', $client_branch_id); + // } + + // if ($insurer_branch_id != 0) { + // $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); + // } + + // if ($client_policy_id != 0) { + // $builder->where('policy_transaction.client_policy_id', $client_policy_id); + // } + + + + // if ($policy_type_id != 0) { + // $builder->where('client_policy.policy_type_id', $policy_type_id); + // } + + // if ($issuer != 0) { + // $builder->where('policy_transaction.issuer', $issuer); + // } + + // if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + + // $fromDate = date('Y-m-d', strtotime('-30 days')); + // $toDate = date('Y-m-d 23:59:59'); + + // $builder->where('policy_transaction.created_at >=', $fromDate) + // ->where('policy_transaction.created_at <=', $toDate); + + // } + + // $builder->orderBy('policy_transaction.id', 'desc'); + + // $result = $builder->get()->getResultArray(); + + // // dd($this->db->getLastQuery()); + + // return $result; + // } + + public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = []) + { + + $date_condition = ''; + if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + $date_condition = " + AND insurer_statements.month >= '" . $start_date . "' + AND insurer_statements.month <= '" . $end_date . "' + "; } - } - // Optimize Date Filtering - if (!empty($start_date) && !empty($end_date) && !empty($date_type)) { - $builder->where("policy_transaction.$date_type >=", date('Y-m-d 00:00:00', strtotime($start_date))) - ->where("policy_transaction.$date_type <=", date('Y-m-d 23:59:59', strtotime($end_date))); - } - - // Apply Filters Only When Necessary - if (!empty($client_id)) { - $builder->where('policy_transaction.client_id', $client_id); - } - if (!empty($insurer_id)) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - if (!empty($policy_type_id)) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - if (!empty($issuer)) { - $builder->where('policy_transaction.issuer', $issuer); - } - if (!empty($status)) { - $builder->where('policy_transaction.status', $status); - } - - // Default to Last 30 Days if No Filters Are Applied - if (empty($client_id) && empty($insurer_id) && empty($policy_type_id) && empty($date_type) && empty($issuer) && empty($where)) { - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - if (!empty($where)) { - $builder->whereIn('policy_transaction.id', $where); - } - - // Optimize Query Execution - $builder->orderBy('policy_transaction.id', 'desc'); - $data = $builder->get()->getResultArray(); - return $data; - } - - - public function getEndorsementTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) - { - // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.*, - clients.short_name as client_short_name, - clients.client_code, - client_branch.branch_name as client_branch_name, + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.*, + DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, + DATE_FORMAT( + IF(policy_transaction.month IS NULL, + policy_transaction.policy_issue_date, + policy_transaction.month), + '%b %Y') AS policy_issue_month, + CASE + WHEN clients.client_type = 1 THEN 'Group' + WHEN clients.client_type = 2 THEN 'Retail' + ELSE '-' + END AS client_type, + CASE + WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' + ELSE 'Renewal' + END AS revenue_type, + CASE + WHEN policy_transaction.action_type = 'inception' THEN 'Policy' + ELSE 'Endorsement' + END AS action_type, + clients.client_name AS client_name, + clients.short_name AS client_short_name, + client_branch.branch_name AS client_branch_name, + client_branch.address1 AS client_address, + policy_type.policy_type, + policy_type.bap, insurers.name AS insurer_name, insurers.short_name AS insurer_short_name, - policy_type.policy_type , + insurer_branch.branch_name AS insurer_branch_name, + insurer_branch.branch_code AS insurer_branch_code, + user_profiles.first_name as user_name, + vehicle.vehicle_no, + tpa.name as tpa_name, + pt_co_share_details.remark as remarks, + pt_co_share_details.cop_amt as bp_amt, + pt_co_share_details.exp_amt, + pt_co_share_details.id as pt_id, + sales_user.first_name as salse_person_name, + service_user.first_name as service_person_name, + + ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) AS premium_wo_gst, + + ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) * 18 / 100), 2) AS gst_amount, + + ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) + ROUND((ROUND((pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) * 18 / 100), 2)), 2) AS total_premium, + + ROUND((pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 2) AS tp_or_ter, + + DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, + + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, + + pt_co_share_details.agreed_bp_per, + ROUND( + ( + SELECT + ( + SUM(co_share_stmt_details.actual_bp_brokerage_amt) + + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + + SUM(co_share_stmt_details.actual_tep_brokerage_amt) + + SUM(co_share_stmt_details.reward) + + ) AS total_irda_amt + FROM + co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND insurer_statements.is_active = 1 + $date_condition + ), + 2 + ) AS total_irda_amt, + ROUND( + ( + SELECT + ( + SUM(co_share_stmt_details.reward) + + ) AS reward + FROM + co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND insurer_statements.is_active = 1 + $date_condition + ), + 2 + ) AS reward, + + ROUND( + ( + SELECT + SUM( + COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.reward, 0) + ) AS total_irda_amt + FROM + co_share_stmt_details + JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND pt_table.is_active = 1 + AND insurer_statements.is_active = 1 + AND insurer_statements.invoice_status IS NOT NULL + $date_condition + + ), + 2 + ) AS billed_amt, + + ROUND( + ( + ( + SELECT + SUM( + COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.reward, 0) + ) + FROM + co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + $date_condition + ) + - + ( + SELECT + SUM( + COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.reward, 0) + ) + FROM + co_share_stmt_details + JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND pt_table.is_active = 1 + AND insurer_statements.is_active = 1 + AND insurer_statements.invoice_status IS NULL + $date_condition + ) + ), + 2 + ) AS unbilled_amt, + created_user.first_name as user_name, CASE WHEN pt_co_share_details.co_share_type IN (0, 1) THEN policy_transaction.policy_no @@ -1103,1198 +780,1521 @@ class PolicyTransactionModel extends Model ELSE policy_transaction.policy_no 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') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->where('policy_transaction.is_active', 1) - ->where('policy_transaction.action_type !=', 'inception'); + ->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') + ->join('clients', 'clients.id = policy_transaction.client_id') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') + ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') + ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') + ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') + ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') + ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') + ->where('policy_transaction.is_active', 1) + ->where('pt_co_share_details.is_active', 1); - if ( - (!in_array(get_role_id(), [1, 5])) && - !( - in_array(MANAGEMENT_TEAM_ID, user_team()) || - in_array(FINANCE_TEAM_ID, user_team()) || - in_array(BUSINESS_TEAM_ID, user_team()) - ) - ) { - if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { - $builder->where('policy_transaction.created_by', get_session_userid()); + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder->where('policy_transaction.created_by', get_session_userid()); + } } + if (!empty($where)) { + log_message('info', 'Where condition: ' . json_encode($where)); + $builder->where($where); + } + // Check if the start date and end date are provided + if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } + + // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){ + + // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + // $builder->where('policy_transaction.month >=', $startDate) + // ->where('policy_transaction.month <=', $endDate); + // } + + // Conditionally join insurer_statements if $date_type == 'statement_month' + if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + $startDate = date('Y-m-d', strtotime($start_date)); + $endDate = date('Y-m-d', strtotime($end_date)); + + $builder->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id', 'left') + ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id', 'left') + ->where('insurer_statements.is_active', 1) + ->where('insurer_statements.month >=', $startDate) + ->where('insurer_statements.month <=', $endDate) + ->groupBy('co_share_stmt_details.co_share_id'); + } + + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($client_branch_id != 0) { + $builder->where('policy_transaction.client_branch_id', $client_branch_id); + } + + if ($insurer_branch_id != 0) { + $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); + } + + if ($client_policy_id != 0) { + $builder->where('policy_transaction.client_policy_id', $client_policy_id); + } + + if ($user_id != 0) { + $builder->where('policy_transaction.created_by', $user_id); + } + + + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { + + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + if (empty($where)) { + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + } + + $builder->orderBy('policy_transaction.id', 'desc'); + + $result = $builder->get()->getResultArray(); + + // dd($this->db->getLastQuery()); + + return $result; + } + + // public function getInceptionTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) + // { + // // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); + // $builder = $this->db->table('policy_transaction') + // ->select(' + // policy_transaction.*, + // clients.short_name AS client_short_name, + // clients.client_code, + // clients.client_type, + // clients.client_name, + // client_branch.branch_name AS client_branch_name, + // insurers.name AS insurer_name, + // insurers.short_name AS insurer_short_name, + // policy_type.policy_type, + // pt_co_share_details.agreed_amt AS amount, + // pt_co_share_details.bp_amt AS bp, + // pt_co_share_details.tp_amt AS tp + // ') + // ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') + // ->join('clients', 'clients.id = policy_transaction.client_id', 'left') + // ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + // ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + // ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + // ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + // ->where('policy_transaction.is_active', 1) + // ->where('policy_transaction.action_type', 'inception'); + + // if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + + // $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + // $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + // $builder->where('policy_transaction.'.$date_type.'>=', $startDate) + // ->where('policy_transaction.'.$date_type.'<=', $endDate); + // }else{ + + // // $fromDate = date('Y-m-d', strtotime('-30 days')); + // // $toDate = date('Y-m-d 23:59:59'); + + // // $builder->where('policy_transaction.created_at >=', $fromDate) + // // ->where('policy_transaction.created_at <=', $toDate); + // } + + // if ($client_id != 0) { + // $builder->where('policy_transaction.client_id', $client_id); + // } + + // if ($insurer_id != 0) { + // $builder->where('policy_transaction.insurer_id', $insurer_id); + // } + + // if ($policy_type_id != 0) { + // $builder->where('client_policy.policy_type_id', $policy_type_id); + // } + + // if ($issuer != 0) { + // $builder->where('policy_transaction.issuer', $issuer); + // } + // if ($status != 0) { + // $builder->where('policy_transaction.status', $status); + // } + + // if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + + // $fromDate = date('Y-m-d', strtotime('-30 days')); + // $toDate = date('Y-m-d 23:59:59'); + + // $builder->where('policy_transaction.created_at >=', $fromDate) + // ->where('policy_transaction.created_at <=', $toDate); + + // } + + // $builder->orderBy('policy_transaction.id', 'desc')->limit(10); + + // $result = $builder->get()->getResultArray(); + + // // dd($this->db->getLastQuery()); + + // return $result; + // } + + public function getInceptionTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0, $where = null) + { + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.*, + clients.short_name AS client_short_name, + clients.client_code, + clients.client_type, + clients.client_name, + client_branch.branch_name AS client_branch_name, + insurers.name AS insurer_name, + insurers.short_name AS insurer_short_name, + policy_type.policy_type, + pt_co_share_details.agreed_amt AS amount, + pt_co_share_details.bp_amt AS bp, + 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, + 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 CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + ->where('policy_transaction.is_active', 1) + ->where('policy_transaction.action_type', 'inception'); + + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder->where('policy_transaction.created_by', get_session_userid()); + } + } + + // Optimize Date Filtering + if (!empty($start_date) && !empty($end_date) && !empty($date_type)) { + $builder->where("policy_transaction.$date_type >=", date('Y-m-d 00:00:00', strtotime($start_date))) + ->where("policy_transaction.$date_type <=", date('Y-m-d 23:59:59', strtotime($end_date))); + } + + // Apply Filters Only When Necessary + if (!empty($client_id)) { + $builder->where('policy_transaction.client_id', $client_id); + } + if (!empty($insurer_id)) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + if (!empty($policy_type_id)) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + if (!empty($issuer)) { + $builder->where('policy_transaction.issuer', $issuer); + } + if (!empty($status)) { + $builder->where('policy_transaction.status', $status); + } + + // Default to Last 30 Days if No Filters Are Applied + if (empty($client_id) && empty($insurer_id) && empty($policy_type_id) && empty($date_type) && empty($issuer) && empty($where)) { + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + if (!empty($where)) { + $builder->whereIn('policy_transaction.id', $where); + } + + // Optimize Query Execution + $builder->orderBy('policy_transaction.id', 'desc'); + $data = $builder->get()->getResultArray(); + return $data; } - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { - - // $fromDate = date('Y-m-d', strtotime('-30 days')); - // $toDate = date('Y-m-d 23:59:59'); - - // $builder->where('policy_transaction.created_at >=', $fromDate) - // ->where('policy_transaction.created_at <=', $toDate); - } - - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - if ($status != 0) { - $builder->where('policy_transaction.status', $status); - } - - if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { - - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - public function getVarienceReportLIst($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0) - { - $builder = $this->db->table('policy_transaction') - ->select(" - - policy_transaction.id, - clients.client_name, - client_branch.branch_name as client_branch_name, - insurers.name AS insurer_name, - insurer_branch.branch_name AS insurer_branch_name, - policy_type.policy_type, - policy_transaction.policy_no, - policy_transaction.endorsement_no, - - pt_co_share_details.exp_amt, - pt_co_share_details.variance, - ROUND ( (pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt),2) as original_premium, - ROUND( - ( - SELECT - ( - SUM(co_share_stmt_details.actual_bp_amt) + SUM(co_share_stmt_details.actual_tp_amt) + SUM(co_share_stmt_details.actual_tep_amt) - ) AS total_stmt_amt - FROM - co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - ), - 2 - ) AS statement_premium, - - COALESCE( - (pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 0 - ) - - COALESCE( - ( - SELECT - SUM(co_share_stmt_details.actual_bp_amt) + - SUM(co_share_stmt_details.actual_tp_amt) + - SUM(co_share_stmt_details.actual_tep_amt) - FROM - co_share_stmt_details - JOIN - insurer_statements - ON - co_share_stmt_details.statement_id = insurer_statements.id - AND insurer_statements.is_active = 1 - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - ), 0 - ) AS premium_variance_amt, - - - ROUND( - ( - SELECT - ( - SUM(co_share_stmt_details.actual_bp_brokerage_amt) + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward) - ) AS total_irda_amt - FROM - co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - ), - 2 - ) AS statement_amount, - - ROUND( - pt_co_share_details.exp_amt - - ( - SELECT - ( - SUM(co_share_stmt_details.actual_bp_brokerage_amt) + - SUM(co_share_stmt_details.actual_tp_brokerage_amt) + - SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward) - ) - FROM co_share_stmt_details - JOIN insurer_statements - ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 - WHERE - co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - ), - 2 - ) 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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = '' + public function getEndorsementTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) + { + // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.*, + clients.short_name as client_short_name, + clients.client_code, + client_branch.branch_name as client_branch_name, + insurers.name AS insurer_name, + insurers.short_name AS insurer_short_name, + policy_type.policy_type , + CASE + WHEN pt_co_share_details.co_share_type IN (0, 1) THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('clients', 'clients.id = policy_transaction.client_id', 'left') - ->join('client_branch', 'client_branch.id = policy_transaction.client_branch_id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->where('policy_transaction.is_active', 1) - ->where('pt_co_share_details.is_active', 1) - // ->where('insurer_statements.is_active',1); - // ->having('variance_amt IS NOT NULL') - // ->having('variance_amt !=',0) - // ->having('premium_variance_amt IS NOT NULL') - // ->having('premium_variance_amt !=',0); + WHEN pt_co_share_details.co_share_type > 1 + THEN CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->where('policy_transaction.is_active', 1) + ->where('policy_transaction.action_type !=', 'inception'); - // ->group_start() - ->having('variance_amt IS NOT NULL') - ->orHaving('variance_amt !=', 0) - ->having('premium_variance_amt IS NOT NULL') - ->orHaving('premium_variance_amt !=', 0); - // ->group_end(); - // ->where('pt_co_share_details.actual_bp_brokerage_amt IS NOT NULL AND pt_co_share_details.actual_bp_brokerage_amt != 0'); - // ->where('pt_co_share_details.variance IS NOT NULL') - // ->where('pt_co_share_details.variance !=', 0); + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder->where('policy_transaction.created_by', get_session_userid()); + } + } - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + // $fromDate = date('Y-m-d', strtotime('-30 days')); + // $toDate = date('Y-m-d 23:59:59'); + + // $builder->where('policy_transaction.created_at >=', $fromDate) + // ->where('policy_transaction.created_at <=', $toDate); + } + + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + if ($status != 0) { + $builder->where('policy_transaction.status', $status); + } + + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { + + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + $builder->orderBy('policy_transaction.id', 'desc'); + + return $builder->get()->getResultArray(); } - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($client_branch_id != 0) { - $builder->where('policy_transaction.client_branch_id', $client_branch_id); - } - - if ($insurer_branch_id != 0) { - $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); - } - - if ($client_policy_id != 0) { - $builder->where('policy_transaction.client_policy_id', $client_policy_id); - } - - - $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - public function getBusinessReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) - { - $dateThreshold = date('Y-m-d H:i:s', strtotime("- 3 days")); - $builder = $this->db->table('policy_transaction') - ->select([ - 'policy_transaction.id AS policy_trns_id', - 'clients.client_name', - 'insurers.name AS insurer_name', - 'policy_type.policy_type', - 'policy_transaction.endorsement_no', - "CASE - WHEN policy_transaction.action_type = 'inception' THEN 'I' - ELSE 'E' - END AS action_type", - 'policy_transaction.action_type as action_type_full', - 'pt_co_share_details.bp_amt', - 'pt_co_share_details.tp_amt', - 'pt_co_share_details.tep_amt', - '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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = "" - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join( - '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active - FROM policy_transaction_status - WHERE is_active = 1 - GROUP BY policy_tran_id) th', - 'policy_transaction.id = th.policy_tran_id' - - ) - ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) - ->where('policy_transaction.is_active', 1) - ->where("policy_transaction.status is not null", null, false) - ->whereNotIn("policy_transaction.status", ['completed']) - // ->where('policy_transaction.status', 'completed') - ->where('(pt_co_share_details.bp_amt IS NULL OR pt_co_share_details.bp_amt = 0)', null, false); - - - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { - - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($status != 0) { - $builder->where('policy_transaction.status', $status); - } - - $builder->orderBy('policy_transaction.id', 'desc'); - // echo $builder->getCompiledSelect(); - // exit; - - $returnData = $builder->get()->getResultArray(); - - - - // dd($returnData); - return $returnData; - } - - public function getFinanceReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) - { - $dateThreshold = date('Y-m-d H:i:s', strtotime("-90 days")); - - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.id, - 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' - ELSE 'E' - END AS action_type, - policy_transaction.action_type AS action_type_full, - pt_co_share_details.exp_amt, - pt_co_share_details.variance, - 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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join( - '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active - FROM policy_transaction_status - WHERE is_active = 1 - GROUP BY policy_tran_id) th', - 'policy_transaction.id = th.policy_tran_id' - - ) - ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) - ->where('policy_transaction.is_active', 1) - // ->where('policy_transaction.status', 'completed') - ->where('COALESCE(pt_co_share_details.agreed_bp_per, 0) + COALESCE(pt_co_share_details.agreed_tp_per, 0) + COALESCE(pt_co_share_details.agreed_tep_per, 0) = 0') - ->where('COALESCE(pt_co_share_details.actual_bp_amt, 0) + COALESCE(pt_co_share_details.actual_tp_amt, 0) + COALESCE(pt_co_share_details.actual_tep_amt, 0) = 0') - ->where('COALESCE(pt_co_share_details.actual_bp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tep_brokerage_amt, 0) = 0') - ->where("policy_transaction.status is not null", null, false) - ->whereNotIn("policy_transaction.status", ['completed']); - - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { - - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($status != 0) { - $builder->where('policy_transaction.status', $status); - } - - $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - public function getOutstandingReportList_OLD($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) - { - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.id, - clients.client_name, - insurers.name AS insurer_name, - policy_type.policy_type, - policy_transaction.endorsement_no, - CASE - WHEN policy_transaction.action_type = 'inception' THEN 'I' - ELSE 'E' - END AS action_type, - pt_co_share_details.exp_amt, - pt_co_share_details.variance, - insurer_statements.invoice_amount, - insurer_statements.invoice_status, - - ROUND((pt_co_share_details.actual_bp_brokerage_amt + pt_co_share_details.actual_tp_brokerage_amt + pt_co_share_details.actual_tep_brokerage_amt), 2) AS realization_amount2, + public function getVarienceReportLIst($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0) + { + $builder = $this->db->table('policy_transaction') + ->select(" - ( - SELECT - (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) AS realization_amount - FROM - inv_payment_details - WHERE - inv_payment_details.statement_id = insurer_statements.id - AND inv_payment_details.is_active = 1 - - ) AS realization_amount, - - ROUND( - insurer_statements.invoice_amount - + policy_transaction.id, + clients.client_name, + client_branch.branch_name as client_branch_name, + insurers.name AS insurer_name, + insurer_branch.branch_name AS insurer_branch_name, + policy_type.policy_type, + policy_transaction.policy_no, + policy_transaction.endorsement_no, + + pt_co_share_details.exp_amt, + pt_co_share_details.variance, + ROUND ( (pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt),2) as original_premium, + ROUND( ( SELECT - (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) + ( + SUM(co_share_stmt_details.actual_bp_amt) + SUM(co_share_stmt_details.actual_tp_amt) + SUM(co_share_stmt_details.actual_tep_amt) + ) AS total_stmt_amt + FROM + co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + ), + 2 + ) AS statement_premium, + + COALESCE( + (pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt), 0 + ) - + COALESCE( + ( + SELECT + SUM(co_share_stmt_details.actual_bp_amt) + + SUM(co_share_stmt_details.actual_tp_amt) + + SUM(co_share_stmt_details.actual_tep_amt) + FROM + co_share_stmt_details + JOIN + insurer_statements + ON + co_share_stmt_details.statement_id = insurer_statements.id + AND insurer_statements.is_active = 1 + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + ), 0 + ) AS premium_variance_amt, + + + ROUND( + ( + SELECT + ( + SUM(co_share_stmt_details.actual_bp_brokerage_amt) + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward) + ) AS total_irda_amt + FROM + co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + ), + 2 + ) AS statement_amount, + + ROUND( + pt_co_share_details.exp_amt - + ( + SELECT + ( + SUM(co_share_stmt_details.actual_bp_brokerage_amt) + + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + + SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward) + ) + FROM co_share_stmt_details + JOIN insurer_statements + ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1 + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + ), + 2 + ) 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 CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('clients', 'clients.id = policy_transaction.client_id', 'left') + ->join('client_branch', 'client_branch.id = policy_transaction.client_branch_id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->where('policy_transaction.is_active', 1) + ->where('pt_co_share_details.is_active', 1) + // ->where('insurer_statements.is_active',1); + // ->having('variance_amt IS NOT NULL') + // ->having('variance_amt !=',0) + // ->having('premium_variance_amt IS NOT NULL') + // ->having('premium_variance_amt !=',0); + + // ->group_start() + ->having('variance_amt IS NOT NULL') + ->orHaving('variance_amt !=', 0) + ->having('premium_variance_amt IS NOT NULL') + ->orHaving('premium_variance_amt !=', 0); + // ->group_end(); + // ->where('pt_co_share_details.actual_bp_brokerage_amt IS NOT NULL AND pt_co_share_details.actual_bp_brokerage_amt != 0'); + // ->where('pt_co_share_details.variance IS NOT NULL') + // ->where('pt_co_share_details.variance !=', 0); + + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { + + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + + if ($client_branch_id != 0) { + $builder->where('policy_transaction.client_branch_id', $client_branch_id); + } + + if ($insurer_branch_id != 0) { + $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); + } + + if ($client_policy_id != 0) { + $builder->where('policy_transaction.client_policy_id', $client_policy_id); + } + + + $builder->orderBy('policy_transaction.id', 'desc'); + + return $builder->get()->getResultArray(); + } + + public function getBusinessReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) + { + $dateThreshold = date('Y-m-d H:i:s', strtotime("- 3 days")); + $builder = $this->db->table('policy_transaction') + ->select([ + 'policy_transaction.id AS policy_trns_id', + 'clients.client_name', + 'insurers.name AS insurer_name', + 'policy_type.policy_type', + 'policy_transaction.endorsement_no', + "CASE + WHEN policy_transaction.action_type = 'inception' THEN 'I' + ELSE 'E' + END AS action_type", + 'policy_transaction.action_type as action_type_full', + 'pt_co_share_details.bp_amt', + 'pt_co_share_details.tp_amt', + 'pt_co_share_details.tep_amt', + '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 CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = "" + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join( + '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id) th', + 'policy_transaction.id = th.policy_tran_id' + + ) + ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) + ->where('policy_transaction.is_active', 1) + ->where("policy_transaction.status is not null", null, false) + ->whereNotIn("policy_transaction.status", ['completed']) + // ->where('policy_transaction.status', 'completed') + ->where('(pt_co_share_details.bp_amt IS NULL OR pt_co_share_details.bp_amt = 0)', null, false); + + + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { + + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + + if ($status != 0) { + $builder->where('policy_transaction.status', $status); + } + + $builder->orderBy('policy_transaction.id', 'desc'); + // echo $builder->getCompiledSelect(); + // exit; + + $returnData = $builder->get()->getResultArray(); + + + + // dd($returnData); + return $returnData; + } + + public function getFinanceReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) + { + $dateThreshold = date('Y-m-d H:i:s', strtotime("-90 days")); + + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.id, + 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' + ELSE 'E' + END AS action_type, + policy_transaction.action_type AS action_type_full, + pt_co_share_details.exp_amt, + pt_co_share_details.variance, + 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 CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join( + '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id) th', + 'policy_transaction.id = th.policy_tran_id' + + ) + ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) + ->where('policy_transaction.is_active', 1) + // ->where('policy_transaction.status', 'completed') + ->where('COALESCE(pt_co_share_details.agreed_bp_per, 0) + COALESCE(pt_co_share_details.agreed_tp_per, 0) + COALESCE(pt_co_share_details.agreed_tep_per, 0) = 0') + ->where('COALESCE(pt_co_share_details.actual_bp_amt, 0) + COALESCE(pt_co_share_details.actual_tp_amt, 0) + COALESCE(pt_co_share_details.actual_tep_amt, 0) = 0') + ->where('COALESCE(pt_co_share_details.actual_bp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tep_brokerage_amt, 0) = 0') + ->where("policy_transaction.status is not null", null, false) + ->whereNotIn("policy_transaction.status", ['completed']); + + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { + + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + + if ($status != 0) { + $builder->where('policy_transaction.status', $status); + } + + $builder->orderBy('policy_transaction.id', 'desc'); + + return $builder->get()->getResultArray(); + } + + public function getOutstandingReportList_OLD($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) + { + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.id, + clients.client_name, + insurers.name AS insurer_name, + policy_type.policy_type, + policy_transaction.endorsement_no, + CASE + WHEN policy_transaction.action_type = 'inception' THEN 'I' + ELSE 'E' + END AS action_type, + pt_co_share_details.exp_amt, + pt_co_share_details.variance, + insurer_statements.invoice_amount, + insurer_statements.invoice_status, + + ROUND((pt_co_share_details.actual_bp_brokerage_amt + pt_co_share_details.actual_tp_brokerage_amt + pt_co_share_details.actual_tep_brokerage_amt), 2) AS realization_amount2, + + ( + SELECT + (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) AS realization_amount FROM inv_payment_details WHERE inv_payment_details.statement_id = insurer_statements.id AND inv_payment_details.is_active = 1 - ), - 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 CASE - WHEN pt_co_share_details.follower_policy_no IS NULL - OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - 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') - ->join('inv_payment_details', 'insurer_statements.id = inv_payment_details.statement_id', 'left') - ->join('clients', 'clients.id = policy_transaction.client_id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->where('policy_transaction.is_active', 1); + + ) AS realization_amount, + + ROUND( + insurer_statements.invoice_amount - + ( + SELECT + (SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds)) + FROM + inv_payment_details + WHERE + inv_payment_details.statement_id = insurer_statements.id + AND inv_payment_details.is_active = 1 + ), + 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 CASE + WHEN pt_co_share_details.follower_policy_no IS NULL + OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + 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') + ->join('inv_payment_details', 'insurer_statements.id = inv_payment_details.statement_id', 'left') + ->join('clients', 'clients.id = policy_transaction.client_id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->where('policy_transaction.is_active', 1); - // Date range filtering - if ($start_date != 0 && $end_date != 0 && $date_type != 0) { - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + // Date range filtering + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - $builder->where('policy_transaction.' . $date_type . '>=', $startDate) - ->where('policy_transaction.' . $date_type . '<=', $endDate); - } else { + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + + // Additional filters + if ($client_id != 0) { + $builder->where('policy_transaction.client_id', $client_id); + } + + if ($insurer_id != 0) { + $builder->where('policy_transaction.insurer_id', $insurer_id); + } + + if ($policy_type_id != 0) { + $builder->where('client_policy.policy_type_id', $policy_type_id); + } + + if ($issuer != 0) { + $builder->where('policy_transaction.issuer', $issuer); + } + + if ($status != 0) { + $builder->where('policy_transaction.status', $status); + } + + // Filter where outstanding_amount is not null + $builder->having('outstanding_amount IS NOT NULL'); + + $builder->orderBy('policy_transaction.id', 'desc'); + + return $builder->get()->getResultArray(); + } + + public function getOutstandingReportList($start_date = 0, $end_date = 0, $insurer_id = 0, $insurer_branch_id = 0) + { + $builder = $this->db->table('insurer_statements s') + ->select(' + s.id, + s.insurer_id, + s.branch_id, + ins.short_name, + ib.branch_name, + s.month, + s.line_items, + s.stmt_sno, + s.invoice_status, + s.invoice_date, + s.invoice_no, + s.invoice_amount, + COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0) AS total_paid, + (s.invoice_amount - COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0)) AS outstanding_amount + ') + ->join('inv_payment_details p', 's.id = p.statement_id', 'left') + ->join('insurers ins', 's.insurer_id = ins.id') + ->join('insurer_branch ib', 's.branch_id = ib.id') + ->where('s.is_active', 1) + ->where('p.is_active', 1) + ->groupBy('s.id, s.invoice_no, s.invoice_date, s.invoice_amount') + ->having('outstanding_amount >', 0); + // ->get(); + + + // Date range filtering + if ($start_date != 0 && $end_date != 0) { + + $builder->where('s.month >=', $start_date) + ->where('s.month <=', $end_date); + } + + if ($insurer_id != 0) { + $builder->where('s.insurer_id', $insurer_id); + } + if ($insurer_branch_id != 0) { + $builder->where('s.branch_id', $insurer_branch_id); + } + + $builder->orderBy('s.id', 'desc'); + + return $builder->get()->getResultArray(); + } + + + //function for fetch renewal report data + public function getRenewalReportData($start_date = null, $end_date = null, $client_type = null, $client = null, $issuer = null) + { $fromDate = date('Y-m-d', strtotime('-90 days')); $toDate = date('Y-m-d 23:59:59'); - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - - // Additional filters - if ($client_id != 0) { - $builder->where('policy_transaction.client_id', $client_id); - } - - if ($insurer_id != 0) { - $builder->where('policy_transaction.insurer_id', $insurer_id); - } - - if ($policy_type_id != 0) { - $builder->where('client_policy.policy_type_id', $policy_type_id); - } - - if ($issuer != 0) { - $builder->where('policy_transaction.issuer', $issuer); - } - - if ($status != 0) { - $builder->where('policy_transaction.status', $status); - } - - // Filter where outstanding_amount is not null - $builder->having('outstanding_amount IS NOT NULL'); - - $builder->orderBy('policy_transaction.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - public function getOutstandingReportList($start_date = 0, $end_date = 0, $insurer_id = 0, $insurer_branch_id = 0) - { - $builder = $this->db->table('insurer_statements s') - ->select(' - s.id, - s.insurer_id, - s.branch_id, - ins.short_name, - ib.branch_name, - s.month, - s.line_items, - s.stmt_sno, - s.invoice_status, - s.invoice_date, - s.invoice_no, - s.invoice_amount, - COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0) AS total_paid, - (s.invoice_amount - COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0)) AS outstanding_amount - ') - ->join('inv_payment_details p', 's.id = p.statement_id', 'left') - ->join('insurers ins', 's.insurer_id = ins.id') - ->join('insurer_branch ib', 's.branch_id = ib.id') - ->where('s.is_active', 1) - ->where('p.is_active', 1) - ->groupBy('s.id, s.invoice_no, s.invoice_date, s.invoice_amount') - ->having('outstanding_amount >', 0); - // ->get(); - - - // Date range filtering - if ($start_date != 0 && $end_date != 0) { - - $builder->where('s.month >=', $start_date) - ->where('s.month <=', $end_date); - } - - if ($insurer_id != 0) { - $builder->where('s.insurer_id', $insurer_id); - } - if ($insurer_branch_id != 0) { - $builder->where('s.branch_id', $insurer_branch_id); - } - - $builder->orderBy('s.id', 'desc'); - - return $builder->get()->getResultArray(); - } - - - //function for fetch renewal report data - public function getRenewalReportData($start_date = null, $end_date = null, $client_type = null, $client = null, $issuer = null) - { - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - if (!empty($start_date) && !empty($end_date)) { - $fromDate = change_date_format($start_date); - $toDate = change_date_format($end_date); - } - - $query = $this->db->table('policy_transaction pt') - ->select(' - pt.*, - c.client_name, - c.short_name AS client_short_name, - c.client_type, - policy_type.policy_type, - i.name as insurer_name, - ib.branch_name as insurer_branch_name, - vehicle.vehicle_no, - leads.status as lead_status - ') - ->join('clients c', 'pt.client_id = c.id', 'left') - ->join('pt_co_share_details pt_co', 'pt.id = pt_co.pt_id and pt_co.co_share_type = 1', 'left') - ->join('insurers i', 'pt_co.insurer_id = i.id', 'left') - ->join('insurer_branch ib', 'pt_co.insurer_branch_id = ib.id', 'left') - ->join('policy_type', 'pt.policy_type_id = policy_type.id', 'left') - ->join('vehicle', 'pt.vehicle_id = vehicle.id and vehicle.is_active = 1', 'left') - ->join('leads', 'pt.client_policy_id = leads.source_policy_id and leads.source_policy_id != 0 and leads.is_active = 1', 'left') - ->where('pt.policy_end_date >=', $fromDate) - ->where('pt.policy_end_date <=', $toDate) - ->where('pt.is_active', 1) - ->where('pt_co.is_active', 1) - ->where('pt.action_type', "inception"); - - // Apply filters if parameters are provided - if (!empty($client_type)) { - $query->where('c.client_type', $client_type); - } - if (!empty($client)) { - $query->where('pt.client_id', $client); - } - if (!empty($issuer)) { // Corrected condition to check $issuer - $query->where('pt.issuer', $issuer); - } - - $query->groupBy('pt.id'); - $query->orderBy('pt.id', 'DESC'); - // Fetch and return results - $results = $query->get()->getResultArray(); - // print($this->db->getLastQuery()); die; - return $results; - } - - public function getBDSRenewalData() - { - // Increase GROUP_CONCAT limit - $this->db->query("SET SESSION group_concat_max_len = 1000000;"); - - $builder = $this->db->table('policy_transaction pt'); - - $builder->select([ - 'SUM(CASE WHEN pt.policy_end_date < CURDATE() THEN 1 ELSE 0 END) AS Expired', - 'SUM(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS `Renewal Pending`', - 'GROUP_CONCAT(CASE WHEN pt.policy_end_date < CURDATE() THEN pt.id ELSE NULL END) AS Expired_ids', - 'GROUP_CONCAT(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN pt.id ELSE NULL END) AS Renewal_Pending_ids' - ]); - $builder->where("pt.policy_end_date IS NOT NULL", null, false); - $builder->where('pt.is_active', 1); - - // Self join to check if a policy has been renewed - $builder->join('policy_transaction renewed', 'renewed.source_client_policy_id = pt.client_policy_id and renewed.client_id = pt.client_id and renewed.client_branch_id = pt.client_branch_id', 'left'); - - // Filter for expired or expiring policies - $builder->where("(pt.policy_end_date < CURDATE() OR pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH))", null, false); - - $builder->where('renewed.id IS NULL', null, false); - $query = $builder->get(); - $result = $query->getResultArray(); - - $total = 0; - foreach ($result[0] as $key => $value) { - if ($key !== 'Expired_ids' && $key !== 'Renewal_Pending_ids') { - $total += $value; + if (!empty($start_date) && !empty($end_date)) { + $fromDate = change_date_format($start_date); + $toDate = change_date_format($end_date); } + + $query = $this->db->table('policy_transaction pt') + ->select(' + pt.*, + c.client_name, + c.short_name AS client_short_name, + c.client_type, + policy_type.policy_type, + i.name as insurer_name, + ib.branch_name as insurer_branch_name, + vehicle.vehicle_no, + leads.status as lead_status + ') + ->join('clients c', 'pt.client_id = c.id', 'left') + ->join('pt_co_share_details pt_co', 'pt.id = pt_co.pt_id and pt_co.co_share_type = 1', 'left') + ->join('insurers i', 'pt_co.insurer_id = i.id', 'left') + ->join('insurer_branch ib', 'pt_co.insurer_branch_id = ib.id', 'left') + ->join('policy_type', 'pt.policy_type_id = policy_type.id', 'left') + ->join('vehicle', 'pt.vehicle_id = vehicle.id and vehicle.is_active = 1', 'left') + ->join('leads', 'pt.client_policy_id = leads.source_policy_id and leads.source_policy_id != 0 and leads.is_active = 1', 'left') + ->where('pt.policy_end_date >=', $fromDate) + ->where('pt.policy_end_date <=', $toDate) + ->where('pt.is_active', 1) + ->where('pt_co.is_active', 1) + ->where('pt.action_type', "inception"); + + // Apply filters if parameters are provided + if (!empty($client_type)) { + $query->where('c.client_type', $client_type); + } + if (!empty($client)) { + $query->where('pt.client_id', $client); + } + if (!empty($issuer)) { // Corrected condition to check $issuer + $query->where('pt.issuer', $issuer); + } + + $query->groupBy('pt.id'); + $query->orderBy('pt.id', 'DESC'); + // Fetch and return results + $results = $query->get()->getResultArray(); + // print($this->db->getLastQuery()); die; + return $results; } - // Ensure ID fields are arrays (not null) - $result[0]['Expired_ids'] = $result[0]['Expired_ids'] ? $result[0]['Expired_ids'] : []; - $result[0]['Renewal Pending_ids'] = $result[0]['Renewal_Pending_ids'] ? $result[0]['Renewal_Pending_ids'] : []; + public function getBDSRenewalData() + { + // Increase GROUP_CONCAT limit + $this->db->query("SET SESSION group_concat_max_len = 1000000;"); - // Add total count - $result[0]['total'] = $total; + $builder = $this->db->table('policy_transaction pt'); - return $result[0]; - } + $builder->select([ + 'SUM(CASE WHEN pt.policy_end_date < CURDATE() THEN 1 ELSE 0 END) AS Expired', + 'SUM(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS `Renewal Pending`', + 'GROUP_CONCAT(CASE WHEN pt.policy_end_date < CURDATE() THEN pt.id ELSE NULL END) AS Expired_ids', + 'GROUP_CONCAT(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN pt.id ELSE NULL END) AS Renewal_Pending_ids' + ]); + $builder->where("pt.policy_end_date IS NOT NULL", null, false); + $builder->where('pt.is_active', 1); - public function reportBDSNew( - $start_date = 0, - $end_date = 0, - $client_id = 0, - $insurer_id = 0, - $policy_type_id = 0, - $date_type = 0, - $issuer = 0, - $client_branch_id = 0, - $insurer_branch_id = 0, - $client_policy_id = 0, - $user_id = 0, - $where = [] - ) { - - $date_condition = ''; + // Self join to check if a policy has been renewed + $builder->join('policy_transaction renewed', 'renewed.source_client_policy_id = pt.client_policy_id and renewed.client_id = pt.client_id and renewed.client_branch_id = pt.client_branch_id', 'left'); - // ============================== - // DATE FILTER FOR STATEMENT MONTH - // ============================== - if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - $date_condition = " - AND insurer_statements_oq.month >= '{$start_date}' - AND insurer_statements_oq.month <= '{$end_date}' - "; + // Filter for expired or expiring policies + $builder->where("(pt.policy_end_date < CURDATE() OR pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH))", null, false); + + $builder->where('renewed.id IS NULL', null, false); + $query = $builder->get(); + $result = $query->getResultArray(); + + $total = 0; + foreach ($result[0] as $key => $value) { + if ($key !== 'Expired_ids' && $key !== 'Renewal_Pending_ids') { + $total += $value; + } + } + + // Ensure ID fields are arrays (not null) + $result[0]['Expired_ids'] = $result[0]['Expired_ids'] ? $result[0]['Expired_ids'] : []; + $result[0]['Renewal Pending_ids'] = $result[0]['Renewal_Pending_ids'] ? $result[0]['Renewal_Pending_ids'] : []; + + // Add total count + $result[0]['total'] = $total; + + return $result[0]; } - // ============================== - // BASE QUERY - // ============================== - - - // ============================== - // Without Statement Upload - // ============================== - - - $builder2 = $this->db->table('policy_transaction') - ->select(" - policy_transaction.id AS id, - policy_transaction.endorsement_no AS endorsement_no, - policy_transaction.ref AS ref, - DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, - - DATE_FORMAT( policy_transaction.policy_issue_date,, '%b %Y') AS policy_issue_month, - - CASE - WHEN 1 = 1 THEN 'no statement uploaded' - ELSE 'statement uploaded' - END AS statement_uploaded , - - - CASE - WHEN clients.client_type = 1 THEN 'Group' - WHEN clients.client_type = 2 THEN 'Retail' - ELSE '-' - END AS client_type, - - CASE - WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' - ELSE 'Renewal' - END AS revenue_type, - - CASE - WHEN policy_transaction.action_type = 'inception' THEN 'Policy' - ELSE 'Endorsement' - END AS action_type, - - clients.client_name AS client_name, - clients.short_name AS client_short_name, - client_branch.branch_name AS client_branch_name, - client_branch.address1 AS client_address, - policy_type.policy_type, - policy_type.bap, - insurers.name AS insurer_name, - insurers.short_name AS insurer_short_name, - insurer_branch.branch_name AS insurer_branch_name, - insurer_branch.branch_code AS insurer_branch_code, - user_profiles.first_name AS user_name, - vehicle.vehicle_no, - tpa.name AS tpa_name, - pt_co_share_details.remark AS remarks, - pt_co_share_details.cop_amt AS bp_amt, - pt_co_share_details.exp_amt, - pt_co_share_details.id AS pt_id, - sales_user.first_name AS salse_person_name, - service_user.first_name AS service_person_name, - - ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS premium_wo_gst, - ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2) AS gst_amount, - ROUND( - ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) + - ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2), - 2) AS total_premium, - - ROUND(pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS tp_or_ter, - DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - pt_co_share_details.agreed_bp_per, - - -- ============================== - -- SUBQUERY: Total IRDA Amount - -- Alias Agreed Amount ...!! - -- ============================== - ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt, - - -- Reward Only - ROUND(0, 2) AS reward, - - -- Billed Amount - ROUND(0, 2) AS billed_amt, - - 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 - CASE - WHEN pt_co_share_details.follower_policy_no IS NULL OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - END AS policy_no - ") + public function reportBDSNew( + $start_date = 0, + $end_date = 0, + $client_id = 0, + $insurer_id = 0, + $policy_type_id = 0, + $date_type = 0, + $issuer = 0, + $client_branch_id = 0, + $insurer_branch_id = 0, + $client_policy_id = 0, + $user_id = 0, + $where = [] + ) { + + $date_condition = ''; // ============================== - // JOINS + // DATE FILTER FOR STATEMENT MONTH // ============================== - ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') - ->join('clients', 'clients.id = policy_transaction.client_id') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') - ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') - ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') - ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') - ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') - - ->where('policy_transaction.is_active', 1) - ->where('pt_co_share_details.is_active', 1) - - // ======================================================== - // GROUP BY Insurer Statement Months - // ======================================================= - ->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id '); - - // ============================== - // ROLE-BASED FILTERS - // ============================== - if ( - (!in_array(get_role_id(), [1, 5])) && - !( - in_array(MANAGEMENT_TEAM_ID, user_team()) || - in_array(FINANCE_TEAM_ID, user_team()) || - in_array(BUSINESS_TEAM_ID, user_team()) - ) - ) { - if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { - $builder2->where('policy_transaction.created_by', get_session_userid()); + if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + $date_condition = " + AND insurer_statements_oq.month >= '{$start_date}' + AND insurer_statements_oq.month <= '{$end_date}' + "; } - } - - // ============================== - // ADDITIONAL FILTERS - // ============================== - if (!empty($where)) { - log_message('info', 'Where condition: ' . json_encode($where)); - $builder2->where($where); - } - - if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder2->where("policy_transaction.{$date_type} >=", $startDate) - ->where("policy_transaction.{$date_type} <=", $endDate); - } - - - // ============================== - // FILTER BY IDs - // ============================== - if ($client_id != 0) $builder2->where('policy_transaction.client_id', $client_id); - if ($insurer_id != 0) $builder2->where('policy_transaction.insurer_id', $insurer_id); - if ($client_branch_id != 0) $builder2->where('policy_transaction.client_branch_id', $client_branch_id); - if ($insurer_branch_id != 0) $builder2->where('policy_transaction.insurer_branch_id', $insurer_branch_id); - if ($client_policy_id != 0) $builder2->where('policy_transaction.client_policy_id', $client_policy_id); - if ($user_id != 0) $builder2->where('policy_transaction.created_by', $user_id); - if ($policy_type_id != 0) $builder2->where('client_policy.policy_type_id', $policy_type_id); - if ($issuer != 0) $builder2->where('policy_transaction.issuer', $issuer); - - // ============================== - // DEFAULT 90-DAY FILTER - // ============================== - if ( - $client_id == 0 && - $insurer_id == 0 && - $policy_type_id == 0 && - $date_type == 0 && - $issuer == 0 - ) { - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - if (empty($where)) { - $builder2->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); - } - } - - - - - - - - - - - - - - - - - - - - - - // ============================== - // With Statement Upload - // ============================== - - $builder = $this->db->table('policy_transaction') - ->select(" - policy_transaction.id AS id, - policy_transaction.endorsement_no AS endorsement_no, - policy_transaction.ref AS ref, - DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, - DATE_FORMAT( - IF(insurer_statements_oq.month IS NULL, - policy_transaction.policy_issue_date, - insurer_statements_oq.month - ), '%b %Y' - ) AS policy_issue_month, - - CASE - WHEN insurer_statements_oq.month IS NULL THEN 'no statement uploaded' - ELSE 'statement uploaded' - END AS statement_uploaded , - - - CASE - WHEN clients.client_type = 1 THEN 'Group' - WHEN clients.client_type = 2 THEN 'Retail' - ELSE '-' - END AS client_type, - - CASE - WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' - ELSE 'Renewal' - END AS revenue_type, - - CASE - WHEN policy_transaction.action_type = 'inception' THEN 'Policy' - ELSE 'Endorsement' - END AS action_type, - - clients.client_name AS client_name, - clients.short_name AS client_short_name, - client_branch.branch_name AS client_branch_name, - client_branch.address1 AS client_address, - policy_type.policy_type, - policy_type.bap, - insurers.name AS insurer_name, - insurers.short_name AS insurer_short_name, - insurer_branch.branch_name AS insurer_branch_name, - insurer_branch.branch_code AS insurer_branch_code, - user_profiles.first_name AS user_name, - vehicle.vehicle_no, - tpa.name AS tpa_name, - pt_co_share_details.remark AS remarks, - pt_co_share_details.cop_amt AS bp_amt, - pt_co_share_details.exp_amt, - pt_co_share_details.id AS pt_id, - sales_user.first_name AS salse_person_name, - service_user.first_name AS service_person_name, - - ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS premium_wo_gst, - ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2) AS gst_amount, - ROUND( - ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) + - ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2), - 2) AS total_premium, - - ROUND(pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS tp_or_ter, - DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, - (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, - pt_co_share_details.agreed_bp_per, - - -- ============================== - -- SUBQUERY: Total IRDA Amount - -- Alias Agreed Amount ...!! - -- ============================== - ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt, - -- Reward Only - ROUND(( - SELECT SUM(co_share_stmt_details.reward) - FROM co_share_stmt_details - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND insurer_statements.is_active = 1 - AND insurer_statements.month = insurer_statements_oq.month - {$date_condition} - GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id') - ), 2) AS reward, - - -- Billed Amount - ROUND(( - SELECT SUM( - COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + - COALESCE(co_share_stmt_details.reward, 0) - ) - FROM co_share_stmt_details - JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id - JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id - WHERE co_share_stmt_details.co_share_id = pt_co_share_details.id - AND co_share_stmt_details.is_active = 1 - AND pt_table.is_active = 1 - AND insurer_statements.is_active = 1 - AND insurer_statements.invoice_status IS NOT NULL - AND insurer_statements.month = insurer_statements_oq.month - {$date_condition} - GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id') - ), 2) AS billed_amt, - - 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 - CASE - WHEN pt_co_share_details.follower_policy_no IS NULL OR pt_co_share_details.follower_policy_no = '' - THEN policy_transaction.policy_no - ELSE pt_co_share_details.follower_policy_no - END - ELSE policy_transaction.policy_no - END AS policy_no - ") // ============================== - // JOINS + // BASE QUERY // ============================== - ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') - ->join('clients', 'clients.id = policy_transaction.client_id') - ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') - ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') - ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') - ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') - ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') - ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') - ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') - ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') - ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') - - - ->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id','left') - ->join('insurer_statements insurer_statements_oq','insurer_statements_oq.id = co_share_stmt_details.statement_id','left') - - ->where('policy_transaction.is_active', 1) - ->where('pt_co_share_details.is_active', 1) - ->where('insurer_statements_oq.id IS NOT NULL') - // ======================================================== - // GROUP BY Insurer Statement Months - // ======================================================= - ->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id ,insurer_statements_oq.month'); + // ============================== + // Without Statement Upload + // ============================== - // ============================== - // ROLE-BASED FILTERS - // ============================== - if ( - (!in_array(get_role_id(), [1, 5])) && - !( - in_array(MANAGEMENT_TEAM_ID, user_team()) || - in_array(FINANCE_TEAM_ID, user_team()) || - in_array(BUSINESS_TEAM_ID, user_team()) - ) - ) { - if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { - $builder->where('policy_transaction.created_by', get_session_userid()); + + $builder2 = $this->db->table('policy_transaction') + ->select(" + policy_transaction.id AS id, + policy_transaction.endorsement_no AS endorsement_no, + policy_transaction.ref AS ref, + DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, + + DATE_FORMAT( policy_transaction.policy_issue_date,, '%b %Y') AS policy_issue_month, + + CASE + WHEN 1 = 1 THEN 'no statement uploaded' + ELSE 'statement uploaded' + END AS statement_uploaded , + + + CASE + WHEN clients.client_type = 1 THEN 'Group' + WHEN clients.client_type = 2 THEN 'Retail' + ELSE '-' + END AS client_type, + + CASE + WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' + ELSE 'Renewal' + END AS revenue_type, + + CASE + WHEN policy_transaction.action_type = 'inception' THEN 'Policy' + ELSE 'Endorsement' + END AS action_type, + + clients.client_name AS client_name, + clients.short_name AS client_short_name, + client_branch.branch_name AS client_branch_name, + client_branch.address1 AS client_address, + policy_type.policy_type, + policy_type.bap, + insurers.name AS insurer_name, + insurers.short_name AS insurer_short_name, + insurer_branch.branch_name AS insurer_branch_name, + insurer_branch.branch_code AS insurer_branch_code, + user_profiles.first_name AS user_name, + vehicle.vehicle_no, + tpa.name AS tpa_name, + pt_co_share_details.remark AS remarks, + pt_co_share_details.cop_amt AS bp_amt, + pt_co_share_details.exp_amt, + pt_co_share_details.id AS pt_id, + sales_user.first_name AS salse_person_name, + service_user.first_name AS service_person_name, + + ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS premium_wo_gst, + ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2) AS gst_amount, + ROUND( + ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) + + ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2), + 2) AS total_premium, + + ROUND(pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS tp_or_ter, + DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, + pt_co_share_details.agreed_bp_per, + + -- ============================== + -- SUBQUERY: Total IRDA Amount + -- Alias Agreed Amount ...!! + -- ============================== + ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt, + + -- Reward Only + ROUND(0, 2) AS reward, + + -- Billed Amount + ROUND(0, 2) AS billed_amt, + + 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 + CASE + WHEN pt_co_share_details.follower_policy_no IS NULL OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + END AS policy_no + ") + + // ============================== + // JOINS + // ============================== + ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') + ->join('clients', 'clients.id = policy_transaction.client_id') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') + ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') + ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') + ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') + ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') + ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') + + ->where('policy_transaction.is_active', 1) + ->where('pt_co_share_details.is_active', 1) + + // ======================================================== + // GROUP BY Insurer Statement Months + // ======================================================= + ->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id '); + + // ============================== + // ROLE-BASED FILTERS + // ============================== + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder2->where('policy_transaction.created_by', get_session_userid()); + } } - } - // ============================== - // ADDITIONAL FILTERS - // ============================== - if (!empty($where)) { - log_message('info', 'Where condition: ' . json_encode($where)); - $builder->where($where); - } - - if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { - $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); - $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - - $builder->where("policy_transaction.{$date_type} >=", $startDate) - ->where("policy_transaction.{$date_type} <=", $endDate); - } - - // JOIN FOR STATEMENT MONTH FILTER - if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { - $startDate = date('Y-m-d', strtotime($start_date)); - $endDate = date('Y-m-d', strtotime($end_date)); - - $builder->join('co_share_stmt_details cssdfilter', 'pt_co_share_details.id = cssdfilter.co_share_id', 'left') - ->join('insurer_statements', 'cssdfilter.statement_id = insurer_statements.id', 'left') - ->where('insurer_statements.is_active', 1) - ->where('insurer_statements.month >=', $startDate) - ->where('insurer_statements.month <=', $endDate) - ->groupBy('cssdfilter.co_share_id'); - } - - // ============================== - // FILTER BY IDs - // ============================== - if ($client_id != 0) $builder->where('policy_transaction.client_id', $client_id); - if ($insurer_id != 0) $builder->where('policy_transaction.insurer_id', $insurer_id); - if ($client_branch_id != 0) $builder->where('policy_transaction.client_branch_id', $client_branch_id); - if ($insurer_branch_id != 0) $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); - if ($client_policy_id != 0) $builder->where('policy_transaction.client_policy_id', $client_policy_id); - if ($user_id != 0) $builder->where('policy_transaction.created_by', $user_id); - if ($policy_type_id != 0) $builder->where('client_policy.policy_type_id', $policy_type_id); - if ($issuer != 0) $builder->where('policy_transaction.issuer', $issuer); - - // ============================== - // DEFAULT 90-DAY FILTER - // ============================== - if ( - $client_id == 0 && - $insurer_id == 0 && - $policy_type_id == 0 && - $date_type == 0 && - $issuer == 0 - ) { - $fromDate = date('Y-m-d', strtotime('-90 days')); - $toDate = date('Y-m-d 23:59:59'); - - if (empty($where)) { - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + // ============================== + // ADDITIONAL FILTERS + // ============================== + if (!empty($where)) { + log_message('info', 'Where condition: ' . json_encode($where)); + $builder2->where($where); } + + if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder2->where("policy_transaction.{$date_type} >=", $startDate) + ->where("policy_transaction.{$date_type} <=", $endDate); + } + + + // ============================== + // FILTER BY IDs + // ============================== + if ($client_id != 0) $builder2->where('policy_transaction.client_id', $client_id); + if ($insurer_id != 0) $builder2->where('policy_transaction.insurer_id', $insurer_id); + if ($client_branch_id != 0) $builder2->where('policy_transaction.client_branch_id', $client_branch_id); + if ($insurer_branch_id != 0) $builder2->where('policy_transaction.insurer_branch_id', $insurer_branch_id); + if ($client_policy_id != 0) $builder2->where('policy_transaction.client_policy_id', $client_policy_id); + if ($user_id != 0) $builder2->where('policy_transaction.created_by', $user_id); + if ($policy_type_id != 0) $builder2->where('client_policy.policy_type_id', $policy_type_id); + if ($issuer != 0) $builder2->where('policy_transaction.issuer', $issuer); + + // ============================== + // DEFAULT 90-DAY FILTER + // ============================== + if ( + $client_id == 0 && + $insurer_id == 0 && + $policy_type_id == 0 && + $date_type == 0 && + $issuer == 0 + ) { + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + if (empty($where)) { + $builder2->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + } + + + + + + + + + + + + + + + + + + + + + + // ============================== + // With Statement Upload + // ============================== + + $builder = $this->db->table('policy_transaction') + ->select(" + policy_transaction.id AS id, + policy_transaction.endorsement_no AS endorsement_no, + policy_transaction.ref AS ref, + DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, + DATE_FORMAT( + IF(insurer_statements_oq.month IS NULL, + policy_transaction.policy_issue_date, + insurer_statements_oq.month + ), '%b %Y' + ) AS policy_issue_month, + + CASE + WHEN insurer_statements_oq.month IS NULL THEN 'no statement uploaded' + ELSE 'statement uploaded' + END AS statement_uploaded , + + + CASE + WHEN clients.client_type = 1 THEN 'Group' + WHEN clients.client_type = 2 THEN 'Retail' + ELSE '-' + END AS client_type, + + CASE + WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh' + ELSE 'Renewal' + END AS revenue_type, + + CASE + WHEN policy_transaction.action_type = 'inception' THEN 'Policy' + ELSE 'Endorsement' + END AS action_type, + + clients.client_name AS client_name, + clients.short_name AS client_short_name, + client_branch.branch_name AS client_branch_name, + client_branch.address1 AS client_address, + policy_type.policy_type, + policy_type.bap, + insurers.name AS insurer_name, + insurers.short_name AS insurer_short_name, + insurer_branch.branch_name AS insurer_branch_name, + insurer_branch.branch_code AS insurer_branch_code, + user_profiles.first_name AS user_name, + vehicle.vehicle_no, + tpa.name AS tpa_name, + pt_co_share_details.remark AS remarks, + pt_co_share_details.cop_amt AS bp_amt, + pt_co_share_details.exp_amt, + pt_co_share_details.id AS pt_id, + sales_user.first_name AS salse_person_name, + service_user.first_name AS service_person_name, + + ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS premium_wo_gst, + ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2) AS gst_amount, + ROUND( + ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) + + ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2), + 2) AS total_premium, + + ROUND(pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS tp_or_ter, + DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days, + (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per, + pt_co_share_details.agreed_bp_per, + + -- ============================== + -- SUBQUERY: Total IRDA Amount + -- Alias Agreed Amount ...!! + -- ============================== + ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt, + -- Reward Only + ROUND(( + SELECT SUM(co_share_stmt_details.reward) + FROM co_share_stmt_details + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND insurer_statements.is_active = 1 + AND insurer_statements.month = insurer_statements_oq.month + {$date_condition} + GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id') + ), 2) AS reward, + + -- Billed Amount + ROUND(( + SELECT SUM( + COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) + + COALESCE(co_share_stmt_details.reward, 0) + ) + FROM co_share_stmt_details + JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id + JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id + WHERE co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + AND pt_table.is_active = 1 + AND insurer_statements.is_active = 1 + AND insurer_statements.invoice_status IS NOT NULL + AND insurer_statements.month = insurer_statements_oq.month + {$date_condition} + GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id') + ), 2) AS billed_amt, + + 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 + CASE + WHEN pt_co_share_details.follower_policy_no IS NULL OR pt_co_share_details.follower_policy_no = '' + THEN policy_transaction.policy_no + ELSE pt_co_share_details.follower_policy_no + END + ELSE policy_transaction.policy_no + END AS policy_no + ") + + // ============================== + // JOINS + // ============================== + ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') + ->join('clients', 'clients.id = policy_transaction.client_id') + ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') + ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') + ->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left') + ->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left') + ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') + ->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left') + ->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left') + ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') + ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') + ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') + ->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left') + + + ->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id','left') + ->join('insurer_statements insurer_statements_oq','insurer_statements_oq.id = co_share_stmt_details.statement_id','left') + + ->where('policy_transaction.is_active', 1) + ->where('pt_co_share_details.is_active', 1) + ->where('insurer_statements_oq.id IS NOT NULL') + + + // ======================================================== + // GROUP BY Insurer Statement Months + // ======================================================= + ->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id ,insurer_statements_oq.month'); + + // ============================== + // ROLE-BASED FILTERS + // ============================== + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder->where('policy_transaction.created_by', get_session_userid()); + } + } + + // ============================== + // ADDITIONAL FILTERS + // ============================== + if (!empty($where)) { + log_message('info', 'Where condition: ' . json_encode($where)); + $builder->where($where); + } + + if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $builder->where("policy_transaction.{$date_type} >=", $startDate) + ->where("policy_transaction.{$date_type} <=", $endDate); + } + + // JOIN FOR STATEMENT MONTH FILTER + if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + $startDate = date('Y-m-d', strtotime($start_date)); + $endDate = date('Y-m-d', strtotime($end_date)); + + $builder->join('co_share_stmt_details cssdfilter', 'pt_co_share_details.id = cssdfilter.co_share_id', 'left') + ->join('insurer_statements', 'cssdfilter.statement_id = insurer_statements.id', 'left') + ->where('insurer_statements.is_active', 1) + ->where('insurer_statements.month >=', $startDate) + ->where('insurer_statements.month <=', $endDate) + ->groupBy('cssdfilter.co_share_id'); + } + + // ============================== + // FILTER BY IDs + // ============================== + if ($client_id != 0) $builder->where('policy_transaction.client_id', $client_id); + if ($insurer_id != 0) $builder->where('policy_transaction.insurer_id', $insurer_id); + if ($client_branch_id != 0) $builder->where('policy_transaction.client_branch_id', $client_branch_id); + if ($insurer_branch_id != 0) $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); + if ($client_policy_id != 0) $builder->where('policy_transaction.client_policy_id', $client_policy_id); + if ($user_id != 0) $builder->where('policy_transaction.created_by', $user_id); + if ($policy_type_id != 0) $builder->where('client_policy.policy_type_id', $policy_type_id); + if ($issuer != 0) $builder->where('policy_transaction.issuer', $issuer); + + // ============================== + // DEFAULT 90-DAY FILTER + // ============================== + if ( + $client_id == 0 && + $insurer_id == 0 && + $policy_type_id == 0 && + $date_type == 0 && + $issuer == 0 + ) { + $fromDate = date('Y-m-d', strtotime('-90 days')); + $toDate = date('Y-m-d 23:59:59'); + + if (empty($where)) { + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } + } + + + + + + $sql1 = $builder2->getCompiledSelect(); + $sql2 = $builder->getCompiledSelect(); + + $finalSql = "($sql1) UNION ALL ($sql2) + ORDER BY policy_no DESC, insurer_branch_name ASC, statement_uploaded ASC, + STR_TO_DATE(policy_issue_month, '%b %Y') ASC"; + + + $result = $this->db->query($finalSql)->getResultArray(); + + return $result; + } + - - $sql1 = $builder2->getCompiledSelect(); - $sql2 = $builder->getCompiledSelect(); - - $finalSql = "($sql1) UNION ALL ($sql2) - ORDER BY policy_no DESC, insurer_branch_name ASC, statement_uploaded ASC, - STR_TO_DATE(policy_issue_month, '%b %Y') ASC"; - - - $result = $this->db->query($finalSql)->getResultArray(); - - return $result; - } - - - - - -} diff --git a/app/Views/report_bds.php b/app/Views/report_bds.php index 4a3b0a47..a393e404 100644 --- a/app/Views/report_bds.php +++ b/app/Views/report_bds.php @@ -1,646 +1,647 @@ - + + +
+ +
+
+
+
+

BDS Report

+
+ +
+
+
+ +
+ Total Premium: 0.00 +
+ +
+ Total Rewards: 0.00 +
+ +
+ Total IRDA Revenue INR: 0.00 +
+ +
+ Total Billed Amount: 0.00 +
+ +
+ Total Unbilled Amount: 0.00 +
+ +
+ Total Policy Count: +
-
-
-
-
-
-

BDS Report

-
-
-
- -
- Total Premium: 0.00 -
- -
- Total Rewards: 0.00 -
- -
- Total IRDA Revenue INR: 0.00 -
- -
- Total Billed Amount: 0.00 -
- -
- Total Unbilled Amount: 0.00 -
- -
- Total Policy Count: -
- -
- - - - - - - - - - - - - - - - - - - +
S. NoUserMonthstatement uploadClient TypeInsured NamePolicy/
Endorsement
Policy TypeBAP GroupVehicle NumberPolicy NoEndorsement NoInsurer Branch
+ + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - BP Premium + + + + + + + + + + - // empty array to initialize for policies per insurer per month + + + + + + + + $row){ + + $policy_no = $row['policy_no']; + + $policy_updated_month = $row['policy_issue_month']; + + $policy_type = $row['policy_type']; + + $statement_status = $row['statement_uploaded']; + + $client_name = $row['client_name']; + + $insurer_branch_name = $row['insurer_branch_name']; + + + + $uniqueRecord = "$policy_no-$policy_updated_month-$policy_type-$client_name-$insurer_branch_name" ; + + // irrespective of months or multiple months + $uniqueAgreedAmountPerInsurer = "$policy_no-$policy_type-$client_name-$insurer_branch_name" ; + + + + if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "no statement uploaded" ){ + continue ; + } + else if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "statement uploaded" ){ + unset($uniquePoliciesReport[$uniqueRecord]); + }else{ + + if(isset($uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer]) ){ + $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] -= $row['billed_amt']; + $row['total_irda_amt'] = 0; + $row['outstanding_amt'] = $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer]; + $row['multiple_months'] = true; + } + else{ + $row['outstanding_amt'] = $row['total_irda_amt'] - $row['billed_amt']; + $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] = $row['total_irda_amt'] ; + $row['multiple_months'] = false; + } + + + + $uniquePoliciesReport[$uniqueRecord] = $row; + } + + + + + + + } + + + + + + + $report_list = array_values($uniquePoliciesReport); + ?> - - - $row){ - - $policy_no = $row['policy_no']; - - $policy_updated_month = $row['policy_issue_month']; - - $policy_type = $row['policy_type']; - - $statement_status = $row['statement_uploaded']; - - $client_name = $row['client_name']; - - $insurer_branch_name = $row['insurer_branch_name']; + $row){ - $uniqueRecord = "$policy_no-$policy_updated_month-$policy_type-$client_name-$insurer_branch_name" ; - - // irrespective of months or multiple months - $uniqueAgreedAmountPerInsurer = "$policy_no-$policy_type-$client_name-$insurer_branch_name" ; - - - - if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "no statement uploaded" ){ - continue ; - } - else if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "statement uploaded" ){ - unset($uniquePoliciesReport[$uniqueRecord]); - }else{ - - if(isset($uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer]) ){ - $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] -= $row['billed_amt']; - $row['total_irda_amt'] = 0; - $row['outstanding_amt'] = $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer]; - $row['multiple_months'] = true; - } - else{ - $row['outstanding_amt'] = $row['total_irda_amt'] - $row['billed_amt']; - $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] = $row['total_irda_amt'] ; - $row['multiple_months'] = false; - } - - - - $uniquePoliciesReport[$uniqueRecord] = $row; - } - - - - - - - } - - - - - - - $report_list = array_values($uniquePoliciesReport); - - ?> - - - - $row){ - - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
S. NoUserMonthstatement uploadClient TypeInsured NamePolicy/
Endorsement
Policy TypeBAP GroupVehicle NumberPolicy NoEndorsement NoInsurer BranchEndorsement
Effective Date
Policy
Effective Date
Policy
Expiry Date
ReferenceRemarksEndorsement
Effective Date
Policy
Effective Date
Policy
Expiry Date
ReferenceRemarksBP PremiumTP/Ter PremiumPremium
(without GST)
Total PremiumBP %TP/Ter %RewardsAgreed AmountInvoiced AmountOutstanding Amount
TP/Ter PremiumPremium
(without GST)
Total PremiumBP %TP/Ter %RewardsAgreed AmountInvoiced AmountOutstanding Amount
  " class="mdi mdi-pencil" >  % %
- -
-
-
-
-
-
- - - - +
+
+
+
+
+
- \ No newline at end of file + function getCoShareStatementDetails(pt_id){ + + let url = '' + pt_id; + + sendAjaxRequestForGlobal(url, 'GET', {}, function(response) { + console.log('Data fetched successfully:', response); + + if (response.status === true) { + + appendTableData(response.data) + + } else { + toastr.warning(response.message, 'WARNING'); + } + }, function(xhr, status, error) { + console.error('Error fetching data:', error); + console.error(xhr.responseText); + }); + + } + + function appendTableData(data) { + + // Ensure the table body selector matches your table's structure + let tableBody = $("#table_data"); + + // Clear the table body before appending new rows + tableBody.empty(); + + // Loop through the data and append rows + data.forEach(row => { + let tableRow = ` + + ${row.stmt_sno ?? '-'} + ${row.month ?? '-'} + ${row.sum_of_actual_amt ?? '-'} + ${row.invoice_no ?? '-'} + ${row.invoice_date ?? '-'} + ${row.invoice_status ?? '-'} + + `; + tableBody.append(tableRow); + }); + } + + + \ No newline at end of file diff --git a/app/Views/report_bds_filter.php b/app/Views/report_bds_filter.php index 7628a1fb..fd8be988 100644 --- a/app/Views/report_bds_filter.php +++ b/app/Views/report_bds_filter.php @@ -1,562 +1,562 @@ - + -
-
-
-
+
+
+
+
-
-

- Filter - - - -

-
-
-
-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
+
+ + +
+ +
- -
- -
-
+ + \ No newline at end of file + //for the change title + function changeTitle(input) { + + let val = $(input).val(); + if (val == 'statement_month') { + $('#bds_title').text(' - Statement Month Wise List') + } else { + $('#bds_title').text(' - Policy Wise List') + } + + } + \ No newline at end of file