diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 0163d762..1a09989a 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -14,6 +14,8 @@ $routes->get('/swagger', 'SwaggerController::index', ['filter' => 'authMVC']); $routes->get("reminder_mail", "NotificationController::reminder_mail"); $routes->get("testing", "ClientController::Testing"); $routes->get("update-policy-terms-for-corrections", "ClientController::updatePolicyTermsForCorrections"); +$routes->get("update_rack_rate_json", "ClientController::updateRackRateJson"); +$routes->get("updatajson", "EmpDataServiceController::updatajson"); $routes->post("add_advertise_image", "AppContentManagementController::add_advertise_image"); @@ -139,6 +141,8 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) { $routes->get("enrollment-list", "EmployeeController::enrollmentClientList"); $routes->get("empby_client_clientbranch/(:any)/(:any)", "EmployeeController::empby_client_clientbranch/$1/$2"); $routes->get("truncate/(:any)", "EmployeeController::truncateFileData/$1"); + $routes->get("test-rack-rate", "EmployeeController::testRackRate"); + $routes->post("test-rack-rate", "EmployeeController::testRackRate"); }); @@ -262,6 +266,8 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get("getPolicyTermsFormJson/(:any)", "ClientController::getPolicyTermsFormJson/$1"); $routes->get("checkHRNumber/(:any)", "ClientController::checkHRNumber/$1"); $routes->get("check_addition_premium_JSON/(:any)", "ClientController::checkAdditionPremiumJSON/$1"); + $routes->get("get_policy_type_for_base_policy/(:any)", "ClientController::getPolicyTypeForBasePolicy/$1"); + $routes->get("get_client_details/(:any)", "ClientController::getClientDetails/$1"); }); $routes->cli('cli/processjob', 'JobWorker::processJob'); diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 464e9a04..788a31ca 100644 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -172,8 +172,8 @@ class ClientController extends AdminController } - - public function updatePolicyTermsForCorrections(){ + public function updatePolicyTermsForCorrections() + { $results = $this->clientPolicyModel ->select('id, policy_terms') @@ -240,7 +240,6 @@ class ClientController extends AdminController } } - public function removeClientBranch($id = null) { $this->myLogger->logme('error','Client Branch Remove function called'); @@ -269,6 +268,7 @@ class ClientController extends AdminController $data['state'] = $this->stateModel->getAllStates(); $data['RM'] = $this->userModel->findAll(); $data['policyGridData'] = $this->policyGridModel->findAll(); + $data['policy_types'] = $this->policyTypeModel->findAll(); $data['policy_type'] = ['1'=>'Base Policy', '2' => 'SI Topup', '3' => 'Dependent Addon']; // echo "
";
@@ -340,7 +340,6 @@ class ClientController extends AdminController
         echo view('layout/footer');
     }
 
-
     public function saveDeposit()
     {
         // Retrieve form data from POST request
@@ -377,7 +376,6 @@ class ClientController extends AdminController
         return $this->response->setJSON(['success' => $response['success']]);
     }
 
-
     public function editClientOnboarding($id = null)
     {    
 
@@ -392,8 +390,10 @@ class ClientController extends AdminController
         $editData['insurer']        = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames();
         $editData['kyc_docs']       = $this->kycDocsModel->findAll();
         $editData['policyGridData'] = $this->policyGridModel->findAll();
+        $editData['policy_types'] = $this->policyTypeModel->findAll();
         $editData['policy_type'] = ['1'=>'Base Policy', '2' => 'SI Topup', '3' => 'Dependent Addon'];
 
+        // dd($editData['policy_types']);
 
         $editData['client']           = $this->clientModel->where(['id' => $id])->first();
         $editData['client_kyc']       = $this->clientKYCDocsModel->where('client_id', $id)->findAll();
@@ -722,9 +722,11 @@ class ClientController extends AdminController
 
         $this->myLogger->logme('error','Client policy CREATE function called');
 
-        $policy_type_id = $this->request->getPost('policy_type_id');
+        $policy_type_id   = $this->request->getPost('policy_type_id');
         $client_branch_id = $this->request->getPost('client_branch_id');
-        $client_id = $this->request->getPost('client_id');
+        $client_id        = $this->request->getPost('client_id');
+        $policy_type_id   = $this->request->getPost('policy_type_id');
+        $base_policy      = $this->request->getPost('base_policy');
 
 
         $insurerValue                      = (string) $this->request->getPost('insurer');
@@ -747,7 +749,7 @@ class ClientController extends AdminController
         $data['client_id']         = $client_id;
         $data['tpa_branch_id']     = $tpaBranchId;
         $data['tpa_id']            = $tpaId;
-        $data['policy_id']         = $this->request->getPost('policy_id');
+        // $data['policy_id']         = $this->request->getPost('policy_id');
         $data['policy_type_id']    = $this->request->getPost('policy_type_id');
 
         $data['no_of_lives']                        = $this->request->getPost('no_of_lives');
@@ -761,17 +763,30 @@ class ClientController extends AdminController
         $data['claims_experience_for_last_3_years'] = $this->request->getPost('claims_experience_for_last_3_years');
         $data['earned_premium_amount']              = $this->request->getPost('earned_premium_amount');
         $data['claims_incurred_amount']             = $this->request->getPost('claims_incurred_amount');
-        $data['is_addon']                           = $this->request->getPost('is_addon');
-        $data['base_policy']                        = $this->request->getPost('base_policy');
+        $data['base_policy']                        = ($this->request->getPost('base_policy') === '' || $this->request->getPost('base_policy') == 0) ? null : $this->request->getPost('base_policy');
         $data['policy_status']                      = 1;
         $data['inception_type']                     = $this->request->getPost('inception_type') ? 2 : 1;
         $data['client_branch_id']                   = $this->request->getPost('client_branch_id');
         $data['cd_ac_no']                           = $this->request->getPost('cd_ac_no');
         $data['gst']                                = $this->request->getPost('gst');
+        
+        if($policy_type_id == 1 || $policy_type_id == 2 || $policy_type_id == 6 || $policy_type_id == 7){
 
+            $data['is_addon'] = 1;
 
+        }else if($policy_type_id == 4 || $policy_type_id == 5){
 
+            $data['is_addon'] = 2;
 
+        }else if($policy_type_id == 3){
+           
+            if($base_policy){
+                $data['is_addon'] = 3;
+            }else{
+                $data['is_addon'] = 1;
+            }
+        }
+                    
         $policy_terms =  $this->clientPolicyModel->where('id', $this->request->getPost('base_policy'))->first();
 
         // if ($this->request->getPost('is_addon') == 2 || $this->request->getPost('is_addon') == 3) {
@@ -806,12 +821,7 @@ class ClientController extends AdminController
         $insert = $this->clientPolicyModel->insert($data);
         if($insert){
             $clientPoliceData =  $this->clientPolicyModel->getClientPolicyByClientId($this->request->getPost('client_id'));
-            // foreach ($clientPoliceData as $key => $value) {
-            
-            //     $clientPoliceData[$key]->policy_start_date = date('d-M-Y', strtotime($value->policy_start_date));
-            //     $clientPoliceData[$key]->policy_end_date = date('d-M-Y', strtotime($value->policy_end_date));
-            // }
-            return $this->respond(['status' => true,'code' => 200,'data' => $clientPoliceData, 'method' => 'CERATE'], 200);
+            return $this->respond(['status' => true,'code' => 200,'data' => $clientPoliceData, 'method' => 'CERATE', 'post_data' => $data], 200);
         }else{
             return $this->respond(['status' => false,'code' => 404, 'message' => 'no data found'], 200);
         }
@@ -825,8 +835,7 @@ class ClientController extends AdminController
 
         $id        = $this->request->getPost('PrimaryKey');
         $client_id = $this->request->getPost('client_id');
-
-
+        $policy_type_id = $this->request->getPost('policy_type_id');
 
         $insurerValue                      = (string) $this->request->getPost('insurer');
         list($insurerBranchId, $insurerId) = explode('-', $insurerValue);
@@ -840,7 +849,6 @@ class ClientController extends AdminController
         $data['tpa_branch_id']     = $tpaBranchId;
         $data['client_id']         = $client_id;
         $data['tpa_id']            = $tpaId;
-        $data['policy_id']         = $this->request->getPost('policy_id');
         $data['policy_type_id']    = $this->request->getPost('policy_type_id');
         $data['policy_no'] = $this->request->getPost('policy_no');
         $data['policy_start_date'] = change_date_format($this->request->getPost('policy_start_date'), 'd-m-Y', 'Y-m-d');
@@ -858,14 +866,28 @@ class ClientController extends AdminController
         $data['claims_experience_for_last_3_years'] = $this->request->getPost('claims_experience_for_last_3_years');
         $data['earned_premium_amount']              = $this->request->getPost('earned_premium_amount');
         $data['claims_incurred_amount']             = $this->request->getPost('claims_incurred_amount');
-        $data['is_addon']                           = $this->request->getPost('is_addon');
-        $data['base_policy']                        = $this->request->getPost('base_policy');
+        $data['base_policy']                        = ($this->request->getPost('base_policy') === '' || $this->request->getPost('base_policy') == 0) ? null : $this->request->getPost('base_policy');
         $data['policy_status']                      = 1;
         $data['inception_type']                     = $this->request->getPost('inception_type') ? 2 : 1;
+        $data['enrolment_visibility']               = $this->request->getPost('enrolment_visibility') ? 1 : 0;
         $data['client_branch_id']                   = $this->request->getPost('client_branch_id');
         $data['cd_ac_no']                           = $this->request->getPost('cd_ac_no');
         $data['gst']                                = $this->request->getPost('gst');
 
+        if($policy_type_id == 1 || $policy_type_id == 2 || $policy_type_id == 3 || $policy_type_id == 6 || $policy_type_id == 7){
+
+            $data['is_addon'] = 1;
+
+        }else if($policy_type_id == 4){
+
+            $data['is_addon'] = 2;
+
+        }else if($policy_type_id == 5){
+
+            $data['is_addon'] = 3;
+        }
+          
+
         
         $policy_terms =  $this->clientPolicyModel->where('id', $this->request->getPost('base_policy'))->first();
 
@@ -918,40 +940,43 @@ class ClientController extends AdminController
         // echo json_encode(['key' => $this->request->getPost()]); die;
 
         try {
-            $policy_type = $this->request->getPost('policy_type');
             $client_id = $this->request->getPost('client_id');
             $client_policy_id = $this->request->getPost('client_policy_id');
+            $record    = $this->clientPolicyModel->where('client_policy.id', $client_policy_id)->first();
             $premium_type = $this->request->getPost('premium_type');
             if (!empty($client_id) && $client_id != null) {
                 $client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
                 $client_id =  $client_policy_data['client_id'];
             }
+            $branch_units = $this->getBranchUnitsByBranchId($record['client_branch_id']);
+            $branch_units = json_decode($branch_units);
+
+
             $policy_grid_id = $this->request->getPost('policy_grid_id');
-            $rack_rate_type = $this->request->getPost('rack_rate_type');
+            $rack_rate_name = $this->request->getPost('rack_rate_name');
 
-            $self = $this->request->getPost('self') ? 1 : 0;
-            $spouse = $this->request->getPost('spouse')? 1 : 0;
-            $childrens = $this->request->getPost('childrens')? 1 : 0;
-            $parents = $this->request->getPost('parents')? 1 : 0;
-            $parents_in_law = $this->request->getPost('parents-in-law')? 1 : 0;
-            $either_parents_pil = $this->request->getPost('either-parents-pil')? 1 : 0;
+            $self               = $this->request->getPost('self') ? 1 : 0;
+            $spouse             = $this->request->getPost('spouse');
+            $childrens          = $this->request->getPost('childrens');
+            $parents            = $this->request->getPost('parents');
+            $parents_in_law     = $this->request->getPost('parents-in-law');
 
-            $relation_data['self'] = $self;
-            $relation_data['spouse'] = $spouse;
-            $relation_data['childrens'] = $childrens;
-            $relation_data['parents'] = $parents;
-            $relation_data['parents-in-law'] = $parents_in_law;
-            $relation_data['either-parents-pil'] = $either_parents_pil;
+            if($policy_grid_id == 1 || $policy_grid_id == 2){
+                $self               =  1;
+                $spouse             = 'NA';
+                $childrens          = 'NA';
+                $parents            = 'NA';
+                $parents_in_law     = 'NA';    
+            }
 
+            $relation_data['self']               = $self;
+            $relation_data['spouse']             = $spouse;
+            $relation_data['childrens']          = $childrens;
+            $relation_data['parents']            = $parents;
+            $relation_data['parents-in-law']     = $parents_in_law;
 
             $jsonDataForRelation = json_encode($relation_data);
 
-            // if($policy_grid_id == 10 || $policy_grid_id == 11){
-            //     $premium_type = 1;
-            // }else{
-            //     $premium_type = 2;
-            // }
-
             $si_or_bp = $this->request->getPost('si_or_bp');
             $basic_multiplier = str_replace(',', '', $this->request->getPost('basic_multiplier'));
             $premium_multiplier = str_replace(',', '', $this->request->getPost('premium_multiplier'));
@@ -963,36 +988,36 @@ class ClientController extends AdminController
             $data['client_policy_id'] = $client_policy_id;
             $data['policy_grid_id'] = $policy_grid_id;
             $data['premium_type'] = $premium_type;
-            $data['rack_rate_type'] = $rack_rate_type;
-
-            if($rack_rate_type == 1){
-                $data['additional_relationship'] = $jsonDataForRelation;
-            }
-
+            $data['rack_rate_name'] = $rack_rate_name;
+            $data['additional_relationship'] = $jsonDataForRelation;
 
             $premium = [];
 
             if ($policy_grid_id == '1' || $policy_grid_id == '2') {
                 $this->policyPremium1Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->set('is_active', 0)->update();
             } else {
-                $this->policyPremium2Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->where('rack_rate_type', $rack_rate_type)->set('is_active', 0)->update();
+                $this->policyPremium2Model->where('client_id', $client_id)->where('client_policy_id', $client_policy_id)->where('rack_rate_name', $rack_rate_name)->set('is_active', 0)->update();
             }
 
-
             if ($policy_grid_id == '1') {
 
-
                 if ($si_or_bp == '1') {
 
                     $premium = str_replace(',', '', $this->request->getPost('gpa_sum_premium[]'));
                     $sum_insure = str_replace(',', '', $this->request->getPost('gpa_sum_si[]'));
                     $multiplier = $this->request->getPost('gpa_sum_multiplier');
+                    $unit = $this->request->getPost('gpa_unit[]');
 
                     for ($i = 0; $i < count($premium); $i++) {
                         $data['si'] = $sum_insure[$i];
                         $data['premium'] = $premium[$i];
                         $data['multiplier'] = $multiplier;
                         $data['si_or_bp'] = $this->request->getPost('si_or_bp');
+                        if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                            $data['unit'] = $branch_units[0];
+                        } else {
+                            $data['unit'] = $unit[$i];
+                        }
 
                         $policyPremium = $this->policyPremium1Model->insert($data);
                     }
@@ -1003,6 +1028,8 @@ class ClientController extends AdminController
                     $sum_insure = str_replace(',', '', $this->request->getPost('gpa_sum_si2[]'));
                     $multiplier = $this->request->getPost('gpa_sum_multiplier2');
                     $grade = $this->request->getPost('gpa_band[]');
+                    $unit = $this->request->getPost('gpa_unit[]');
+
 
                     for ($i = 0; $i < count($premium); $i++) {
                         $data['si'] = $sum_insure[$i];
@@ -1010,6 +1037,11 @@ class ClientController extends AdminController
                         $data['grade'] = $grade[$i];
                         $data['multiplier'] = $multiplier;
                         $data['si_or_bp'] = $this->request->getPost('si_or_bp');
+                        if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                            $data['unit'] = $branch_units[0];
+                        } else {
+                            $data['unit'] = $unit[$i];
+                        }
 
                         $policyPremium = $this->policyPremium1Model->insert($data);
                     }
@@ -1019,6 +1051,8 @@ class ClientController extends AdminController
                     $premium = str_replace(',', '', $this->request->getPost('gpa_basic_premium[]'));
                     $sum_insure = str_replace(',', '', $this->request->getPost('gpa_basic_si[]'));
                     $basic_pay = str_replace(',', '', $this->request->getPost('basic_pay[]'));
+                    $unit = $this->request->getPost('gpa_unit[]');
+
 
                     for ($i = 0; $i < count($premium); $i++) {
 
@@ -1028,6 +1062,11 @@ class ClientController extends AdminController
                         $data['basic_pay'] = $basic_pay[$i];
                         $data['si'] = $sum_insure[$i];
                         $data['premium'] = $premium[$i];
+                        if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                            $data['unit'] = $branch_units[0];
+                        } else {
+                            $data['unit'] = $unit[$i];
+                        }
 
                         $policyPremium = $this->policyPremium1Model->insert($data);
                     }
@@ -1049,33 +1088,55 @@ class ClientController extends AdminController
             } else if ($policy_grid_id == '2') {
                 $data['premium'] = str_replace(',', '', $this->request->getPost('gpa_premium'));
                 $data['si'] = str_replace(',', '', $this->request->getPost('gpa_si'));
+                $unit = $this->request->getPost('gpa_unit');
+                if (empty($unit)) {
+                    $data['unit'] = $branch_units[0];
+                } else {
+                    $data['unit'] = $unit;
+                }
 
                 $policyPremium = $this->policyPremium1Model->insert($data);
 
                 $data = $this->request->getPost();
                 $insert = true;
             } else if ($policy_grid_id == '3') {
+
                 $premium = $this->request->getPost('3_premium[]');
                 $sum_insure = $this->request->getPost('3_si[]');
+                $unit = $this->request->getPost('3_unit[]');
+                
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
                 $insert = true;
-            } else if ($policy_grid_id == '4') {
 
+            } else if ($policy_grid_id == '4') {
 
                 $premium = $this->request->getPost('4_premium[]');
                 $sum_insure = $this->request->getPost('4_si');
                 $age_from = $this->request->getPost('4_age_from[]');
                 $age_to = $this->request->getPost('4_age_to[]');
+                $unit = $this->request->getPost('4_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure);
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1087,30 +1148,42 @@ class ClientController extends AdminController
                 $sum_insure = $this->request->getPost('5_si[]');
                 $age_from = $this->request->getPost('5_age_from[]');
                 $age_to = $this->request->getPost('5_age_to[]');
+                $unit = $this->request->getPost('5_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
                 $insert = true;
             } else if ($policy_grid_id == '6') {
 
-
                 $premium = $this->request->getPost('6_premium[]');
-
-                print_r($premium);
-
                 $sum_insure = $this->request->getPost('6_si');
                 $age_from = $this->request->getPost('6_age_from[]');
                 $age_to = $this->request->getPost('6_age_to[]');
+                $unit = $this->request->getPost('6_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure);
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+                    
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1122,11 +1195,19 @@ class ClientController extends AdminController
                 $sum_insure = $this->request->getPost('7_si[]');
                 $age_from = $this->request->getPost('7_age_from[]');
                 $age_to = $this->request->getPost('7_age_to[]');
+                $unit = $this->request->getPost('7_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1135,10 +1216,18 @@ class ClientController extends AdminController
                 $premium = $this->request->getPost('8_premium[]');
                 $sum_insure = $this->request->getPost('8_si[]');
                 $grade = $this->request->getPost('8_grade[]');
+                $unit = $this->request->getPost('8_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['grade'] = $grade[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1147,6 +1236,12 @@ class ClientController extends AdminController
 
                 $data['premium'] = str_replace(',', '', $this->request->getPost('gpa_premium'));
                 $data['si'] = str_replace(',', '', $this->request->getPost('gpa_si'));
+                $unit = $this->request->getPost('gpa_unit');
+                if (empty($unit)) {
+                    $data['unit'] = $branch_units[0];
+                } else {
+                    $data['unit'] = $unit;
+                }
 
                 $policyPremium = $this->policyPremium2Model->insert($data);
                 // $premium = $this->request->getPost('9_premium[]');
@@ -1165,11 +1260,20 @@ class ClientController extends AdminController
                 $sum_insure = $this->request->getPost('10_si[]');
                 $age_from = $this->request->getPost('10_age_from[]');
                 $age_to = $this->request->getPost('10_age_to[]');
+                $unit = $this->request->getPost('10_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
+
                     $policyPremium = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1180,11 +1284,19 @@ class ClientController extends AdminController
                 $sum_insure = $this->request->getPost('11_si[]');
                 $grade = $this->request->getPost('11_grade[]');
                 $max_sum_insure = $this->request->getPost('11_max_si[]');
+                $unit = $this->request->getPost('11_max_si[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['grade'] = $grade[$i];
                     $data['max_si'] = str_replace(',', '', $max_sum_insure[$i]);
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
+
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
                 $data = $this->request->getPost();
@@ -1194,10 +1306,17 @@ class ClientController extends AdminController
                 $premium = $this->request->getPost('12_premium[]');
                 $sum_insure = $this->request->getPost('12_si[]');
                 $relationship = $this->request->getPost('12_relationship[]');
+                $unit = $this->request->getPost('12_unit[]');
+
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
                     $data['si'] = str_replace(',', '', $sum_insure[$i]);
                     $data['relationship'] = $relationship[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
 
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
@@ -1210,6 +1329,7 @@ class ClientController extends AdminController
                 $age_from = $this->request->getPost('13_age_from[]');
                 $age_to = $this->request->getPost('13_age_to[]');
                 $relationship = $this->request->getPost('13_relationship[]');
+                $unit = $this->request->getPost('13_unit[]');
 
                 for ($i = 0; $i < count($premium); $i++) {
                     $data['premium'] = str_replace(',', '', $premium[$i]);
@@ -1217,6 +1337,11 @@ class ClientController extends AdminController
                     $data['age_from'] = $age_from[$i];
                     $data['age_to'] = $age_to[$i];
                     $data['relationship'] = $relationship[$i];
+                    if (empty($unit) || !isset($unit[$i]) || empty($unit[$i])) {
+                        $data['unit'] = $branch_units[0];
+                    } else {
+                        $data['unit'] = $unit[$i];
+                    }
 
                     $dataa = $this->policyPremium2Model->insert($data);
                 }
@@ -1225,18 +1350,23 @@ class ClientController extends AdminController
             }
 
             if ($insert) {
-                return $this->respond(['status' => true, 'code' => 200, 'data' => $data], 200);
+                return $this->respond(['status' => true, 'code' => 200, 'data' => $data, 'rack_rate_json'=>$jsonDataForRelation,], 200);
             } else {
                 return $this->respond(['status' => false, 'code' => 404, 'data' => $data, 'message' => 'no data found'], 200);
             }
+
         } catch (\Exception $e) {
-            // Handle exceptions here
             echo 'Error: ' . $e->getMessage();
         }
     }
 
 
 
+
+
+
+
+    
     public function getKycDocsById($id=null)
     {
 
@@ -1293,11 +1423,18 @@ class ClientController extends AdminController
                 ->join('policy_type', 'policy_type.id = policies.policy_type_id')
                 ->where(['policies.insurer_id' => $insurer_id, 'policies.is_active' => 1])
                 ->findAll();
-                
-            $client_policy_list = $this->clientPolicyModel->getpolicyWithPattern( $client_id );
+            $client_policy_list = $this->clientPolicyModel->getPolicyTypeForPolicyBinding($client_id);
             $cd_data = $this->CDMasterModel->where('client_id', $client_id)->where('insurer_id', $insurer_id)->findAll();
                                    
-            return $this->respond(['status' => true,'code' => 200, 'client_policy_list' => $client_policy_list, 'data' => $client_policy_data, 'cd_data' => $cd_data, "insurer_id" => $client_policy_data['insurer_id'], 'policy' => $polices], 200);
+            return $this->respond([
+                'status' => true,
+                'code' => 200, 
+                'data' => $client_policy_data, 
+                'cd_data' => $cd_data, 
+                "insurer_id" => $client_policy_data['insurer_id'], 
+                'policy' => $polices, 
+                'client_policy_list' =>  $client_policy_list
+            ], 200);
         }else{
             return $this->respond(['status' => false,'code' => 404, 'message' => 'no data found'], 200);
         }
@@ -1308,7 +1445,13 @@ class ClientController extends AdminController
     {
 
         $client_policy_id = $this->request->getGet('client_policy_id');
-        $record    = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+        $terms_si_amount_array = $this->getPolicyTerms($client_policy_id);
+
+        $record    = $this->clientPolicyModel
+                        ->select('client_policy.*, policy_type.policy_type')
+                        ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
+                        ->where('client_policy.id', $client_policy_id)
+                        ->first();
         $family_floater = '';
         if (isset(json_decode($record['policy_terms'])->family_floater)) {
             $family_floater = json_decode($record['policy_terms'])->family_floater;
@@ -1320,16 +1463,7 @@ class ClientController extends AdminController
             $self = $policy_terms_data->family_floaters;
         }
 
-        // $emp_count = $this->employeeModel
-        // ->join('client_policy cp', "employees.client_id = cp.client_id")
-        // ->join('employee_polices ep', "cp.id = ep.client_policy_id AND employees.id = ep.employee_id")
-        // ->where("employees.client_id", $record['client_id'])
-        // ->where("employees.emp_status", 'active')
-        // ->where("ep.status", 'active')
-        // ->where("employees.is_active", 1)
-        // ->where("ep.is_active", 1)
-        // ->countAllResults();
-
+        $branch_units = $this->getBranchUnitsByBranchId($record['client_branch_id']);
 
         $emp_count = $this->employeePolicyModel
             ->join('client_policy cp', "cp.id = employee_polices.client_policy_id")
@@ -1338,13 +1472,10 @@ class ClientController extends AdminController
             ->where("employee_polices.is_active", 1)
             ->countAllResults();
 
-
-        $data = $this->policesModel->getPolicyPremium($record['policy_id']);
-        $policy_name = $data[0]->policy_name;
         $gmc_pattern = '/gmc/i';
         $gpa_pattern = '/gpa/i';
-        $subject = $data[0]->policy_type;
-        $policy_type_id = $data[0]->id;
+        $subject = $record['policy_type'];
+        $policy_type_id = $record['policy_type_id'];
 
         if (preg_match($gmc_pattern, $subject)) {
             $search_term = 'GMC';
@@ -1438,14 +1569,47 @@ class ClientController extends AdminController
             // print_r($premium1);
             // print_r($premium2); die;
 
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $resultss, 'premiumData' => json_encode($premiumDataa), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
+            return $this->respond([
+                'status' => true, 
+                'code' => 200, 
+                'data' => $resultss, 
+                'premiumData' => json_encode($premiumDataa), 
+                'count' => $emp_count,  
+                'family_floater' => $family_floater, 
+                'self' => $self, 
+                'client_policy_id' => $client_policy_id, 
+                'terms_si_amount_array' => $terms_si_amount_array,
+                'branch_units' => $branch_units
+            ], 200);
 
         } else if ($search_term === 'GPA' || $policy_type_id == 6 || $policy_type_id == 7) {
 
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
+            return $this->respond([
+                'status' => true, 
+                'code' => 200, 
+                'data' => $results, 
+                'premiumData' => json_encode($premiumData), 
+                'count' => $emp_count, 
+                'family_floater' => $family_floater, 
+                'self' => $self, 
+                'client_policy_id' => $client_policy_id, 
+                'terms_si_amount_array' => $terms_si_amount_array,
+                'branch_units' => $branch_units
+            ], 200);
         } else {
 
-            return $this->respond(['status' => false, 'code' => 200, 'data' => $results, 'premiumData' => json_encode($premiumData), 'count' => $emp_count, 'policy_name' => $policy_name, 'family_floater' => $family_floater, 'self' => $self, 'client_policy_id' => $client_policy_id], 200);
+            return $this->respond([
+                'status' => false, 
+                'code' => 200, 
+                'data' => $results, 
+                'premiumData' => json_encode($premiumData), 
+                'count' => $emp_count,  
+                'family_floater' => $family_floater, 
+                'self' => $self, 
+                'client_policy_id' => $client_policy_id,
+                'terms_si_amount_array' => $terms_si_amount_array,
+                'branch_units' => $branch_units 
+            ], 200);
         }
     }
 
@@ -1655,7 +1819,6 @@ class ClientController extends AdminController
     {
         $client_policy_id = $this->request->getVar('client_policy_id');
         $record    = $this->clientPolicyModel->where('id', $client_policy_id)->first();
-        $policy_name = $this->policesModel->select('name')->where('id', $record['policy_id'])->first();
 
         // $emp_count = $this->employeeModel ->join('client_policy cp',"employees.client_id = cp.client_id")
         //     ->join('employee_polices ep',"cp.id = ep.client_policy_id AND employees.id = ep.employee_id")
@@ -1675,12 +1838,11 @@ class ClientController extends AdminController
                 'Status' => true,
                 'code' => 200,        
                 'data' => $record['policy_terms'],  
-                'policy_name' => $policy_name,
                 'policy_addon' => $record['is_addon'], 
                 'emp_count_by_policy'=>$emp_count_by_policy],
             200);
         } else {
-            return $this->respond(['Status' => false,'code' => 200,'message' => 'Record not found.',  'policy_name' => $policy_name], 200);
+            return $this->respond(['Status' => false,'code' => 200,'message' => 'Record not found.'], 200);
         }
 
     }
@@ -1873,7 +2035,6 @@ class ClientController extends AdminController
         return $this->respond(['status' => true, 'code' => 200, 'message' => $message, 'data' => $termsData, 'racRate' => $racRate, 'open_for_enrollment' => $json_data, 'client_policy_data' => $record], 200);
     }
 
-
     public function getClientPolicyList($client_id = null)
     {
 
@@ -1887,7 +2048,6 @@ class ClientController extends AdminController
 
     }
 
-
     public function fetchPolicyDataForPolicyType($client_policy_id){
 
         $client_policy_id = $this->request->getGet('client_policy_id');
@@ -1921,7 +2081,6 @@ class ClientController extends AdminController
 
     }
 
-
     public function downloadKYCDocument($file_name)
     {
 
@@ -1934,7 +2093,6 @@ class ClientController extends AdminController
         }
     }
 
-
     public function getClientBranch($client_id){
 
          $branchs = $this->clientBranchModel
@@ -2163,8 +2321,6 @@ class ClientController extends AdminController
 
     }
 
-
-
     public function transformArray($data, $mapping)
     {
 
@@ -2212,7 +2368,6 @@ class ClientController extends AdminController
         return json_encode($transformedData, JSON_PRETTY_PRINT);
     }
 
-
     public function transformFamilyFloaters($familyFloaters, $json)
     {
         $result = [];
@@ -2257,7 +2412,6 @@ class ClientController extends AdminController
         return implode(", ", $result);
     }
 
-
     public function deleteAdditionalRackRate($client_id, $client_policy_id, $rack_rate_type)
     {
         try {
@@ -2282,8 +2436,6 @@ class ClientController extends AdminController
         return $this->respond(['status' => true,'code' => 200, 'message' => 'Additionaly Rack Rate Data Remove Successfully'], 200);
     }
     
-
-
     public function get_cd_ac($client_id, $insurer_id)
     {
 
@@ -2301,7 +2453,6 @@ class ClientController extends AdminController
 
     }
 
-
     public function otherPolicyTermsFormSubmit()
     {
 
@@ -2325,7 +2476,6 @@ class ClientController extends AdminController
         }
     }
 
-
     public function checkPolicyType($policy_type_id, $client_branch_id, $client_id)
     {
 
@@ -2344,31 +2494,36 @@ class ClientController extends AdminController
 
     }
 
-
     public function getPolicyTerms($client_policy_id)
     {
         $policy_terms = $this->clientPolicyModel->where('id', $client_policy_id)->first();
     
         if (!$policy_terms) {
-            return $this->respond(['status' => false, 'error' => 'Policy not found'], 404);
+            // return $this->respond(['status' => false, 'error' => 'Policy not found'], 404);
+            return [];
         }
     
         if (is_array($policy_terms)) {
             if (!isset($policy_terms['policy_terms'])) {
-                return $this->respond(['status' => false, 'error' => 'Policy terms not found in array'], 500);
+                // return $this->respond(['status' => false, 'error' => 'Policy terms not found in array'], 500);
+                return [];
+
             }
             $JSON = json_decode($policy_terms['policy_terms']);
         } elseif (is_object($policy_terms)) {
             if (!isset($policy_terms->policy_terms)) {
-                return $this->respond(['status' => false, 'error' => 'Policy terms not found in object'], 500);
+                // return $this->respond(['status' => false, 'error' => 'Policy terms not found in object'], 500);
+                return [];
             }
             $JSON = json_decode($policy_terms->policy_terms);
         } else {
-            return $this->respond(['status' => false, 'error' => 'Unexpected data type for policy terms'], 500);
+            // return $this->respond(['status' => false, 'error' => 'Unexpected data type for policy terms'], 500);
+            return [];
         }
     
         if (!$JSON) {
-            return $this->respond(['status' => false, 'error' => 'Invalid JSON format in policy terms'], 500);
+            // return $this->respond(['status' => false, 'error' => 'Invalid JSON format in policy terms'], 500);
+            return [];
         }
     
         $multi_si = [];
@@ -2387,11 +2542,10 @@ class ClientController extends AdminController
             }
         }
     
-        return $this->respond(['status' => true, 'data' => $multi_si], 200);
+        // return $this->respond(['status' => true, 'data' => $multi_si], 200);
+        return $multi_si;
     }
     
-    
-
     public function getPolicyTermsFormJson($policy_type_id)
     {
 
@@ -2399,9 +2553,10 @@ class ClientController extends AdminController
         return $this->respond(['status' => true, 'data' => $JSON], 200);
     }
 
-    public function createPolicyTermsHtmlAsJSON(){
+    public function createPolicyTermsHtmlAsJSON()
+    {
 
-        
+        echo 'hi';
     }
 
     public function checkHRNumber($mobileNumber)
@@ -2423,7 +2578,6 @@ class ClientController extends AdminController
         }
     }
  
-    
     public function checkAdditionPremiumJSON($client_id, $client_policy_id)
     {
 
@@ -2437,4 +2591,173 @@ class ClientController extends AdminController
         return $this->respond(['status' => true, 'data' => $get_additional_rack_rate_relationship_json, 'message' => "try"], 200);    
     }
 
+    public function getPolicyTypeForBasePolicy($client_id)
+    {
+
+     $result = $this->clientPolicyModel->getPolicyTypeForPolicyBinding($client_id);   
+     return $this->respond(['status' => true, 'data' => $result], 200);
+
+    }
+
+    public function getClientDetails($client_id)
+    {
+
+     $result = $this->clientModel->where('id', $client_id)->first();   
+     return $this->respond(['status' => true, 'data' => $result], 200);
+    }
+
+    public function getBranchUnitsByBranchId($branch_id)
+    {
+
+        $units = $this->clientBranchModel->select('units')->where('id', $branch_id)->first();
+
+        if($units){
+            return $units['units'];
+        }else{
+            return [];
+        }
+
+    }
+
+    public function updateRackRateJson()
+    {   
+        // $client_policy_id = 13;
+
+        $results = $this->policyPremium2Model
+            ->select('*')
+            // ->where('client_policy_id', $client_policy_id)
+            ->where('is_active', 1)
+            ->groupBy('client_policy_id')
+            ->get()
+            ->getResultArray();
+       
+
+        $results2 = $this->policyPremium1Model
+            ->select('*')
+            // ->where('client_policy_id', $client_policy_id)
+            ->where('is_active', 1)
+            ->groupBy('client_policy_id')
+            ->get()
+            ->getResultArray();
+       
+
+        $client_policy_ids = [];
+        $json = [];
+        $json1 = [];
+
+        foreach ($results as $key => $result) 
+        {
+            $client_policy_id = $result['client_policy_id'];
+            $client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+            $policy_terms = [];
+            
+            if(isset($client_policy_data['policy_terms'])) 
+            {
+                $policy_terms = json_decode($client_policy_data['policy_terms'], true);
+            } 
+                        
+            if (isset($policy_terms['family_floaters'])) {
+                $family_floaters = $policy_terms['family_floaters'];
+               
+                if(isset($family_floaters['self']) && isset($family_floaters['spouse']) && isset($family_floaters['childrens']) && isset($family_floaters['parents']) && isset($family_floaters['parents-in-law']) && isset($family_floaters['either-parents-pil']) && isset($family_floaters['elders_count'])) {
+                   
+                    $json1[] = $family_floaters;
+
+                    $self = 1;
+                    $spouse = 'any';
+                    $childrens = 'any';
+                    $parents = 'any';
+                    $parents_in_law = 'any';
+
+                    if($family_floaters['self'] == 0){
+                        $self = 'NA';
+                    }
+                    if($family_floaters['spouse'] == 0){
+                        $spouse = 'NA';
+                    }
+                    if($family_floaters['childrens'] == 0){
+                        $childrens = 'NA';
+                    }
+                    if($family_floaters['parents'] == 0){
+                        $parents = 'NA';
+                    }
+                    if($family_floaters['parents-in-law'] == 0){
+                        $parents_in_law = 'NA';
+                    }
+
+                    $transformed_family_floaters = [
+                        "self" => $self,
+                        "spouse" => $spouse,
+                        "childrens" => $childrens,
+                        "parents" =>  $parents,
+                        "parents-in-law" => $parents_in_law,
+                    ];
+                    
+                    $formatedJSON = json_encode($transformed_family_floaters);
+                    $json[] = $formatedJSON;
+
+                    $forUpdateData = [
+                            "additional_relationship" => $formatedJSON,
+                            "rack_rate_name" => 'Primary',
+                    ];
+
+                    $this->policyPremium2Model
+                        ->where('client_policy_id', $client_policy_id)
+                        ->set($forUpdateData)
+                        ->update();
+                }
+
+                $client_policy_ids[] = $client_policy_id;
+            }
+        }
+
+        foreach ($results2 as $key => $result) 
+        {
+            $client_policy_id = $result['client_policy_id'];
+            $client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+
+            if($client_policy_data['policy_terms']){
+
+                $self = 1;
+                $spouse = 'NA';
+                $childrens = 'NA';
+                $parents = 'NA';
+                $parents_in_law = 'NA';
+
+                $transformed_family_floaters = [
+                    "self" => $self,
+                    "spouse" => $spouse,
+                    "childrens" => $childrens,
+                    "parents" =>  $parents,
+                    "parents-in-law" => $parents_in_law,
+                ];
+                
+                $formatedJSON = json_encode($transformed_family_floaters);
+                $json[] = $formatedJSON;
+
+                $forUpdateData = [
+                    "additional_relationship" => $formatedJSON,
+                    "rack_rate_name" => 'Primary',
+                ];
+
+                $this->policyPremium1Model
+                        ->where('client_policy_id', $client_policy_id)
+                        ->set($forUpdateData)
+                        ->update();
+            }
+        }
+
+        $client_policy_ids[] = $client_policy_id;
+        
+
+        if(count($client_policy_ids) > 0){
+            echo 'There are ' . count($client_policy_ids) . ' records to be updated.';
+            echo '
'; + dd($client_policy_ids); + }else{ + echo 'There is no records to be update.'; + } + + } + } \ No newline at end of file diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index 8642c0a5..43ebcb94 100644 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -11,12 +11,14 @@ use CodeIgniter\API\ResponseTrait; use App\Models\MessageModel; use App\Models\UserMessageModel; +use App\Models\ClientModel; class DashboardController extends AdminController { use ResponseTrait; protected $messageModel; + protected $clientModel; protected $userMessageModel; protected $myLogger; @@ -26,12 +28,97 @@ class DashboardController extends AdminController $this->messageModel = new MessageModel(); $this->userMessageModel = new UserMessageModel(); $this->myLogger = \Config\Services::mylogger(); + $this->clientModel = new ClientModel(); } public function dashboard() { + $data = []; + + + $results = $this->clientModel->select('clients.id as client_id, clients.client_name, clients.short_name, + client_branch.id as client_branch_id, client_branch.branch_name, + client_branch.branch_code, employees.id as employee_id, + employees.name as employee_name, employees.relationship, + employees.emp_code, employees.emp_status, auth_history.user_type') + ->join('client_branch','clients.id = client_branch.client_id', 'left') + ->join('employees','client_branch.id = employees.client_branch_id', 'left') + ->join('auth_history', 'employees.id = auth_history.user_id AND "employee" = auth_history.user_type', 'left') + ->findAll(); + + $groupedData = []; + $employeeId = ''; + foreach ($results as $row) { + $clientId = $row['client_id']; + $clientName = $row['client_name']; + $shortName = $row['short_name']; + $branchId = $row['client_branch_id']; + $branchName = $row['branch_name']; + $branchCode = $row['branch_code']; + if($employeeId != $row['employee_id']){ + $employeeId = $row['employee_id']; + }else{ + $employeeId = null; + } + $employeeName = $row['employee_name'] ; + $employeeRelationship = $row['relationship'] ; + $employeeEmpCode = $row['emp_code'] ; + $employeeEmpStatus = $row['emp_status']; + $employeeUserType = $row['user_type']; + + // Initialize the client entry if it doesn't exist + if (!isset($groupedData[$clientId])) { + $groupedData[$clientId] = [ + 'client_id' => $clientId, + 'client_name' => $clientName, + 'short_name' => $shortName, + 'branches' => [] + ]; + } + + // Initialize the branch entry if it doesn't exist + if (!isset($groupedData[$clientId]['branches'][$branchId])) { + $groupedData[$clientId]['branches'][$branchId] = [ + 'client_branch_id' => $branchId, + 'branch_name' => $branchName, + 'branch_code' => $branchCode, + 'emp_login' => 0, + 'emp_enroll' => 0, + 'employees' => [] + ]; + } + if ($employeeId !== null && $employeeRelationship == 'Self') { + // Append employee info to the branch's employees list + $groupedData[$clientId]['branches'][$branchId]['employees'][] = [ + 'employee_id' => $employeeId, + 'employee_name' => $employeeName, + 'relationship' => $employeeRelationship, + 'emp_code' => $employeeEmpCode, + 'emp_status' => $employeeEmpStatus, + 'user_type' => $employeeUserType + ]; + if (!empty($employeeUserType)) { + $groupedData[$clientId]['branches'][$branchId]['emp_login']++; + } + + // Increment emp_enroll if emp_status is not 'draft' + if ($employeeEmpStatus !== 'draft') { + $groupedData[$clientId]['branches'][$branchId]['emp_enroll']++; + } + } + $employeeId = $row['employee_id']; + } + + // Re-index the arrays to match the expected structure + foreach ($groupedData as &$client) { + $client['branches'] = array_values($client['branches']); + } + // echo "
";
+        $data['client_branch_emp_list'] = $groupedData;
+        // print_r($data);die;
+
         echo view('layout/header');
-        echo view('DashBoard');
+        echo view('DashBoard', $data);
         echo view('layout/footer');
     }
 
diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php
index f1d6f143..2fbd2d09 100644
--- a/app/Controllers/EmpDataServiceController.php
+++ b/app/Controllers/EmpDataServiceController.php
@@ -25,6 +25,7 @@ use App\Models\NotificationModel;
 use App\Models\MessageModel;
 use App\Models\UserMessageModel;
 use App\Models\CDMasterModel;
+use App\Models\InsurerExcelExportTemplateModel;
 
 use App\Controllers\Jobs;
 use App\Controllers\JobWorker;
@@ -54,6 +55,7 @@ class EmpDataServiceController extends BaseController
     protected $messageModel;
     protected $userMessageModel;
     protected $CDMasterModel;
+    protected $excelExportTemplateModel;
 
 
     public function __construct()
@@ -74,6 +76,7 @@ class EmpDataServiceController extends BaseController
         $this->messageModel        = new MessageModel();
         $this->userMessageModel          = new UserMessageModel();
         $this->CDMasterModel    = new CDMasterModel();
+        $this->excelExportTemplateModel    = new InsurerExcelExportTemplateModel();
 
     }
 
@@ -110,7 +113,8 @@ class EmpDataServiceController extends BaseController
     }
 
 
-    public function insertBatchList($params){
+    public function insertBatchList($params)
+    {
 
         foreach ($params['batch_list_data'] as $value) {
 
@@ -142,10 +146,7 @@ class EmpDataServiceController extends BaseController
         $objects = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
         $policy_details = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first();
 
-        // dd($export_data, $policy_details['cd_ac_no']);
-
         if ($policy_details['cd_ac_no'] == null) {
-            // dd("The policy does not have a CD account number");
             $this->myLogger->logme('error', 'The policy does not have a CD account number.');
             return 5;
         }
@@ -153,7 +154,6 @@ class EmpDataServiceController extends BaseController
         $cash_balance = $this->clientDepositModel->where('cd_ac_no', $policy_details['cd_ac_no'])->orderBy('id', 'DESC')->first();
 
         if ($cash_balance == null) {
-
             $balance = $this->CDMasterModel
                 ->where('client_id', $export_data['client_id'])
                 ->where('insurer_id', $policy_details['insurer_id'])
@@ -163,17 +163,14 @@ class EmpDataServiceController extends BaseController
             $cash_balance['balance'] = $balance['opening_bal'];
         }
 
-        // dd($cash_balance);
-
         // Calculate the total amount from the objects
-        $totals = array_reduce($objects, function ($carry, $item) {
-            return $carry + $item->total;
-        }, 0);
-
+        $totals = 0;
+        foreach ($objects as $item) {
+            $totals =  $totals + $item->total;
+        }
+        
         $totals = round($totals, 2);
-
         if (!empty($cash_balance)) {
-            
             if ((int) $cash_balance['balance']  < (int) $totals) {
                 $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
                 $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.  CASH BALANCE : {balance}  and  TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
@@ -181,22 +178,16 @@ class EmpDataServiceController extends BaseController
             }
         }
 
-
-        $this->removeOldExportInfoFromBatchFile($export_data);
-
-
         // Log the count of exported data
         $count = count($objects);
         $export_data['count'] = $count;
         $export_data['amount'] = $totals;
         $export_data['status'] = 'success';
 
-
         $this->myLogger->logme('error', 'Inception export data count : {data}', ['data' => $count]);
 
         // If no data is found for export, return false
         if ($count == 0) {
-
             $this->myLogger->logme('error', 'No Record found. TPA ID or UHID are Alread Updated.  Correction export data count : {data}', ['data' => $count]);
             return false;
         }
@@ -204,37 +195,249 @@ class EmpDataServiceController extends BaseController
         // Log the export file name
         $this->myLogger->logme('error', 'Inception export file name : {data}', ['data' => $export_data['file_name']]);
 
-        // Transform retrieved objects to an array suitable for export
-        $data = transform_objects_to_array_for_inception($objects);
+        // remove existing batch file anf batch list data every time export
+        $this->removeOldExportInfoFromBatchFile($export_data);
 
-        // Define headers for the Excel file
-        $headers = [
-            'S.No',
-            'NAME OF EMP/DEP',
-            'EMP ID',
-            'EMP/DEP TYPE',
-            'RELATIONSHIP CODE',
-            'DOB',
-            'GENDER',
-            'PRE EXISTING AILMENTS',
-            'BASIC COVER SI',
-            'DATE OF COVERAGE',
-            'AGE',
-            'RELATIONSHIP',
-            'REMARKS',
-            'POLICY END DATE',
-            'NO OF DAYS',
-            'TPA ID',
-            'UHID',
-            'PREMIUM',
-            'PR0 RATA PREMIUM',
-            'GST',
-            'TOTAL'
+        // default excel header information
+        $excel_header_columns = [
+            [
+                'column_index' => 0, 
+                'column_name' => 'S.No', 
+                'db_column_name' => 'index'
+            ],
+            [
+                'column_index' => 1, 
+                'column_name' => 'NAME OF EMP/DEP', 
+                'db_column_name' => 'emp_name'
+            ],
+            [
+                'column_index' => 2, 
+                'column_name' => 'EMP ID', 
+                'db_column_name' => 'emp_code'
+            ],
+            [
+                'column_index' => 3, 
+                'column_name' => 'EMP/DEP TYPE', 
+                'db_column_name' => 'emp_type'
+            ],
+            [
+                'column_index' => 4, 
+                'column_name' => 'RELATIONSHIP CODE', 
+                'db_column_name' => 'emp_relationship_code'
+            ],
+            [
+                'column_index' => 5, 
+                'column_name' => 'DOB', 
+                'db_column_name' => 'emp_dob'
+            ],
+            [
+                'column_index' => 6, 
+                'column_name' => 'GENDER', 
+                'db_column_name' => 'emp_gender'
+            ],
+            [
+                'column_index' => 7, 
+                'column_name' => 'PRE EXISTING AILMENTS', 
+                'db_column_name' => 'pre_existing_alignments'
+            ],
+            [
+                'column_index' => 8, 
+                'column_name' => 'BASIC COVER SI', 
+                'db_column_name' => 'basic_cover_si'
+            ],
+            [
+                'column_index' => 9, 
+                'column_name' => 'DATE OF COVERAGE', 
+                'db_column_name' => 'date_coverage'
+            ],
+            [
+                'column_index' => 10, 
+                'column_name' => 'AGE', 
+                'db_column_name' => 'emp_age'
+            ],
+            [
+                'column_index' => 11, 
+                'column_name' => 'RELATIONSHIP', 
+                'db_column_name' => 'emp_relationship'
+            ],
+            [
+                'column_index' => 12, 
+                'column_name' => 'REMARKS', 
+                'db_column_name' => 'remarks'
+            ],
+            [
+                'column_index' => 13, 
+                'column_name' => 'POLICY END DATE', 
+                'db_column_name' => 'policy_end_date'
+            ],
+            [
+                'column_index' => 14, 
+                'column_name' => 'NO OF DAYS', 
+                'db_column_name' => 'days'
+            ],
+            [
+                'column_index' => 15, 
+                'column_name' => 'TPA ID', 
+                'db_column_name' => 'tpa_id'
+            ],
+            [
+                'column_index' => 16, 
+                'column_name' => 'UHID', 
+                'db_column_name' => 'uhid'
+            ],
+            [
+                'column_index' => 17, 
+                'column_name' => 'PREMIUM', 
+                'db_column_name' => 'premium'
+            ],
+            [
+                'column_index' => 18, 
+                'column_name' => 'PR0 RATA PREMIUM', 
+                'db_column_name' => 'rata_premimum'
+            ],
+            [
+                'column_index' => 19, 
+                'column_name' => 'GST', 
+                'db_column_name' => 'gst'
+            ],
+            [
+                'column_index' => 20, 
+                'column_name' => 'TOTAL AMOUNT', 
+                'db_column_name' => 'total'
+            ]
         ];
 
+        // get excel export format structure array
+        $template_json = $this->clientPolicyModel
+            ->select('insurer_excel_export_template.jsoncolumns')
+            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+            ->where('client_policy.id', $export_data['client_policy_id'])
+            ->where('insurer_excel_export_template.event_name', $export_data['event_type'])
+            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+            ->first();
+        
+        if(!empty($template_json) && $template_json != null){
+            $excel_header_columns = json_decode($template_json['jsoncolumns'], true); 
+        }else{
+            return 6;
+        }
+        
+        if( $export_data['insurer_or_tpa'] == 'tpa'){
+            
+            $excel_header_columns = [
+                [
+                    'column_index' => 0, 
+                    'column_name' => 'S.No', 
+                    'header_name' => 'index'
+                ],
+                [
+                    'column_index' => 1, 
+                    'column_name' => 'NAME OF EMP/DEP', 
+                    'db_column_name' => 'emp_name'
+                ],
+                [
+                    'column_index' => 2, 
+                    'column_name' => 'EMP ID', 
+                    'db_column_name' => 'emp_code'
+                ],
+                [
+                    'column_index' => 3, 
+                    'column_name' => 'EMP/DEP TYPE', 
+                    'db_column_name' => 'emp_type'
+                ],
+                [
+                    'column_index' => 4, 
+                    'column_name' => 'RELATIONSHIP CODE', 
+                    'db_column_name' => 'emp_relationship_code'
+                ],
+                [
+                    'column_index' => 5, 
+                    'column_name' => 'DOB', 
+                    'db_column_name' => 'emp_dob'
+                ],
+                [
+                    'column_index' => 6, 
+                    'column_name' => 'GENDER', 
+                    'db_column_name' => 'emp_gender'
+                ],
+                [
+                    'column_index' => 7, 
+                    'column_name' => 'PRE EXISTING AILMENTS', 
+                    'db_column_name' => 'pre_existing_alignments'
+                ],
+                [
+                    'column_index' => 8, 
+                    'column_name' => 'BASIC COVER SI', 
+                    'db_column_name' => 'basic_cover_si'
+                ],
+                [
+                    'column_index' => 9, 
+                    'column_name' => 'DATE OF COVERAGE', 
+                    'db_column_name' => 'date_of_coverage'
+                ],
+                [
+                    'column_index' => 10, 
+                    'column_name' => 'AGE', 
+                    'db_column_name' => 'emp_age'
+                ],
+                [
+                    'column_index' => 11, 
+                    'column_name' => 'RELATIONSHIP', 
+                    'db_column_name' => 'emp_relationship'
+                ],
+                [
+                    'column_index' => 12, 
+                    'column_name' => 'REMARKS', 
+                    'db_column_name' => 'remarks'
+                ],
+                [
+                    'column_index' => 13, 
+                    'column_name' => 'POLICY END DATE', 
+                    'db_column_name' => 'policy_end_date'
+                ],
+                [
+                    'column_index' => 14, 
+                    'column_name' => 'NO OF DAYS', 
+                    'db_column_name' => 'no_of_days'
+                ],
+                [
+                    'column_index' => 15, 
+                    'column_name' => 'TPA ID', 
+                    'db_column_name' => 'tpa_id'
+                ],
+                [
+                    'column_index' => 16, 
+                    'column_name' => 'UHID', 
+                    'db_column_name' => 'uhid'
+                ],
+                [
+                    'column_index' => 17, 
+                    'column_name' => 'PREMIUM', 
+                    'db_column_name' => 'premium'
+                ],
+                [
+                    'column_index' => 18, 
+                    'column_name' => 'PR0 RATA PREMIUM', 
+                    'db_column_name' => 'pro_rata_premium'
+                ],
+                [
+                    'column_index' => 19, 
+                    'column_name' => 'GST', 
+                    'db_column_name' => 'gst'
+                ],
+                [
+                    'column_index' => 20, 
+                    'column_name' => 'TOTAL AMOUNT', 
+                    'db_column_name' => 'total'
+                ]
+            ];
+        }
+
+        $excel_data_info = generate_insurer_based_excel($excel_header_columns, $objects);
+
         // Generate Excel file
         $tempFile = tmpfile();
-        $success = generate_excel($headers, $data, $tempFile, 1);
+        $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile);
 
         // If Excel generation is successful
         if ($success) {
@@ -305,42 +508,59 @@ class EmpDataServiceController extends BaseController
 
         if ($count == 0) {
             $this->myLogger->logme('error', 'No Record found. Endorsement ID Alread Updated.  Correction export data count : {data}', ['data' => $count]);
-            return false;  
+            // return false;  
         }
 
+
         $this->removeOldExportInfoFromBatchFile($export_data);
 
 
         $this->myLogger->logme('error', 'Correction export file name : {data}', ['data' => $export_data['file_name']]);
+       
+        
+        // get excel export format structure array
+        $template_json = $this->clientPolicyModel
+            ->select('insurer_excel_export_template.jsoncolumns')
+            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+            ->where('client_policy.id', $export_data['client_policy_id'])
+            ->where('insurer_excel_export_template.event_name', $export_data['event_type'])
+            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+            ->first();
+        
+        if(!empty($template_json) && $template_json != null){
+            $excel_header_columns = json_decode($template_json['jsoncolumns'], true); 
+        }else{
+            return 6;
+        }    
 
-        $correction_data = transform_objects_to_array_for_correction($objects);
 
-        $headers = [
-            'Emp Code',
-            'RISK ID',
-            'NAME OF EMP/DEP',
-            'EMP/DEP TYPE',
-            'RELATION',
-            'DOB',
-            'GENDER',
-            'Wrong Data',
-            'Correct Data',
-            'Remarks',
-            'Endorsement_Id'
-        ];
+        if( $export_data['insurer_or_tpa'] == 'tpa'){
+            
+            $excel_header_columns = [
+                ['column_index' => 0, 'column_name' => 'Emp Code', 'db_column_name' => 'emp_code'],
+                ['column_index' => 1, 'column_name' => 'RISK ID', 'db_column_name' => 'uhid'],
+                ['column_index' => 1, 'column_name' => 'NAME OF EMP/DEP', 'db_column_name' => 'emp_name'],
+                ['column_index' => 3, 'column_name' => 'EMP/DEP TYPE', 'db_column_name' => 'emp_type'],
+                ['column_index' => 4, 'column_name' => 'RELATION', 'db_column_name' => 'relationship_code'],
+                ['column_index' => 5, 'column_name' => 'DOB', 'db_column_name' => 'emp_dob'],
+                ['column_index' => 6, 'column_name' => 'GENDER', 'db_column_name' => 'emp_gender'],
+                ['column_index' => 7, 'column_name' => 'Wrong Data', 'db_column_name' => 'old_value'],
+                ['column_index' => 8, 'column_name' => 'Correct Data', 'db_column_name' => 'new_value'],
+                ['column_index' => 9, 'column_name' => 'Remarks', 'db_column_name' => 'remarks'],
+                ['column_index' => 10, 'column_name' => 'Endorsement_Id', 'db_column_name' => null]
+            ];
+        }
 
-        // Create a temporary file in memory
+
+        $excel_data_info = generate_insurer_based_excel($excel_header_columns, $objects);
+
+        // Generate Excel file
         $tempFile = tmpfile();
+        $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile);
 
-        // Generate Excel file with the temporary file
-        $value = generate_excel($headers, $correction_data, $tempFile);
-
-        if ($value) {
-
-
+        if ($success) {
 
             $return = $this->batchFilesAndBatchListEntry($export_data, $objects);
-
             if ($return) {
 
                 foreach ($ids as $key => $id) {
@@ -432,39 +652,57 @@ class EmpDataServiceController extends BaseController
         $this->removeOldExportInfoFromBatchFile($export_data);
         $this->myLogger->logme('error', 'SI_Enhancement export file name : {data}', ['data' => $export_data['file_name']]);
 
-        $si_data = transform_objects_to_array_for_si_enhancement($objects);
 
-        $headers = [
-            'S.No',
-            'NAME OF EMP/DEP',
-            'EMP ID',
-            'EMP/DEP TYPE',
-            'RELATION',
-            'DOB',
-            'GENDER',
-            'PRE EXISTING AILMENTS',
-            'BASIC COVER SI',
-            'Old Sum Insured',
-            'Date of Coverage',
-            'Policy End Date',
-            'No Of Days',
-            'Old SI Premium',
-            'New SI premium',
-            'Difference premium',
-            'Pro Rata Premium',
-            'GST',
-            'Total',
-            'ENDORSEMENT_ID'
-        ];
+        // get excel export format structure array
+        $template_json = $this->clientPolicyModel
+            ->select('insurer_excel_export_template.jsoncolumns')
+            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+            ->where('client_policy.id', $export_data['client_policy_id'])
+            ->where('insurer_excel_export_template.event_name', $export_data['event_type'])
+            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+            ->first();
+        
+        if(!empty($template_json) && $template_json != null){
+            $excel_header_columns = json_decode($template_json['jsoncolumns'], true); 
+        }else{
+            return 6;
+        }    
+
+        if( $export_data['insurer_or_tpa'] == 'tpa'){
+            
+            $excel_header_columns = [
+                ['column_index' => 0, 'column_name' => 'S.No', 'db_column_name' => 'index'],
+                ['column_index' => 1, 'column_name' => 'NAME OF EMP/DEP', 'db_column_name' => 'emp_name'],
+                ['column_index' => 2, 'column_name' => 'EMP ID', 'db_column_name' => 'emp_code'],
+                ['column_index' => 3, 'column_name' => 'EMP/DEP TYPE', 'db_column_name' => 'emp_type'],
+                ['column_index' => 4, 'column_name' => 'RELATION', 'db_column_name' => 'emp_relationship_code'],
+                ['column_index' => 5, 'column_name' => 'DOB', 'db_column_name' => 'emp_dob'],
+                ['column_index' => 6, 'column_name' => 'GENDER', 'db_column_name' => 'emp_gender'],
+                ['column_index' => 7, 'column_name' => 'PRE EXISTING AILMENTS', 'db_column_name' => 'pre_existing_alignments'],
+                ['column_index' => 8, 'column_name' => 'BASIC COVER SI', 'db_column_name' => 'new_basic_cover_si'],
+                ['column_index' => 9, 'column_name' => 'Old Sum Insured', 'db_column_name' => 'old_basic_cover_si'],
+                ['column_index' => 10, 'column_name' => 'Date of Coverage', 'db_column_name' => 'date_of_coverage'],
+                ['column_index' => 11, 'column_name' => 'Policy End Date', 'db_column_name' => 'policy_end_date'],
+                ['column_index' => 12, 'column_name' => 'No Of Days', 'db_column_name' => 'no_of_days'],
+                ['column_index' => 13, 'column_name' => 'Old SI Premium', 'db_column_name' => 'old_si_premium'],
+                ['column_index' => 14, 'column_name' => 'New SI premium', 'db_column_name' => 'new_si_premium'],
+                ['column_index' => 15, 'column_name' => 'Difference premium', 'db_column_name' => 'difference_premium'],
+                ['column_index' => 16, 'column_name' => 'Pro Rata Premium', 'db_column_name' => 'pro_rata_premium'],
+                ['column_index' => 17, 'column_name' => 'GST', 'db_column_name' => 'gst'],
+                ['column_index' => 18, 'column_name' => 'Total', 'db_column_name' => 'total'],
+                ['column_index' => 19, 'column_name' => 'ENDORSEMENT_ID', 'db_column_name' => null]
+            ];
+            
+        }
 
 
-        // Create a temporary file in memory
+        $excel_data_info = generate_insurer_based_excel($excel_header_columns, $objects);
+
+        // Generate Excel file
         $tempFile = tmpfile();
+        $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile);
 
-        // Generate Excel file with the temporary file
-        $value = generate_excel($headers, $si_data, $tempFile);
-
-        if ($value) {
+        if ($success) {
             $return = $this->batchFilesAndBatchListEntry($export_data, $objects);
             if ($return) {
 
@@ -526,35 +764,51 @@ class EmpDataServiceController extends BaseController
         $this->removeOldExportInfoFromBatchFile($export_data);
         $this->myLogger->logme('error', 'Deletion export file name : {data}', ['data' => $export_data['file_name']]);
 
-        $si_data = transform_objects_to_array_for_deletion($objects);
-        // dd($si_data);
-        $headers = [
-            'S.No',
-            'EMP ID',
-            'EMP NAME',
-            'DOB',
-            'GENDER',
-            'RELATIONSHIP',
-            'SUM INSURED',
-            'Date of Leaving',
-            'Policy End Date',
-            'No Of Days',
-            'Premium',
-            'Pro Rata Premium',
-            'GST',
-            'Total',
-            'Claim Status',
-            'ENDORSEMENT_ID'
-        ];
+        // get excel export format structure array
+        $template_json = $this->clientPolicyModel
+            ->select('insurer_excel_export_template.jsoncolumns')
+            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+            ->where('client_policy.id', $export_data['client_policy_id'])
+            ->where('insurer_excel_export_template.event_name', $export_data['event_type'])
+            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+            ->first();
+        
+        if(!empty($template_json) && $template_json != null){
+            $excel_header_columns = json_decode($template_json['jsoncolumns'], true); 
+        }else{
+            return 6;
+        }  
 
+        if( $export_data['insurer_or_tpa'] == 'tpa'){
+            
+            $excel_header_columns = [
+                ['column_index' => 0, 'column_name' => 'S.No', 'db_column_name' => 'index'],
+                ['column_index' => 1, 'column_name' => 'EMP ID', 'db_column_name' => 'emp_code'],
+                ['column_index' => 2, 'column_name' => 'EMP NAME', 'db_column_name' => 'emp_name'],
+                ['column_index' => 3, 'column_name' => 'DOB', 'db_column_name' => 'emp_dob'],
+                ['column_index' => 4, 'column_name' => 'GENDER', 'db_column_name' => 'emp_gender'],
+                ['column_index' => 5, 'column_name' => 'RELATIONSHIP', 'db_column_name' => 'emp_relationship_code'],
+                ['column_index' => 6, 'column_name' => 'SUM INSURED', 'db_column_name' => 'basic_cover_si'],
+                ['column_index' => 7, 'column_name' => 'Date of Leaving', 'db_column_name' => 'date_of_leaving'],
+                ['column_index' => 8, 'column_name' => 'Policy End Date', 'db_column_name' => 'policy_end_date'],
+                ['column_index' => 9, 'column_name' => 'No Of Days', 'db_column_name' => 'no_of_days'],
+                ['column_index' => 10, 'column_name' => 'Premium', 'db_column_name' => 'premium'],
+                ['column_index' => 11, 'column_name' => 'Pro Rata Premium', 'db_column_name' => 'pro_rata_premium'],
+                ['column_index' => 12, 'column_name' => 'GST', 'db_column_name' => 'gst'],
+                ['column_index' => 13, 'column_name' => 'Total', 'db_column_name' => 'total'],
+                ['column_index' => 14, 'column_name' => 'Claim Status', 'db_column_name' => null],
+                ['column_index' => 15, 'column_name' => 'ENDORSEMENT_ID', 'db_column_name' => null]
+            ];
 
-        // Create a temporary file in memory
+        }
+
+        $excel_data_info = generate_insurer_based_excel($excel_header_columns, $objects);
+
+        // Generate Excel file
         $tempFile = tmpfile();
+        $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile);
 
-        // Generate Excel file with the temporary file
-        $value = generate_excel($headers, $si_data, $tempFile, 2);
-
-        if ($value) {
+        if ($success) {
             $return = $this->batchFilesAndBatchListEntry($export_data, $objects);
             if ($return) {
 
@@ -587,6 +841,281 @@ class EmpDataServiceController extends BaseController
     }
 
 
+    public function generateExcelForAllEventType($export_data)
+    {
+
+        $additionData = [];
+        $deletionData = [];
+        $inceptionData = [];
+        $correctionData = []; 
+        $enhancementData = []; 
+        $dependentAdditionData = []; 
+
+        $event_type_array = $export_data['event_type'];
+
+        foreach ($export_data['event_type'] as $value) 
+        {
+
+            if($value == 'addition'){
+                $export_data['event_type'] = 'addition';
+                $additionData = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
+
+            }else if($value == 'inception'){
+                $export_data['event_type'] = 'inception';
+                $dependentAdditionData = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
+
+            }else if($value == 'dependent_addition'){
+                $export_data['event_type'] = 'dependent_addition';
+                $dependentAdditionData = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
+
+            }else if($value == 'deletion'){
+                $export_data['event_type'] = 'deletion';
+                $deletionData = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($export_data);
+
+            }else if($value == 'si_enhancement'){
+                $export_data['event_type'] = 'si_enhancement';
+                $enhancementData = $this->employeePolicyModel->getSIEnhancementEmployeesDataForExportExcel($export_data);
+
+            }else if($value == 'correction'){
+                $export_data['event_type'] = 'correction';
+                $correctionData = $this->employeePolicyModel->getCorrectionEmployeesDataForExportExcel($export_data);
+
+            }
+          
+        }
+
+        if(empty($additionData) && empty($deletionData) && empty($inceptionData) && empty($correctionData) && empty($enhancementData) && empty($dependentAdditionData)){
+           
+            return 0;
+        }
+
+        //for cd tranction and cd master data is empty check
+        if(!empty($inceptionData) && $inceptionData != null){
+
+            $policy_details = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first();
+
+            if ($policy_details['cd_ac_no'] == null) {
+                $this->myLogger->logme('error', 'The policy does not have a CD account number.');
+                return 5;
+            }
+
+            $cash_balance = $this->clientDepositModel->where('cd_ac_no', $policy_details['cd_ac_no'])->orderBy('id', 'DESC')->first();
+
+            if ($cash_balance == null) {
+                $balance = $this->CDMasterModel
+                    ->where('client_id', $export_data['client_id'])
+                    ->where('insurer_id', $policy_details['insurer_id'])
+                    ->where('cd_ac_no', $policy_details['cd_ac_no'])
+                    ->first();
+
+                $cash_balance['balance'] = $balance['opening_bal'];
+            }
+
+            // Calculate the total amount from the objects
+            $totals = 0;
+            foreach ($inceptionData as $item) {
+                $totals =  $totals + $item->total;
+            }
+            
+            $totals = round($totals, 2);
+            if (!empty($cash_balance)) {
+                if ((int) $cash_balance['balance']  < (int) $totals) {
+                    $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
+                    $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.  CASH BALANCE : {balance}  and  TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
+                    return 0;
+                }
+            }
+        }
+
+        $this->removeOldExportInfoFromBatchFile($export_data);
+
+
+        // Merging all data into a single array
+        $mergedData = array_merge($inceptionData, $additionData, $dependentAdditionData, $correctionData, $enhancementData, $deletionData);
+
+        // dd($inceptionData, $additionData, $dependentAdditionData, $correctionData, $enhancementData,  $deletionData, $mergedData);
+
+
+        $template_json = $this->clientPolicyModel
+        ->select('insurer_excel_export_template.jsoncolumns')
+        ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+        ->where('client_policy.id', $export_data['client_policy_id'])
+        ->where('insurer_excel_export_template.event_name', 'inception')
+        ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+        ->first();
+
+
+        if(!empty($template_json) && $template_json != null){
+            $excel_header_columns = json_decode($template_json['jsoncolumns'], true); 
+        }else{
+            return 6;
+        } 
+
+
+        // Generating Excel data
+        $excel_data_info = generate_insurer_based_excel($excel_header_columns, $mergedData);
+
+        // Generate Excel file
+        $tempFile = tmpfile();
+        $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile);
+
+        // If Excel generation is successful
+        if ($success) {
+
+            $random_number_count = 4;
+            $batch_code = generate_random_string($random_number_count);
+            session()->set('batch_code', $batch_code);
+
+            foreach ($event_type_array as $value) 
+            {
+                $random_number_count = 4;
+                $export_data['batch_code'] = session()->get('batch_code');
+                $export_data['created_by'] = get_session_userid();
+
+                if($value == 'addition'){
+                   
+                    if(!empty($additionData) && $additionData != null){
+
+                        $count = count($additionData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'addition';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $additionData]]);
+    
+                    }
+    
+                }else if($value == 'inception'){
+
+                    if(!empty($inceptionData) && $inceptionData != null){
+
+                        $count = count($inceptionData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'inception';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $inceptionData]]);
+                    }
+
+                }else if($value == 'dependent_addition'){
+                     
+                    if(!empty($dependentAdditionData) && $dependentAdditionData != null){
+
+                        $count = count($dependentAdditionData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'dependent_addition';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $dependentAdditionData]]);
+                    }
+                }else if($value == 'deletion'){
+
+                    if(!empty($deletionData) && $deletionData != null){
+
+                        $count = count($deletionData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'deletion';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $deletionData]]);
+                    }
+
+                }else if($value == 'si_enhancement'){
+
+                    if(!empty($enhancementData) && $enhancementData != null){
+
+                        $count = count($enhancementData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'si_enhancement';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $enhancementData]]);
+                    }
+
+                }else if($value == 'correction'){
+
+                    if(!empty($correctionData) && $correctionData != null){
+
+                        $count = count($correctionData);
+                        $export_data['count'] = $count;
+                        $export_data['status'] = 'success';
+                        $export_data['event_type'] = 'correction';
+
+                        $insert = $this->batchFileModel->insert($export_data);
+                        $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+                        // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+        
+                        $job_details  = new Jobs();
+                        $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $correctionData]]);
+                    }
+                }
+
+            }
+
+            session()->remove('batch_code');
+
+            // If batch operation is successful
+            if (true) {
+
+                // Clear the output buffer to avoid any unwanted output
+                if (ob_get_level()) {
+                    ob_end_clean();
+                }
+
+                // Set headers for Excel file download
+                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+                header('Content-Disposition: attachment; filename="' . $export_data['file_name'] . '"');
+                header('Content-Transfer-Encoding: binary');
+                header('Cache-Control: must-revalidate');
+                header('Pragma: public');
+                header('Expires: 0');
+
+                // Output file contents
+                rewind($tempFile);
+                fpassthru($tempFile);
+
+                // Close and remove temporary file
+                fclose($tempFile);
+
+                return true; // Excel file successfully generated and exported
+
+            } else {
+
+                return false; // Batch operation failed
+            }
+        }
+
+        return false; // Excel generation failed
+
+
+
+    }
+
     //not in use
     public function generateExcelForAdditionAndDependentAddition($export_data)
     {
@@ -1229,7 +1758,7 @@ class EmpDataServiceController extends BaseController
         $this->myLogger->logme('error', 'Inception Update TPA and UHID --    total amount for cash deposite : {data}', ['data' => $totals]);
 
 
-        if ($file['insurer_or_tpa'] == 'tpa') {
+        if ($file['insurer_or_tpa'] == 'insurer') {
 
             $this->myLogger->logme('error', 'Inception Update TPA and UHID --    set  cashDepositCalculationForInception and sendMailForDownloadingECard in JOB QUEUE');
 
@@ -3378,8 +3907,8 @@ class EmpDataServiceController extends BaseController
 
     public function getPolicyNameUsingClientPolicyId($client_policy_id)
     {
-        return $this->clientPolicyModel->select('policies.name as policy_name')
-            ->join('policies', 'policies.id = client_policy.policy_id')
+        return $this->clientPolicyModel->select('policy_type.policy_type as policy_name')
+            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
             ->where('client_policy.id', $client_policy_id)
             ->first();
     }
@@ -3703,8 +4232,6 @@ class EmpDataServiceController extends BaseController
         }
     }
 
-
-
     public function readExcelFileToArray($path)
     {
         $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($path);
@@ -3727,9 +4254,8 @@ class EmpDataServiceController extends BaseController
         return $filtered_data;
     }
     
-
-
-    public function removeOldExportInfoFromBatchFile($params){
+    public function removeOldExportInfoFromBatchFile($params)
+    {
 
         $client_id = $params['client_id'];
         $client_policy_id = $params['client_policy_id'];
@@ -3752,21 +4278,18 @@ class EmpDataServiceController extends BaseController
                 $batch_code = $batch_data['batch_code'];
                 $this->batchFileModel->where('id', $id)->delete();
                 $this->batchListModel->where('batch_code', $batch_code)->delete();
-
             }
-
-
     }
 
-
-    public function getDataByFileId($file_id, $status = 'success'){
+    public function getDataByFileId($file_id, $status = 'success')
+    {
 
        $data = $this->batchFileModel
-        ->select('batch_files.*, clients.client_name, clients.short_name, policies.name as policy_name, client_branch.branch_name')
+        ->select('batch_files.*, clients.client_name, clients.short_name, policy_type.policy_type as policy_name, client_branch.branch_name')
         ->join('clients', 'clients.id = batch_files.client_id')
         ->join('client_policy', 'client_policy.id = batch_files.client_policy_id')
         ->join('client_branch', 'client_branch.id = batch_files.client_branch_id')
-        ->join('policies', 'policies.id = client_policy.policy_id')
+        ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
         ->where('batch_files.id', $file_id)
         ->first();
 
@@ -3788,8 +4311,8 @@ class EmpDataServiceController extends BaseController
         return ['msg_txt' => $msg_txt, 'user_id' => $user_id, 'url' => $url, 'status' => $status, 'title' => $msg_title];
     }
 
-
-    public function setPullNotification($data){
+    public function setPullNotification($data)
+    {
 
 
         $array = ['message_text' => $data['msg_txt'], 'action_url' => $data['url'], 'msg_status' => $data['status'], 'msg_title' => $data['title']];
@@ -3810,6 +4333,60 @@ class EmpDataServiceController extends BaseController
 
     }
 
+    public function updatajson()
+    {
+          
+        // $columns = [
+        //     ["column_index" => 0, "column_name" => "MEMBERID / EMPID", "db_column_name" => "emp_code"],
+        //     ["column_index" => 1, "column_name" => "UHID", "db_column_name" => "uhid"],
+        //     ["column_index" => 2, "column_name" => "GRADE", "db_column_name" => null],
+        //     ["column_index" => 3, "column_name" => "DOJ", "db_column_name" => "emp_doj"],
+        //     ["column_index" => 4, "column_name" => "INSURED NAME", "db_column_name" => "insured_name"],
+        //     ["column_index" => 5, "column_name" => "ADDRESS 1", "db_column_name" => null],
+        //     ["column_index" => 6, "column_name" => "ADDRESS 2", "db_column_name" => null],
+        //     ["column_index" => 7, "column_name" => "CITY", "db_column_name" => null],
+        //     ["column_index" => 8, "column_name" => "STATE", "db_column_name" => null],
+        //     ["column_index" => 9, "column_name" => "PINCODE", "db_column_name" => null],
+        //     ["column_index" => 10, "column_name" => "Age", "db_column_name" => "emp_age"],
+        //     ["column_index" => 11, "column_name" => "DOB", "db_column_name" => "emp_dob"],
+        //     ["column_index" => 12, "column_name" => "RELATION SHIP", "db_column_name" => "emp_relationship"],
+        //     ["column_index" => 13, "column_name" => "Gender", "db_column_name" => "emp_gender"],
+        //     ["column_index" => 14, "column_name" => "DOC", "db_column_name" => "doc"],
+        //     ["column_index" => 15, "column_name" => "DOE", "db_column_name" => "doe"],
+        //     ["column_index" => 16, "column_name" => "SUM INSURED", "db_column_name" => "basic_cover_si"],
+        //     ["column_index" => 17, "column_name" => "PROPOSER NAME", "db_column_name" => null],
+        //     ["column_index" => 18, "column_name" => "DOS", "db_column_name" => "dos"],
+        //     ["column_index" => 19, "column_name" => "MOBILE NO", "db_column_name" => null],  
+        //     ["column_index" => 20, "column_name" => "EMAIL ID", "db_column_name" => null],
+        //     ["column_index" => 21, "column_name" => "FATHER/HUSBAND NAME", "db_column_name" => null],
+        //     ["column_index" => 22, "column_name" => "REMARKS", "db_column_name" => null],
+        //     ["column_index" => 23, "column_name" => "FLAG STATUS", "db_column_name" => "flag_status"],
+        //     ["column_index" => 24, "column_name" => "EXCEPTIONS", "db_column_name" => "exceptions"],
+        //     ["column_index" => 25, "column_name" => "ABHA", "db_column_name" => null]
+        // ];
+
+        // $columns = [
+        //     ["column_index" => 0, "column_name" => "Sr.No", "db_column_name" => "index"],
+        //     ["column_index" => 1, "column_name" => "Tata Aig Ref. No", "db_column_name" => "uhid"],
+        //     ["column_index" => 2, "column_name" => "EMP ID", "db_column_name" => "emp_code"],
+        //     ["column_index" => 3, "column_name" => "Name of Insured", "db_column_name" => "emp_name"],
+        //     ["column_index" => 4, "column_name" => "GC Current Details", "db_column_name" => "old_value"],
+        //     ["column_index" => 5, "column_name" => "Modified Details", "db_column_name" => "new_value"],
+        //     ["column_index" => 6, "column_name" => "Revision W.E.F (DD/MM/YYYY)", "db_column_name" => null],
+        //     ["column_index" => 7, "column_name" => "NEW TTD", "db_column_name" => null],
+        //     ["column_index" => 8, "column_name" => "New Category's", "db_column_name" => null],
+        //     ["column_index" => 9, "column_name" => "Remarks", "db_column_name" => "remarks"],
+        //     ["column_index" => 10, "column_name" => "DOC", "db_column_name" => null],
+        //     ["column_index" => 11, "column_name" => "Errors", "db_column_name" => null]
+        // ];
+        
+        
+        
+        // $json = json_encode($columns);
+        // $this->excelExportTemplateModel->where('id', 31)->set('jsoncolumns', $json)->update();
+
+    }
+
 
 
 }
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index db9b306c..1388b252 100644
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -11,6 +11,7 @@ use Psr\Log\LoggerInterface;
 use App\Models\EmployeeModel;
 use App\Models\EmployeePolicyModel;
 use App\Models\ClientModel;
+use App\Models\ClientBranchModel;
 use App\Models\PolicesModel;
 use App\Models\FileModel;
 use App\Models\BatchListModel;
@@ -18,6 +19,9 @@ use App\Models\BatchFileModel;
 use App\Models\EmpEndorsementModel;
 use App\Models\ClientPolicyModel;
 use App\Models\TPAModel;
+use App\Models\InsurerExcelExportTemplateModel;
+use App\Models\InsurerModel;
+
 
 use App\Controllers\Jobs;
 use App\Controllers\JobWorker;
@@ -44,6 +48,7 @@ class EmployeeController extends AdminController
     protected $employeeModel;
     protected $employeePolicyModel;
     protected $clientModel;
+    protected $clientBranchModel;
     protected $fileModel;
     protected $batchListModel;
     protected $batchFileModel;
@@ -51,6 +56,8 @@ class EmployeeController extends AdminController
     protected $clientPolicyModel;
     protected $TPAModel;
     protected $policiesModel;
+    protected $excelExportTemplateModel;
+    protected $insurerModel;
 
     public function __construct()
     {
@@ -60,6 +67,7 @@ class EmployeeController extends AdminController
         $this->employeeModel = new EmployeeModel();
         $this->employeePolicyModel = new EmployeePolicyModel();
         $this->clientModel = new ClientModel();
+        $this->clientBranchModel = new ClientBranchModel();
         $this->fileModel = new FileModel();
         $this->batchListModel    = new BatchListModel();
         $this->batchFileModel    = new BatchFileModel();
@@ -67,6 +75,7 @@ class EmployeeController extends AdminController
         $this->clientPolicyModel  = new ClientPolicyModel();
         $this->TPAModel  = new TPAModel();
         $this->policiesModel = new PolicesModel();
+        $this->insurerModel = new InsurerModel();
     }
 
     public function list()
@@ -212,6 +221,7 @@ class EmployeeController extends AdminController
 
             //process post variable entry in file table
             $loggedInUserID = get_session_userid();
+            // dd($loggedInUserID);
             // $loggedInUserID = 8;
 
             $client_id = $this->request->getPost('client_id');
@@ -220,7 +230,7 @@ class EmployeeController extends AdminController
             $action = $this->request->getPost('upload-action-type');
             $status = 'inprogress';
 
-            $file_id = $this->fileModel->insert(['file_name' => $filename, 'client_id' => $client_id, 'policy_id' => $policy_id, 'created_by' => $loggedInUserID, 'status' => $status, 'action' => $action, 'client_branch_id' => $branch_id]); //here field policy_id have client_policy_id and not policy id from policy master
+            $file_id = $this->fileModel->insert(['file_name' => $filename, 'client_id' => $client_id, 'policy_id' => $policy_id, 'created_by' => $loggedInUserID, 'status' => $status, 'action' => $action, 'client_branch_id' => $branch_id,'uploaded_by' => 1]); //here field policy_id have client_policy_id and not policy id from policy master
             $this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]);
 
             //start validation process
@@ -236,9 +246,10 @@ class EmployeeController extends AdminController
         }
 
 
-
+        //for TPA/insurer upload
         $data['events'] = ['inception' => 'Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addition' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
-        $data['actions'] = ['inception' => 'Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addtion' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement'];
+        //for inception upload
+        $data['actions'] = ['inception' => 'Inception (Employee + Dependents)',  'missed_inception' => 'Missed Inception (Employee + Dependents)', 'addition' => 'Addition (Employee + Dependents)', 'dependent_addtion' => 'Dependent Addition (Only Dependents)', 'deletion' => 'Deletion', 'correction' => 'Correction', 'si_enhancement' => 'SI Enhancement','enrollment' => 'Enrollment'];
 
         $data['import_or_export'] = ['import' => 'Import', 'export' => 'Export'];
         $data['insurer_or_tpa'] = ['insurer' => 'Insurer', 'tpa' => 'TPA'];
@@ -257,7 +268,6 @@ class EmployeeController extends AdminController
                                 'files.*',
                                 'up.emp_code',
                                 'up.first_name',
-                                'pm.name as policy_name',
                                 'c.short_name',
                                 'cb.branch_name',
                                 'cp.id as client_policy_id',
@@ -275,8 +285,7 @@ class EmployeeController extends AdminController
                             ->join('user_profiles up', 'files.created_by = up.id')
                             ->join('client_policy cp', 'files.policy_id = cp.id', 'left')
                             ->join('client_branch cb', 'files.client_branch_id = cb.id', 'left')
-                            ->join('policies pm', 'cp.policy_id = pm.id', 'left')
-                            ->join('policy_type', 'policy_type.id = pm.policy_type_id')
+                            ->join('policy_type', 'policy_type.id = cp.policy_type_id')
                             ->join('clients c', 'files.client_id = c.id and files.client_id = cp.client_id', 'left')
                             ->where('files.created_by', get_session_userid())
                             ->orderBy('files.created_at', 'desc')
@@ -285,7 +294,6 @@ class EmployeeController extends AdminController
 
         $data['batch_list'] = $this->batchFileModel->select(
                         'batch_files.*, 
-                         policies.name as policy_name, 
                          clients.short_name as client_short_name, 
                          client_branch.branch_name,
                          client_policy.policy_no,
@@ -293,8 +301,7 @@ class EmployeeController extends AdminController
                     ')
             ->join('client_policy', 'client_policy.id = batch_files.client_policy_id')
             ->join('client_branch', 'client_branch.id = batch_files.client_branch_id')
-            ->join('policies', 'policies.id = client_policy.policy_id')
-            ->join('policy_type', 'policy_type.id = policies.policy_type_id')
+            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
             ->join('clients', 'clients.id = client_policy.client_id')
             ->orderBy('batch_files.id', 'desc')
             ->findAll();
@@ -357,6 +364,10 @@ class EmployeeController extends AdminController
             $filePath = ROOTPATH . 'public/sample_excel/sample_addition.xls';
         } else if ($actionType == 'deletion') {
             $filePath = ROOTPATH . 'public/sample_excel/sample_deletion.xls';
+        } else if ($actionType == 'enrollment') {
+            $filePath = ROOTPATH . 'public/sample_excel/enrollment.xls';
+        }else if ($actionType == 'missed_inception') {
+            $filePath = ROOTPATH . 'public/sample_excel/sample_inception.xls';
         }
 
         // Check if the file exists
@@ -387,6 +398,15 @@ class EmployeeController extends AdminController
     public function importExport()
     {
 
+        $array = $this->request->getPost('event_type');
+
+        if (is_array($array)) {
+            $event_type = 'MultipleEvents';
+        } else {
+            $event_type = $this->request->getPost('event_type');
+        }
+        
+
         $this->myLogger->logme('error', 'Import Export --  Function called');
         $empDataServiceController = new EmpDataServiceController();
 
@@ -394,16 +414,12 @@ class EmployeeController extends AdminController
         $client_policy_id = $this->request->getPost('client_policy_id');
         $client_branch_id = $this->request->getPost('client_branch_id');
         $insurer_or_tpa = $this->request->getPost('insurer_or_tpa');
-        $event_type = $this->request->getPost('event_type');
         $actions = $this->request->getPost('action_type');
 
-        $client_data = $this->clientModel->where('id', $client_id)->first();
-        $policy_name_and_branch_name = $this->clientPolicyModel->select('policies.name, client_branch.branch_code')
-        ->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
-        ->join('policies', 'policies.id = client_policy.policy_id')
-        ->where('client_policy.id', $client_policy_id)
-            ->first();
-        $file_name = generate_filename($client_data['short_name'], $event_type, $actions, $insurer_or_tpa, $policy_name_and_branch_name['name'], $policy_name_and_branch_name['branch_code']);
+        $client_data = $this->clientPolicyModel->getCliendDataForExcelFileName($client_policy_id);
+        $file_name = generate_filename($client_data['short_name'], $event_type, $actions, $insurer_or_tpa, $client_data['policy_type'], $client_data['branch_code']);
+
+        // dd($client_data, $file_name);
 
         $batch_data = [
             'client_id' => $client_id,
@@ -415,7 +431,6 @@ class EmployeeController extends AdminController
             'file_name' => $file_name,
         ];
 
-
         if ($actions == 'export') {
 
             if ($event_type == 'inception' || $event_type == 'addition' || $event_type == 'dependent_addition') {
@@ -432,6 +447,11 @@ class EmployeeController extends AdminController
                     session()->setFlashdata('error', "The policy does not have a CD account number.");
                     return redirect()->to(base_url('employee/upload'));
                 }
+                else if($return === 6){
+
+                    session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
 
                 if (!$return) {
 
@@ -448,6 +468,12 @@ class EmployeeController extends AdminController
             } else if ($event_type == 'correction') {
 
                 $return = $empDataServiceController->generateExcelForCorrection($batch_data);
+
+                if($return === 6){
+                    session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
+
                 if (!$return) {
                     session()->setFlashdata('error', 'No data found about this action');
                     return redirect()->to(base_url('employee/upload'));
@@ -466,6 +492,10 @@ class EmployeeController extends AdminController
 
                     session()->setFlashdata('error', "The policy does not have a CD account number.");
                     return redirect()->to(base_url('employee/upload'));
+                }else if($return === 6){
+
+                    session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
+                    return redirect()->to(base_url('employee/upload'));
                 }
 
                 if (!$return) {
@@ -477,12 +507,38 @@ class EmployeeController extends AdminController
             } else if ($event_type == 'deletion') {
 
                 $return = $empDataServiceController->generateExcelForDeletion($batch_data);
+
+                if($return === 6){
+
+                    session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
+
                 if (!$return) {
                     session()->setFlashdata('error', 'No data found about this action');
                     return redirect()->to(base_url('employee/upload'));
                 } else {
                     $this->myLogger->logme('error', 'Successfully exported Excel file in Deletion.');
                 }
+            } else if($event_type == 'MultipleEvents'){
+
+                $batch_data['event_type'] = $array;
+                $return = $empDataServiceController->generateExcelForAllEventType($batch_data);
+
+
+                if($return === 6){
+
+                    session()->setFlashdata('error', "The Insurer does not have an Excel export template format.");
+                    return redirect()->to(base_url('employee/upload'));
+                }
+
+                if (!$return) {
+                    session()->setFlashdata('error', 'No data found about this action');
+                    return redirect()->to(base_url('employee/upload'));
+                } else {
+                    $this->myLogger->logme('error', 'Excel exported successfully.');
+                }
+
             }
         } else if ($actions == 'import') {
 
@@ -609,6 +665,71 @@ class EmployeeController extends AdminController
         $this->loadLayout('endorsement_list', $data);
     }
 
+    
+    /**
+     * Below function displays the Enrollment list page.
+     * 
+     * This method retrieves filter data from the request and fetches the Enrollment list
+     * based on the provided filters such as client , client_branch , employee - ( Log-in-or-not , ENrolled-or-not).
+     */
+
+     public function enrollmentClientList()
+     {
+        $data = [];
+        $client_list = $this->clientModel->findAll();
+        $branch_list = $this->clientBranchModel->findAll();
+        $data['client_list'] = $client_list;
+        $data['branch_list'] = $branch_list;
+         $this->myLogger->logme('error', 'list called');
+         $this->loadLayout('enrollment_list', $data);
+     }
+
+     public function empby_client_clientbranch($client_id, $branch_id)
+     {
+        
+        $results = $this->clientModel->select('employees.id as employee_id, employees.name as employee_name, 
+                                                employees.relationship, employees.emp_code, 
+                                                employees.emp_status, auth_history.user_type')
+                                    ->join('employees', $client_id .'= employees.client_id AND ' . $branch_id . '= employees.client_branch_id', 'left')
+                                    ->join('auth_history', 'employees.id = auth_history.user_id AND "employee" = auth_history.user_type', 'left')
+                                    ->findAll();
+        
+        $groupedData = [];
+        $employeeId = '';
+        foreach ($results as $row) {
+            if($employeeId != $row['employee_id']){
+                $employeeId = $row['employee_id'];
+            }else{
+                $employeeId = null;
+            }
+            $employeeName = $row['employee_name'] ;
+            $employeeRelationship = $row['relationship'] ;
+            $employeeEmpCode =  $row['emp_code'] ;
+            $employeeEmpStatus = $row['emp_status'];
+            $employeeUserType = $row['user_type'];
+    
+          
+            if ($employeeId !== null && $employeeRelationship == 'Self') {
+                // Append employee info to the branch's employees list
+                $groupedData[] = [
+                    'employee_id' => $employeeId,
+                    'employee_name' => $employeeName,
+                    'relationship' => $employeeRelationship,
+                    'emp_code' => $employeeEmpCode,
+                    'emp_status' => $employeeEmpStatus,
+                    'user_type' => $employeeUserType
+                ];
+              
+            }
+            $employeeId = $row['employee_id'];
+        }
+                            
+
+        return json_encode($groupedData);
+     }
+
+     
+
 
     /**
      * Beleo function retrieves employee endorsement (emp_endorsement table) data.
@@ -908,13 +1029,14 @@ class EmployeeController extends AdminController
         return $response;
     }
 
-
     public function generateIDCardForEmployee($rand_string, $people = 0)
     {    
         // dd($rand_string, $people);
-
         try {
-
+            $this->myLogger->logme('error', 'generateIDCardForEmployee function started.');
+        
+            // Step 1: Attempt to fetch employee code and client policy ID
+            $this->myLogger->logme('error', 'Fetching employee code and client policy ID.');
             $get_emp_code_and_client_policy_id = $this->employeePolicyModel
                 ->select('employee_polices.client_policy_id, employees.emp_code, tpa.short_name,employees.client_id')
                 ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
@@ -925,53 +1047,52 @@ class EmployeeController extends AdminController
                 ->where("employee_polices.tpa_id IS NOT NULL AND employee_polices.tpa_id <> ''")
                 ->where('employee_polices.status', 'active')
                 ->where('employee_polices.is_active', '1')
-                ->where('employee_polices.rand_string', $rand_string)->first();
-
-            // dd($get_emp_code_and_client_policy_id);
-
-
+                ->where('employee_polices.rand_string', $rand_string)
+                ->first();
+        
             if ($get_emp_code_and_client_policy_id == null || $get_emp_code_and_client_policy_id == "") {
-
+                $this->myLogger->logme('error', 'Member not found in this rand_string: ' . $rand_string);
                 $data['message'] = 'Record Not Found';
                 return view('errors/404', $data);
             }
-
+        
+            $this->myLogger->logme('error', 'Member found. Client policy ID: ' . $get_emp_code_and_client_policy_id['client_policy_id']);
+        
             $client_policy_id = $get_emp_code_and_client_policy_id['client_policy_id'];
             $emp_code = $get_emp_code_and_client_policy_id['emp_code'];
-
-
+            $client_id = $get_emp_code_and_client_policy_id['client_id'];
+        
+            // Step 2: Fetch ECard data
+            $this->myLogger->logme('error', 'Fetching ECard data using client_policy_id: ' . $client_policy_id . ' and emp_code: ' . $emp_code);
             $data = $this->employeePolicyModel->getECardDataUsingMd5($client_policy_id, $emp_code,$client_id);
-            
-            if($people == 0){
-               $data = $this->employeePolicyModel->getECardSingleData($rand_string, $emp_code,$client_id);
+        
+            if ($people == 0) {
+                $this->myLogger->logme('error', 'Fetching single ECard data using rand_string: ' . $rand_string . ' and emp_code: ' . $emp_code);
+                $data = $this->employeePolicyModel->getECardSingleData($rand_string, $emp_code,$client_id);
             }
-
-            // dd($data);
-
-            $template_data_path =  WRITEPATH . 'e_card_template/';
+        
+            // Step 3: Prepare template path
+            $template_data_path = WRITEPATH . 'e_card_template/';
             $tpa_short_name = strtolower(str_replace(' ', '_', $get_emp_code_and_client_policy_id['short_name'])) . '.html';
-            $final_path =  $template_data_path . $tpa_short_name;
-
-            // dd($template_data_path, $tpa_short_name, $final_path);
-
+            $final_path = $template_data_path . $tpa_short_name;
+        
+            $this->myLogger->logme('error', 'Checking if template file exists at: ' . $final_path);
+        
             if (!file_exists($final_path)) {
-
-                $data['message'] = 'Record Not Found';
+                $this->myLogger->logme('error', 'Template file not found: ' . $final_path);
+                $data['message'] = 'Template File Not Found';
                 return view('errors/404', $data);
-            } 
-
+            }
+        
+            $this->myLogger->logme('error', 'Template file found. Reading template data.');
             $tmplt_data = file_get_contents($final_path);
-
-            // dd($tmplt_data);
-
-            $html = ""; // Initialize the HTML variable
+        
+            // Step 4: Generate HTML content
+            $this->myLogger->logme('error', 'Generating HTML content from template.');
+            $html = "";
             foreach ($data as $key => $value) {
-                
-                // Get the HTML content from the template
-                // $htmlContent = view('ecard_template/md_tpa');
                 $htmlContent = $tmplt_data;
-                
-                // Define the placeholders and their corresponding values
+        
                 $placeholders = [
                     '{TPA_ID}' => $value['tpa_id'],
                     '{NAME}' => $value['name'],
@@ -986,12 +1107,12 @@ class EmployeeController extends AdminController
                     '{INSURER_LOGO}' => base_url() . 'public/uploads/logo/' . $value['insurer_logo'],
                     '{FRONT_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['front_card'],
                     '{BACK_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['back_card'],
-                    '{EMP_ID}' =>$value['emp_code'],
-                    '{CORPORATE_NAME}' =>$value['client_name'],
-                    '{AGE}' =>$value['emp_age'],
-                    '{TPA_NAME}' =>$value['tpa_name'],
-                    '{INSURER_BRANCH}' =>$value['insurer_branch_city'],
-                    '{RELATION}' =>$value['relationship'],
+                    '{EMP_ID}' => $value['emp_code'],
+                    '{CORPORATE_NAME}' => $value['client_name'],
+                    '{AGE}' => $value['emp_age'],
+                    '{TPA_NAME}' => $value['tpa_name'],
+                    '{INSURER_BRANCH}' => $value['insurer_branch_city'],
+                    '{RELATION}' => $value['relationship'],
                     '{TPA_LOGO}' => base_url() . 'public/uploads/logo/' . $value['tpa_logo'],
                     '{MEDI_USER}' => base_url() . 'public/e_card_imgs/medi_uesr.jpg',
                     '{MEDI_INSURER}' => base_url() . 'public/e_card_imgs/Magma.png',
@@ -1000,17 +1121,17 @@ class EmployeeController extends AdminController
                     '{QR_IOS}' => base_url() . 'public/e_card_imgs/ios.png',
                     '{QR_ANDROID_2}' => base_url() . 'public/e_card_imgs/play_store.png',
                     '{QR_IOS_2}' => base_url() . 'public/e_card_imgs/appstore.png',
-        
                 ];
-                
-                // Replace placeholders with values in HTML content
+        
                 foreach ($placeholders as $placeholder => $replaceValue) {
                     $htmlContent = str_replace($placeholder, $replaceValue, $htmlContent);
                 }
-            
+        
                 $html .= $htmlContent;
             }
-            
+        
+            // Step 5: Output HTML and script for printing
+            $this->myLogger->logme('error', 'Generating HTML output with print button.');
             echo '' . $html . '
                   ';
-            
-            
-
-            // $file_name = $get_emp_code_and_client_policy_id['short_names'] ?? 'md_tpa';
-            // $file_name = strtolower(str_replace(' ', '_', $file_name));
-
-
-
-            // $file_path = ROOTPATH . 'app/Views/ecard_template/' . $file_name . '.php';
-
-            // if (is_file($file_path)) {
-            //     $view_file = 'ecard_template/' . $file_name;
-
-            // } else {
-            //     $view_file = 'ecard_template/default_ecard';
-
-            // }
-
-
-            // $dpi = 132;
-            // $html =  view('ecard_template/md_tpa');
-            // // echo $html; die;
-
-            // $options = new Options();
-            // $options->set('isRemoteEnabled', true);
-            // $options->set('isPhpEnabled', true);
-            // $options->setDpi($dpi);
-            // $dompdf = new Dompdf($options);
-
-            // $dompdf->loadHtml($html);
-            // $dompdf->setPaper('A4', 'portrait');
-            // $dompdf->render();
-
-
-            // $filename = 'ECard.pdf'; // Default filename
-
-            // foreach ($data['data'] as $key => $value) {
-
-            //     if ($value['relationship'] == "Self") {
-
-            //         $filename = $value['tpa_id'] . '.pdf'; // Update filename if relationship is "Self"
-            //     } elseif (!empty($value['tpa_id']) && $filename == 'ECard.pdf') {
-
-            //         $filename = $value['tpa_id'] . '.pdf';
-            //     }
-            // }
-
-            // $dompdf->stream($filename, array("Attachment" => false));
-
+        
+            $this->myLogger->logme('error', 'generateIDCardForEmployee function completed successfully.');
+        
         } catch (\Exception $e) {
-
-            $data['message'] = 'Record Not Founds';
+            $this->myLogger->logme('error', 'Exception occurred: ' . $e->getMessage());
+            $data['message'] = 'Record Not Found';
             return view('errors/404', $data);
         }
+        
     }
 
-
     public function viewECard()
     {
 
@@ -1084,7 +1159,7 @@ class EmployeeController extends AdminController
         $empDataServiceController = new EmpDataServiceController();
         $file_name = generate_filename("TCS", 'inception', 'export', 'insurer', 'policy', 'branch');
 
-        $batch_data = [
+        $export_data = [
             'client_id' => 12,
             'client_policy_id' => 12,
             'client_branch_id' => 1,
@@ -1094,24 +1169,88 @@ class EmployeeController extends AdminController
             'file_name' => $file_name,
         ];
 
-        $return = $empDataServiceController->generateExcelForAdditionandInception($batch_data);
+       $template_json = $this->clientPolicyModel
+            ->select('insurer_excel_export_template.jsoncolumns')
+            ->join('insurer_excel_export_template', 'insurer_excel_export_template.insurer_id = client_policy.insurer_id and insurer_excel_export_template.policy_type_id = client_policy.policy_type_id')
+            ->where('client_policy.id', $export_data['client_policy_id'])
+            ->where('insurer_excel_export_template.event_name', $export_data['event_type'])
+            ->where('insurer_excel_export_template.type_name', $export_data['actions'])
+            ->first();
+
+       $template_array = json_decode($template_json['jsoncolumns'], true); 
+
+       // dd($template_array);     
+
+       $objects = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
+
+       $totals = 0;
+       foreach ($objects as $item) {
+           $totals += $item->total;
+       }
+
+       dd($objects,  $totals);     
+
+       $excel_data_info = generate_insurer_based_excel($template_array, $objects);
+
+       // Generate Excel file
+       $tempFile = tmpfile();
+       $success = generate_excel($excel_data_info['header'], $excel_data_info['data'], $tempFile, 1);
+
+       // If Excel generation is successful
+       if ($success) {
+
+           $random_number_count = 4;
+           $export_data['batch_code'] = generate_random_string($random_number_count);
+           $export_data['created_by'] = get_session_userid();
+
+           $insert = $this->batchFileModel->insert($export_data);
+           $batch_file_batch_code = $this->batchFileModel->where('id', $insert)->first();
+           $batch_code = $batch_file_batch_code['batch_code'];
+
+           // $this->insertBatchList(['batch_code' => $batch_code, 'batch_list_data' => $objects ]);
+
+           $job_details  = new Jobs();
+           $r = Jobs::addJob(['job_name' => 'insertBatchList', 'payload' => ['batch_code' => $batch_code, 'user_id' => get_session_userid(), 'batch_list_data' => $objects]]);
+
+
+           // If batch operation is successful
+           if (true) {
+
+               // Clear the output buffer to avoid any unwanted output
+               if (ob_get_level()) {
+                   ob_end_clean();
+               }
+
+               // Set headers for Excel file download
+               header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+               header('Content-Disposition: attachment; filename="' . $export_data['file_name'] . '"');
+               header('Content-Transfer-Encoding: binary');
+               header('Cache-Control: must-revalidate');
+               header('Pragma: public');
+               header('Expires: 0');
+
+               // Output file contents
+               rewind($tempFile);
+               fpassthru($tempFile);
+
+               // Close and remove temporary file
+               fclose($tempFile);
+
+               return true; // Excel file successfully generated and exported
+
+           } else {
+
+               return false; // Batch operation failed
+           }
+       }
 
-        if ($return == 0) {
 
-           dd('error', "Insufficient deposit amount.");
 
-        }else if($return == 1){
 
-            dd('error', "The policy does not have a CD account number.");
-        }
 
-        if (!$return) {
-            dd('error', "No data was found");
-        }
         
     }
 
-
     public function truncateFileData() //truncateFileDataIn DB (de activate rows)
     {
         $file_id = $this->request->uri->getSegment(3);
@@ -1164,9 +1303,6 @@ class EmployeeController extends AdminController
         }
     }
 
-
-
-
     public function previewTemplate($id = null)
     {
 
@@ -1249,7 +1385,6 @@ class EmployeeController extends AdminController
         echo $htmlContent;
     }
 
-
     public function errorListExportImport($file_id)
     {
 
@@ -1340,6 +1475,7 @@ class EmployeeController extends AdminController
     {
         $client_policy_id = $this->request->uri->getSegment(3);
         $policy_details = $this->clientPolicyModel->find($client_policy_id);
+        $insurer_details = $this->insurerModel->where('id', $policy_details['insurer_id'])->first();
         $policy_terms = isset($policy_details['policy_terms']) ? true : false;
 
         $si_enhancement_true_or_false = 1;
@@ -1366,8 +1502,83 @@ class EmployeeController extends AdminController
         }
         $message  = isset($message) ? ($message . ' not defined for choosed policy') : null;
 
-        return $this->respond(['dataStatus' => true, 'code' => 200, 'message' => $message, 'si_enhancement' => $si_enhancement_true_or_false], 200);
+        return $this->respond(['dataStatus' => true, 'code' => 200, 'message' => $message, 'si_enhancement' => $si_enhancement_true_or_false, 'insurer_multi_event' => $insurer_details['is_multi_event']], 200);
         
     }
 
+    public function testRackRate()
+    {
+        if ($this->request->getMethod() == 'get') {
+        $filterData = $this->request->getGet('client_policy_id');
+            //just load UI only
+        $this->loadLayout('rack_rate_test');
+        }
+
+
+         if ($this->request->getMethod() == 'post') {
+        $json = $this->request->getJSON();
+         // return $this->respond(['dataStatus' => false, 'code' => 200, 'data' => $data], 200);
+         // $data = (json_decode(json_encode($data),true));
+         $client_id = $json->client_id;
+         $policy_id = $json->policy_id;
+         $branch_id = $json->branch_id;
+         $tabledata = $json->data;
+         
+         if(count($tabledata))
+         {
+             $family_details = [];
+             foreach($tabledata as $key => $row)
+             {
+                $row = (array)$row;
+                if(!$row['column12'])
+                {
+                    
+                    $temp[0] = $row['column1'];//sno
+                    $temp[1] = $row['column2'];//emp code
+                    $temp[2] = $row['column3'];//name
+                    $temp[3] = $row['column4'];//DOB
+                    $temp[4] = strtoupper($row['column5']);//Gender
+                    $temp[5] = $row['column6'];//relation
+                    $temp[6] = $row['column7'];//SI
+                    $temp[7] = $row['column8'];//DOC
+                    $temp[8] = '';//DOJ
+                    $temp[9] = $row['column9'];//BP
+                    $temp[10] = $row['column10'];//band
+                    $temp[11] = '';//designation
+                    $temp[12] = '';//mobile
+                    $temp[13] = '';//EMail
+                    $temp[14] = '';//CE
+                    $temp[15] = '';//RFE
+                    $temp[16] = '';//DOE
+                    $temp[17] = '';//Unit
+                    $temp[18] = $row['column11'];//unit
+                    $family_details[] = $temp;
+                }
+             }
+         }
+
+         // print_r($family_details);
+                  return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $family_details], 200);
+        //get policy details
+         $policy_details = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
+        //get rack rates
+          $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
+        //get file array or construnct dummy file array here
+          $file = ['id' => null,'client_id' => 10,'policy_id' => 10,'action' => 'inception','client_branch_id' => 1,'created_by' => 1];
+        //get familiy details in inception file format array from post method
+            $family_details = [  
+                            [2,'TEST001','John Doe', '01-Jan-1988', 'M', 'Self', '5000000', NULL, '', '', 'G', '', '', '', '', '', '',''],
+                              [1,'TEST001','Jane Doe', '01-Jan-1985', 'F', 'Spouse', 5000000, '01-Jan-2024', '01-Jan-2020', 50000, 'A', 'Manager', '1234567890', 'john.doe@example.com', '0', '', '', ''],
+                            
+                          // [3,'TEST001','Peter Doe', '01-Jan-1955', 'M', 'Father', '', NULL, '', '', '', '', '', '', '', '', '',''],
+                              [4,'TEST001','Mary Doe', '01-Jan-1953', 'F', 'Mother', '', NULL, '', '', '', '', '', '', '', '', '',''],
+                              [5,'TEST001','Grace Doe', '01-Jan-1954', 'F', 'Mother in law', '', NULL, '', '', '', '', '', '', '', '', '',''],
+                          //[6,'TEST001','George Doe', '01-Jan-1948', 'M', 'Father in law', '', NULL, '', '', '', '', '', '', '', '', '',''],
+                               [7,'TEST001','Alice Doe', '01-Jan-1990', 'F', 'Daughter', 5000000, '01-Jan-2024', '01-Jan-2024', 40000, 'B', 'Supervisor', '9876543210', '', '', '', '',''],
+                                 [6,'TEST001','Bob Doe', '01-Jan-1993', 'M', 'son', '50000', NULL, '', '', '', '', '', '', '', '', '',''],
+                         ];
+          $data = calculate_premimum_new($family_details,$policy_details,$all_rack_rates,$file);
+         }
+    }
+
 }
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 80a6c14b..1458100e 100644
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -830,7 +830,7 @@ class EmployeeRestController extends AdminController
                 $count = 0;
                 for ($a=0; $a employeeModel->checkExistingEmployee($dataToInsert[$a]);
+                    $employee = $this->employeeModel->checkExistingEmployee($dataToInsert[$a],$client_branch_id);
                     $emp_id =0;
                     
                     $data_after_gpa_or_gmc =[];
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index 31e23163..0a6a9ba1 100644
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -16,6 +16,10 @@ use App\Models\PolicesModel;
 use App\Models\FileModel;
 use App\Models\EmpEndorsementModel;
 use App\Models\MessageModel;
+use App\Models\ClientBranchModel;
+use App\Models\NotificationModel;
+
+use App\Helpers\sendMailNotification;
 
 use App\Controllers\Jobs ;
 use App\Controllers\JobWorker ;
@@ -35,6 +39,8 @@ class EmployeeServiceController extends AdminController
     protected $policiesModel;
     protected $empEndorsementModel;
     protected $messageModel;
+    protected $clientBranchModel;
+    protected $notificationModel;
     
     protected $general_relationships = [
                 'self' => [
@@ -266,6 +272,18 @@ class EmployeeServiceController extends AdminController
                     'format' => null,
                     'allowed_values' => null
                 ]
+                ,
+                'unit' => [
+                    'col_idx' => 18,
+                    'col_cell_name' => 'S',
+                    'col_name' => 'Unit',
+                    'is_mandatory' => false,
+                    'data_type' => 'str',
+                    'format' => null,
+                    'allowed_values' => null,
+                    'custom' => 'check_unit',
+                    'params' => ['row', 'existing_units']
+                ]
             ];
 
     protected $deletion_excel_columns = [
@@ -565,6 +583,15 @@ class EmployeeServiceController extends AdminController
                     'format' => null,
                     'allowed_values' => null,
                     'custom' => null
+                ],
+                'unit' => [
+                    'col_idx' => 12,
+                    'col_cell_name' => 'M',
+                    'col_name' => 'Unit',
+                    'is_mandatory' => false,
+                    'data_type' => 'str',
+                    'format' => null,
+                    'allowed_values' => null
                 ]
             ];
 
@@ -586,7 +613,8 @@ class EmployeeServiceController extends AdminController
                 14 => null, // inception: pre_existing_ailments (PRE EXISTING AILMENTS) -> No match in enrollment
                 15 => null, // inception: change_event (Change event) -> No match in enrollment
                 16 => null, // inception: date_of_exit (Date of exit) -> No match in enrollment
-                17 => null  // inception: reason_for_exit (Reason for exit) -> No match in enrollment
+                17 => null,  // inception: reason_for_exit (Reason for exit) -> No match in enrollment
+                18 => null  // inception: reason_for_exit (Reason for exit) -> No match in enrollment
             ];
 
     protected $enrollment_to_inception_mapping = [
@@ -619,6 +647,8 @@ class EmployeeServiceController extends AdminController
         $this->policiesModel = new PolicesModel();
         $this->empEndorsementModel = new EmpEndorsementModel();
         $this->messageModel = new MessageModel();
+        $this->clientBranchModel = new ClientBranchModel();
+        $this->notificationModel = new NotificationModel();
     }
 
     public function excelFileFormatValidation($params)
@@ -663,6 +693,7 @@ class EmployeeServiceController extends AdminController
         if($file['action'] == 'correction'){ $columns_to_check = $this->correction_excel_columns; }
         if($file['action'] == 'si_enhancement'){ $columns_to_check = $this->si_enhance_excel_columns; }
         if($file['action'] == 'enrollment'){ $columns_to_check = $this->enrollment_excel_columns; }
+        if($file['action'] == 'missed_inception'){ $columns_to_check = $this->inception_excel_columns; }
 
 
         $result = ['error_type' => 1,'error_summary' => [], 'error_data' => [] ];
@@ -722,7 +753,10 @@ class EmployeeServiceController extends AdminController
         $relationship = $this->general_relationships;
         //get exisiting mobilr nos
         $existing_mobilenos = $this->employeePolicyModel->getExisitingMobileNos(client_policy_id: $file['policy_id']);
-        // dd($existing_mobilenos);
+
+        //get existing units in the current branch
+        $existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'],client_branch_id: $file['client_branch_id']);
+        // dd($existing_units);
         foreach ($excel_data as $row_key => $row) 
         {
             //define row wise action/event in temporary variable
@@ -734,6 +768,7 @@ class EmployeeServiceController extends AdminController
             else if($file['action'] == 'correction'){ $current_column_action = 'C'; }
             else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; }
             else if($file['action'] == 'enrollment'){ $current_column_action = 'I'; }
+            else if($file['action'] == 'missed_inception'){ $current_column_action = 'MI'; }
          //1. avoid empty rows
             if(check_row_is_empty_or_null($row))
             {
@@ -862,16 +897,17 @@ class EmployeeServiceController extends AdminController
 
                 }
                 else //trigger next data validation via job queue server
-                {
-                     if($file['action'] == 'enrollment') // if current action is enrollment call next validation and return result
+                {   
+                     if($file['action'] == 'enrollment' && $file['uploaded_by'] != 1) // if current action is enrollment and uploaded by HR (0 or NULL) call next validation and return result
                      {
+                        // dd();
                         $res = $this->excelFileDataValidation(['file_id' => $file['id']]);
                         return $res;
                      }
 
                      //proceed next data level validation in JOB queue
-                     $job_details  = new Jobs();
-                     $r = Jobs::addJob(['job_name' => 'excelFileDataValidation','payload' => ['file_id' => $file_id]]);
+                     // $job_details  = new Jobs();
+                     // $r = Jobs::addJob(['job_name' => 'excelFileDataValidation','payload' => ['file_id' => $file_id]]);
                      // $jobWorker = new JobWorker();
                      // JobWorker::processJob($r);
                      
@@ -914,6 +950,7 @@ class EmployeeServiceController extends AdminController
         if($file['action'] == 'correction'){ $columns_to_check = $this->correction_excel_columns; }
         if($file['action'] == 'si_enhancement'){ $columns_to_check = $this->si_enhance_excel_columns; }
         if($file['action'] == 'enrollment'){ $columns_to_check = $this->enrollment_excel_columns; }
+        if($file['action'] == 'missed_inception'){ $columns_to_check = $this->inception_excel_columns; }
 
         // get policy and rack details
         $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
@@ -940,7 +977,7 @@ class EmployeeServiceController extends AdminController
         $relationship = $this->general_relationships;
 
 
-        if(in_array($file['action'],['inception','addition','dependent_addition','deletion','correction','si_enhancement','enrollment']))// the below funcitons are only for I,DA,A
+        if(in_array($file['action'],['inception','missed_inception','addition','dependent_addition','deletion','correction','si_enhancement','enrollment']))// the below funcitons are only for I,DA,A
         {
                 $employee_data_group_by_family = data_group_by_family($excel_data,'excel',($file['action'] == 'enrollment' ? 'enrollment' : ''));
                 // dd($employee_data_group_by_family);
@@ -968,12 +1005,12 @@ class EmployeeServiceController extends AdminController
                                 // dd(array_keys($existing_famility_details[0]));
                                  $family = array_merge($family,$existing_famility_details);
                                  // kint::dump($family);
-                                 $family = data_group_by_family($family)[ $emp_id ];// reason to call this again is bring self to first index of the array
+                                 $family = data_group_by_family($family)[ $emp_id ];// reason to call this again  bring self to first index of the array
                             }
                             // kint::dump($family);//die();
                             
                             //check name dup within a family
-                            if($file['action'] == 'inception' || $file['action'] == 'addition' || $file['action'] == 'dependent_addition' || $file['action'] == 'enrollment')
+                            if($file['action'] == 'inception' || $file['action'] == 'missed_inception' || $file['action'] == 'addition' || $file['action'] == 'dependent_addition' || $file['action'] == 'enrollment')
                             {
                                 $res = name_dup_check_within_family($family,$file['action']);//in both file data & DB data
                                 // dd($res);
@@ -987,7 +1024,7 @@ class EmployeeServiceController extends AdminController
                                 }
                             }
 
-                             if(($policy_details['base_policy'] == null && ($file['action'] == 'inception' || $file['action'] == 'addition' || $file['action'] == 'enrollment')) || ($policy_details['policy_type_id'] == 3 && $is_self_available_in_policy_terms)) // 3 is GMC parents dep addon)
+                             if(($policy_details['base_policy'] == null || $policy_details['base_policy'] == 0 && ($file['action'] == 'inception' || $file['action'] == 'missed_inception' || $file['action'] == 'addition' || $file['action'] == 'enrollment')) || ($policy_details['policy_type_id'] == 3 && $is_self_available_in_policy_terms)) // 3 is GMC parents dep addon)
                             {
                                 $res = check_self_available_in_family($family,$file['action']);
                                 if(!$res['is_self_found'])
@@ -1010,7 +1047,7 @@ class EmployeeServiceController extends AdminController
                             }
                            
 
-                           if($file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'inception' || $file['action'] == 'enrollment')
+                           if($file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'inception'|| $file['action'] == 'missed_inception' || $file['action'] == 'enrollment')
                             {
                                 $res = check_dependent_conflict($family,$policy_terms,$file['action']);
                                 // dd($res);
@@ -1081,14 +1118,18 @@ class EmployeeServiceController extends AdminController
                              
                              $r = Jobs::addJob(['job_name' => 'employeesCorrectionProcess','payload' => ['file_id' => $file_id]]);
                         }
-                        else if ($file['action'] == 'inception' || $file['action'] == 'addition' || $file['action'] == 'dependent_addition')//inception OR addition OR dependent addition
+                        else if ($file['action'] == 'inception' || $file['action'] == 'missed_inception' || $file['action'] == 'addition' || $file['action'] == 'dependent_addition')//inception OR addition OR dependent addition
                         {
                             //proceed next data level validation in JOB queue
-                             $job_details  = new Jobs();                             
+                             // $job_details  = new Jobs();                             
                              $r = Jobs::addJob(['job_name' => 'employeesOnboardPreprocess','payload' => ['file_id' => $file_id]]);
                              // $jobWorker = new JobWorker();
                              // JobWorker::processJob($r);
                         }
+                        else if($file['action'] == 'enrollment' && $file['uploaded_by'] == 1)// enrollment uploaded by nhance user not by hr
+                        {
+                              $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => $file_id]]);
+                        }
 
 
                 return $result;
@@ -1134,6 +1175,7 @@ class EmployeeServiceController extends AdminController
                    if($file['action'] == 'deletion'){ $columns_to_check = $this->deletion_excel_columns; }
                    if($file['action'] == 'correction'){ $columns_to_check = $this->correction_excel_columns; }
                    if($file['action'] == 'si_enhancement'){ $columns_to_check = $this->si_enhance_excel_columns; }
+                   if($file['action'] == 'missed_inception'){ $columns_to_check = $this->inception_excel_columns; }
 
                     // get policy and rack details
                     $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
@@ -1155,6 +1197,8 @@ class EmployeeServiceController extends AdminController
                     //get policy slab rates 
                     $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
                     // dd($slab_details);
+                     //get existing units in the current branch
+                    $existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'],client_branch_id: $file['client_branch_id']);
 
                     $employee_data_group_by_family = data_group_by_family($excel_data);
                      // dd($employee_data_group_by_family);
@@ -1175,7 +1219,7 @@ class EmployeeServiceController extends AdminController
                         }
 
                         // Kint::dump($family);die();
-                        $data = calculate_premimum($family,$policy_terms,$slab_details,$file);
+                        $data = calculate_premium_new(family_data:$family,policy_terms: $policy_terms,slab_details : $slab_details,fileArr: $file, existing_units:$existing_units);
                         // dd($data);
                         $employee_data_group_by_family[$emp_id] = $data;
                         $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]);
@@ -1204,6 +1248,9 @@ class EmployeeServiceController extends AdminController
 
             $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(client_id: $client_id,client_policy_id: $client_policy_id,emp_status: ['enrolled','draft'],policy_status:['enrolled','draft']);
 
+            //get existing units in the current branch
+             $existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'],client_branch_id: $file['client_branch_id']);
+
 
             // $file = ['id' => null,'client_id' => $client_id,'policy_id' => $client_policy_id,'action' => 'inception'];
             $file = ['id' => null,'client_id' => $client_id,'policy_id' => $client_policy_id,'action' => 'inception','created_by' => get_session_userid(),'client_branch_id' => $params['client_branch_id']];
@@ -1214,7 +1261,8 @@ class EmployeeServiceController extends AdminController
              foreach ($employee_data_group_by_family as $emp_id => $family) 
              {
                 $transformed_famility_details = transform_db_data_to_excel($family);
-                 $data = calculate_premimum($transformed_famility_details,$policy_terms,$slab_details,$file);
+                 // $data = calculate_premium_new($transformed_famility_details,$policy_terms,$slab_details,$file);
+                 $data = calculate_premium_new(family_data:$transformed_famility_details,policy_terms: $policy_terms,slab_details : $slab_details,fileArr: $file, existing_units:$existing_units);
                  // dd($data);
                  $employee_data_group_by_family[$emp_id] = $data;
                  $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]);
@@ -1478,10 +1526,9 @@ class EmployeeServiceController extends AdminController
     {
         $familiy_data = $params['familiy_data'];
         $file = $params['file'];
-        $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
         foreach($familiy_data as $fkey => $value)
         {
-            if($file['id'] == null || $value['temp']['source'] == 'excel' || (($file['action'] == 'dependent_addition' && ($slab_details['slab_rates'][0]['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($slab_details['slab_rates'][0]['premium_type'] == 2 || $slab_details['slab_rates'][0]['premium_type'] == null)))) //insert data come from excel and from db i.e. ( $file['id'] == null for enrollment data)
+            if($file['id'] == null || $value['temp']['source'] == 'excel' || (($file['action'] == 'dependent_addition' && ($value['temp']['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($value['temp']['premium_type'] == 2 || $value['temp']['premium_type'] == null)))) //insert data come from excel and from db i.e. ( $file['id'] == null for enrollment data)
             {
                     
                     $employee = $this->employeeModel->checkExistingEmp($value,$file['client_branch_id']);
@@ -1495,7 +1542,7 @@ class EmployeeServiceController extends AdminController
                         // echo '---------------------------------------';
                         
                     //start implemet of si enhancement of grid type 10,11
-                     if(count($employee) && $file['action'] == 'dependent_addition' && $temp['source'] == 'db' && in_array($value['temp']['grid_id'],[10,11]) && ( ($slab_details['slab_rates'][0]['premium_type'] == 1 && (strtolower($value['relationship']) == 'self' || $temp['additional_rack_rate_acting_self'])) || ($slab_details['slab_rates'][0]['premium_type'] == 2 || $slab_details['slab_rates'][0]['premium_type'] == null)))
+                     if(count($employee) && $file['action'] == 'dependent_addition' && $temp['source'] == 'db' && in_array($value['temp']['grid_id'],[10,11]) && ( ($value['temp']['premium_type'] == 1 && (strtolower($value['relationship']) == 'self' || $temp['acting_self'])) || ($value['temp']['premium_type'] == 2 || $value['temp']['premium_type'] == null)))
                     {
                        $log_message = 'Employee record from DB,Checking SI for - '.$employee[0]['name'].'('.$employee[0]['emp_code'].')';
                        $this->myLogger->logme('error',$log_message);
@@ -1506,6 +1553,7 @@ class EmployeeServiceController extends AdminController
                     //end implemet of si enhancement of grid type
 
                    //save employee table
+                    $value['relationship'] =  ucfirst(trim($value['relationship']));
                     if(count($employee))
                     {
                         $value['updated_by'] = $file['created_by'];
@@ -1514,6 +1562,7 @@ class EmployeeServiceController extends AdminController
                         $value['client_branch_id'] = $file['client_branch_id'];
                         $log_message = 'Update Employee - '.$employee[0]['name'].'('.$employee[0]['emp_code'].') with PK '.$employee[0]['id'];
                         // $this->myLogger->logme('error',('Update - ' . $employee[0]['id'].' - '. $employee[0]['emp_code'] .' - '.$employee[0]['name']));
+                        // echo 'insert emp';
                     }
                     else
                     {
@@ -1522,6 +1571,7 @@ class EmployeeServiceController extends AdminController
                         $value['client_branch_id'] = $file['client_branch_id'];
                         $log_message = 'Insert Employee- '.$value['name'] .'('.$value['emp_code'] .') with PK ';
                         // $this->myLogger->logme('error',('Insert - ' .  $value['emp_code'] .' - '. $value['name']));
+                        // echo 'update emp';
                     }
 
                     $this->employeeModel->save($value);
@@ -1540,6 +1590,7 @@ class EmployeeServiceController extends AdminController
                         $policy_data['status'] = 'active';
                         
                         $log_message = 'Update Employee Policy for '. $value['name'].'('. $value['emp_code'].') with PK- ' . $employee_policy[0]['id'] .' client policy ID '.$employee_policy[0]['client_policy_id'].' with SI '.$policy_data['basic_cover_si'];
+                        // echo 'insert policy';
                     }
                     else
                     {
@@ -1548,6 +1599,7 @@ class EmployeeServiceController extends AdminController
                         $policy_data['created_by'] = $file['created_by'];
                         $policy_data['status'] = 'active';
                         $log_message = 'Insert Employee Policy for '. $value['name'].'('. $value['emp_code'].') - client policy id -'. $file['policy_id'].' - with SI '.$policy_data['basic_cover_si'];
+                        // echo 'update policy';
                     }
 
                     $this->employeePolicyModel->save($policy_data);
@@ -1557,7 +1609,7 @@ class EmployeeServiceController extends AdminController
                         $log_message .= ' with PK  ' . $emp_policy_id; 
 
                         //make endorsement entry if action is addition OR Dependt addition
-                        if(($file['action'] == 'dependent_addition' || $file['action'] == 'addition') && $temp['source'] == 'excel')
+                        if(($file['action'] == 'missed_inception' || $file['action'] == 'dependent_addition' || $file['action'] == 'addition') && $temp['source'] == 'excel')
                         {
                             $log_message = $file['action'].' - endorsement'. $value['emp_code'].' - '.$value['name'].' - with policy id'.$emp_policy_id;
                             $this->myLogger->logme('error',$log_message);
@@ -1748,10 +1800,10 @@ class EmployeeServiceController extends AdminController
  public function getFileMetaDataByFileId($file_id, $status = 'success'){
 
        $data = $this->fileModel
-        ->select('files.*, clients.client_name, clients.short_name, policies.name as policy_name,client_branch.branch_code')
+        ->select('files.*, clients.client_name, clients.short_name, policy_type.policy_type as policy_name,client_branch.branch_code')
         ->join('clients', 'clients.id = files.client_id')
         ->join('client_policy', 'client_policy.id = files.policy_id')
-        ->join('policies', 'policies.id = client_policy.policy_id')
+        ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
         ->join('client_branch', 'client_branch.id = files.client_branch_id','left')
         ->where('files.id', $file_id)
         ->first();
@@ -1792,8 +1844,173 @@ class EmployeeServiceController extends AdminController
          $this->messageModel->insert($msg_data);
  
 
-    }
-
-
-    
+}
+
+
+public function employeesEnrollmentInsert($params)
+{
+
+        helper('excel_util_helper');
+        //get file name
+        $file_id = $params['file_id'];
+        $file = $this->fileModel->find($file_id);
+        // dd($file);
+        $return = [];
+        if(!isset($file))
+        {
+            //file not found in DB
+            return array('status' => false, 'msg' => 'file not found in DB');
+        }
+        $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
+        
+        //check physical file
+        if(!file_exists($file_name_with_path))
+        {
+            //file not found  update status and reason 
+             $message = "Physical file not found";
+            // echo $message;
+            $this->myLogger->logme('error',($message . ' for file id ' . $file_id));
+             $this->fileModel->where('id', $file_id)->set(['status' => 'failed','reason' => json_encode(['error_summary' => array_count_values([5]),'error_data' => $message])])->update();
+            return  array('error_summary' => [5], 'error_data' => $message);
+        }
+
+        //get excel data
+        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
+        $sheet = $spreadsheet->getActiveSheet();
+        
+        $highestRowAndColumn = $sheet->getHighestRowAndColumn();
+        $result = ['error_type' => 2,'error_summary' => [], 'error_data' => [] ];
+        $columns_to_check = $this->enrollment_excel_columns;
+        $keys = array_keys($columns_to_check);
+        $allowedHighestColumn = end($columns_to_check);
+        $excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
+        // print_r($keys);die();
+
+        //remove header
+        unset($excel_data[0]);
+        // dd($excel_data);
+        $emp_emails = [];
+
+        //check is welcome notification enabled
+        $notification = $this->notificationModel->where('client_id',$file['client_id'])->where('template_name','member_welcome_mail')->first();
+        // dd($notification);
+        $client_details = $this->clientModel->where('id', $file['client_id'])->first();
+
+        foreach ($excel_data as $key => $row) 
+        {
+            // dd($key.'-'.count($excel_data));
+            $value = [];
+            $policy_data = [];
+           
+            $value['emp_code'] = $row[1];
+            $value['name'] = $row[2];
+            $value['doj'] = (!empty($row[3]) ? convert_string_to_date($row[3],'Y-m-d'): null);
+            $value['gender'] = $row[4];
+            $value['relationship'] = ucfirst(trim($row[5]));
+            $value['dob'] = convert_string_to_date($row[6],'Y-m-d');
+            $value['email_corporate'] = $row[7];
+            $value['mobile'] = $row[8];
+            $value['band'] = $row[10];
+            $value['basic_pay'] = $row[11];
+            $value['unit'] = $row[12];
+            $value['family_floater_key'] = null;
+            $value['client_id'] = $file['client_id'];
+            $value['client_branch_id'] = $file['client_branch_id'];
+
+            $value['temp']['emp_id'] = null; // dummy value for using exisitng funciton in model
+            if (strtolower(trim($value['relationship'])) === 'mother' || strtolower(trim($value['relationship'])) === 'Father') {
+                        $relation = 'parent';
+                    } else if(strtolower(trim($value['relationship'])) === 'son' || strtolower(trim($value['relationship'])) === 'daughter'){
+                        $relation = 'child';
+                    }else if(strtolower(trim($value['relationship'])) === 'father in Law' || strtolower(trim($value['relationship'])) === 'mother in Law'){
+                        $relation = 'parent_in_law';
+                    }else if(strtolower(trim($value['relationship'])) === 'spouse'){
+                        $relation = 'spouse';
+                    }else{
+                        $relation = 'self';
+                    }
+                    $value['family_floater_key'] = $relation;
+
+                    $policy_data['basic_cover_si'] = $row[9];
+                    $policy_data['client_policy_id'] = $file['policy_id'];
+
+                     $employee = $this->employeeModel->checkExistingEmployee($value,$file['client_branch_id']);
+                     unset($value['temp']);
+                    //save employee table
+                     // dd($employee['id']);
+                    if($employee !== null)
+                    {
+                        $value['updated_by'] = $file['created_by'];
+                        $value['id'] = $employee['id'];
+                        $value['emp_status'] = 'draft';
+                        
+                        $log_message = 'Enrollment Update Employee - '.$employee['name'].'('.$employee['emp_code'].') with PK '.$employee['id'];
+                    }
+                    else
+                    {
+                        $value['emp_status'] = 'draft';
+                        $value['created_by'] = $file['created_by'];
+                        $log_message = 'Enrollment Insert Employee- '.$value['name'] .'('.$value['emp_code'] .') with PK ';
+                    }
+
+                    $this->employeeModel->save($value);
+                    $emp_id = $this->employeeModel->getInsertID();
+                    if($emp_id != 0){  $log_message .= $emp_id; }
+                    else{ $emp_id = $employee['id']; }
+                    
+                    $this->myLogger->logme('error',$log_message);
+
+                    //save policy table
+                    $employee_policy = $this->employeePolicyModel->checkExistingEmpPolicy(['employee_id' => $emp_id,'client_policy_id' => $file['policy_id']]);
+                    if(count($employee_policy))
+                    {
+                        $policy_data['updated_by'] = $file['created_by'];
+                        $policy_data['id'] = $employee_policy[0]['id'];
+                        $policy_data['status'] = 'draft';
+                        
+                        $log_message = 'Update Employee Policy for '. $value['name'].'('. $value['emp_code'].') with PK- ' . $employee_policy[0]['id'] .' client policy ID '.$employee_policy[0]['client_policy_id'].' with SI '.$policy_data['basic_cover_si'];
+                        // echo 'insert policy';
+                    }
+                    else
+                    {
+                        $policy_data['employee_id'] = $emp_id;
+                        $policy_data['client_policy_id'] = $file['policy_id'];
+                        $policy_data['created_by'] = $file['created_by'];
+                        $policy_data['status'] = 'draft';
+                        $log_message = 'Insert Employee Policy for '. $value['name'].'('. $value['emp_code'].') - client policy id -'. $file['policy_id'].' - with SI '.$policy_data['basic_cover_si'];
+                        // echo 'update policy';
+                    }
+
+                    $this->employeePolicyModel->save($policy_data);
+                    $emp_policy_id = $this->employeePolicyModel->getInsertID();
+                    $this->myLogger->logme('error',$log_message);
+
+                    //save email of self for send mail later
+                    if (isset($notification) && $notification['enabled'] == 1 && $notification['mail_content'] != '') 
+                    {
+                        if(strtolower($value['relationship']) == 'self' && $value['email_corporate'] != "")
+                        {
+                            $params['dataToInsert'] = $value; //holds employee master data
+                            $params['notification'] = $notification;
+                            $params['client_data'] = $client_details;
+                            
+                           //store email and mail content via helper to send notification
+                           $emp_emails[] = sendMailNotification::sendMailNotification('member_welcome_mail', $params);
+                           Kint::dump($emp_emails);
+                           Kint::dump($key.'-'.count($excel_data));
+                           // if mail count is 20 send bulk mail and reset emp_emails variable
+                            if (count($emp_emails) == 20 || $key == count($excel_data) ) {
+                                $job_details  = new Jobs();
+                                $r = Jobs::addJob(['job_name' => 'bulk_mail','payload' => $emp_emails]); 
+                                echo 'Mail triggered';
+                                $emp_emails = [];
+                            }
+                        
+                        }
+                    }
+        } //end of for loop
+
+        return true;
+}
+
 }
diff --git a/app/Controllers/JobWorker.php b/app/Controllers/JobWorker.php
index 38fd648a..c6bf8829 100644
--- a/app/Controllers/JobWorker.php
+++ b/app/Controllers/JobWorker.php
@@ -14,25 +14,120 @@ class JobWorker extends AdminController
      * Constructs the class
      */
 
-    private  static $event_class_mapping = [
-        'add' => ['type' => 'HC', 'handler' => 'App\\Helpers\\HttpRequestHelper'], 'sub' =>  ['type' => 'CC', 'handler' => 'App\\Controllers\\Jobs\SubJob'], 'fancy_date_time_format' => ['type' => 'HF', 'handler' => 'fancy_date_time_format'], 'addNumber' => ['type' => 'HC', 'handler' => 'App\\Model\\HttpRequestHelper'], 'excelFileFormatValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'excelFileDataValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesOnboardPreprocess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeeDisembark' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesSIEnhanceProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'employeesCorrectionProcess' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmployeeServiceController'], 'send_email' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'bulk_mail' => ['type' => 'HC', 'handler' => 'App\\Helpers\\MailHelper'], 'insertBatchList' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-       
-        'importInceptionFileValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importInceptionUpdateTPAandUHID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'cashDepositCalculationForInception' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'sendMailForDownloadingECard' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        
-        'importCorrectionValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importCorrectionUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        
-        'cashDepositCalculationForSIEnhancement' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importSIEnhancementValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importSIEnhancementUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        
-        'cashDepositCalculationForDeletion' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importDeletionValidation' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-        'importDeletionUpdateEndorsementID' => ['type' => 'CC', 'handler' => 'App\\Controllers\\EmpDataServiceController'],
-    ];
+    private static $event_class_mapping = [
+    'add' => [
+        'type' => 'HC', // Handler Category (Possible values: HC, CC, HF)
+        'handler' => 'App\Helpers\HttpRequestHelper',
+    ],
+    'sub' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\Jobs\SubJob',
+    ],
+    'fancy_date_time_format' => [
+        'type' => 'HF', // Handler Category (Possible values: HC, CC, HF)
+        'handler' => 'fancy_date_time_format', // Likely a custom function
+    ],
+    'addNumber' => [
+        'type' => 'HC', // Handler Category
+        'handler' => 'App\Model\HttpRequestHelper',
+    ],
+    'excelFileFormatValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'excelFileDataValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'employeesOnboardPreprocess' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'employeeDisembark' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'employeesSIEnhanceProcess' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'employeesCorrectionProcess' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ],
+    'send_email' => [
+        'type' => 'HC', // Handler Category
+        'handler' => 'App\Helpers\MailHelper',
+    ],
+    'bulk_mail' => [
+        'type' => 'HC', // Handler Category
+        'handler' => 'App\Helpers\MailHelper',
+    ],
+    'insertBatchList' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+
+    // Employee Data Service Events
+    'importInceptionFileValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importInceptionUpdateTPAandUHID' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'cashDepositCalculationForInception' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'sendMailForDownloadingECard' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+
+    'importCorrectionValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importCorrectionUpdateEndorsementID' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+
+    'cashDepositCalculationForSIEnhancement' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importSIEnhancementValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importSIEnhancementUpdateEndorsementID' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+
+    'cashDepositCalculationForDeletion' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importDeletionValidation' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'importDeletionUpdateEndorsementID' => [
+    'type' => 'CC', // Handler Category
+    'handler' => 'App\Controllers\EmpDataServiceController',
+    ],
+    'employeesEnrollmentInsert' => [
+        'type' => 'CC', // Handler Category
+        'handler' => 'App\Controllers\EmployeeServiceController',
+    ]
+];
+
+    
+
     public function __construct()
     {
         // echo 'HiC';//die();
diff --git a/app/Controllers/PendingActionsController.php b/app/Controllers/PendingActionsController.php
index c7764902..b47a4b2f 100644
--- a/app/Controllers/PendingActionsController.php
+++ b/app/Controllers/PendingActionsController.php
@@ -86,7 +86,7 @@ class PendingActionsController extends AdminController
         $builder = $this->db->table('client_policy cp');
         $builder->select('
                 clients.client_name,
-                policies.name as policy_name,
+                policy_type.policy_type as policy_name,
                 cp.id as client_policy_id, 
                 cp.client_id, 
                 cp.policy_id, 
@@ -102,7 +102,7 @@ class PendingActionsController extends AdminController
         $builder->join('employee_polices ep', 'cp.id = ep.client_policy_id AND ep.is_active = 1', 'left');
         $builder->join('clients', 'cp.client_id = clients.id');
         $builder->join('client_branch cb', 'cb.id = cp.client_branch_id');
-        $builder->join('policies', 'cp.policy_id = policies.id');
+        $builder->join('policy_type', 'cp.policy_type_id = policy_type.id');
         $builder->where('cp.is_active', 1);
         $builder->where('cp.open_for_enrollment', 1);
         $builder->where('cp.is_addon', 1);
@@ -234,8 +234,7 @@ class PendingActionsController extends AdminController
                     client_branch.id as branch_id,
                     client_branch.branch_name,
                     client_policy.id as client_policy_id, 
-                    policies.name as policy_name, 
-                    policies.id as pid, 
+                    policy_type.policy_type as policy_name, 
                     emp_endorsement.id, 
                     emp_endorsement.pk, 
                     emp_endorsement.endorsement_id, 
@@ -250,7 +249,7 @@ class PendingActionsController extends AdminController
             ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1')
             ->join('clients', 'client_policy.client_id = clients.id AND clients.is_active = 1')
             ->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
-            ->join('policies', 'client_policy.policy_id = policies.id AND policies.is_active = 1')
+            ->join('policy_type', 'client_policy.policy_type_id = policy_type.id')
             ->where([
                 'emp_endorsement.actions' => 'si',
                 'emp_endorsement.is_active' => 1,
@@ -322,8 +321,7 @@ class PendingActionsController extends AdminController
                     client_branch.id as branch_id,
                     client_branch.branch_name,
                     client_policy.id as client_policy_id, 
-                    policies.name as policy_name, 
-                    policies.id as pid, 
+                    policy_type.policy_type as policy_name, 
                     emp_endorsement.pk, 
                     emp_endorsement.id, 
                     emp_endorsement.group_key, 
@@ -338,7 +336,7 @@ class PendingActionsController extends AdminController
         ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1', 'left')
         ->join('clients', 'client_policy.client_id = clients.id AND clients.is_active = 1', 'left')
         ->join('client_branch', 'client_branch.id = client_policy.client_branch_id', 'left')
-        ->join('policies', 'client_policy.policy_id = policies.id AND policies.is_active = 1', 'left')
+        ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
         ->where([
             'emp_endorsement.actions' => 'd',
             'emp_endorsement.is_active' => 1,
@@ -346,7 +344,7 @@ class PendingActionsController extends AdminController
             'emp_endorsement.endorsement_id' => null,
             'emp_endorsement.table_name' => 'employee_polices'
         ])
-            ->groupBy('emp_endorsement.pk, emp_endorsement.emp_code, emp_endorsement.actions, emp_endorsement.name');
+        ->groupBy('emp_endorsement.pk, emp_endorsement.emp_code, emp_endorsement.actions, emp_endorsement.name');
 
         // Build the main query
         $builder = $this->db->table('clients');
@@ -406,7 +404,7 @@ class PendingActionsController extends AdminController
         ->select('ep.client_policy_id')
         ->select('c.client_name')
         ->select('c.short_name')
-        ->select('p.name as policy_name')
+        ->select('policy_type.policy_type as policy_name')
         ->select('ep.uhid')
         ->select('cb.branch_name, cb.id as branch_id')
         ->select("($subQueryExport) AS batch_export_count", false)
@@ -414,11 +412,11 @@ class PendingActionsController extends AdminController
         ->join('client_policy cp', 'ep.client_policy_id = cp.id AND cp.is_active = 1 AND cp.policy_status = 1')
         ->join('clients c', 'c.id = cp.client_id')
         ->join('client_branch cb', 'cb.id = cp.client_branch_id')
-        ->join('policies p', 'p.id = cp.policy_id')
+        ->join('policy_type', 'policy_type.id = cp.policy_type_id')
         ->where('ep.uhid IS NULL')
         ->where('ep.status', 'active')
         ->where('ep.is_active', 1)
-        ->groupBy('ep.client_policy_id, ep.uhid, c.short_name, p.name')
+        ->groupBy('ep.client_policy_id, ep.uhid, c.short_name, policy_type.policy_type')
         ->get();
 
         // Fetch the results
@@ -459,7 +457,7 @@ class PendingActionsController extends AdminController
                 employee_polices.tpa_id, 
                 clients.short_name, 
                 clients.client_name, 
-                policies.name as policy_name, 
+                policy_type.policy_type as policy_name, 
                 clients.id as client_id,
                 client_branch.id as branch_id,
                 client_branch.branch_name
@@ -470,7 +468,7 @@ class PendingActionsController extends AdminController
         $builder->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1');
         $builder->join('clients', 'clients.id = client_policy.client_id');
         $builder->join('client_branch', 'client_branch.id = client_policy.client_branch_id');
-        $builder->join('policies', 'policies.id = client_policy.policy_id');
+        $builder->join('policy_type', 'policy_type.id = client_policy.policy_type_id');
         $builder->where('employee_polices.tpa_id', null);
         $builder->where('employee_polices.uhid IS NOT NULL');
         $builder->where('employee_polices.status', 'active');
diff --git a/app/Filters/AuthJWT.php b/app/Filters/AuthJWT.php
index b64a2a76..484372a7 100644
--- a/app/Filters/AuthJWT.php
+++ b/app/Filters/AuthJWT.php
@@ -37,6 +37,9 @@ class AuthJWT implements FilterInterface
                         $model->update($id, $data);
                         return true;
                     }else{
+
+                        // if($user_data['token_time_out'] != "" && $user_data['token_time_out'] != NULL)
+                            
                         $data =["token_time_out" => ''];
                         $model->update($id, $data);
                         header('Content-Type: application/json');
diff --git a/app/Helpers/MailHelper.php b/app/Helpers/MailHelper.php
index da8d2624..7b1a9bc7 100644
--- a/app/Helpers/MailHelper.php
+++ b/app/Helpers/MailHelper.php
@@ -18,6 +18,7 @@ class MailHelper
     {    
 
         // print_r($params);die;
+        $myLogger = \Config\Services::mylogger();
         $emaill = $params['mail'];
         $subject = $params['subject'];
         $message = $params['message'];
@@ -48,12 +49,16 @@ class MailHelper
             $email->setMessage($message);
 
             if ($email->send()) {
+
                 return json_encode(['status' => 'success','code' => 200, 'message'=>'Email Sent Successfully...','data' => $emaill,],200);
             } else {
+                $myLogger->logme('error', "mail sent failed -  $emaill");
                 return json_encode(['status' => 'failed','code' => 404,'message'=>'Email Sent Failed...','data' => $emaill  ],404);
             }
             
         } catch (Exception $e) {
+            $msg = $e->getMessage();
+            $myLogger->logme('error', "mail sent failed -  $msg");
             return json_encode(['status' => 'failed','code' => 500,'data' => $emaill],500);
         }  
     }
diff --git a/app/Helpers/excel_import_export_helper.php b/app/Helpers/excel_import_export_helper.php
index a86e5d80..b7eb87c8 100644
--- a/app/Helpers/excel_import_export_helper.php
+++ b/app/Helpers/excel_import_export_helper.php
@@ -665,7 +665,7 @@ if(!function_exists('generate_insurer_based_excel')){
 
             $rowData = [];
             foreach ($excel_header_array as $header) {
-                $fieldName = $header['header_name'];
+                $fieldName = $header['db_column_name'];
 
                 if ($fieldName === 'index') {
                     $value = $serialNumber;
diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php
index d14d71a7..80a40917 100644
--- a/app/Helpers/excel_util_helper.php
+++ b/app/Helpers/excel_util_helper.php
@@ -90,7 +90,7 @@ if(!function_exists('check_relationship'))
     {
         // print_r($relationship);
         // echo '
'; - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','MI']))// check rule only of action column data available { if($row[5] != null && $row[4] != null)//$row[5] = relationship $row[4] = Gender { @@ -141,7 +141,7 @@ if(!function_exists('check_doj')) function check_doj($row) { - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','MI']))// check rule only of action column data available { $slug = \Config\Services::slug(); $relationship = $slug->slugify($row[5]); @@ -188,7 +188,7 @@ if(!function_exists('check_employee_band')) { function check_employee_band($row,$policy_terms,$slab_details) { - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','MI']))// check rule only of action column data available { $is_emp_band_needed = $slab_details['grid_master']['emp_band']; // $is_emp_band_needed = true; @@ -230,7 +230,7 @@ if(!function_exists('check_si')) $return_array = array('status' => true,'error' => ''); $is_si_found = false; $is_age_slab_found = false; - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','SI']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','SI','MI']))// check rule only of action column data available { $received_si = $row['current_action'] == 'SI' ? $row[3] : $row[6]; foreach ($slab_details['slab_rates'] as $skey => $slab_value) @@ -247,7 +247,7 @@ if(!function_exists('check_si')) } // check age slab - if(in_array(strtoupper($row['current_action']), ['I','A','DA']) && (($slab_value['premium_type'] == 1 && strtolower($row['5']) == 'self' ) || ($slab_value['premium_type'] == 2) ) ) + if(in_array(strtoupper($row['current_action']), ['I','A','DA','MI']) && (($slab_value['premium_type'] == 1 && strtolower($row['5']) == 'self' ) || ($slab_value['premium_type'] == 2) ) ) { if($row[3] != '' && $row[3] != null)// dob { @@ -311,7 +311,7 @@ if(!function_exists('check_basic_pay')) { function check_basic_pay($row,$policy_terms,$slab_details) { - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','MI']))// check rule only of action column data available { $is_basic_pay_needed = $slab_details['grid_master']['basicpay']; // $is_basic_pay_needed = true; @@ -329,7 +329,7 @@ if (!function_exists('check_dob_diff')) { function check_dob_diff($row,$relationships,$default_age_ratio) { // echo 'called'; - if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA']))// check rule only of action column data available + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','MI']))// check rule only of action column data available { if($row[3] != null && $row[5] != null) { @@ -667,9 +667,10 @@ if (!function_exists('generate_relationship_code')) } } -if (!function_exists('calculate_premimum')) +if (!function_exists('calculate_premium')) { - function calculate_premimum($family_data,$policy_terms,$slab_details,$fileArr,$default_si = null) + // function calculate_premimum($family_data,$policy_terms,$slab_details,$fileArr,$default_si = null) + function calculate_premium(array $family_data,array $policy_terms,array $slab_details,array $fileArr,string $default_si = null,array $existing_units = []) { // dd($family_data); $slug = \Config\Services::slug(); @@ -865,6 +866,130 @@ if (!function_exists('calculate_premimum')) } } +if (!function_exists('calculate_premium_new')) +{ + function calculate_premium_new(array $family_data,array $policy_terms,array $slab_details,array $fileArr,string $default_si = null,array $existing_units) + { + + //grouping slab details by rack rate name + $temp_slab_rates = []; + $pre_name = ''; + $pre_grid_master = []; + foreach ($slab_details as $key => $value) + { + $pre_grid_master = $value['grid_master']; + unset($value['grid_master']); + if($value['rack_rate_name'] != $pre_name) + { + $pre_name = $value['rack_rate_name']; + $temp_slab_rates[ $value['rack_rate_name'] ]['slab_rates'][] = $value; + } + $temp_slab_rates[ $value['rack_rate_name'] ]['slab_rates'][] = $value; + $temp_slab_rates[ $value['rack_rate_name'] ]['grid_master'] = $pre_grid_master; + } + // dd($temp_slab_rates); + /* 1. construct available/incoming family members composition & count */ + $incoming_familiy_composition = get_familiy_composition($family_data); + // dd($incoming_familiy_composition); + + //2 .get applicable familiy members composition & count from slab details & constrcut an array + //3 in for another loop compare slab level applicable familiy composition with available family composition + $result = []; + foreach($temp_slab_rates as $key => $slab) + { + // dd($slab); + $res = compare_incoming_family_slab_with_configured_slab($slab,$incoming_familiy_composition); + kint::dump($key); + kint::dump($res); + + if($res['is_applicable']) + { + $temp_slab_rates[$key]['is_applicable'] = true; + $temp_slab_rates[$key]['members'] = $res['applicable_members']; + + //get applicable members for current rack rate from over all familiy members and calculate max age and max count,self/acting self and grid type and set it in individual familiy member level + $applicable_members_from_familiy = get_applicable_familiy_members($family_data,$res['applicable_members']); + // dd( $applicable_members_from_familiy); + $is_self_acting_self_set = false; + foreach($applicable_members_from_familiy['index'] as $val) + { + $acting_self = false; + if(!$is_self_acting_self_set) + { + if(strtolower($family_data[$val][5]) == 'self' || !$is_self_acting_self_set) $acting_self = true; + $is_self_acting_self_set = true; + } + + $family_data[$val]['temp'] = ['max_age' => max($applicable_members_from_familiy['max_age']),'max_count' => $applicable_members_from_familiy['max_count'],'grid_name' => $key,'grid_master' => $slab['grid_master'],'acting_self' => $acting_self,'premium_type' => $slab['slab_rates'][0]['premium_type']]; + } + } + else + { + $temp_slab_rates[$key]['is_applicable'] = false; + } + } + // dd(); + + //4. if macthed then the current rack rate is applicable and find common variables link max age,max count,grade, basic pay,SI, self/acting self for current rack rate + + foreach($family_data as $fkey => $member) + { + // dd($member); + //get grid type either primary or additional based on current member relationship available in primary_rack_rate_applicable_familiy_members or not. if yes then primaty grid type else additional grid type + + $fileArr['grid_info'] = ['type' => isset($member['temp']['grid_name']) ? $member['temp']['grid_name'] : NULL , 'grid_id' => isset($member['temp']['grid_master']['ui_type']) ? $member['temp']['grid_master']['ui_type'] : NULL]; + + + + //set self (first index of familiy) SI and grade to rest of the familiy + $member[6] = $family_data[0][6]; + $member[10] = $family_data[0][10]; + $member[18] = $family_data[0][18]; + //set default unit if unit is not available in self/members level + if(empty($member[18])){ $member[18] = $existing_units[0]; } + //transform as db row column + $transformed_familiy_member_data = transform_excel_data_to_db($member,$fileArr); + // kint::dump($transformed_familiy_member_data); + //generate relationship code + if($transformed_familiy_member_data['temp']['action'] != 'D' && $transformed_familiy_member_data['temp']['action'] != 'C' && $transformed_familiy_member_data['temp']['action'] != 'SI') + { + $temp_res = generate_relationship_code($transformed_familiy_member_data); + $transformed_familiy_member_data['relationship_code'] = $temp_res['relationship_code']; + $transformed_familiy_member_data['emp_type'] = $temp_res['emp_type_code']; + } + + // // this array hold conditions to allow calculate premium amt + $conditions = [ + 'isEmployeeSourceEnrollment' => $fileArr['id'] == null, + 'isEmployeeSourceExcelFile' => $transformed_familiy_member_data['temp']['source'] == 'excel', + 'isCurrentActionDependentAddition' => $fileArr['action'] == 'dependent_addition', + // 'isPrimaryGridPremiumTypeSingle' => $transformed_familiy_member_data['temp']['premium_type'] == 1, + 'isCurrentRelationshipSelf' => (strtolower($transformed_familiy_member_data['relationship']) == 'self' || (isset($transformed_familiy_member_data['temp']['acting_self']) && $transformed_familiy_member_data['temp']['acting_self'] === true)), + 'isBasicCoverCalculatedToCurrentEmployee' => ($transformed_familiy_member_data['policy_details']['basic_cover_si'] != null && $transformed_familiy_member_data['policy_details']['basic_cover_si'] != 0) + ]; + + $primaryGridTypeCondition = $conditions['isCurrentActionDependentAddition'] && $conditions['isPrimaryGridPremiumTypeSingle'] && $conditions['isCurrentRelationshipSelf'] && $conditions['isBasicCoverCalculatedToCurrentEmployee']; + + // // Final combined condition + if ($conditions['isEmployeeSourceEnrollment'] || $conditions['isEmployeeSourceExcelFile'] || $primaryGridTypeCondition ) { + + $transformed_familiy_member_data = premium_calculation_manager($transformed_familiy_member_data,$policy_terms,$temp_slab_rates,$default_si); + + $result[] = $transformed_familiy_member_data; + } + + + // $result[] = $transformed_familiy_member_data; + } + + // dd($result); + return ($result); + // + + + } +} + if (!function_exists('transform_excel_data_to_db')) { @@ -878,14 +1003,16 @@ if (!function_exists('transform_excel_data_to_db')) else if($actionArr['action'] == 'deletion'){ $current_column_action = 'D'; } else if($actionArr['action'] == 'correction'){ $current_column_action = 'C'; } else if($actionArr['action'] == 'si_enhancement'){ $current_column_action = 'SI'; } + else if($actionArr['action'] == 'missed_inception'){ $current_column_action = 'MI'; } - if($actionArr['action'] == 'inception' || $actionArr['action'] == 'addition' || $actionArr['action'] == 'dependent_addition') + if($actionArr['action'] == 'inception' || $actionArr['action'] == 'missed_inception' || $actionArr['action'] == 'addition' || $actionArr['action'] == 'dependent_addition') { $policy['basic_cover_si'] = $memArr[6]; $policy['pre_existing_alignments'] = $memArr[14]; // $policy['date_of_exit'] = isset($memArr[16]) ? change_date_format($memArr[16],'d-M-Y','Y-m-d') : NULL; // $policy['reason_for_exit'] = $memArr[17]; + $policy['client_policy_id'] = $actionArr['policy_id']; $policy['date_coverage'] = isset($memArr[7]) ? convert_string_to_date($memArr[7],'Y-m-d') : NULL; $policy['policy_end_date'] = null; @@ -910,6 +1037,9 @@ if (!function_exists('transform_excel_data_to_db')) $result['file_id'] = $actionArr['id']; $result['client_id'] = $actionArr['client_id']; $result['change_event'] = $memArr[15]; + $result['unit'] = $memArr[18]; + $result['temp'] = []; + if(isset($memArr['temp'])) $result['temp'] = array_merge($result['temp'],$memArr['temp']); $result['temp']['grid_type'] = $actionArr['grid_info']['type']; $result['temp']['grid_id'] = $actionArr['grid_info']['grid_id']; $result['temp']['action'] = isset($memArr['current_action']) ? $memArr['current_action'] : $current_column_action; @@ -964,13 +1094,21 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details'] = replace_original_data(original_data:$original_emp_policy_records,current_data:$emp_data['policy_details']); // Kint::dump($policy_data); } - } - //end of fetching data from audit history table + + }//end of fetching data from audit history table //gird and calculation start $slug = \Config\Services::slug(); $grid_type = $emp_data['temp']['grid_id']; - $temp_slab_rates = $emp_data['temp']['grid_type'] == 'primary' ? $slab_details['slab_rates'] : $slab_details['additional_slab_info']['slab_rates']; + $slab_index = isset($emp_data['temp']['grid_name']) ? $emp_data['temp']['grid_name'] : false; + // echo $emp_data['name']; + // kint::dump($slab_index); + if ($slab_index === false) + { + // echo 'not set'; + return false; + } + $temp_slab_rates = $slab_details[ $slab_index ]['slab_rates']; //if curent action is dependent addition OR addition then pull insurer master to set whether add one day from employee date of coverage if($emp_data['temp']['action'] == 'DA' || $emp_data['temp']['action'] == 'A') @@ -984,6 +1122,7 @@ if (!function_exists('premium_calculation_manager')) } // dd($emp_data); $is_match_found = false; + $gst = isset($policy_terms['gst']) && $policy_terms['gst'] != 0 ? $policy_terms['gst'] : 18; switch ($grid_type) { case "1": //GPA - Sum Insured (SI) * Multiplier @@ -991,7 +1130,7 @@ if (!function_exists('premium_calculation_manager')) $employee_received_band = $emp_data['temp']['band']; foreach ($temp_slab_rates as $skey => $slab_value) { - if(($slab_value['si'] == $employee_received_si) || ($slab_value['grade'] != null && $slab_value['grade'] == $employee_received_band && $slab_value['si'] == $employee_received_si)) + if(($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit']) || ($slab_value['grade'] != null && $slab_value['grade'] == $employee_received_band && $slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'])) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -999,7 +1138,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1011,7 +1150,7 @@ if (!function_exists('premium_calculation_manager')) $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; foreach ($temp_slab_rates as $skey => $slab_value) { - if($slab_value['si'] == $employee_received_si) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit']) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -1019,7 +1158,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1030,7 +1169,7 @@ if (!function_exists('premium_calculation_manager')) $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; foreach ($temp_slab_rates as $skey => $slab_value) { - if($slab_value['si'] == $employee_received_si && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -1038,7 +1177,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1053,7 +1192,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; - if($slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { // dd($slab_value); $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; @@ -1062,7 +1201,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1074,7 +1213,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; - if($slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -1082,7 +1221,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1094,7 +1233,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; - if($slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { // echo $emp_data['name']; $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; @@ -1103,7 +1242,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1116,7 +1255,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; - if($slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -1124,7 +1263,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; @@ -1138,7 +1277,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { - if($slab_value['grade'] == $employee_received_band && $slab_value['si'] == $employee_received_si && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['grade'] == $employee_received_band && $slab_value['unit'] == $emp_data['unit'] && $slab_value['si'] == $employee_received_si && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { // $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; @@ -1147,7 +1286,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1160,7 +1299,7 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { - if($slab_value['si'] == $employee_received_si && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self'])) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] )) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); @@ -1168,7 +1307,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); $is_match_found = true; break; } @@ -1176,7 +1315,7 @@ if (!function_exists('premium_calculation_manager')) break; case "10": //GMC - Maximum age of Dependents - $max_age = $emp_data['temp']['maxage']; + $max_age = $emp_data['temp']['max_age']; $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; // echo $emp_data['name'].'-'.$employee_received_si.'
'; // echo $emp_data['temp']['grid_type'].'
'; @@ -1184,10 +1323,10 @@ if (!function_exists('premium_calculation_manager')) foreach ($temp_slab_rates as $skey => $slab_value) { // echo $slab_value['si'].'-'.$slab_value['age_from'].'-'.$slab_value['age_to'].'-'.$max_age.'
'; - if( $slab_value['si'] == $employee_received_si && + if( $slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $max_age && $slab_value['age_to'] >= $max_age) && (($slab_value['premium_type'] == 1 && - ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self'])) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) ) ) + ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] )) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) ) ) { $emp_data['policy_details']['basic_cover_si'] = $employee_received_si; $emp_data['policy_details']['date_coverage'] = isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']; @@ -1195,7 +1334,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')); + $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); $is_match_found = true; break; } @@ -1203,16 +1342,16 @@ if (!function_exists('premium_calculation_manager')) break; case "11": //GMC - Maximum count per Family - $max_count = $emp_data['temp']['maxcount']; - $employee_received_band = $emp_data['temp']['band']; + $max_count = $emp_data['temp']['max_count']; + $employee_received_band = $emp_data['band']; // echo $employee_received_band; $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; $emp_data['policy_details']['basic_cover_si'] = null; foreach ($temp_slab_rates as $skey => $slab_value) { - if($slab_value['si'] == $employee_received_si && $slab_value['grade'] == $employee_received_band && (($slab_value['premium_type'] == 1 && - ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self'])) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && $slab_value['grade'] == $employee_received_band && $slab_value['unit'] == $emp_data['unit'] && (($slab_value['premium_type'] == 1 && + ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] )) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { //calculate premium based on count // echo $emp_data['name']; @@ -1223,9 +1362,9 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date']; $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); - $emp_data['policy_details']['premium'] = get_premium_for_si(slab_details: $slab_details,si_amount: $familiy_si_covered,band: $employee_received_band); + $emp_data['policy_details']['premium'] = get_premium_for_si(slab_details: $temp_slab_rates,si_amount: $familiy_si_covered,band: $employee_received_band,unit:$emp_data['unit']); $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')); + $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); $is_match_found = true; break; } @@ -1241,7 +1380,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['basic_cover_si'] = null; foreach ($temp_slab_rates as $skey => $slab_value) { - if( $slab_value['si'] == $employee_received_si && ((($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) && $slab_value['relationship'] == $employee_relationship) || ($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) )) ) + if( $slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ((($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) && $slab_value['relationship'] == $employee_relationship) || ($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) )) ) { $emp_data['policy_details']['basic_cover_si'] = $employee_received_si; @@ -1250,7 +1389,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); - $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')); + $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); $is_match_found = true; break; } @@ -1266,7 +1405,7 @@ if (!function_exists('premium_calculation_manager')) $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; foreach ($temp_slab_rates as $skey => $slab_value) { - if( $slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && ((($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) && $slab_value['relationship'] == $employee_relationship) || ($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['primary_rack_rate_acting_self'] || $emp_data['temp']['additional_rack_rate_acting_self']) )) ) + if( $slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && ((($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) && $slab_value['relationship'] == $employee_relationship) || ($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) )) ) { $emp_data['policy_details']['basic_cover_si'] = $employee_received_si; @@ -1275,7 +1414,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['days'] = (calculate_days_bw_dates($emp_data['policy_details']['date_coverage'],$policy_terms['policy_end_date'])->days + 1); $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days); - $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')); + $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); $is_match_found = true; break; } @@ -1295,7 +1434,7 @@ if (!function_exists('premium_calculation_manager')) { $log_message .= ' - skipping, calculating only self..!'; //reset emp si and others policy level data if premium only for self - $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date']; + // $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date']; $emp_data['policy_details']['basic_cover_si'] = 0; $emp_data['policy_details']['premium'] = 0; $emp_data['policy_details']['rata_premimum'] = 0; @@ -1347,6 +1486,7 @@ if (!function_exists('transform_db_data_to_excel')) $row[14] = $value['pre_existing_alignments']; $row[16] = isset($value['date_of_exit']) ? change_date_format($value['date_of_exit'], 'Y-m-d', 'd-M-Y') : NULL; $row[17] = $value['reason_for_exit']; + $row[18] = $value['unit']; $row[7] = isset($value['date_coverage']) ? change_date_format($value['date_coverage'], 'Y-m-d', 'd-M-Y') : NULL; @@ -1461,11 +1601,12 @@ if(!function_exists('replace_original_data')) if(!function_exists('get_premium_for_si')) { - function get_premium_for_si(array $slab_details,string $si_amount,string $band) + function get_premium_for_si(array $slab_details,string $si_amount,string $band,string $unit) { - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + // dd($slab_details); + foreach ($slab_details as $skey => $slab_value) { - if($slab_value['si'] == $si_amount && $slab_value['grade'] == $band && $slab_value['max_si'] == 0) + if($slab_value['si'] == $si_amount && $slab_value['grade'] == $band && $slab_value['unit'] == $unit && $slab_value['max_si'] == 0) { return $slab_value['premium']; } @@ -1632,4 +1773,254 @@ if(!function_exists('transform_enrollment_row_to_inception_row')) $res[17] = null; // inception: reason_for_exit (Reason for exit) -> No match in enrollment return $res; } +} + +if(!function_exists('get_familiy_composition')) +{ + + function get_familiy_composition($family_data) + { + // dd($family_data); + $family_composition = []; + $slug = \Config\Services::slug(); + foreach ($family_data as $key => $row) + { + // Kint::dump($row); + $relationship = $slug->slugify($row[5]); + // echo $relationship; + if($relationship == 'self') + { + $family_composition['self'] = 1; + } + else if(!array_key_exists('self', $family_composition)) + { + $family_composition['self'] = 0; + } + + if($relationship == 'spouse') + { + $family_composition['spouse'] = 1; + } + else if(!array_key_exists('spouse', $family_composition)) + { + $family_composition['spouse'] = 0; + } + + if($relationship == 'son' || $relationship == 'daughter') + { + $family_composition['childrens'] = (isset($family_composition['childrens']) ? $family_composition['childrens'] + 1 : 1); + } + else if(!array_key_exists('childrens', $family_composition)) + { + $family_composition['childrens'] = 0; + } + + if($relationship == 'father' || $relationship == 'mother') + { + $family_composition['parents'] = (isset($family_composition['parents']) ? $family_composition['parents'] + 1 : 1); + } + else if(!array_key_exists('parents', $family_composition)) + { + $family_composition['parents'] = 0; + } + + if($relationship == 'father-in-law' || $relationship == 'mother-in-law') + { + $family_composition['parents-in-law'] = (isset($family_composition['parents-in-law']) ? $family_composition['parents-in-law'] + 1 : 1); + } + else if(!array_key_exists('parents-in-law', $family_composition)) + { + $family_composition['parents-in-law'] = 0; + } + + } + + return ($family_composition); + } +} + +if(!function_exists('compare_incoming_family_slab_with_configured_slab')) +{ + // function compare_incoming_family_slab_with_configured_slab($slab,$incoming_familiy_composition) + // { + // $relationship_mapping = [ + // "self" => ["self"], + // "spouse" => ["spouse"], + // "childrens" => ["son", "daughter"], + // "parents" => ["father", "mother"], + // "parents-in-law" => ["father-in-law", "mother-in-law"], + // "either-parents-pil" => ["either-parents-pil"] + // ]; + + // $result = ['is_applicable' => false,'applicable_members' => []]; + // $configured_familiy_composition = json_decode($slab['slab_rates'][0]['additional_relationship'],true); + // Kint::dump($incoming_familiy_composition);//die(); + // Kint::dump($configured_familiy_composition);//die(); + // unset($configured_familiy_composition['either-parents-pil']); + // unset($configured_familiy_composition['elders_count']); + + // if(count($configured_familiy_composition)) + // { + // foreach($configured_familiy_composition as $key => $value) + // { + // if($value != 'NA') + // { + // // echo 'OUTSIDE - ' . $value . $incoming_familiy_composition[$key]; + // if(isset($incoming_familiy_composition[$key]) && ($incoming_familiy_composition[$key] == $value || $value == 'any') ) + // { + // // echo 'INSIDE - ' . $value; + // $result['is_applicable'] = true; + // $result['applicable_members'] = array_merge($result['applicable_members'],$relationship_mapping[ $key ]); + // } + // else + // { + // $result['is_applicable'] = false; + // $result['applicable_members'] = []; + // // break; + // } + // } + // } + // } + // else + // { + // $result['is_applicable'] = false; + // $result['applicable_members'] = []; + // } + // // dd($result); + // return $result; + // } + + function compare_incoming_family_slab_with_configured_slab($slab, $incoming_familiy_composition) +{ + $relationship_mapping = [ + "self" => ["self"], + "spouse" => ["spouse"], + "childrens" => ["son", "daughter"], + "parents" => ["father", "mother"], + "parents-in-law" => ["father-in-law", "mother-in-law"], + "either-parents-pil" => ["either-parents-pil"] + ]; + + $result = ['is_applicable' => false, 'applicable_members' => []]; + $configured_familiy_composition = json_decode($slab['slab_rates'][0]['additional_relationship'], true); + + // Remove unnecessary keys + kint::dump($incoming_familiy_composition); + kint::dump($configured_familiy_composition); + unset($configured_familiy_composition['either-parents-pil']); + unset($configured_familiy_composition['elders_count']); + + // foreach ($configured_familiy_composition as $key => $value) { + // if ($value === 0) { + // // If any relationship is zero, make the rack rate not applicable + // return $result; + // } + // } + + if (count($configured_familiy_composition)) { + foreach ($configured_familiy_composition as $key => $value) { + if ( $value != 'NA') { + if (isset($incoming_familiy_composition[$key])) { + if ($incoming_familiy_composition[$key] == $value || $value == 'any') { + $result['is_applicable'] = true; + $result['applicable_members'] = array_merge($result['applicable_members'], $relationship_mapping[$key]); + } else { + $result['is_applicable'] = false; + $result['applicable_members'] = []; + break; + } + } else { + $result['is_applicable'] = false; + $result['applicable_members'] = []; + break; + } + } + } + } else { + $result['is_applicable'] = false; + $result['applicable_members'] = []; + } + // dd($result); + return $result; +} + + +} + +if(!function_exists('get_applicable_familiy_members')) +{ + function get_applicable_familiy_members($family_data,$applicable_members) + { + $slug = \Config\Services::slug(); + $result = ['index' => [],'max_age'=> [],'max_count' => 0]; + foreach ($family_data as $index => $family_member) + { + if(in_array($slug->slugify($family_member[5]),$applicable_members)) + { + $result['index'] = array_merge($result['index'],[$index]); + $result['max_age'] = array_merge($result['max_age'],[calculate_days_bw_dates(from_date: $family_member[3])->y]); + } + } + $result['max_count'] = count($result['index']); + return $result; + } +} + +if(!function_exists('check_unit')) +{ + function check_unit($row,$existing_units) + { + + + if(in_array($row['current_action'], ['I','A','MI']) ) + { + if(count($existing_units) == 1) + { + if(empty(trim($row[18]))) + { + return array('status' => true); + } + } + + if(strtolower($row[5]) == 'self') + { + if(in_array(trim($row[18]),$existing_units)) //18 is unit name + { + return array('status' => true); + } + else if(!empty(trim($row[18]))) + { + return array('status' => false,'error' => 'wrong unit name'); + } + else + { + return array('status' => false,'error' => 'name of the unit is mandantory'); + } + } + else + { + if(empty(trim($row[18]))) + { + return array('status' => true); + } + else + { + if(in_array(trim($row[18]),$existing_units)) //18 is unit name + { + return array('status' => true); + } + else + { + return array('status' => false,'error' => 'wrong unit name'); + } + } + } + + + } + else + { + return array('status' => true); + } + } } \ No newline at end of file diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php index 5a35ccd2..17da7a65 100644 --- a/app/Helpers/sendMailNotification.php +++ b/app/Helpers/sendMailNotification.php @@ -129,7 +129,7 @@ class sendMailNotification return $wholeData; } else if($action == 'member_review_and_summary_mail'){ - $array_list = $params['array_list']; + $array_list = $params['array_list'];//employeee lst $client_policy_id = $params['client_policy_id']; $emp_code = $params['emp_code']; $client_id = $params['client_id']; diff --git a/app/Models/ClientBranchModel.php b/app/Models/ClientBranchModel.php index c6083a49..100f503d 100644 --- a/app/Models/ClientBranchModel.php +++ b/app/Models/ClientBranchModel.php @@ -24,6 +24,7 @@ class ClientBranchModel extends Model "address2", "gst", "sez", + "units", ]; public function getBranchAndContactByBranchId($branch_id){ @@ -38,4 +39,14 @@ class ClientBranchModel extends Model ->getResult(); } + public function getExisitingUnits(string $client_id,string $client_branch_id) + { + $res = $this->select('client_branch.units') + ->where('client_id', $client_id) + ->where('id', $client_branch_id) + ->find(); + //->getResult(); + return (json_decode($res[0]['units'])); + } + } diff --git a/app/Models/ClientModel.php b/app/Models/ClientModel.php index d1d35a2f..a43c1812 100644 --- a/app/Models/ClientModel.php +++ b/app/Models/ClientModel.php @@ -68,11 +68,11 @@ class ClientModel extends Model 'client_policy.id as client_policy_id', 'client_policy.policy_terms', 'client_policy.policy_no', - 'p.name', + // 'p.name', 'pt.policy_type', ]) ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') - ->join('policies p', 'p.id = client_policy.policy_id') + // ->join('policies p', 'p.id = client_policy.policy_id') ->join('policy_type pt','client_policy.policy_type_id = pt.id') ->where('client_policy.client_id',$client['id']) ->where('client_policy.is_active', 1) diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php index 65bb32cd..05d09c98 100644 --- a/app/Models/ClientPolicyModel.php +++ b/app/Models/ClientPolicyModel.php @@ -45,6 +45,7 @@ class ClientPolicyModel extends Model "client_branch_id", "cd_ac_no", "gst", + "enrolment_visibility", ]; public function getClientPolicyById($id){ @@ -73,7 +74,6 @@ class ClientPolicyModel extends Model ->select('client_policy.*') ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') - ->select('policies.name as policy_name, policies.policy_type_id') ->select('policy_type.policy_type as policy_type_name') ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') @@ -83,8 +83,7 @@ class ClientPolicyModel extends Model ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') ->join('tpa', 'tpa.id = client_policy.tpa_id', 'left') ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id', 'left') - ->join('policies', 'policies.id = client_policy.policy_id') - ->join('policy_type', 'policy_type.id = policies.policy_type_id') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') ->where('client_policy.client_id', $client_id) ->where('client_policy.policy_status', 1) @@ -186,7 +185,7 @@ class ClientPolicyModel extends Model return $this->db->table('cash_deposit') ->select('cash_deposit.*') ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('clients.client_name as clientname, clients.short_name as clientshort') + ->select('clients.client_name as clientname, clients.short_name as clientshort, client_policy.policy_no') // ->select('policies.name as policy_name') ->select('policy_type.policy_type') ->select('user_profiles.first_name as username') @@ -355,6 +354,34 @@ public function getClientPolicyByPolicyType($client_id, $type){ } +public function getPolicyTypeForPolicyBinding($client_id){ + + $result = $this->table('client_policy') + ->select('policy_type.*, client_policy.id as client_policy_id, client_policy.policy_no') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.is_active', 1) + ->whereIn('policy_type.id', [2,3]) + ->findAll(); + + return $result; + + +} + + +public function getCliendDataForExcelFileName($client_policy_id){ + + return $this->table('client_policy') + ->select('clients.short_name, policy_type.policy_type, client_branch.branch_code') + ->join('clients', 'clients.id = client_policy.client_id') + ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->where('client_policy.id', $client_policy_id) + ->where('client_policy.is_active', 1) + ->first(); + +} } diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php index 13a1e5e7..aa1fb9fa 100644 --- a/app/Models/EmployeeModel.php +++ b/app/Models/EmployeeModel.php @@ -41,6 +41,7 @@ class EmployeeModel extends Model "client_branch_id", "token_time_out", "emp_type", + "unit", "mpin" ]; @@ -105,7 +106,7 @@ class EmployeeModel extends Model public function getEmpFamilybyEmpCode(string $client_policy_id = null,string $emp_code = null,string $client_id = null,array $emp_status = [],array $policy_status = [],array $relationship = [],array $client_branch_id = []) { - $result = $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policies.name as policy_name','client_policy.is_addon']) + $result = $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employees.unit','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policies.name as policy_name','client_policy.is_addon']) ->join('employee_polices', 'employee_polices.employee_id = employees.id') ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id') ->join('policies', 'policies.id = client_policy.policy_id') @@ -158,9 +159,9 @@ class EmployeeModel extends Model } // for EMP rest API process do not change - public function checkExistingEmployee($arr) + public function checkExistingEmployee($arr,$client_branch_id) { - return $this->where('emp_code',$arr['emp_code'])->where('name',$arr['name'])->where('client_id', $arr['client_id'])->first(); + return $this->where('emp_code',$arr['emp_code'])->where('name',$arr['name'])->where('client_id', $arr['client_id'])->where('client_branch_id', $client_branch_id)->first(); } diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 3dfe16ec..1438c730 100644 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -75,7 +75,7 @@ class EmployeePolicyModel extends Model return $data; } -// ----------------------------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------------------------------- public function getEmployeePolicy($client_id = 0, $policy_id=0, $status=0, $branch_id=0, $emp_code="", $emp_name="") { @@ -146,8 +146,6 @@ class EmployeePolicyModel extends Model return $result->findAll(); } - - //for emp onboard do not change public function checkExistingEmpPolicy($arr) { @@ -156,8 +154,7 @@ class EmployeePolicyModel extends Model ->where('is_active',1) ->find(); } - - //------------------------------------------------------------------ +//------------------------------------------------------------------------------------------------------- public function getInceptionEmployeeDataForExportExcel($ref_data) @@ -176,6 +173,21 @@ class EmployeePolicyModel extends Model $id = 'uhid'; } + $datas = ''; + if($event === 'inception'){ + + $datas = 'I'; + + }else if($event === 'dependent_addition'){ + + $datas = 'DA'; + + }else if($event === 'addition'){ + + $datas = 'A'; + + } + $sql = " SELECT employees.name AS emp_name, @@ -185,8 +197,19 @@ class EmployeePolicyModel extends Model employees.change_event AS change_event, employees.relationship AS emp_relationship, employees.relationship_code AS emp_relationship_code, + '$datas' as event_type_data, + + employees.doj AS emp_doj, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email_c, + employees.email_personal AS emp_email_p, + employees.band AS emp_grade, + employees.designation AS emp_designation, + employees.basic_pay AS emp_basic_pay, + TIMESTAMPDIFF(YEAR, employees.dob, CURDATE()) AS emp_age, employees.emp_type as emp_type, + employee_polices.id as primaryKey, employee_polices.tpa_id, @@ -195,16 +218,23 @@ class EmployeePolicyModel extends Model employee_polices.basic_cover_si, employee_polices.date_coverage, employee_polices.policy_end_date, - employee_polices.days, + employee_polices.days as no_of_days, employee_polices.premium, - employee_polices.rata_premimum, + employee_polices.rata_premimum as pro_rata_premium, employee_polices.gst, (employee_polices.rata_premimum + employee_polices.gst) AS total, batch_data.emp_policy_id, batch_data.bl AS batch_list_batch_code, - batch_data.bf AS batch_files_batch_code + batch_data.bf AS batch_files_batch_code, + + CASE + WHEN client_branch.sez = 0 THEN 'NON-SEZ' + WHEN client_branch.sez = 1 THEN 'SEZ' + END as sez + FROM employee_polices LEFT JOIN employees ON employees.id = employee_polices.employee_id + LEFT JOIN client_branch ON client_branch.id = employees.client_branch_id LEFT JOIN ( SELECT batch_list.emp_policy_id, @@ -223,7 +253,6 @@ class EmployeePolicyModel extends Model AND employee_polices.status = 'active' AND employees.is_active = 1 AND employees.emp_status = 'active' - "; // Get the result set @@ -257,9 +286,20 @@ class EmployeePolicyModel extends Model employees.dob AS emp_dob, employees.gender AS emp_gender, employees.client_id AS emp_client_id, - employees.emp_type as emp_type, + employees.emp_type as emp_temp_codeype, employee_polices.uhid, employees.relationship_code, + employees.relationship, + 'C' as event_type_data, + + employees.doj AS emp_doj, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email_c, + employees.email_personal AS emp_email_p, + employees.band AS emp_grade, + employees.designation AS emp_designation, + employees.basic_pay AS emp_basic_pay, + batch_data.emp_policy_id, batch_data.bl AS batch_list_batch_code, batch_data.bf AS batch_files_batch_code @@ -324,7 +364,19 @@ class EmployeePolicyModel extends Model employees.dob AS emp_dob, employees.gender AS emp_gender, employees.relationship_code AS emp_relationship_code, + employees.relationship AS emp_relationship, employees.emp_type as emp_type, + 'SI' as event_type_data, + + + employees.doj AS emp_doj, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email_c, + employees.email_personal AS emp_email_p, + employees.band AS emp_grade, + employees.designation AS emp_designation, + employees.basic_pay AS emp_basic_pay, + employee_polices.uhid AS risk_id, employee_polices.pre_existing_alignments, employee_polices.policy_end_date, @@ -341,11 +393,18 @@ class EmployeePolicyModel extends Model sidata.new_si_premium - employee_polices.rata_premimum AS difference_premium, - ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premimum, + ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premium, ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS gst, - ((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS total + ROUND( + ((sidata.new_si_premium - employee_polices.rata_premimum) * + (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + + ROUND( + ((sidata.new_si_premium - employee_polices.rata_premimum) * + (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2 + ), 2 + ) AS total FROM emp_endorsement a @@ -441,12 +500,23 @@ class EmployeePolicyModel extends Model employees.dob AS emp_dob, employees.gender AS emp_gender, employees.relationship AS emp_relationship, + employees.relationship_code AS emp_relationship_code, employees.emp_type as emp_type, + 'D' as event_type_data, + + employees.doj AS emp_doj, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email_c, + employees.email_personal AS emp_email_p, + employees.band AS emp_grade, + employees.designation AS emp_designation, + employees.basic_pay AS emp_basic_pay, employee_polices.basic_cover_si, - employee_polices.uhid as risk_id, + employee_polices.uhid as uhid, employee_polices.policy_end_date, - employee_polices.rata_premimum as premium, + employee_polices.premium, + employee_polices.rata_premimum as pro_rata_premium, batch_data.emp_policy_id AS emp_policy_id, batch_data.bl AS batch_list_batch_code, @@ -519,96 +589,6 @@ class EmployeePolicyModel extends Model } - public function updateTPAIDorUHID($update_data) - { - $client_id = $update_data['client_id']; - $client_policy_id = $update_data['client_policy_id']; - $name = $update_data['name']; - $emp_code = $update_data['emp_code']; - $uhid = $update_data['uhid']; - $tpa_id = $update_data['tpa_id']; - - $query = " - UPDATE employee_polices - JOIN employees ON employees.id = employee_polices.employee_id - SET employee_polices.tpa_id = '{$tpa_id}', - employee_polices.uhid = '{$uhid}' - WHERE employees.emp_code = '{$emp_code}' - AND employees.name = '{$name}' - AND employees.client_id = '{$client_id}' - AND employee_polices.client_policy_id = '{$client_policy_id}' - "; - - $this->query($query); - - } - - - public function updateCorrectionData($update_data) - { - - $emp_code = $update_data['emp_code']; - $uhid = $update_data['uhid']; - $endorsement_id = $update_data['tpa_id']; - - $sql = " - UPDATE emp_endorsement - JOIN employees ON employees.id = emp_endorsement.pk - JOIN employee_polices ON employees.id = employee_polices.employee_id - SET emp_endorsement.endorsement_id = '$endorsement_id', emp_endorsement.status = 'complete' - WHERE employees.emp_code = '$emp_code' - AND employee_polices.uhid = '$uhid' - "; - $query = $this->query($sql); - } - - - public function updateEndoresmentIdForSIEnhancement($update_data){ - - $client_id = $update_data['client_id']; - $client_policy_id = $update_data['client_policy_id']; - $emp_name = $update_data['emp_name']; - $emp_code = $update_data['emp_code']; - $endorsement_id = $update_data['endorsement_id']; - - $sql = " - UPDATE emp_endorsement - JOIN employee_polices ON employee_polices.id = emp_endorsement.pk - JOIN employees ON employee_polices.employee_id = employees.id - SET emp_endorsement.endorsement_id = '$endorsement_id', emp_endorsement.status = 'complete' - WHERE emp_endorsement.emp_code = '$emp_code' - AND employees.client_id = '$client_id' - AND employee_polices.client_policy_id = '$client_policy_id' - AND emp_endorsement.actions = 'si' - AND emp_endorsement.name = '$emp_name' - "; - $query = $this->query($sql); - - } - - - public function updateEndoresmentIdForDeletion($update_data) - { - - $client_id = $update_data['client_id']; - $client_policy_id = $update_data['client_policy_id']; - $emp_name = $update_data['emp_name']; - $emp_code = $update_data['emp_code']; - $endorsement_id = $update_data['endorsement_id']; - - $sql = " - UPDATE emp_endorsement - JOIN employee_polices ON employee_polices.id = emp_endorsement.pk - JOIN employees ON employee_polices.employee_id = employees.id - SET emp_endorsement.endorsement_id = '$endorsement_id', emp_endorsement.status = 'complete' - WHERE employees.emp_code = '$emp_code' - AND employees.client_id = '$client_id' - AND employee_polices.client_policy_id = '$client_policy_id' - AND employees.name = '$emp_name' - "; - $query = $this->query($sql); - } - public function fetchEmpEndorsementData($fetch_data) { @@ -671,7 +651,8 @@ class EmployeePolicyModel extends Model } - // //for emp onboard do not change + //for emp onboard do not change + // public function checkExistingEmpPolicy($arr) // { // return $this->where('employee_id',$arr['employee_id']) diff --git a/app/Models/FileModel.php b/app/Models/FileModel.php index 51f397ec..9262e796 100644 --- a/app/Models/FileModel.php +++ b/app/Models/FileModel.php @@ -19,6 +19,7 @@ class FileModel extends Model "client_id", "policy_id", "client_branch_id", + "uploaded_by" ]; diff --git a/app/Models/InsurerExcelExportTemplateModel.php b/app/Models/InsurerExcelExportTemplateModel.php new file mode 100644 index 00000000..749a818a --- /dev/null +++ b/app/Models/InsurerExcelExportTemplateModel.php @@ -0,0 +1,23 @@ +find($grid_id); + $pre_grid_id = 0; + $grid_type = []; + foreach ($premium_slab_data as $key => $value) + { + if($value['policy_grid_id'] != $pre_grid_id) + { + $grid_id = $value['policy_grid_id']; + $policyGridModel = new PolicyGridModel(); + $grid_type = $policyGridModel->find($grid_id); + $premium_slab_data[$key]['grid_master'] = $grid_type; + } + $premium_slab_data[$key]['grid_master'] = $grid_type; + } + } if(isset($additional_premium_slab_data[0]['policy_grid_id'])) { diff --git a/app/Models/PolicyPremium1Model.php b/app/Models/PolicyPremium1Model.php index 5609ba08..02e10ba0 100644 --- a/app/Models/PolicyPremium1Model.php +++ b/app/Models/PolicyPremium1Model.php @@ -26,6 +26,9 @@ class PolicyPremium1Model extends Model 'is_active', 'grade', 'premium_type', + 'rack_rate_name', + 'unit', + 'additional_relationship', ]; diff --git a/app/Models/PolicyPremium2Model.php b/app/Models/PolicyPremium2Model.php index b302a53c..ce949d97 100644 --- a/app/Models/PolicyPremium2Model.php +++ b/app/Models/PolicyPremium2Model.php @@ -27,6 +27,8 @@ class PolicyPremium2Model extends Model 'relationship', 'additional_relationship', 'rack_rate_type', + 'rack_rate_name', + 'unit', ]; diff --git a/app/Models/PolicyTypeModel.php b/app/Models/PolicyTypeModel.php index 2b147308..fff3f62a 100644 --- a/app/Models/PolicyTypeModel.php +++ b/app/Models/PolicyTypeModel.php @@ -17,5 +17,6 @@ class PolicyTypeModel extends Model "created_by", "updated_by", "is_active", + "long_name", ]; } diff --git a/app/Views/DashBoard.php b/app/Views/DashBoard.php index fc335f73..7d8243a5 100644 --- a/app/Views/DashBoard.php +++ b/app/Views/DashBoard.php @@ -1 +1,80 @@ -

Welcome !

+ + + +
+
+
+
+
+
+
+
+
+
+ +
+ + +
+ + + + +
+
+
+
+
+ + + + + diff --git a/app/Views/batch_list.php b/app/Views/batch_list.php index a909008c..00e5b465 100644 --- a/app/Views/batch_list.php +++ b/app/Views/batch_list.php @@ -58,7 +58,8 @@ - - - + + - diff --git a/app/Views/client_branch.php b/app/Views/client_branch.php index 3ff68b11..e40cc1db 100644 --- a/app/Views/client_branch.php +++ b/app/Views/client_branch.php @@ -1,3 +1,36 @@ + + + +
@@ -46,7 +79,7 @@
+ name="branch_code" onchange="setDefaultUnitValue(this)" required>
@@ -92,6 +125,11 @@
+
+ + +

-
Contact 1
-
+ +
+
+ +
+
@@ -210,7 +252,6 @@ $(document).ready(function() { }); - $('#btnBranchAdd').click(function() { branch_form_action = ''; @@ -286,9 +327,11 @@ $('.btnBack').click(function() { }) - $("#branch_form").submit(function(event) { + var selectedValues = $("#selected").val(); + console.log(selectedValues, selectedValues); + event.preventDefault(); branch_PrimaryKey = $('#client_id_branch').val(); @@ -311,6 +354,13 @@ $("#branch_form").submit(function(event) { var formData = new FormData($('#branch_form')[0]); + const jsonString = JSON.stringify(selectedValues); + console.log('jsonString', jsonString); + + + // Append the JSON string to the FormData object + formData.append('units', jsonString); + $.ajax({ data: formData, url: branch_form_action, @@ -390,7 +440,6 @@ $("#branch_form").submit(function(event) { contactCount = 1 }); - $('body').on('click', '.btnBranchEdit', function() { var buttonIds = JSON.parse(localStorage.getItem('buttonIds')) || []; @@ -451,6 +500,8 @@ $('body').on('click', '.btnBranchEdit', function() { $('#sez').prop('checked', false); } + appendOption(res.data.units) + $('#name').val(res.contact[0].name); $('#email').val(res.contact[0].email); $('#mobile').val(res.contact[0].mobile); @@ -480,7 +531,6 @@ $('body').on('click', '.btnBranchEdit', function() { console.log(branch_form_action); }); - $("#remove_btn").click(function() { $("#name").val(''); $("#email").val(''); @@ -500,8 +550,11 @@ function appendContactHtml(contact = false, reset = false) { var html = `

-
Contact ${contactCount}
-
+
+
+ +
+
@@ -565,7 +618,6 @@ function storeButtonId(id) { localStorage.setItem('buttonIds', JSON.stringify(buttonIds)); } - function hideStoredAddButtons() { var storedIds = JSON.parse(localStorage.getItem('buttonIds')) || []; storedIds.forEach(function(id) { @@ -666,8 +718,6 @@ function removeClientBranch(element) { } - - function checkMobileNumber(input) { console.log('function called') @@ -693,5 +743,155 @@ function checkMobileNumber(input) { console.error(status, error); }); +} + + + \ No newline at end of file diff --git a/app/Views/client_policy.php b/app/Views/client_policy.php index 67247f55..b0862573 100644 --- a/app/Views/client_policy.php +++ b/app/Views/client_policy.php @@ -56,10 +56,10 @@
- - $value) { ?> - + +
@@ -74,6 +74,7 @@
-