From 248ddbc9e33d0bba4d70921ca34638413d6e7c12 Mon Sep 17 00:00:00 2001 From: velz Date: Mon, 3 Jun 2024 10:27:03 +0530 Subject: [PATCH 1/2] CHANGE_BRABCH_ID&ADDITIONAL_PREMIUM_TYPE --- README.md | 58 +--- app/Controllers/EmployeeController.php | 27 +- app/Controllers/EmployeeServiceController.php | 97 +++--- app/Helpers/excel_util_helper.php | 281 ++++++++++++++---- app/Models/InsurerModel.php | 1 + app/Models/PolicesModel.php | 20 +- tests/unit/PremiumCalculationTest.php | 154 ++++++++++ 7 files changed, 475 insertions(+), 163 deletions(-) create mode 100644 tests/unit/PremiumCalculationTest.php diff --git a/README.md b/README.md index 00cdf704..8c8c98a2 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,11 @@ # CodeIgniter 4 Framework -## What is CodeIgniter? +## Unit Testing -CodeIgniter is a PHP full-stack web framework that is light, fast, flexible and secure. -More information can be found at the [official site](https://codeigniter.com). +From command propmt run the following cmds -This repository holds the distributable version of the framework. -It has been built from the -[development repository](https://github.com/codeigniter4/CodeIgniter4). +`php vendor/bin/phpunit tests\unit\GridType11PremiumCalculationTest.php` -More information about the plans for version 4 can be found in [CodeIgniter 4](https://forum.codeigniter.com/forumdisplay.php?fid=28) on the forums. +Run speeific method -The user guide corresponding to the latest version of the framework can be found -[here](https://codeigniter4.github.io/userguide/). - -## Important Change with index.php - -`index.php` is no longer in the root of the project! It has been moved inside the *public* folder, -for better security and separation of components. - -This means that you should configure your web server to "point" to your project's *public* folder, and -not to the project root. A better practice would be to configure a virtual host to point there. A poor practice would be to point your web server to the project root and expect to enter *public/...*, as the rest of your logic and the -framework are exposed. - -**Please** read the user guide for a better explanation of how CI4 works! - -## Repository Management - -We use GitHub issues, in our main repository, to track **BUGS** and to track approved **DEVELOPMENT** work packages. -We use our [forum](http://forum.codeigniter.com) to provide SUPPORT and to discuss -FEATURE REQUESTS. - -This repository is a "distribution" one, built by our release preparation script. -Problems with it can be raised on our forum, or as issues in the main repository. - -## Contributing - -We welcome contributions from the community. - -Please read the [*Contributing to CodeIgniter*](https://github.com/codeigniter4/CodeIgniter4/blob/develop/CONTRIBUTING.md) section in the development repository. - -## Server Requirements - -PHP version 7.4 or higher is required, with the following extensions installed: - -- [intl](http://php.net/manual/en/intl.requirements.php) -- [mbstring](http://php.net/manual/en/mbstring.installation.php) - -> **Warning** -> The end of life date for PHP 7.4 was November 28, 2022. If you are -> still using PHP 7.4, you should upgrade immediately. The end of life date -> for PHP 8.0 will be November 26, 2023. - -Additionally, make sure that the following extensions are enabled in your PHP: - -- json (enabled by default - don't turn it off) -- [mysqlnd](http://php.net/manual/en/mysqlnd.install.php) if you plan to use MySQL -- [libcurl](http://php.net/manual/en/curl.requirements.php) if you plan to use the HTTP\CURLRequest library +`>php vendor/bin/phpunit tests\unit\PremiumCalculationTest.php --filter testPremiumCalculationWithPrimaryRackRateAndAdditionalRackRate` diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 77a14554..3aa5c42d 100644 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -180,16 +180,31 @@ class EmployeeController extends AdminController 'emplist' => [ 'uploaded[emplist]', 'mime_in[emplist,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]', - 'max_size[emplist,8192]', + 'max_size[emplist,16384]', ], ]); + + if ($validated) + { + $avatar = $this->request->getFile('emplist'); + if (!$avatar) { + $this->myLogger->logme("error", 'File not found'); + return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400); + } - if ($validated) { - $avatar = $this->request->getFile('emplist'); - $is_moved = $avatar->move(WRITEPATH . 'uploads/excel/'); - $filename = $avatar->getName(); + $is_moved = $avatar->move(WRITEPATH . 'uploads/excel/'); + if ($is_moved) { + $filename = $avatar->getName(); + // Handle successful upload, e.g., log success or further processing + $this->myLogger->logme("error", 'File move successful'); + + } else { + $this->myLogger->logme("error", 'File move failed'); + return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500); + } } else { - return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'invalid file'], 200); + $this->myLogger->logme("error", 'Upload failed Invalid file'); + return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404); } //process post variable entry in file table diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 63a240d1..cb6705f4 100644 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -668,7 +668,7 @@ class EmployeeServiceController extends AdminController // for employee policy table $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'date_of_exit','old_value' => $data['date_of_exit'],'new_value' => change_date_format($row[4],'d-M-Y','Y-m-d'),'created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id']]); $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'reason_for_exit','old_value' => $data['reason_for_exit'],'new_value' => $row[5],'created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id']]); - $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'status','old_value' => $data['status'],'new_value' => 'deactivate','created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id']]); + $this->empEndorsementModel->save(['pk' => (int)$data['emp_policy_id'],'emp_code' => $data['emp_code'],'table_name' => 'employee_polices','actions' => 'd','name' => $data['name'],'field_name' => 'status','old_value' => $data['status'],'new_value' => 'inactive','created_by' => $file['created_by'],'remarks' => 'general deletion','group_key' => $group_key,'file_id' => $file['id']]); }; //iterate each row foreach ($excel_data as $col_key => $row) @@ -679,47 +679,56 @@ class EmployeeServiceController extends AdminController } // echo '
START- ' . $row[2]; $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->where('client_branch_id',$file['client_branch_id'])->first(); - - $existing_endorsements = $this->empEndorsementModel->where('actions','d') - ->where('table_name','employees') - ->where('endorsement_id is null') - ->where('emp_code',$employee['emp_code']) - ->where('name',$employee['name']) - ->where('field_name','emp_status') - ->findAll(); - - - if(!count($existing_endorsements)) + // $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first(); + // dd($employee); + if(is_array($employee) && count($employee)) { - if(strtolower($employee['relationship']) != 'self') - { - - if(!in_array($employee['id'],$endorsement_data))//make entry in endorsement firsttime only with checking that PK of emp exisintg in variable $endorsement_data - { - $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first(); - $data = ['emp_id' => $employee['id'],'name' => $employee['name'],'emp_status' => $employee['emp_status'],'emp_policy_id' => $employee_policy['id'],'emp_code' => $employee['emp_code'],'change_event' => $employee['change_event'],'date_of_exit' => $employee_policy['date_of_exit'],'reason_for_exit' => $employee_policy['reason_for_exit'],'status' => $employee_policy['status']]; - $endorsement($data,$file,$row); - $endorsement_data[] = $employee['id']; - } - } - else - { - - $family = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $row[1],client_id: $file['client_id'],client_policy_id: $file ['policy_id'],emp_status: ['active'],policy_status: ['active']); - // Kint::dump($family); - foreach ($family as $key => $emp) { - - if(!in_array($emp['emp_id'],$endorsement_data)) - { - $endorsement($emp,$file,$row); - - $endorsement_data[] = $emp['emp_id']; - - } - } + $existing_endorsements = $this->empEndorsementModel->where('actions','d') + ->where('table_name','employees') + ->where('endorsement_id is null') + ->where('emp_code',$employee['emp_code']) + ->where('name',$employee['name']) + ->where('field_name','emp_status') + ->findAll(); + + if(!count($existing_endorsements)) + { + if(strtolower($employee['relationship']) != 'self') + { + + if(!in_array($employee['id'],$endorsement_data))//make entry in endorsement firsttime only with checking that PK of emp exisintg in variable $endorsement_data + { + $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first(); + $data = ['emp_id' => $employee['id'],'name' => $employee['name'],'emp_status' => $employee['emp_status'],'emp_policy_id' => $employee_policy['id'],'emp_code' => $employee['emp_code'],'change_event' => $employee['change_event'],'date_of_exit' => $employee_policy['date_of_exit'],'reason_for_exit' => $employee_policy['reason_for_exit'],'status' => $employee_policy['status']]; + $endorsement($data,$file,$row); + $endorsement_data[] = $employee['id']; + } + } + else + { + + $family = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $row[1],client_id: $file['client_id'],client_policy_id: $file ['policy_id'],emp_status: ['active'],policy_status: ['active']); + // Kint::dump($family); + foreach ($family as $key => $emp) { + + if(!in_array($emp['emp_id'],$endorsement_data)) + { + $endorsement($emp,$file,$row); + + $endorsement_data[] = $emp['emp_id']; + + } + } + + } } } + else + { + + $this->myLogger->logme("error",'{emp_code} - {name} not found',['emp_code' => $row[1],'name' => $row[2]]); + } // print_r($endorsement_data); @@ -887,8 +896,10 @@ class EmployeeServiceController extends AdminController // Kint::dump($value); // Kint::dump($policy_data); //start implemet of si enhancement of grid type 10,11 - if(count($employee) && (($file['action'] == 'dependent_addition' && in_array($value['temp']['source'],[10,11]) && ($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)))) + if(count($employee) && $file['action'] == 'dependent_addition' && $value['temp']['source'] == 'db' && ( ($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))) { + $log_message = 'Employee record from DB,Checking SI for - '.$employee[0]['name'].'('.$employee[0]['emp_code'].')'; + $this->myLogger->logme('error',$log_message); $res = $this->employeesSIEnhanceProcessWhileOnbboard(employee:$employee[0],policy_data: $policy_data,file:$file);// where employee holds existing emp data and policy_data holds new si enhancement if(!$res) { @@ -964,7 +975,7 @@ class EmployeeServiceController extends AdminController $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($employee_policy['client_policy_id'],$employee['client_id']); //check si has changed in normal case OR check premium only changed, still treat as SI enhancement in grid type 10 - if($employee_policy['basic_cover_si'] != $policy_data['basic_cover_si'] || ($slab_details['grid_master']['ui_type'] == 10 && $policy_data['premimum'] != null && $policy_data['premimum'] != "" && $employee_policy['premimum'] != $policy_data['premimum'])) + if($employee_policy['basic_cover_si'] != $policy_data['basic_cover_si'] || ($policy_data['premimum'] != null && $policy_data['premimum'] != "" && $employee_policy['premimum'] != $policy_data['premimum'])) { $existing_endorsements = $this->empEndorsementModel->where('actions','si') ->where('table_name','employee_polices') @@ -986,7 +997,9 @@ class EmployeeServiceController extends AdminController $this->empEndorsementModel->save(['pk' => (int)$employee['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'basic_cover_si','old_value' => $employee_policy['basic_cover_si'],'new_value' => $policy_data['basic_cover_si'],'created_by' => $file['created_by'],'remarks' => 'general si enhancement via DA','group_key' => $group_key,'file_id' => $file['id']]); $this->empEndorsementModel->save(['pk' => (int)$employee['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'premium','old_value' => $employee_policy['premium'],'new_value' => $slab_value['premium'],'created_by' => $file['created_by'],'remarks' => 'general si enhancement via DA','group_key' => $group_key,'file_id' => $file['id']]); $this->empEndorsementModel->save(['pk' => (int)$employee['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'si_enhancement_date','old_value' => null,'new_value' => date('Y-m-d'),'created_by' => $file['created_by'],'remarks' => 'general si enhancement via DA','group_key' => $group_key,'file_id' => $file['id']]); - $this->myLogger->logme('error',($employee['emp_code'].' - '.$employee['name'].'- ( NEW/OLD SI - '.$employee_policy['basic_cover_si'].'/'.$policy_data['basic_cover_si'].')'. '( NEW/OLD PREMIUM - '.$employee_policy['premium'].'/'.$policy_data['premimum'].') '.' - si enhancement via DA')); + $this->myLogger->logme('error',($employee['emp_code'].' - '.$employee['name'].'- ( NEW/OLD SI - '.$employee_policy['basic_cover_si'].'/'.$policy_data['basic_cover_si'].')'. '( NEW/OLD PREMIUM - '.$employee_policy['premium'].'/'.$policy_data['premimum'].') '.' - si enhancement via DA')); + $log_message = 'SI enhancement done during dependent_addition - '.$employee[0]['name'].'('.$employee[0]['emp_code'].')'; + $this->myLogger->logme('error',$log_message); return true; //retun true when endorsement inserted } @@ -1123,7 +1136,7 @@ class EmployeeServiceController extends AdminController ->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('client_branch', 'client_branch.id = files.client_branch_id') + ->join('client_branch', 'client_branch.id = files.client_branch_id','left') ->where('files.id', $file_id) ->first(); diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index ecef10e8..f48669a8 100644 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -1,6 +1,7 @@ $row) { - if(($current_action == 'inception' || $current_action == 'addition') || ($current_action == 'dependent_addition' && (isset($row['temp']) && $row['temp']['source'] != 'db'))) - { + if($current_action != 'dependent_addition' || (isset($row['temp']) && $row['temp']['source'] != 'db')) + { $res = $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("cp.id",$policy_id) + ->where("cp.id",$policy_id) ->where("employees.client_id",$client_id) ->where("employees.is_active",1) + ->where("employees.emp_status",'active') ->where("ep.is_active",1) + ->where("ep.status",'active') // ->where("ep.client_id",$client_id) ->where('name',$row[2])->where('emp_code',$row[1]) ->findAll(); @@ -594,28 +597,90 @@ if (!function_exists('calculate_premimum')) { function calculate_premimum($family_data,$policy_terms,$slab_details,$fileArr,$default_si = null) { -// - // dd($slab_details); - // grid type - // 1 = premium => si + // dd($family_data); + $slug = \Config\Services::slug(); $result = []; - $grid_type = $slab_details['grid_master']['ui_type']; - $fileArr['grid_type'] = $grid_type; + $primary_grid_type = $slab_details['grid_master']['ui_type']; + + //gather detailes for additional rack info + $additional_grid_type = isset($slab_details['additional_slab_info']['grid_master']['ui_type']) ? $slab_details['additional_slab_info']['grid_master']['ui_type'] : null; + // dd(isset($slab_details['additional_slab_info']['grid_master']['ui_type'])); + $policy_terms_json = ($policy_terms['policy_terms']); + $policy_terms_json = (array) json_decode($policy_terms_json); + // dd($policy_terms); + $primary_rack_rate_applicable_familiy_members = ['self']; + if(isset($policy_terms_json['family_floaters'])) + { + $primary_rack_rate_applicable_familiy_members = generate_family_relationship_array((array)$policy_terms_json['family_floaters']); + } + + $additional_grid_type_applicable_familiy_members = []; + if($additional_grid_type != null) + { + $additional_grid_type_applicable_familiy_members = (array)json_decode($slab_details['additional_slab_info']['slab_rates'][0]['additional_relationship']); + $additional_grid_type_applicable_familiy_members = generate_family_relationship_array($additional_grid_type_applicable_familiy_members); + } + // Kint::dump($primary_rack_rate_applicable_familiy_members); + // Kint::dump($additional_grid_type_applicable_familiy_members); + //remove common family members in primary array + $primary_rack_rate_applicable_familiy_members = array_diff($primary_rack_rate_applicable_familiy_members,$additional_grid_type_applicable_familiy_members); + // dd($primary_rack_rate_applicable_familiy_members); + + + //this variable for store emp id and their band for emp band level premium calculation for all famility members (especially for grid type 9) also store max age and max count of a familiy for grid type 10,11 $emp_details_with_empband_max_age_max_count = []; - //max age amoung familiy - $max_age = max(array_map(function($item) {return calculate_days_bw_dates(from_date: $item[3])->y; }, $family_data)); + //find max age and max count of family members for both primary and additional grid type + $max_age_and_count = (array_reduce($family_data,function($max_age,$family_member) use ($primary_rack_rate_applicable_familiy_members,$slug) { + + if( in_array($slug->slugify($family_member[5]), $primary_rack_rate_applicable_familiy_members)) + { + $max_age['primary_rack_rate_max_age'][] = calculate_days_bw_dates(from_date: $family_member[3])->y; + $max_age['primary_rack_rate_max_count'] = $max_age['primary_rack_rate_max_count'] + 1; + } + else + { + $max_age['additional_rack_rate_max_age'][] = calculate_days_bw_dates(from_date: $family_member[3])->y; + $max_age['additional_rack_rate_max_count'] = $max_age['additional_rack_rate_max_count'] + 1; + } + return $max_age; + }, ['primary_rack_rate_max_age' => [], 'additional_rack_rate_max_age' => [],'primary_rack_rate_max_count' => 0,'additional_rack_rate_max_count' => 0])); + + $get_max_age_or_count = function($relationship,$flag) use ($slug, $primary_rack_rate_applicable_familiy_members, $max_age_and_count) + { + if(in_array($slug->slugify($relationship),$primary_rack_rate_applicable_familiy_members)) + { + return $flag == 'age' ? max($max_age_and_count['primary_rack_rate_max_age']) : $max_age_and_count['primary_rack_rate_max_count']; + } + return $flag == 'age' ? max($max_age_and_count['additional_rack_rate_max_age']) : $max_age_and_count['additional_rack_rate_max_count']; + }; + + + $get_current_member_grid_type = function($relationship) use ($slug, $primary_rack_rate_applicable_familiy_members,$primary_grid_type,$additional_grid_type) + { + if(in_array($slug->slugify($relationship),$primary_rack_rate_applicable_familiy_members)) + { + return ['type' => 'primary','grid_id' => $primary_grid_type]; + } + return ['type' => 'additional','grid_id' => $additional_grid_type]; + }; + // Kint::dump($max_age_and_count);dd(); foreach($family_data as $fkey => $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 + $current_grid_info = $get_current_member_grid_type($member[5]); + $fileArr['grid_info'] = $current_grid_info; //transform as db row column $transformed_familiy_member_data = transform_excel_data_to_db($member,$fileArr); // dd($transformed_familiy_member_data); + //store emp id and emp band and attach it to their familiy members where band is always empty $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['band'] = isset($emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['band']) ? $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['band'] : NULL; $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['si'] = isset($emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['si']) ? $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['si'] : NULL; + //get emp band and si from self and make it available for whole family if(strtolower($transformed_familiy_member_data['relationship']) == 'self') { $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['band'] = $transformed_familiy_member_data['band']; @@ -623,9 +688,17 @@ if (!function_exists('calculate_premimum')) } //end of store emp id and emp band and attach it to their familiy members where band is always empty - $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxcount'] =count($family_data); + $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxcount'] = $get_max_age_or_count($transformed_familiy_member_data['relationship'],'count'); - $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxage'] = $max_age; + $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxage'] = $get_max_age_or_count($transformed_familiy_member_data['relationship'],'age'); + + //set additional_rack_rate_acting_self in emp_details_with_empband_max_age_max_count array + $transformed_familiy_member_data['temp']['additional_rack_rate_acting_self'] = false; + if(!isset($emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['additional_rack_rate_acting_self']) && $current_grid_info['type'] == 'additional') + { + $transformed_familiy_member_data['temp']['additional_rack_rate_acting_self'] = true; + $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['additional_rack_rate_acting_self'] = true; + } //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') @@ -644,15 +717,33 @@ if (!function_exists('calculate_premimum')) $transformed_familiy_member_data['policy_details']['basic_cover_si'] = isset($emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['si']) ? $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['si'] : $transformed_familiy_member_data['policy_details']['basic_cover_si']; - if( $fileArr['id'] == null || $transformed_familiy_member_data['temp']['source'] == 'excel' || ($fileArr['action'] == 'dependent_addition' && in_array($grid_type,[10,11]) && $slab_details['slab_rates'][0]['premium_type'] == 1 && strtolower($transformed_familiy_member_data['relationship']) == 'self'))//if file id is null then data coming from enrollment (from DB) otherwise data coming from xcel, so calculate only data from excel (new entry) note: even data coming from excel for event dependet additon we fetch other dependts from db and calculate premium for whole family - { + // 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', + 'isPrimaryGridType' => $transformed_familiy_member_data['temp']['grid_type'] == 'primary', + 'isAdditionalGridType' => $transformed_familiy_member_data['temp']['grid_type'] == 'additional', + 'isPrimaryGridPremiumTypeSingle' => $slab_details['slab_rates'][0]['premium_type'] == 1, + 'isAdditionalPremiumTypeSingle' => isset($slab_details['additional_slab_info']['slab_rates'][0]['premium_type']) ? ( $slab_details['additional_slab_info']['slab_rates'][0]['premium_type'] == 1) : 0, + 'isCurrentRelationshipSelf' => strtolower($transformed_familiy_member_data['relationship']) == 'self', + 'isBasicCoverCalculatedToCurrentEmployee' => strtolower($transformed_familiy_member_data['policy_details']['basic_cover_si']) != null + ]; + + // same logic for both primay and additional grid type + $primaryGridTypeCondition = $conditions['isCurrentActionDependentAddition'] && $conditions['isPrimaryGridType'] && $conditions['isPrimaryGridPremiumTypeSingle'] && $conditions['isCurrentRelationshipSelf']; + $additionalGridTypeCondition = $conditions['isCurrentActionDependentAddition'] && $conditions['isAdditionalGridType'] && $conditions['isAdditionalPremiumTypeSingle'] && $conditions['isBasicCoverCalculatedToCurrentEmployee']; + + // Final combined condition + if ($conditions['isEmployeeSourceEnrollment'] || $conditions['isEmployeeSourceExcelFile'] || $primaryGridTypeCondition || $additionalGridTypeCondition) { + $transformed_familiy_member_data = premium_calculation_manager($transformed_familiy_member_data,$policy_terms,$slab_details,$default_si); $result[] = $transformed_familiy_member_data; } } } - + // Kint::dump($emp_details_with_empband_max_age_max_count); return $result; } } @@ -702,7 +793,8 @@ 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['temp']['grid_type'] = $actionArr['grid_type']; + $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; $result['temp']['source'] = isset($memArr['temp']['source']) ? $memArr['temp']['source'] : 'excel'; $result['temp']['emp_id'] = isset($memArr['temp']['emp_id']) ? $memArr['temp']['emp_id'] : null; @@ -722,11 +814,12 @@ if (!function_exists('premium_calculation_manager')) { function premium_calculation_manager($emp_data,$policy_terms,$slab_details,$default_si = null) { + // Kint::dump($emp_data); $myLogger = \Config\Services::mylogger(); // grid type // 1 = premium => si - // dd($emp_data); + // Kint::dump($emp_data); //check if the data comes from enrollment (DB) and status is draft then fetch original data of employee from //audit history table then initiate calculation with it. so this data again get updated in emp table @@ -758,14 +851,27 @@ if (!function_exists('premium_calculation_manager')) //gird and calculation start $slug = \Config\Services::slug(); - $grid_type = $slab_details['grid_master']['ui_type']; + $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']; + + //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') + { + $insurer = new InsurerModel(); + $insurer = ($insurer->find($policy_terms['insurer_id'])); + if($insurer['addition_add_day'] == true) + { + $emp_data['policy_details']['date_coverage'] = (new DateTime($emp_data['policy_details']['date_coverage']))->modify('-1 day')->format('Y-m-d'); + } + } + // dd($emp_data); $is_match_found = false; switch ($grid_type) { case "1": //GPA - Sum Insured (SI) * Multiplier $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; $employee_received_band = $emp_data['temp']['band']; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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)) { @@ -774,7 +880,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -785,7 +891,7 @@ if (!function_exists('premium_calculation_manager')) case "2": //GPA - Flat Rate for all SI $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + foreach ($temp_slab_rates as $skey => $slab_value) { if($slab_value['si'] == $employee_received_si) { @@ -794,7 +900,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -804,7 +910,7 @@ if (!function_exists('premium_calculation_manager')) case "3": //GMC - SI $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + foreach ($temp_slab_rates as $skey => $slab_value) { if($slab_value['si'] == $employee_received_si) { @@ -813,7 +919,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -826,7 +932,7 @@ if (!function_exists('premium_calculation_manager')) //GMC - Employees Age band $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; // dd($employee_received_si); - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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)) @@ -837,7 +943,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -847,7 +953,7 @@ if (!function_exists('premium_calculation_manager')) case "5": //GMC - Employees Age + SI $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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)) @@ -857,7 +963,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -867,10 +973,10 @@ if (!function_exists('premium_calculation_manager')) case "6": //GMC - Employees + Dependent Age band $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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') || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + 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']['additional_rack_rate_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']; @@ -878,7 +984,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -889,17 +995,17 @@ if (!function_exists('premium_calculation_manager')) case "7": //GMC - Employees + Dependent Age + SI $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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') || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + 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']['additional_rack_rate_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']); $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; @@ -911,10 +1017,10 @@ if (!function_exists('premium_calculation_manager')) //GMC - SI as per Grade or Band $employee_received_band = $emp_data['temp']['band']; $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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') || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + 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']['additional_rack_rate_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']; @@ -922,7 +1028,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -933,17 +1039,17 @@ if (!function_exists('premium_calculation_manager')) //GMC - Flat Rate for all $employee_received_band = $emp_data['temp']['band']; $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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') || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + if($slab_value['si'] == $employee_received_si && (($slab_value['premium_type'] == 1 && (strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['additional_rack_rate_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']); $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.',''); $is_match_found = true; break; @@ -954,18 +1060,23 @@ if (!function_exists('premium_calculation_manager')) //GMC - Maximum age of Dependents $max_age = $emp_data['temp']['maxage']; $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'].'
'; $emp_data['policy_details']['basic_cover_si'] = null; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + foreach ($temp_slab_rates as $skey => $slab_value) { - - if($slab_value['si'] == $employee_received_si && ($slab_value['age_from'] <= $max_age && $slab_value['age_to'] >= $max_age) && (($slab_value['premium_type'] == 1 && strtolower($emp_data['relationship']) == 'self') || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) + // echo $slab_value['si'].'-'.$slab_value['age_from'].'-'.$slab_value['age_to'].'-'.$max_age.'
'; + if( $slab_value['si'] == $employee_received_si && + ($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']['additional_rack_rate_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']; $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.','')); $is_match_found = true; break; @@ -979,10 +1090,11 @@ if (!function_exists('premium_calculation_manager')) // 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 ($slab_details['slab_rates'] as $skey => $slab_value) + 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') || ($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['premium_type'] == 1 && + ( (strtolower($emp_data['relationship']) == 'self') || ($emp_data['temp']['additional_rack_rate_acting_self']) )) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null) )) { //calculate premium based on count // echo $emp_data['name']; @@ -994,7 +1106,7 @@ if (!function_exists('premium_calculation_manager')) $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; $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']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days']); + $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,'.','')); $is_match_found = true; break; @@ -1009,9 +1121,9 @@ if (!function_exists('premium_calculation_manager')) $employee_relationship = $slug->slugify($emp_data['relationship']); $employee_relationship = ($employee_relationship == 'daughter' || $employee_relationship == 'son' ? $employee_relationship = 'child' : $employee_relationship); $emp_data['policy_details']['basic_cover_si'] = null; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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')) ) + 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']['additional_rack_rate_acting_self'] ) )) ) { $emp_data['policy_details']['basic_cover_si'] = $employee_received_si; @@ -1019,7 +1131,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.','')); $is_match_found = true; break; @@ -1034,9 +1146,9 @@ if (!function_exists('premium_calculation_manager')) $employee_relationship = ($employee_relationship == 'daughter' || $employee_relationship == 'son' ? $employee_relationship = 'child' : $employee_relationship); $emp_data['policy_details']['basic_cover_si'] = null; $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; - foreach ($slab_details['slab_rates'] as $skey => $slab_value) + 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')) ) + 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']['additional_rack_rate_acting_self']) )) ) { $emp_data['policy_details']['basic_cover_si'] = $employee_received_si; @@ -1044,7 +1156,7 @@ if (!function_exists('premium_calculation_manager')) $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; $emp_data['policy_details']['premium'] = $slab_value['premium']; - $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']); + $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,'.','')); $is_match_found = true; break; @@ -1055,13 +1167,13 @@ if (!function_exists('premium_calculation_manager')) default: - $this->myLogger->logme('error',($emp_data['emp_code'].'-'.$emp_data['name'].' - grid type not found')); + $myLogger->logme('error',($emp_data['emp_code'].'-'.$emp_data['name'].' - grid type not found')); } if(!$is_match_found) { $age = calculate_days_bw_dates(from_date: $emp_data['dob'])->y; $log_message = '[ client_policy_id : ' .$emp_data['policy_details']['client_policy_id'].' - '. $emp_data['emp_code'].' - '.$emp_data['name'] .' - '. $emp_data['policy_details']['basic_cover_si'] . ', Age : '. $age.' ]'; - if($slab_details['slab_rates'][0]['premium_type'] == 1) + if($temp_slab_rates[0]['premium_type'] == 1) { $log_message .= ' - skipping, calculating only self..!'; //reset emp si and others policy level data if premium only for self @@ -1085,9 +1197,17 @@ if (!function_exists('premium_calculation_manager')) if (!function_exists('calculate_pro_rata_premimum')) { - function calculate_pro_rata_premimum($premium,$days) + function calculate_pro_rata_premimum($premium,$employee_policy_coverage_days,$policy_coverage_days) { - return (float) number_format(($premium / 365) * $days,2,'.',''); + return (float) number_format(($premium / ($policy_coverage_days) ) * $employee_policy_coverage_days,2,'.',''); + } +} + +if (!function_exists('no_of_days_in_current_fin_year')) +{ + function no_of_days_in_current_fin_year() + { + return true; } } @@ -1226,7 +1346,7 @@ if(!function_exists('get_premium_for_si')) { foreach ($slab_details['slab_rates'] as $skey => $slab_value) { - if($slab_value['si'] == $si_amount && $slab_value['grade'] == $band) + if($slab_value['si'] == $si_amount && $slab_value['grade'] == $band && $slab_value['max_si'] == 0) { return $slab_value['premium']; } @@ -1297,4 +1417,47 @@ if(!function_exists('check_dup_mobileno')) } return array('status' => true); } +} + +if(!function_exists('generate_family_relationship_array')) +{ + function generate_family_relationship_array($family_structure_from_policy_terms) { + $family_relationships = []; + + // Add self and spouse + if ($family_structure_from_policy_terms['self'] > 0) { + $family_relationships[] = 'self'; + } + if ($family_structure_from_policy_terms['spouse'] > 0) { + $family_relationships[] = 'spouse'; + } + + // Add children + if ($family_structure_from_policy_terms['childrens'] > 0) { + $family_relationships[] = 'son'; + $family_relationships[] = 'daughter'; + } + + // Add parents + if ($family_structure_from_policy_terms['parents'] > 0) { + $family_relationships[] = 'father'; + $family_relationships[] = 'mother'; + } + + // Add parents-in-law + if ($family_structure_from_policy_terms['parents-in-law'] > 0) { + $family_relationships[] = 'father-in-law'; + $family_relationships[] = 'mother-in-law'; + } + + // Add either parents or parents-in-law + if ($family_structure_from_policy_terms['either-parents-pil'] > 0) { + $family_relationships[] = 'father'; + $family_relationships[] = 'mother'; + $family_relationships[] = 'father-in-law'; + $family_relationships[] = 'mother-in-law'; + } + + return $family_relationships; +} } \ No newline at end of file diff --git a/app/Models/InsurerModel.php b/app/Models/InsurerModel.php index acda3845..6c5d3617 100644 --- a/app/Models/InsurerModel.php +++ b/app/Models/InsurerModel.php @@ -18,6 +18,7 @@ class InsurerModel extends Model "created_by", "updated_by", "is_active", + "addition_add_day" ]; diff --git a/app/Models/PolicesModel.php b/app/Models/PolicesModel.php index a56af6bc..8fd138a1 100644 --- a/app/Models/PolicesModel.php +++ b/app/Models/PolicesModel.php @@ -39,7 +39,9 @@ class PolicesModel extends Model { $premium_slab_data = null; + $additional_premium_slab_data = null; $grid_type = null; + $additional_grid_type = null; $policyPremium1Model = new PolicyPremium1Model(); $premium_slab_data = $policyPremium1Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1])->findAll(); @@ -48,7 +50,12 @@ class PolicesModel extends Model { // echo '2'; $policyPremium2Model = new PolicyPremium2Model(); - $premium_slab_data = $policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1])->findAll(); + $premium_slab_data = $policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1,'rack_rate_type' => 0])->findAll(); + + //check any additional rack rate configured + $additional_premium_slab_data = $policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1,'rack_rate_type' => 1])->findAll(); + + } if(isset($premium_slab_data[0]['policy_grid_id'])) @@ -57,7 +64,14 @@ class PolicesModel extends Model $policyGridModel = new PolicyGridModel(); $grid_type = $policyGridModel->find($grid_id); } - - return ['slab_rates' => $premium_slab_data,'grid_master' => $grid_type]; + if(isset($additional_premium_slab_data[0]['policy_grid_id'])) + { + $additional_grid_id = $additional_premium_slab_data[0]['policy_grid_id']; + $policyGridModel = new PolicyGridModel(); + $additional_grid_type = $policyGridModel->find($additional_grid_id); + } + + + return ['slab_rates' => $premium_slab_data,'grid_master' => $grid_type,'additional_slab_info' => ['slab_rates' => $additional_premium_slab_data,'grid_master' => $additional_grid_type]]; } } diff --git a/tests/unit/PremiumCalculationTest.php b/tests/unit/PremiumCalculationTest.php new file mode 100644 index 00000000..108358df --- /dev/null +++ b/tests/unit/PremiumCalculationTest.php @@ -0,0 +1,154 @@ +[ + [ 'id' => 322, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 0, 'age_to' => 18, 'grade' => 'A', 'si' => 5000000, 'premium' => 500, 'max_si' => $primary_max_si,'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 323, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 19, 'age_to' => 25, 'grade' => 'B', 'si' => 5000000, 'premium' => 1500, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 26, 'age_to' => 35, 'grade' => 'C', 'si' => 5000000, 'premium' => 2000, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 36, 'age_to' => 45, 'grade' => 'D', 'si' => 5000000, 'premium' => 2500, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 46, 'age_to' => 55, 'grade' => 'E', 'si' => 5000000, 'premium' => 3000, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 56, 'age_to' => 75, 'grade' => 'F', 'si' => 5000000, 'premium' => 3500, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 76, 'age_to' => 85, 'grade' => 'G', 'si' => 5000000, 'premium' => 4000, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 86, 'age_to' => 100, 'grade' => 'G', 'si' => 5000000, 'premium' => 4500, 'max_si' => $primary_max_si, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 86, 'age_to' => 100, 'grade' => 'G', 'si' => $primary_max_si, 'premium' => 15000, 'max_si' => 0, 'premium_type' => $primary_grid_type, 'relationship' => null], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $primary_grid_id, 'age_from' => 86, 'age_to' => 100, 'grade' => 'G', 'si' => 30000000, 'premium' => 30000, 'max_si' => 0, 'premium_type' => $primary_grid_type, 'relationship' => null] + ], + + 'grid_master' => ['id' => 4,'policy_type' => 'GMC','ui_type' => $primary_grid_id,'policy_grid_type' => 'Employees + Relationship + max count','is_dependent_allowed' => 1,'max_dependent_age' => 0,'max_dependent_count' => 1,'basicpay' => 0,'emp_band' => 0], + + 'additional_slab_info' => [ + + 'slab_rates' =>[ + [ 'id' => 322, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 0, 'age_to' => 18, 'grade' => 'A', 'si' => 5000000, 'premium' => 500, 'max_si' => 2500000,'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship ], + [ 'id' => 323, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 19, 'age_to' => 25, 'grade' => 'B', 'si' => 5000000, 'premium' => 1500, 'max_si' => 2000000, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 26, 'age_to' => 35, 'grade' => 'C', 'si' => 5000000, 'premium' => 2000, 'max_si' => 1800000, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 36, 'age_to' => 45, 'grade' => 'D', 'si' => 5000000, 'premium' => 2500, 'max_si' => 150000, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 46, 'age_to' => 55, 'grade' => 'E', 'si' => 5000000, 'premium' => 3000, 'max_si' => 130000, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 56, 'age_to' => 75, 'grade' => 'F', 'si' => 5000000, 'premium' => 3500, 'max_si' => 10, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 76, 'age_to' => 85, 'grade' => 'G', 'si' => 5000000, 'premium' => 4000, 'max_si' => 5, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship], + [ 'id' => 324, 'client_id' => 61, 'client_policy_id' => 63, 'policy_grid_id' => $additional_grid_id, 'age_from' => 86, 'age_to' => 100, 'grade' => 'G', 'si' => 5000000, 'premium' => 4500, 'max_si' => 5, 'premium_type' => $addtional_grid_type, 'relationship' => null,'additional_relationship' => $additional_relationship]], + + 'grid_master' => ['id' => 4,'policy_type' => 'GMC','ui_type' => $additional_grid_id,'policy_grid_type' => 'Employees + Relationship + max count','is_dependent_allowed' => 1,'max_dependent_age' => 0,'max_dependent_count' => 1,'basicpay' => 0,'emp_band' => 0]] + ]; + // Sample family data + $family_details = [ 'TEST001' => + [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, '', '', '', '', '', '', '', '', '',''], + ]; + + // Sample policy terms + $policy_terms = [ + 'family_floater' => true, + 'family_floaters' => [ + 'self' => 1, + 'childrens' => 2, + 'spouse' => 1, + 'either-parents-pil' => 0, + 'parents' => 2, + 'parents-in-law' => 2, + ], + ]; + + $policy_details = ['base_policy' => null,"policy_start_date" => "2023-02-02","policy_end_date" => "2024-02-02","policy_terms" => json_encode($policy_terms)]; + $file = ['id' => null,'client_id' => 10,'policy_id' => 10,'action' => 'inception']; + $data = calculate_premimum($family_details,$policy_details,$slab_details,$file); + $policy_created_count = 0; + echo "\n"; + $result_to_display = []; + foreach ($data as $key => $value) + { + $result_to_display[$key]['emp_code'] = $value['emp_code']; + $result_to_display[$key]['name'] = $value['name'].'('.calculate_days_bw_dates($value['dob'])->y.')'; + $result_to_display[$key]['relation'] = $value['relationship']; + $temp_grid = substr($value['temp']['grid_type'],0,1); + $temp_grid_type = ($temp_grid == 'p' ? $primary_grid_type : $addtional_grid_type); + $temp_grid_type = ($temp_grid_type == 1 ? 'S' : 'I'); + $result_to_display[$key]['premium_type'] = $temp_grid.'#'.$value['temp']['grid_id'].'#'. + ($value['temp']['additional_rack_rate_acting_self'] == true ? 'Y' : 'N' ) .'#'. ($temp_grid_type) ; + $result_to_display[$key]['si'] = $value['policy_details']['basic_cover_si']; + $result_to_display[$key]['premium'] = $value['policy_details']['premium']; + $result_to_display[$key]['policy days'] = calculate_days_bw_dates($policy_details['policy_start_date'],$policy_details['policy_end_date'])->days; + $result_to_display[$key]['no of days'] = $value['policy_details']['days']; + $result_to_display[$key]['rata_premimum'] = $value['policy_details']['rata_premimum']; + $result_to_display[$key]['gst'] = $value['policy_details']['gst']; + + if(!empty($value['policy_details']['premium'])){ $policy_created_count = $policy_created_count + 1; } + } + + TableDisplay::displayTable($result_to_display); + $this->assertTrue(($policy_created_count = 1 || $policy_created_count = 0)); + } + +} + + +class TableDisplay +{ + public static function displayTable(array $data) + { + if (empty($data)) { + echo "No data to display.\n"; + return; + } + + // Calculate column widths + $columns = array_keys($data[0]); + $widths = array_map(function ($col) use ($data) { + $maxWidth = strlen($col); + foreach ($data as $row) { + $maxWidth = max($maxWidth, strlen($row[$col])); + } + return $maxWidth; + }, $columns); + + // Print header + echo str_repeat('-', array_sum($widths) + count($columns) * 3) . PHP_EOL; + foreach ($columns as $i => $col) { + echo str_pad($col, $widths[$i]) . " | "; + } + echo PHP_EOL; + echo str_repeat('-', array_sum($widths) + count($columns) * 3) . PHP_EOL; + + // Print rows + foreach ($data as $row) { + foreach ($columns as $i => $col) { + echo str_pad($row[$col], $widths[$i]) . " | "; + } + + echo PHP_EOL; + } + echo str_repeat('-', array_sum($widths) + count($columns) * 3) . PHP_EOL; + } +} From 00dd88a6eb3f16c8ba476a152e37f9e2eb94aa76 Mon Sep 17 00:00:00 2001 From: velz Date: Mon, 3 Jun 2024 13:56:47 +0530 Subject: [PATCH 2/2] CHANGE_DATE_DAYS_ISSUE&ADDTION_ENDORSEMENT --- app/Controllers/EmployeeRestController.php | 2 +- app/Controllers/EmployeeServiceController.php | 20 ++++++++++++++++++- app/Helpers/excel_util_helper.php | 9 +++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index c31cabe7..b6fbcf86 100644 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -1372,7 +1372,7 @@ public function getAddOnPolicy() if(count($clientPolicy)) { - $band = $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('client_branch_id',$this->request->getGet('client_branch_id'))->where('family_floater_key','self')->get()->getRow()->band; + $band = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('client_branch_id',$this->request->getGet('client_branch_id'))->where('family_floater_key','self')->get()->getRow()->band; $PolicyData = []; foreach ($clientPolicy as $key => $array) { $responce = []; diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index cb6705f4..d1286daa 100644 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -956,7 +956,19 @@ class EmployeeServiceController extends AdminController $this->employeePolicyModel->save($policy_data); $emp_policy_id = $this->employeePolicyModel->getInsertID(); - if($emp_policy_id != 0){ $log_message .= ' with PK ' . $emp_policy_id; } + if($emp_policy_id != 0)//emp policy inserted + { + $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') && $value['temp']['source'] == 'excel') + { + $actions = ($file['action'] == 'dependent_addition' ? 'da' : ($file['action'] == 'addition' ? 'a' : NULL)); + $addition_endorse_data = ['pk' => $emp_policy_id,'group_key' => rand(100000, 999999),'emp_cdoe' => $value['emp_code'],'table_name' => 'employee_polices','actions' => $actions,'field_name' => 'basic_cover_si','old_value' => NULL,'new_value' => $policy_data['basic_cover_si'],'remarks' => 'addition endorsement','file_id' => $file['id'],'created_by' => $file['created_by']]; + $this->employeeEndorsementforAddtionAndDependentAddition($addition_endorse_data); + } + + } else{ $emp_policy_id = $employee_policy[0]['id']; } $this->myLogger->logme('error',$log_message); @@ -965,6 +977,12 @@ class EmployeeServiceController extends AdminController }// for end }//function end + + public function employeeEndorsementforAddtionAndDependentAddition($employee) + { + $this->empEndorsementModel->save($employee); + } + // $employee -> holds existing emp model obj and $policy_data holds new policy changes as array public function employeesSIEnhanceProcessWhileOnbboard(array $employee,array $policy_data,array $file) { diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index f48669a8..07794f45 100644 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -7,14 +7,19 @@ use Kint\Kint; if(!function_exists('calculate_days_bw_dates')) { - function calculate_days_bw_dates(string $from_date = "", string $to_date ="") + function calculate_days_bw_dates(string $from_date = "", string $to_date ="",bool $include_start_date = true) { if($to_date == ""){ $currentDateTime = new DateTime(); } else{ $currentDateTime = new DateTime($to_date); } if($from_date == ""){ $passedDateTime = new DateTime(); } else{ $passedDateTime = new DateTime($from_date); } - return $interval = $currentDateTime->diff($passedDateTime); + $interval = $currentDateTime->diff($passedDateTime); + if ($include_start_date) { + $interval->days += 1; + } + + return $interval; } }