diff --git a/.gitignore b/.gitignore index 3d6e6ab3..1f8cb67a 100644 --- a/.gitignore +++ b/.gitignore @@ -24,5 +24,7 @@ writable/**/*.sqlite vendor/ +build/ composer.lock .env +.phpunit* diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 0c338b67..aaff289e 100644 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -111,15 +111,27 @@ class EmployeeController extends AdminController // print_r($this->request->getPost('upload-action-type')); // die(); // $empServiceController = new EmployeeServiceController(); - // $res = $empServiceController->excelFileFormatValidation(['file_id' => '12']); + // $res = $empServiceController->excelFileFormatValidation(['file_id' => '38']); // dd($res); // $empServiceController = new EmployeeServiceController(); - // $res = $empServiceController->excelFileDataValidation(['file_id' => '12']); + // $res = $empServiceController->excelFileDataValidation(['file_id' => '38']); + // dd($res); + // $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(client_policy_id: '2'); + // dd($existing_famility_details); + // $empServiceController = new EmployeeServiceController(); + // $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '38']); // dd($res); + // $empServiceController = new EmployeeServiceController(); + // $res = $empServiceController->employeesCorrectionProcess(['file_id' => '37']); + // // dd($res); // $empServiceController = new EmployeeServiceController(); - // $res = $empServiceController->employeesOnboard(['file_id' => '34']); + // $res = $empServiceController->employeesOnboardPreprocess(['client_policy_id' => '3']); + // dd($res); + + // $empServiceController = new EmployeeServiceController(); + // $res = $empServiceController->employeeDisembark(['file_id' => '36']); // dd($res); // if(isset($res['error_summary']) && count($res['error_summary'])) @@ -180,14 +192,14 @@ class EmployeeController extends AdminController } - $data['actions'] = ['inception' => 'Inception + Addition + 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']; $data['fileList'] = $this->fileModel ->select(['files.*','up.emp_code','up.first_name','pm.name as policy_name','c.short_name']) ->join('user_profiles up','files.created_by = up.id') ->join('client_policy cp','files.policy_id = cp.id') ->join('policies pm','cp.policy_id = pm.id') ->join('clients c','files.client_id = c.id and files.client_id = cp.client_id') - ->where('files.created_by',8)->orderBy('files.created_at','desc')->findAll(); + ->where('files.created_by',get_session_userid())->orderBy('files.created_at','desc')->findAll(); // dd($data['fileList']);die(); if($this->request->getMethod() == "get") { diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index a64812fa..a095037d 100644 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -14,10 +14,12 @@ use App\Models\ClientModel; use App\Models\ClientPolicyModel; use App\Models\PolicesModel; use App\Models\FileModel; +use App\Models\EmpEndorsementModel; use App\Controllers\Jobs ; use PhpOffice\PhpSpreadsheet\Spreadsheet; +use Kint\Kint; class EmployeeServiceController extends AdminController { @@ -29,9 +31,17 @@ class EmployeeServiceController extends AdminController protected $fileModel; protected $clientPolicyModel; protected $policiesModel; + protected $empEndorsementModel; protected $general_relationships = ['self' => ['name' => 'Self', 'gender' => 'M','age_min' => 18,'age_max' => null], 'spouse' => ['name' => 'Spouse', 'gender' => 'F','age_min' => 18,'age_max' => null], 'son' => ['name' => 'Son', 'gender' => 'M','age_min' => null,'age_max' => 25], 'daughter' => ['name' => 'Daughter', 'gender' => 'F','age_min' => null,'age_max' => 25], 'father' => ['name' => 'Father', 'gender' => 'M','age_min' => 18,'age_max' => null], 'mother' => ['name' => 'Mother', 'gender' => 'F','age_min' => 18,'age_max' => null], 'father-in-law' => ['name' => 'Father in Law', 'gender' => 'M','age_min' => 18,'age_max' => null], 'mother-in-law' => ['name' => 'Mother in Law', 'gender' => 'F','age_min' => 18,'age_max' => null]]; - protected $inception_excel_columns = ['sno' => ['col_idx' => 0,'col_cell_name' => 'A','col_name' => 'S.No','is_mandatory' => true,'data_type' => 'str','format' => null,'allowed_values' => null],'emp_id' => ['col_idx' => 1,'col_cell_name' => 'B','col_name' => 'EMP ID','is_mandatory' => true,'data_type' => 'str','format' => null,'allowed_values' => null],'name_of_emp_dep' => ['col_idx' => 2,'col_cell_name' => 'C','col_name' => 'NAME OF EMP/DEP','is_mandatory' => true,'data_type' => 'str','format' => null,'allowed_values' => null],'dob' => ['col_idx' => 3,'col_cell_name' => 'D','col_name' => 'DOB','is_mandatory' => ['I','A','DA'],'data_type' => 'str','format' => 'd-M-Y','allowed_values' => null,'custom' => 'check_dob_diff','params' => ['row','relationship']],'gender' => ['col_idx' => 4,'col_cell_name' => 'E','col_name' => 'Gender','is_mandatory' => ['I','A','DA'],'data_type' => 'str','format' => null,'allowed_values' => ['M','F']],'relationship' => ['col_idx' => 5,'col_cell_name' => 'F','col_name' => 'RELATIONSHIP','is_mandatory' => ['I','A','DA'],'data_type' => 'str','format' => null,'allowed_values' => null,'custom' => 'check_relationship','params' => ['row','relationship']],'basic_cover_si' => ['col_idx' => 6,'col_cell_name' => 'G','col_name' => 'BASIC COVER SI','is_mandatory' => ['I','A','DA'],'data_type' => 'str','format' => null,'allowed_values' => null],'doj' => ['col_idx' => 7,'col_cell_name' => 'H','col_name' => 'DOJ','is_mandatory' => false,'data_type' => 'str','format' => 'd-M-Y','allowed_values' => null,'custom' => 'check_doj','params' => ['row']],'basic_pay' => ['col_idx' => 8,'col_cell_name' => 'I','col_name' => 'Basic Pay','is_mandatory' => false,'data_type' => 'str','format' => null,'allowed_values' => null,'custom' => 'check_basic_pay','params' => ['row']],'band_grade' => ['col_idx' => 9,'col_cell_name' => 'J','col_name' => 'Band/Grade','is_mandatory' => false,'data_type' => 'str','format' => null,'allowed_values' => null,'custom' => 'check_employee_band','params' => ['row']],'designation' => ['col_idx' => 10,'col_cell_name' => 'K','col_name' => 'Designation','is_mandatory' => false,'data_type' => 'str','format' => null,'allowed_values' => null],'phone' => ['col_idx' => 11,'col_cell_name' => 'L','col_name' => 'Phone','is_mandatory' => false,'data_type' => 'str','format' => null,'allowed_values' => null],'email' => ['col_idx' => 12,'col_cell_name' => 'M','col_name' => 'Email','is_mandatory' => false,'data_type' => 'str','format' => null,'allowed_values' => null],'pre_existing_ailments' => ['col_idx' => 13,'col_cell_name' => 'N','col_name' => 'PRE EXISTING AILMENTS','is_mandatory' => ['I','A','DA'],'data_type' => 'str','format' => null,'allowed_values' => ['0','1']],'change_event' => ['col_idx' => 14,'col_cell_name' => 'O','col_name' => 'Change event','is_mandatory' => ['A','DA','D'],'data_type' => 'str','format' => null,'allowed_values' => null],'date_of_exit' => ['col_idx' => 15,'col_cell_name' => 'P','col_name' => 'Date of exit','is_mandatory' => ['D'],'data_type' => 'str','format' => 'd-M-Y','allowed_values' => null],'reason_for_exit' => ['col_idx' => 16,'col_cell_name' => 'Q','col_name' => 'Reason for exit','is_mandatory' => ['D'],'data_type' => 'str','format' => null,'allowed_values' => null],'action' => ['col_idx' => 17,'col_cell_name' => 'R','col_name' => 'Action','is_mandatory' => true,'data_type' => 'str','format' => null,'allowed_values' => ['I','A','D','DA'] ]]; + protected $inception_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'dob'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'DOB','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_dob_diff','params'=>['row','relationship']],'gender'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Gender','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['M','F']],'relationship'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'RELATIONSHIP','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_relationship','params'=>['row','relationship']],'basic_cover_si'=>['col_idx'=>6,'col_cell_name'=>'G','col_name'=>'BASIC COVER SI','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom' => 'check_si','params' => ['row','policy_terms','slab_details']],'doc'=>['col_idx'=>7,'col_cell_name'=>'H','col_name'=>'Date of Coverage','is_mandatory'=>['A','DA'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'params'=>['row']],'doj'=>['col_idx'=>8,'col_cell_name'=>'I','col_name'=>'DOJ','is_mandatory'=>false,'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null,'custom'=>'check_doj','params'=>['row']],'basic_pay'=>['col_idx'=>9,'col_cell_name'=>'J','col_name'=>'Basic Pay','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_basic_pay','params'=>['row','policy_terms','slab_details']],'band_grade'=>['col_idx'=>10,'col_cell_name'=>'K','col_name'=>'Band/Grade','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom'=>'check_employee_band','params'=>['row','policy_terms','slab_details']],'designation'=>['col_idx'=>11,'col_cell_name'=>'L','col_name'=>'Designation','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'phone'=>['col_idx'=>12,'col_cell_name'=>'M','col_name'=>'Phone','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'email'=>['col_idx'=>13,'col_cell_name'=>'N','col_name'=>'Email','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null],'pre_existing_ailments'=>['col_idx'=>14,'col_cell_name'=>'O','col_name'=>'PRE EXISTING AILMENTS','is_mandatory'=>['I','A','DA'],'data_type'=>'str','format'=>null,'allowed_values'=>['0','1']],'change_event'=>['col_idx'=>15,'col_cell_name'=>'P','col_name'=>'Change event','is_mandatory'=>['A','DA','D'],'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_exit'=>['col_idx'=>16,'col_cell_name'=>'Q','col_name'=>'Date of exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'reason_for_exit'=>['col_idx'=>17,'col_cell_name'=>'R','col_name'=>'Reason for exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null]]; + + protected $deletion_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'change_event'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'Change event','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_exit'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Date of exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'reason_for_exit'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'Reason for exit','is_mandatory'=>['D'],'data_type'=>'str','format'=>null,'allowed_values'=>null]]; + + protected $correction_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'field'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'Field','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>['name','dob','relationship']],'value'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Value','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'date_of_correction'=>['col_idx'=>5,'col_cell_name'=>'F','col_name'=>'Date of Correction','is_mandatory'=>true,'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null],'change_event'=>['col_idx'=>6,'col_cell_name'=>'G','col_name'=>'Change event','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'remarks'=>['col_idx'=>7,'col_cell_name'=>'H','col_name'=>'Remarks','is_mandatory'=>false,'data_type'=>'str','format'=>null,'allowed_values'=>null]]; + + protected $si_enhance_excel_columns = ['sno'=>['col_idx'=>0,'col_cell_name'=>'A','col_name'=>'S.No','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'emp_id'=>['col_idx'=>1,'col_cell_name'=>'B','col_name'=>'EMP ID','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'name_of_emp_dep'=>['col_idx'=>2,'col_cell_name'=>'C','col_name'=>'NAME OF EMP/DEP','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null],'augmented_si'=>['col_idx'=>3,'col_cell_name'=>'D','col_name'=>'Augmented SI','is_mandatory'=>true,'data_type'=>'str','format'=>null,'allowed_values'=>null,'custom' => 'check_si','params' => ['row','policy_terms','slab_details']],'date_of_enhancement'=>['col_idx'=>4,'col_cell_name'=>'E','col_name'=>'Date of SI Enhancement','is_mandatory'=>true,'data_type'=>'str','format'=>'d-M-Y','allowed_values'=>null]]; + public function __construct() { // helper('utility'); @@ -43,6 +53,7 @@ class EmployeeServiceController extends AdminController $this->fileModel = new FileModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->policiesModel = new PolicesModel(); + $this->empEndorsementModel = new EmpEndorsementModel(); } public function excelFileFormatValidation($params) @@ -77,28 +88,21 @@ class EmployeeServiceController extends AdminController $sheet = $spreadsheet->getActiveSheet(); $highestRowAndColumn = $sheet->getHighestRowAndColumn(); - // $highestRow = $sheet->getHighestDataRow(); // 1048576, should be 2 - // $highestColumn = $sheet->getHighestDataColumn(); // L, should be B - // print_r($highestRowAndColumn); - // echo $highestRow;echo ' - ' . $highestColumn; + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); - // $data = array_filter($data); - // echo '
'; 
-        // dd($excel_data);
-        // echo "
";die(); - // foreach ($excel_data as $key => $value) - // { - - // } - - + // dd($this->si_enhance_excel_columns); $columns_to_check = []; if($file['action'] == 'inception'){ $columns_to_check = $this->inception_excel_columns; } + if($file['action'] == 'addition'){ $columns_to_check = $this->inception_excel_columns; } + if($file['action'] == 'dependent_addition'){ $columns_to_check = $this->inception_excel_columns; } + 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; } //check no of columns in excel $total_defined_columns = count($columns_to_check); $excel_columns = ($excel_data[0]); - // var_dump($excel_columns);die(); + // var_dump($total_defined_columns);die(); $excel_columns_count = count($excel_columns); if($total_defined_columns != $excel_columns_count) { @@ -127,7 +131,15 @@ class EmployeeServiceController extends AdminController //start other checks $result = ['error_type' => 1,'error_summary' => [], 'error_data' => [] ]; $keys = array_keys($columns_to_check); - // print_r($keys);die(); + // dd($columns_to_check);die(); + + // get policy and rack details + $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']); + $policy_terms = (array) $policy_terms[0];// convert obj to array + + //get policy slab rates + $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']); + // dd($slab_details); //remove header unset($excel_data[0]); @@ -137,7 +149,12 @@ class EmployeeServiceController extends AdminController //define row wise action/event in temporary variable $current_column_action = null; - if($file['action'] == 'inception'){ $current_column_action = $row[17]; } + if($file['action'] == 'inception'){ $current_column_action = 'I'; } + else if($file['action'] == 'addition'){ $current_column_action = 'A'; } + else if($file['action'] == 'dependent_addition'){ $current_column_action = 'DA'; } + else if($file['action'] == 'deletion'){ $current_column_action = 'D'; } + else if($file['action'] == 'correction'){ $current_column_action = 'C'; } + else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; } //1. avoid empty rows if(check_row_is_empty_or_null($row)) { @@ -147,15 +164,15 @@ class EmployeeServiceController extends AdminController foreach ($row as $col_key => $col) { - $is_mandatory = $this->inception_excel_columns[$keys[$col_key]]['is_mandatory']; - $format = $this->inception_excel_columns[$keys[$col_key]]['format']; - $allowed_values = $this->inception_excel_columns[$keys[$col_key]]['allowed_values']; - $custom_function = isset($this->inception_excel_columns[$keys[$col_key]]['custom']) ? $this->inception_excel_columns[$keys[$col_key]]['custom'] : null; - $binding_params = isset($this->inception_excel_columns[$keys[$col_key]]['params']) ? $this->inception_excel_columns[$keys[$col_key]]['params'] : null; - $column_dispaly_name = $this->inception_excel_columns[$keys[$col_key]]['col_name']; - $column_index = $this->inception_excel_columns[$keys[$col_key]]['col_idx']; - $column_cell = $this->inception_excel_columns[$keys[$col_key]]['col_cell_name']; - + $is_mandatory = $columns_to_check[$keys[$col_key]]['is_mandatory']; + $format = $columns_to_check[$keys[$col_key]]['format']; + $allowed_values = $columns_to_check[$keys[$col_key]]['allowed_values']; + $custom_function = isset($columns_to_check[$keys[$col_key]]['custom']) ? $columns_to_check[$keys[$col_key]]['custom'] : null; + $binding_params = isset($columns_to_check[$keys[$col_key]]['params']) ? $columns_to_check[$keys[$col_key]]['params'] : null; + $column_dispaly_name = $columns_to_check[$keys[$col_key]]['col_name']; + $column_index = $columns_to_check[$keys[$col_key]]['col_idx']; + $column_cell = $columns_to_check[$keys[$col_key]]['col_cell_name']; + $row['current_action'] = $current_column_action; //mandatory check if(is_bool($is_mandatory) && $is_mandatory === true) @@ -172,7 +189,7 @@ class EmployeeServiceController extends AdminController //if is_mandatory is array (action based mandatory check) if($current_column_action != null && is_array($is_mandatory) && in_array(strtoupper(trim($current_column_action)),$is_mandatory)) { - $allowed_actions = $this->inception_excel_columns[$keys[$col_key]]['is_mandatory']; + $allowed_actions = $columns_to_check[$keys[$col_key]]['is_mandatory']; if($col == "" || $col == NULL) { array_push($result['error_summary'],1); @@ -199,7 +216,7 @@ class EmployeeServiceController extends AdminController if($is_mandatory === true && isset($allowed_values) && is_array($allowed_values)) { - if(!in_array(trim($col),$allowed_values)) + if(!in_array(strtolower(trim($col)),$allowed_values)) { array_push($result['error_summary'],3); $result['error_data'][$row_key][$keys[$col_key]]['col_name'] = $column_dispaly_name; //push column name @@ -283,11 +300,16 @@ class EmployeeServiceController extends AdminController return array('error_summary' => [5], 'error_data' => $message); } - $columns_to_check = []; + $columns_to_check = []; if($file['action'] == 'inception'){ $columns_to_check = $this->inception_excel_columns; } + if($file['action'] == 'addition'){ $columns_to_check = $this->inception_excel_columns; } + if($file['action'] == 'dependent_addition'){ $columns_to_check = $this->inception_excel_columns; } + 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; } // get policy and rack details - $policy_terms = $this->clientPolicyModel->getPolicyTermsJson($file['client_id'],$file['policy_id']); + $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']); // dd($policy_terms); $policy_terms = json_decode($policy_terms[0]->policy_terms); $policy_terms = (array) $policy_terms;// convert obj to array @@ -309,139 +331,565 @@ class EmployeeServiceController extends AdminController $employee_data_group_by_family = data_group_by_family($excel_data); // dd($employee_data_group_by_family); - foreach ($employee_data_group_by_family as $emp_id => $family) - { + foreach ($employee_data_group_by_family as $emp_id => $family) + { - - //check name dup within a family - $res = name_dup_check_within_family($family); - if(count($res)) - { - foreach($res as $k => $rowid) + //if action is DA then get all familiy members,transfrom them into excel array, addd data source as db or excel + if($file['action'] == 'dependent_addition') { - array_push($result['error_summary'],7); // dup entry in excel file - $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Twofold Name found within family"; + $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $emp_id,client_id: $file['client_id'],client_policy_id: $file ['policy_id'],emp_status: 'active'); + // dd($existing_famility_details); + //transsform familiy details from db columns to exxcel row with column indexs for checking remaining functionalitites + $existing_famility_details = transform_db_data_to_excel($existing_famility_details,$file); + // dd($existing_famility_details); + $family = array_merge($family,$existing_famility_details); } - } - //check allowed dependent count and relationship conflict within family at policy level - // if($policy_terms['family_floater'] == true) - // { - // dd($policy_terms['family_floaters']); - // } - // die('check'); - $res = check_dependent_conflict($family,$policy_terms); - // dd($res); - if(!$res['status']) - { - foreach($res['error_data'] as $key => $value) + // kint::dump($family);die(); + //check name dup within a family + + if($file['action'] == 'inception' || $file['action'] == 'addition' || $file['action'] == 'dependent_addition') { - array_push($result['error_summary'],$value['code']); - $result['error_data'][$rowid][($value['col_name'])]['error'][] = $value['msg']; + $res = name_dup_check_within_family($family,$file['action']); + // dd($res); + if(count($res)) + { + foreach($res as $k => $rowid) + { + array_push($result['error_summary'],7); // dup entry in excel file + $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Twofold Name found within family"; + } + } + } + + + if($file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'inception') + { + $res = check_dependent_conflict($family,$policy_terms,$file['action']); + // dd($res); + if(!$res['status']) + { + foreach($res['error_data'] as $key => $value) + { + array_push($result['error_summary'],$value['code']); + $result['error_data'][ $value['row_id'] ][($value['col_name'])]['error'][] = $value['msg']; + } + } + } + + //check dup with empid and name with db + $res = name_and_empid_check_in_db($family,$file); + // dd($file); + // echo '
'; + // print_r($res); + if(count($res['del'])) + { + foreach($res['del'] as $k => $rowid) + { + array_push($result['error_summary'],10); //record not avail for deletion + $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Record Not found "; + } + } + if(count($res['i'])) + { + foreach($res['i'] as $k => $rowid) + { + array_push($result['error_summary'],9); //dup entry + $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Record already exists"; + } } } - //check dup with empid and name with db - $res = name_and_empid_check_in_db($family,$file['client_id'],$file['policy_id']); - // print_r($result); - // echo '
'; - // print_r($res); - if(count($res['del'])) - { - foreach($res['del'] as $k => $rowid) - { - array_push($result['error_summary'],10); //record not avail for deletion - $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Record Not found for deletion"; - } - } - if(count($res['i'])) - { - foreach($res['i'] as $k => $rowid) - { - array_push($result['error_summary'],9); //dup entry - $result['error_data'][$rowid]['name_of_emp_dep']['error'][] = "Record already exists"; - } - } - } - - // dd($result); - if(isset($result['error_summary']) && count($result['error_summary'])) - { - $result['error_summary'] = array_count_values($result['error_summary']); - $status = 'failed'; - $failure_reason = ((json_encode($result))); - $this->fileModel->where('id', $file_id)->set(['status' => $status,'reason' => $failure_reason])->update(); - $this->myLogger->logme("error",'{file_id} uploaded failed',['file_id' => $file_id]); - //return $this->respond(['dataStatus' => true,'code' => 404,'data' => 'file upload failed with errors'], 200); - // dd($failure_reason); - - - - } - return $result; + // s($result); + // die(); + if(isset($result['error_summary']) && count($result['error_summary'])) + { + $result['error_summary'] = array_count_values($result['error_summary']); + $status = 'failed'; + $failure_reason = ((json_encode($result))); + $this->fileModel->where('id', $file_id)->set(['status' => $status,'reason' => $failure_reason])->update(); + $this->myLogger->logme("error",'{file_id} uploaded failed',['file_id' => $file_id]); + //return $this->respond(['dataStatus' => true,'code' => 404,'data' => 'file upload failed with errors'], 200); + // dd($failure_reason); + } + else if($file['action'] == 'deletion') + { + //proceed next data level validation in JOB queue + $job_details = new Jobs(); + + $r = Jobs::addJob(['job_name' => 'employeeDisembark','payload' => ['file_id' => $file_id]]); + } + else if ($file['action'] == 'si_enhancement') + { + //proceed next data level validation in JOB queue + $job_details = new Jobs(); + + $r = Jobs::addJob(['job_name' => 'employeesSIEnhanceProcess','payload' => ['file_id' => $file_id]]); + } + else if ($file['action'] == 'correction') + { + //proceed next data level validation in JOB queue + $job_details = new Jobs(); + + $r = Jobs::addJob(['job_name' => 'employeesCorrectionProcess','payload' => ['file_id' => $file_id]]); + } + else //inception OR addition OR dependent addition + { + //proceed next data level validation in JOB queue + $job_details = new Jobs(); + + $r = Jobs::addJob(['job_name' => 'employeesOnboardPreprocess','payload' => ['file_id' => $file_id]]); + } + return $result; } - - public function employeesOnboard($params) + // calculate data points and premium + public function employeesOnboardPreprocess($params) { helper('excel_util_helper'); + // dd($params); + if(isset($params['file_id']))//handle data from excel to inception + { + //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); + } + + $columns_to_check = []; + if($file['action'] == 'inception'){ $columns_to_check = $this->inception_excel_columns; } + + // get policy and rack details + $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']); + $policy_terms = (array) $policy_terms[0];// convert obj to array + // $policy_terms = json_decode($policy_terms[0]->policy_terms); + + // dd($policy_terms); + //get excel data + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $sheet = $spreadsheet->getActiveSheet(); + + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + unset($excel_data[0]); + + + //get policy slab rates + $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']); + // dd($slab_details); + + $employee_data_group_by_family = data_group_by_family($excel_data); + // dd($employee_data_group_by_family); + foreach ($employee_data_group_by_family as $emp_id => $family) + { + + //if action is DA then get all familiy members,transfrom them into excel array, addd data source as db or excel + if($file['action'] == 'dependent_addition') + { + $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(emp_code: $emp_id,client_id: $file['client_id'],client_policy_id: $file ['policy_id'],emp_status: 'active'); + // dd($existing_famility_details); + //transsform familiy details from db columns to exxcel row with column indexs for checking remaining functionalitites + $existing_famility_details = transform_db_data_to_excel($existing_famility_details,$file); + // Kint::dump($existing_famility_details); + $family = array_merge($family,$existing_famility_details); + // dd($family); + } + + // Kint::dump($family);die(); + $data = calculate_premimum($family,$policy_terms,$slab_details,$file); + // dd($data); + $employee_data_group_by_family[$emp_id] = $data; + //$this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]); + } + } + else if(isset($params['client_policy_id']))//handle data from enrollment to inception + { + $client_policy_id = $params['client_policy_id']; + //get client id + $client_id = ($this->clientPolicyModel->select('client_id')->find($client_policy_id))['client_id']; + // dd($client_id); + + // get policy and rack details + $policy_terms = $this->clientPolicyModel->getPolicyDetails($client_id,$client_policy_id); + $policy_terms = (array) $policy_terms[0];// convert obj to array + + //get policy slab rates + $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($client_policy_id,$client_id); + + $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(client_id: $client_id,client_policy_id: $client_policy_id,emp_status: 'draft'); + + $file = ['id' => null,'client_id' => $client_id,'policy_id' => $client_policy_id,'action' => 'inception']; + // dd($this->employeeModel->getLastQuery()); + // Kint::dump($existing_famility_details);die(); + $employee_data_group_by_family = data_group_by_family($existing_famility_details,$data_source = 'db'); + // dd($employee_data_group_by_family); + 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); + // dd($data); + $employee_data_group_by_family[$emp_id] = $data; + $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]); + } + + // dd($employee_data_group_by_family); + } + + + // die(); + return ($employee_data_group_by_family); + + } + + //deletion of emp + public function employeeDisembark($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); - } - $columns_to_check = []; - if($file['action'] == 'inception'){ $columns_to_check = $this->inception_excel_columns; } - - // get policy and rack details - $policy_terms = $this->clientPolicyModel->getPolicyTermsJson($file['client_id'],$file['policy_id']); - // dd($policy_terms); - $policy_terms = json_decode($policy_terms[0]->policy_terms); - $policy_terms = (array) $policy_terms;// convert obj to array - // dd($policy_terms); - //get excel data - $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); $sheet = $spreadsheet->getActiveSheet(); $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + unset($excel_data[0]); + // dd($excel_data); + $endorsement_data = []; + //make closure funciton which is going to use only by this method + $endorsement = function($data,$file,$row){ + + //for emp table + $this->empEndorsementModel->save(['pk' => (int)$data['emp_id'],'emp_code' => $data['emp_code'],'table_name' => 'employees','actions' => 'd','name' => $data['name'],'field_name' => 'emp_status','old_value' => $data['emp_status'],'new_value' => 'deactivate','created_by' => $file['created_by'],'remarks' => 'general deletion']); + // dd( $this->empEndorsementModel->getLastQuery()); + // $this->empEndorsementModel->save(['pk' => (int)$data['emp_id'],'emp_code' => $data['emp_code'],'table_name' => 'employees','actions' => 'd','name' => $data['name'],'field_name' => 'change_event','old_value' => $data['change_event'],'new_value' => 'deletion','created_by' => $file['created_by'],'remarks' => 'general deletion']); + + // 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']); + $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']); + $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']); + }; + //iterate each row + foreach ($excel_data as $col_key => $row) + { + if(check_row_is_empty_or_null($row)) + { + break; + } + // echo '
START- ' . $row[2]; + $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_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)) + { + 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'); + // 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']; + + } + } + + } + } + + // print_r($endorsement_data); + + } + return $endorsement_data; + + } + + //correction of emp + public function employeesCorrectionProcess($params) + { + helper('excel_util_helper'); + //get file name + $file_id = $params['file_id']; + $file = $this->fileModel->find($file_id); + + $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name']; + + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $sheet = $spreadsheet->getActiveSheet(); + + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + + unset($excel_data[0]); + // dd($excel_data); + + //iterate each row + foreach ($excel_data as $col_key => $row) + { + if(check_row_is_empty_or_null($row)) + { + break; + } + // echo '
START- ' . $row[2]; + + $field_name = $row[3]; + $field_value = ($field_name == 'dob' ? change_date_format($row[4],'d-M-Y','Y-m-d') : $row[4] ); + + + $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first(); + $existing_endorsements = $this->empEndorsementModel->where('actions','c') + ->where('table_name','employees') + ->where('endorsement_id is null') + ->where('emp_code',$employee['emp_code']) + ->where('name',$employee['name']) + ->where('field_name',$field_name) + ->findAll(); + // dd($existing_endorsements); + //make entry in endorsement table + if(!count($existing_endorsements)) + { + $this->empEndorsementModel->save(['pk' => (int)$employee['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employees','actions' => 'c','name' => $employee['name'],'field_name' => $field_name,'old_value' => $employee[ $field_name ],'new_value' => $field_value,'created_by' => $file['created_by'],'remarks' => $row[7],'date_of_correction' => change_date_format($row[5],'d-M-Y','Y-m-d')]); + } + + + + + } + return true; + } + + + //enhance of emp + public function employeesSIEnhanceProcess($params) + { + helper('excel_util_helper'); + //get file name + $file_id = $params['file_id']; + $file = $this->fileModel->find($file_id); + + $file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name']; + + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + $sheet = $spreadsheet->getActiveSheet(); + + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); + + $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + + unset($excel_data[0]); + // dd($excel_data); + //get policy slab rates $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']); - dd($slab_details); - - $employee_data_group_by_family = data_group_by_family($excel_data); - dd($employee_data_group_by_family); - foreach ($employee_data_group_by_family as $emp_id => $family) + //iterate each row + // dd($slab_details); + foreach ($excel_data as $col_key => $row) { - calculate_premimum($family,$policy_terms,$slab_details,$file); + if(check_row_is_empty_or_null($row)) + { + break; + } + // echo '
START- ' . $row[2]; + $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first(); + $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first(); + + $existing_endorsements = $this->empEndorsementModel->where('actions','si') + ->where('table_name','employee_polices') + ->where('endorsement_id is null') + ->where('emp_code',$employee['emp_code']) + ->where('name',$employee['name']) + ->where('field_name','basic_cover_si') + ->findAll(); + // dd($existing_endorsements); + //make entry in endorsement table + if(!count($existing_endorsements)) + { + + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['si'] == $row[3]) + { + $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' => $row[3],'created_by' => $file['created_by'],'remarks' => 'general si enhancement']); + $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']); + $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' => change_date_format($row[4],'d-M-Y','Y-m-d'),'created_by' => $file['created_by'],'remarks' => 'general si enhancement']); + break; + } + } + } + + + + } - - + return true; } + // insert or update in db for inception addition depent addition + public function employeesOnboardProcess($params) + { + $familiy_data = $params['familiy_data']; + $file = $params['file']; + // dd($file); + // print_r($familiy_data); + // echo '------------------------------------------------------'; + + + + foreach($familiy_data as $fkey => $value) + { + if($file['id'] == null || ($value['temp']['source'] == 'excel' || (in_array($value['temp']['grid_type'],[10,11]) && strtolower($value['relationship']) == 'self'))) //insert data come from excel and from db + { + + $employee = $this->employeeModel->checkExistingEmp($value); + $policy_data = $value['policy_details']; + unset($value['policy_details']); + unset($value['temp']); + + if($file['id'] == null && (strtolower($value['relationship']) == 'self' && $value['temp']['source'] == 'db' && $value['temp']['emp_id'] != null && $value['temp']['emp_policy_id'] != null)) + { + //check existing si and new si + $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first(); + if($employee_policy['basic_cover_si'] != $policy_data['basic_cover_si']) + { + + //check any existing si enhancement pending + $existing_endorsements = $this->empEndorsementModel->where('actions','si') + ->where('table_name','employee_polices') + ->where('endorsement_id is null') + ->where('emp_code',$employee['emp_code']) + ->where('name',$employee['name']) + ->where('field_name','basic_cover_si') + ->findAll(); + + if(!count($existing_endorsements)) + { + + $slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']); + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['si'] == $policy_data['si']) + { + //add new premimum details in endorsement table + $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['premium'],'created_by' => $file['created_by'],'remarks' => 'da auto si enhancement']); + $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' => 'da auto si enhancement']); + $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' => ($policy_data['date_coverage']),'created_by' => $file['created_by'],'remarks' => 'da auto si enhancement']); + break; + } + } + } + + + + + } + + break; + }// end of self employee si enhance ment + + + //save employee table + if(count($employee)) + { + $value['updated_by'] = $file['created_by']; + $value['id'] = $employee[0]['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'])); + } + else + { + $value['emp_status'] = 'active'; + $value['created_by'] = $file['created_by']; + $log_message = 'Insert Employee- '.$value['name'] .'('.$value['emp_code'] .') with PK '; + // $this->myLogger->logme('error',('Insert - ' . $value['emp_code'] .' - '. $value['name'])); + } + + $this->employeeModel->save($value); + $emp_id = $this->employeeModel->getInsertID(); + if($emp_id != 0){ $log_message .= $emp_id; } + else{ $emp_id = $employee[0]['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'] = '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']; + } + 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'] = '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']; + } + + $this->employeePolicyModel->save($policy_data); + $emp_policy_id = $this->employeePolicyModel->getInsertID(); + if($emp_policy_id != 0){ $log_message .= ' with PK ' . $emp_policy_id; } + else{ $emp_policy_id = $employee_policy[0]['id']; } + + $this->myLogger->logme('error',$log_message); + + }// if end + }// for end + }//function end + } diff --git a/app/Controllers/LoginController.php b/app/Controllers/LoginController.php index 1dc8fb89..69977901 100644 --- a/app/Controllers/LoginController.php +++ b/app/Controllers/LoginController.php @@ -45,18 +45,18 @@ class LoginController extends BaseController $session_data = ['isLoggedIn' => True ,'userid' => $user->id]; set_session_data($session_data); log_message('error', 'Set The UserId : `'. $user->id .'` in Session'); - log_message('error', 'Is User Login Sucessfully'); + log_message('error', 'User Login Sucessfully'); $this->getUserDeviceInfo($user->id); return redirect()->to(base_url('/dashboard/view')); }else{ - log_message('error', 'Is User Not Activate'); - session()->setFlashdata('error', 'Is User Not Activate'); + log_message('error', 'User Not Activate'); + session()->setFlashdata('error', 'User Not Activate'); return redirect()->to(base_url('login')); } }else{ - log_message('error', 'Is User Not Register'); - session()->setFlashdata('error', 'Is User Not Register'); + log_message('error', 'User Not Found'); + session()->setFlashdata('error', 'User Not Found'); return redirect()->to(base_url('login')); } } diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index ce67373e..e3b2d2f6 100644 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -2,6 +2,20 @@ use App\Models\EmployeeModel; + +if(!function_exists('calculate_days_bw_dates')) +{ + function calculate_days_bw_dates(string $from_date = "", string $to_date ="") + { + 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); + } +} + if (!function_exists('check_columns_name')) { function check_columns_name($definedColumns,$excelColumns) { @@ -11,7 +25,7 @@ if (!function_exists('check_columns_name')) { $definedColIdx = $definedCol['col_idx']; $definedColName = $definedCol['col_name']; - if (strtolower(trim($excelColumns[$definedColIdx])) !== strtolower($definedColName)) { + if (strtolower(strip_tags(trim($excelColumns[$definedColIdx]))) !== strtolower($definedColName)) { $mismatchedColumns[] = "Column order conflict. Column order no ".($definedColIdx + 1)." expected : ".$definedColName." and received : ".$excelColumns[$definedColIdx]."
"; } } @@ -55,23 +69,29 @@ if(!function_exists('check_relationship')) { function check_relationship($row,$relationship) { - // print_r($col);print_r($relationship); + // print_r($relationship); // echo '
'; - if($row[17] != null && in_array(strtoupper($row[17]), ['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']))// check rule only of action column data available { if($row[5] != null && $row[4] != null)//$row[5] = relationship $row[4] = Gender { $slug = \Config\Services::slug(); $col = $slug->slugify($row[5]); - // echo $col;die(); + // echo $col;//die(); if($col != 'self' && $col != 'spouse') { - if($relationship[ $col ]['gender'] != $row[4]) + if(!isset($relationship[ $col ])) + { + return array('status' => false,'error' => 'Rule Conflict: Unknown Relationship'); + } + + if(isset($relationship[ $col ]) && $relationship[ $col ]['gender'] != $row[4]) { $error = "Gender relationship conflict: Expected ".$relationship[ $col ]['gender'].", received $row[4]"; return array('status' => false,'error' => $error); } + } return array('status' => true); } @@ -90,12 +110,12 @@ if(!function_exists('check_doj')) function check_doj($row) { - if($row[17] != null && in_array(strtoupper($row[17]), ['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']))// check rule only of action column data available { $slug = \Config\Services::slug(); $relationship = $slug->slugify($row[5]); // echo $relationship;echo $row[7]; - if($relationship == 'self' && $row[7] == "") { return array('status' => false,'error' => "DOJ mandantory for self"); } + if($relationship == 'self' && $row[8] == "") { return array('status' => false,'error' => "DOJ mandantory for self"); } return array('status' => true); } else { return array('status' => true); } // in else condition no need to check rule, just return true @@ -105,14 +125,52 @@ if(!function_exists('check_doj')) if(!function_exists('check_employee_band')) { - function check_employee_band($row) + function check_employee_band($row,$policy_terms,$slab_details) { - if($row[17] != null && in_array(strtoupper($row[17]), ['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']))// check rule only of action column data available { + $is_emp_band_needed = $slab_details['grid_master']['emp_band']; $slug = \Config\Services::slug(); $relationship = $slug->slugify($row[5]); // echo $relationship;echo $row[7]; - if($relationship == 'self' && $row[9] == "") { return array('status' => false,'error' => "Band mandantory for self"); } + if($is_emp_band_needed && $relationship == 'self' && $row[10] == "") { return array('status' => false,'error' => "Band mandantory for self"); } + else if($is_emp_band_needed && $relationship == 'self' && $row[10] != "") + { + $received_grade = $row[10]; + $found = false; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['grade'] == $received_grade) + { + $found = true; + break; + } + } + if(!$found) { return array('status' => false,'error' => "Emp band/Grade not found"); } + } + return array('status' => true); + }else { return array('status' => true); } // in else condition no need to check rule, just return true + } +} + + +if(!function_exists('check_si')) +{ + function check_si($row,$policy_terms,$slab_details) + { + if($row['current_action'] != null && in_array(strtoupper($row['current_action']), ['I','A','DA','SI']))// check rule only of action column data available + { + $received_si = $row['current_action'] == 'SI' ? $row[3] : $row[6]; + $found = false; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['si'] == $received_si) + { + $found = true; + break; + } + } + if(!$found) { return array('status' => false,'error' => "Sum insured not found"); } return array('status' => true); }else { return array('status' => true); } // in else condition no need to check rule, just return true } @@ -120,14 +178,15 @@ if(!function_exists('check_employee_band')) if(!function_exists('check_basic_pay')) { - function check_basic_pay($row) + function check_basic_pay($row,$policy_terms,$slab_details) { - if($row[17] != null && in_array(strtoupper($row[17]), ['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']))// check rule only of action column data available { + $is_basic_pay_needed = $slab_details['grid_master']['basicpay']; $slug = \Config\Services::slug(); $relationship = $slug->slugify($row[5]); // echo $relationship;echo $row[7]; - if($relationship == 'self' && $row[8] == "") { return array('status' => false,'error' => "Basic pay mandantory for self"); } + if($is_basic_pay_needed && $relationship == 'self' && $row[9] == "") { return array('status' => false,'error' => "Basic pay mandantory for self"); } return array('status' => true); }else { return array('status' => true); } // in else condition no need to check rule, just return true } @@ -138,7 +197,7 @@ if (!function_exists('check_dob_diff')) { function check_dob_diff($row,$relationships) { // echo 'called'; - if($row[17] != null && in_array(strtoupper($row[17]), ['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']))// check rule only of action column data available { if($row[3] != null && $row[5] != null) { @@ -150,8 +209,8 @@ if (!function_exists('check_dob_diff')) $slug = \Config\Services::slug(); $relationship = $slug->slugify($row[5]); - $age_min = $relationships[$relationship]['age_min']; - $age_max = $relationships[$relationship]['age_max']; + $age_min = isset($relationships[$relationship]['age_min']) ? $relationships[$relationship]['age_min'] : NULL; + $age_max = isset($relationships[$relationship]['age_max']) ? $relationships[$relationship]['age_max'] : NULL; // echo $relationship.','.$age_min.'-'.$age_max; if($age_min !== null && $age_min > $interval->y) { @@ -173,14 +232,21 @@ if (!function_exists('check_dob_diff')) if (!function_exists('data_group_by_family')) { - function data_group_by_family($emp_data) + function data_group_by_family($emp_data,$data_source = 'excel') { $result = []; foreach ($emp_data as $rkey => $row) { - if(!check_row_is_empty_or_null($row)) + if($data_source == 'excel') { - $result[$row[1]][] = $row; + if(!check_row_is_empty_or_null($row)) + { + $result[$row[1]][] = $row; + } + + }else if($data_source = 'db') + { + $result[$row['emp_code']][] = $row; } } @@ -216,34 +282,38 @@ if (!function_exists('name_dup_check_within_family')) if (!function_exists('name_and_empid_check_in_db')) { - function name_and_empid_check_in_db($family_data,$client_id,$policy_id) + function name_and_empid_check_in_db($family_data,$actionArr) { $employeeModel = new EmployeeModel(); $result = ['del' => [],'i' => []]; + $client_id = $actionArr['client_id']; + $policy_id = $actionArr['policy_id']; + $current_action = $actionArr['action']; + foreach ($family_data as $rkey => $row) { $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.client_policy",$policy_id) + ->where("cp.policy_id",$policy_id) ->where("employees.client_id",$client_id) - ->where("ep.client_id",$client_id) - ->like('name',$row[2],'both')->like('emp_code',$row[1],'both') + // ->where("ep.client_id",$client_id) + ->where('name',$row[2])->where('emp_code',$row[1]) ->findAll(); - - if(count($res)) - { - if($row[17] == 'D') + // dd($employeeModel); + + + if(($current_action == 'deletion' || $current_action == 'correction' || $current_action == 'si_enhancement') && !count($res)) { array_push($result['del'],$row[0]); } - else + if(($current_action == 'inception' || $current_action == 'dependent_addition' || $current_action == 'addition') && count($res)) { array_push($result['i'],$row[0]); } - } + } return $result; @@ -252,7 +322,7 @@ if (!function_exists('name_and_empid_check_in_db')) if (!function_exists('check_dependent_conflict')) { - function check_dependent_conflict($family_data,$policy_terms) + function check_dependent_conflict($family_data,$policy_terms,$actionArr) { $result = ['status' => true]; @@ -268,24 +338,26 @@ if (!function_exists('check_dependent_conflict')) $allowed_parent_in_laws_count = 0; $received_parent_in_laws_count = 0; $overall_famility_relationships = []; + $self_emp_row_id = 0; $temp_counts = [2,3,4,5,6,7,8,9,10]; //temp variable for check relation repetaed count $slug = \Config\Services::slug(); - if($policy_terms['family_floater'] == true) - { + // if($policy_terms['family_floater'] == true) + // { // $temp_string = implode(" ",$policy_terms['family_floaters']); $temp = $policy_terms['family_floaters']; - $allowed_child_count = count(preg_grep('/child/',$temp)); - $allowed_spouse_count = count(preg_grep('/spouse/',$temp)); - $allowed_parents_count = count(preg_grep('/parent[12]/',$temp)); - $allowed_parent_in_laws_count = count(preg_grep('/parent_in_law[12]/',$temp)); - + $allowed_child_count = $temp['childrens']; + $allowed_spouse_count = $temp['spouse']; + $allowed_adults = $temp['either-parents-pil']; + $allowed_parents_count = $temp['either-parents-pil'] == 0 ? $temp['parents'] : 0; + $allowed_parent_in_laws_count = $temp['either-parents-pil'] == 0 ? $temp['parents-in-law'] : 0; + // dd($allowed_adults == 0); foreach ($family_data as $key => $row) { $relationship = $slug->slugify($row[5]); - if($row[17] != 'D' && $relationship != 'son' && $relationship != 'daughter') + if($actionArr != 'deletion' && $relationship != 'son' && $relationship != 'daughter') { array_push($overall_famility_relationships, $relationship); } @@ -294,6 +366,7 @@ if (!function_exists('check_dependent_conflict')) if($relationship == 'self') { $self_gender = $row[4]; + $self_emp_row_id = $row[0]; } if($relationship == 'spouse') { @@ -317,7 +390,7 @@ if (!function_exists('check_dependent_conflict')) // print_r($overall_famility_relationships); // echo '
'; - if($row[17] != 'D') + if($actionArr != 'deletion') { $repeated_relationships_count = array_count_values($overall_famility_relationships); // print_r($repeated_relationships_count); @@ -326,7 +399,7 @@ if (!function_exists('check_dependent_conflict')) if(is_array($repeated_count) && count($repeated_count)) { $result['status'] = false; - $result['error_data'][] = ['code' => 13,'col_name' => 'relationship','msg' => 'Rule conflict: Twofold relationship found within family']; + $result['error_data'][] = ['code' => 13,'col_name' => 'relationship','msg' => 'Rule conflict: Twofold relationship found within family','row_id' => $family_data[0][0]]; } } // print_r($repeated_count); @@ -340,24 +413,47 @@ if (!function_exists('check_dependent_conflict')) if($self_gender == $spouse_gender) { $result['status'] = false; - $result['error_data'][] = ['code' => 4,'col_name' => 'gender','msg' => 'Rule conflict: Self and Spouse cannot be same gender']; + $result['error_data'][] = ['code' => 4,'col_name' => 'gender','msg' => 'Rule conflict: Self and Spouse cannot be same gender','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])]; } - if(($allowed_spouse_count < $received_spouse_count) || ($allowed_child_count < $received_child_count) || ($allowed_parents_count < $received_parents_count) || ($allowed_parent_in_laws_count < $received_parent_in_laws_count)) + + if(($allowed_spouse_count < $received_spouse_count) || ($allowed_child_count < $received_child_count) ) { $result['status'] = false; - $result['error_data'][] = ['code' => 12,'col_name' => null,'msg' => 'Rule conflict: Dependent count greater than allowed dependent count'];//dependent count mismatch + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Dependent count greater than allowed dependent count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch } - - } - else - { - if(count($family_data) > 1) + // || ($allowed_parents_count < $received_parents_count) || ($allowed_parent_in_laws_count < $received_parent_in_laws_count) + if($allowed_adults == 1 && $received_parents_count && $received_parent_in_laws_count ) { - $result['status'] = false; - $result['error_data'][] = ['code' => 11,'col_name' => null,'msg' => 'Rule conflict: Dependents not allowed'];//dependents not allowed + $result['status'] = false; + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Parents and Parents in law both not allowed','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])]; + + if((2 < $received_parents_count) || (2 < $received_parent_in_laws_count)) + { + $result['status'] = false; + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Dependent count greater than allowed dependent count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch + } } - } + + // var_dump($allowed_adults == 0); + // dd($allowed_adults == 0 && (($allowed_parents_count < $received_parents_count) || ($allowed_parent_in_laws_count < $received_parent_in_laws_count))); + if($allowed_adults == 0 && (($allowed_parents_count < $received_parents_count) || ($allowed_parent_in_laws_count < $received_parent_in_laws_count) )) + { + // dd($allowed_adults); + $result['status'] = false; + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Dependent count greater than allowed dependent count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch + } + + + // } + // else + // { + // if(count($family_data) > 1) + // { + // $result['status'] = false; + // $result['error_data'][] = ['code' => 11,'col_name' => 'sno','msg' => 'Rule conflict: Dependents not allowed','row_id' => $row[0]];//dependents not allowed + // } + // } return $result; @@ -368,7 +464,12 @@ if (!function_exists('generate_relationship_code')) { function generate_relationship_code($arr) { - + $gender = ['M' => 1,'F' => 2]; + $relationship = ['self' => 1,'spouse' => 2,'son' => 3,'daughter' => 4,'father' => 5,'mother' => 6,'father-in-law' => 7,'mother-in-law' => 8]; + $slug = \Config\Services::slug(); + $relationship_code = $slug->slugify($arr['relationship']); + $relationship_code = $gender[ $arr['gender'] ] . $relationship[ $relationship_code ] ; + return $relationship_code; } } @@ -376,55 +477,114 @@ if (!function_exists('calculate_premimum')) { function calculate_premimum($family_data,$policy_terms,$slab_details,$fileArr) { +// + // dd($fileArr); // grid type // 1 = premium => si + $result = []; $grid_type = $slab_details['grid_master']['ui_type']; + $fileArr['grid_type'] = $grid_type; + //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)); - if($grid_type != 10 && $grid_type != 11) // 10 & 11 for overall - { foreach($family_data as $fkey => $member) { //transform as db row column - $transformed_familiy_member_data = transform_excel_data_to_db($member); + $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'] = null; + 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']; + } + + //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'] ]['maxage'] = $max_age; + //generate relationship code - $transformed_familiy_member_data = generate_relationship_code($transformed_familiy_member_data); + if($transformed_familiy_member_data['temp']['action'] != 'D' && $transformed_familiy_member_data['temp']['action'] != 'C' && $transformed_familiy_member_data['temp']['action'] != 'SI') + { + $transformed_familiy_member_data['relationship_code'] = generate_relationship_code($transformed_familiy_member_data); + } + //calculate primimum based on grid type - $transformed_familiy_member_data = calculation_manager($transformed_familiy_member_data,$policy_terms,$slab_details); + if($transformed_familiy_member_data['temp']['action'] != 'D' && $transformed_familiy_member_data['temp']['action'] != 'C' && $transformed_familiy_member_data['temp']['action'] != 'SI') + { + + //before call premium_calculation_manager attach band,max age and max count into the array temporarly for grid 9,10 and 11 + $transformed_familiy_member_data['temp']['band'] = $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['band']; + $transformed_familiy_member_data['temp']['maxage'] = $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxage']; + $transformed_familiy_member_data['temp']['maxcount'] = $emp_details_with_empband_max_age_max_count[ $transformed_familiy_member_data['emp_code'] ]['maxcount']; + + if( $fileArr['id'] == null || (in_array($grid_type,[10,11]) || $transformed_familiy_member_data['temp']['source'] == 'excel'))//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 + { + $transformed_familiy_member_data = premium_calculation_manager($transformed_familiy_member_data,$policy_terms,$slab_details); + + $result[] = $transformed_familiy_member_data; + } + } } - } + + return $result; } } if (!function_exists('transform_excel_data_to_db')) { - function transform_excel_data_to_db($familyArr,$actionArr) + function transform_excel_data_to_db($memArr,$actionArr) { - if($action == 'inception' || $action == 'addition') + + $current_column_action = null; + if($actionArr['action'] == 'inception'){ $current_column_action = 'I'; } + else if($actionArr['action'] == 'addition'){ $current_column_action = 'A'; } + else if($actionArr['action'] == 'dependent_addition'){ $current_column_action = 'DA'; } + 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'; } + + if($actionArr['action'] == 'inception' || $actionArr['action'] == 'addition' || $actionArr['action'] == 'dependent_addition') { - $policy['basic_cover_si'] = $arr[6]; - $policy['pre_existing_alignments'] = $arr[13]; - $policy['date_of_exit'] = isset($arr[15]) ? change_date_format($arr[15],'d-M-Y','Y-m-d') : NULL; - $policy['reason_for_exit'] = $arr[16]; + $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]) ? change_date_format($memArr[7],'d-M-Y','Y-m-d') : NULL;; + $policy['policy_end_date'] = null; + $policy['days'] = null; + $policy['premium'] = null; + $policy['rata_premimum'] = null; + $policy['gst'] = null; - $result['emp_code'] = $arr[1]; - $result['name'] = $arr[2]; - $result['dob'] = isset($arr[3]) ? change_date_format($arr[3],'d-M-Y','Y-m-d') : NULL; - $result['gender'] = $arr[4]; - $result['relationship'] = $arr[5]; - $result['doj'] = isset($arr[7]) ? change_date_format($arr[7],'d-M-Y','Y-m-d') : NULL; - $result['basic_pay'] = $arr[8]; - $result['band'] = $arr[9]; - $result['designation'] = $arr[10]; - $result['mobile'] = $arr[11]; - $result['email_corporate'] = $arr[12]; + $result['emp_code'] = $memArr[1]; + $result['name'] = $memArr[2]; + $result['dob'] = isset($memArr[3]) ? change_date_format($memArr[3],'d-M-Y','Y-m-d') : NULL; + $result['gender'] = $memArr[4]; + $result['relationship'] = $memArr[5]; + $result['relationship_code'] = $memArr[5]; + $result['doj'] = isset($memArr[8]) ? change_date_format($memArr[8],'d-M-Y','Y-m-d') : NULL; + $result['basic_pay'] = $memArr[9]; + $result['band'] = $memArr[10]; + $result['designation'] = $memArr[11]; + $result['mobile'] = $memArr[12]; + $result['email_corporate'] = $memArr[13]; $result['file_id'] = $actionArr['id']; $result['client_id'] = $actionArr['client_id']; - $result['change_event'] = $arr[14]; - $result['action'] = $arr[17]; + $result['change_event'] = $memArr[15]; + $result['temp']['grid_type'] = $actionArr['grid_type']; + $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; + $result['temp']['emp_policy_id'] = isset($memArr['temp']['emp_policy_id']) ? $memArr['temp']['emp_policy_id'] : null; $result['policy_details'] = $policy; return $result; @@ -434,9 +594,9 @@ if (!function_exists('transform_excel_data_to_db')) } -if (!function_exists('calculation_manager')) +if (!function_exists('premium_calculation_manager')) { - function calculation_manager($emp_data,$policy_terms,$slab_details) + function premium_calculation_manager($emp_data,$policy_terms,$slab_details) { // grid type // 1 = premium => si @@ -445,44 +605,300 @@ if (!function_exists('calculation_manager')) switch ($grid_type) { case "1": //GPA - Sum Insured (SI) * Multiplier - + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } + break; case "2": //GPA - Flat Rate for all SI + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "3": //GMC - SI + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + if($slab_value['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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } + break; case "4": //GMC - Employees Age band + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['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)) + { + $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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "5": //GMC - Employees Age + SI + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['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)) + { + + $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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "6": //GMC - Employees + Dependent Age band + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['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)) + { + + $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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "7": //GMC - Employees + Dependent Age + SI + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['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)) + { + + $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($policy_terms['policy_start_date'],$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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + + break; + } + } break; case "8": //GMC - SI as per Grade or Band + $employee_received_band = $emp_data['temp']['band']; + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + + if($slab_value['grade'] == $employee_received_band && $slab_value['si'] == $employee_received_si) + { + // $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($policy_terms['policy_start_date'],$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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "9": //GMC - Flat Rate for all + $employee_received_band = $emp_data['temp']['band']; + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + + if($slab_value['grade'] == $employee_received_band && $slab_value['si'] == $employee_received_si) + { + // $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($policy_terms['policy_start_date'],$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']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.',''); + + break; + } + } break; case "10": //GMC - Maximum age of Dependents + $max_age = $emp_data['temp']['maxage']; + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + $emp_data['policy_details']['basic_cover_si'] = null; + foreach ($slab_details['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)) + { + + $emp_data['policy_details']['date_coverage'] = (strtolower($emp_data['relationship']) == 'self' ? (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'] = (strtolower($emp_data['relationship']) == 'self' ? $policy_terms['policy_end_date'] : ""); + $emp_data['policy_details']['days'] = (strtolower($emp_data['relationship']) == 'self' ? calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days : 0); + $emp_data['policy_details']['premium'] = (strtolower($emp_data['relationship']) == 'self' ? $slab_value['premium'] : 0); + $emp_data['policy_details']['rata_premimum'] = (strtolower($emp_data['relationship']) == 'self' ? calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']) : 0); + $emp_data['policy_details']['gst'] = (strtolower($emp_data['relationship']) == 'self' ? ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')) : 0); + + break; + } + } break; case "11": //GMC - Maximum count per Family + $max_count = $emp_data['temp']['maxage']; + $employee_received_band = $emp_data['temp']['band']; + $employee_received_si = $emp_data['policy_details']['basic_cover_si']; + $emp_data['policy_details']['basic_cover_si'] = null; + foreach ($slab_details['slab_rates'] as $skey => $slab_value) + { + + if($slab_value['si'] == $employee_received_si && ($slab_value['grade'] == $employee_received_band)) + { + //calculate premium based on count + $famility_si_covered = $employee_received_si * $max_count; + $famility_si_covered = ($famility_si_covered >= $slab_value['max_si'] ? $slab_value['max_si'] : $famility_si_covered); + + $emp_data['policy_details']['basic_cover_si'] = (strtolower($emp_data['relationship']) == 'self' ? $famility_si_covered : 0); + $emp_data['policy_details']['date_coverage'] = (strtolower($emp_data['relationship']) == 'self' ? (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'] = (strtolower($emp_data['relationship']) == 'self' ? $policy_terms['policy_end_date'] : ""); + $emp_data['policy_details']['days'] = (strtolower($emp_data['relationship']) == 'self' ? calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days : 0); + $emp_data['policy_details']['premium'] = (strtolower($emp_data['relationship']) == 'self' ? $slab_value['premium'] : 0); + $emp_data['policy_details']['rata_premimum'] = (strtolower($emp_data['relationship']) == 'self' ? calculate_pro_rata_premimum($slab_value['premium'],$emp_data['policy_details']['days']) : 0); + $emp_data['policy_details']['gst'] = (strtolower($emp_data['relationship']) == 'self' ? ((float) number_format(($emp_data['policy_details']['rata_premimum'] * (18/100)),2,'.','')) : 0); + + break; + } + } break; default: - echo "Not a valid day"; -} + echo "Not a valid grid"; + } + + // unset($emp_data['temp']);//remove temp data + return $emp_data; } } +if (!function_exists('calculate_pro_rata_premimum')) +{ + function calculate_pro_rata_premimum($premium,$days) + { + return (float) number_format(($premium / 365) * $days,2,'.',''); + } +} + +//transform db columns into excel rows with indexs +if (!function_exists('transform_db_data_to_excel')) +{ + function transform_db_data_to_excel($familiyArr,$actionArr = []) + { + // if($actionArr['action'] == 'dependent_addition') + // { + $return_data = []; + + foreach ($familiyArr as $key => $value) + { + // dd($value); + $row = []; + $row[0] = ($key + 1); + $row[6] = $value['basic_cover_si']; + $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[7] = isset($value['date_coverage']) ? change_date_format($value['date_coverage'], 'Y-m-d', 'd-M-Y') : NULL; + + $row[1] = $value['emp_code']; + $row[2] = $value['name']; + $row[3] = isset($value['dob']) ? change_date_format($value['dob'], 'Y-m-d', 'd-M-Y') : NULL; + $row[4] = $value['gender']; + $row[5] = $value['relationship']; + + $row[8] = isset($value['doj']) ? change_date_format($value['doj'], 'Y-m-d', 'd-M-Y') : NULL; + $row[9] = $value['basic_pay']; + $row[10] = $value['band']; + $row[11] = $value['designation']; + $row[12] = $value['mobile']; + $row[13] = $value['email_corporate']; + // $actionArr['id'] = $value['file_id']; + // $actionArr['client_id'] = $value['client_id']; + $row[15] = $value['change_event']; + $row['current_action'] = 'DA'; + $row['temp']['source'] = 'db'; + $row['temp']['emp_id'] = $value['emp_id']; + $row['temp']['emp_policy_id'] = $value['emp_policy_id']; + + array_push($return_data, ($row)); + } + + return $return_data; + // } + + + } +} \ No newline at end of file diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php index de91ab5e..eb893ea7 100644 --- a/app/Models/ClientPolicyModel.php +++ b/app/Models/ClientPolicyModel.php @@ -99,9 +99,9 @@ class ClientPolicyModel extends Model } - public function getPolicyTermsJson($client_id,$policy_id) + public function getPolicyDetails($client_id,$policy_id) { - return $this->select('policy_terms') + return $this->select('*') ->where('client_id',$client_id) ->where('id',$policy_id) ->get() diff --git a/app/Models/EmpEndorsementModel.php b/app/Models/EmpEndorsementModel.php new file mode 100644 index 00000000..b6956259 --- /dev/null +++ b/app/Models/EmpEndorsementModel.php @@ -0,0 +1,30 @@ +where('emp_code',$arr['emp_code']) + ->where('name',$arr['name']) + ->where('client_id',$arr['client_id']) + // ->where('relationship_code',$arr['relationship_code']) + ->where('gender',$arr['gender']) + ->where('dob',$arr['dob']) + ->find(); + } + + + public function getEmpFamilybyEmpCode(string $client_policy_id = null,string $emp_code = null,string $client_id = null,string $emp_status = null) + { + $result = $this->select(['employees.id as emp_id', 'employees.client_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']) + ->join('employee_polices', 'employee_polices.employee_id = employees.id') + ->where('employees.is_active',1) + ->when($client_policy_id, function($query) use ($client_policy_id){ + return $query->where('employee_polices.client_policy_id',$client_policy_id); + }) + + ->where('employee_polices.is_active',1) + ->where('employees.emp_status', ($emp_status !== null ? $emp_status : 'active')) + // ->where('employees.emp_code',$emp_code) + ->when($emp_code, function($query) use ($emp_code){ + return $query->where('employees.emp_code',$emp_code); + + }) + // ->when($emp_status, function($query) use ($emp_status){ + // $emp_status = ($emp_status !== null ? $emp_status : 'active'); + // dd($emp_status); + // return $query->where('employees.emp_status', $emp_status); + // }) + ->when($client_id, function($query) use ($client_id){ + return $query->where('employees.client_id',$client_id); + }) + ->findAll(); + // dd($this->db->getLastQuery()); + + return ($result); + } } diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index ec5d7cbf..28e43f31 100644 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -45,4 +45,12 @@ class EmployeePolicyModel extends Model ->findAll(); return ($result); } + + //for emp onboard do not change + public function checkExistingEmpPolicy($arr) + { + return $this->where('employee_id',$arr['employee_id']) + ->where('client_policy_id',$arr['client_policy_id']) + ->find(); + } } diff --git a/app/Models/PolicesModel.php b/app/Models/PolicesModel.php index 8ed0fa8b..82248f07 100644 --- a/app/Models/PolicesModel.php +++ b/app/Models/PolicesModel.php @@ -3,9 +3,9 @@ namespace App\Models; use CodeIgniter\Model; -use App\Models\policyGridModel; -use App\Models\policyPremium1Model; -use App\Models\policyPremium2Model; +use App\Models\PolicyGridModel; +use App\Models\PolicyPremium1Model; +use App\Models\PolicyPremium2Model; class PolicesModel extends Model { @@ -49,12 +49,13 @@ class PolicesModel extends Model $premium_slab_data = null; // echo !isset($premium_slab_data);die(); // if($search_term === 'GPA'){ - $policyPremium1Model = new policyPremium1Model(); + $policyPremium1Model = new PolicyPremium1Model(); $premium_slab_data = $policyPremium1Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1])->findAll(); - if((isset($premium_slab_data))) + // dd($premium_slab_data); + if(is_array($premium_slab_data) && !count($premium_slab_data)) { - echo '2'; - $policyPremium2Model = new policyPremium2Model(); + // echo '2'; + $policyPremium2Model = new PolicyPremium2Model(); $premium_slab_data = $policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1])->findAll(); } // }else{ @@ -64,8 +65,10 @@ class PolicesModel extends Model // dd($policyPremium1Model->getLastQuery()); //get policy id $grid_id = $premium_slab_data[0]['policy_grid_id']; - $policyGridModel = new policyGridModel(); + $policyGridModel = new PolicyGridModel(); $results = $policyGridModel->find($grid_id); return ['slab_rates' => $premium_slab_data,'grid_master' => $results]; } + + } diff --git a/tests/unit/CheckDependentConflictTest.php b/tests/unit/CheckDependentConflictTest.php new file mode 100644 index 00000000..429d0c67 --- /dev/null +++ b/tests/unit/CheckDependentConflictTest.php @@ -0,0 +1,59 @@ + true, + 'family_floaters' => [ + 'childrens' => 2, + 'spouse' => 1, + 'either-parents-pil' => 0, + 'parents' => 2, + 'parents-in-law' => 2, + ], + ]; + + // Sample action array + $actionArr = 'addition'; + + // Call the function + $result = check_dependent_conflict($family_data, $policy_terms, $actionArr); + Kint::dump($result); + // Assert that the status is true (no conflicts) + $this->assertTrue($result['status']); + } + + public function testIsNull() + { + $i = null; + $this->assertTrue($i); + + } +} \ No newline at end of file