diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index 531eeb86..38109249 100644
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -110,12 +110,16 @@ class EmployeeController extends AdminController
// print_r($this->request->getPost('upload-action-type'));
// die();
// $empServiceController = new EmployeeServiceController();
- // $res = $empServiceController->excelFileFormatValidation(['file_id' => '34']);
+ // $res = $empServiceController->excelFileFormatValidation(['file_id' => '12']);
// dd($res);
// $empServiceController = new EmployeeServiceController();
// $res = $empServiceController->excelFileDataValidation(['file_id' => '12']);
// dd($res);
+
+ // $empServiceController = new EmployeeServiceController();
+ // $res = $empServiceController->employeesOnboard(['file_id' => '34']);
+ // dd($res);
// if(isset($res['error_summary']) && count($res['error_summary']))
// {
@@ -158,7 +162,7 @@ class EmployeeController extends AdminController
$action = $this->request->getPost('upload-action-type');
$status = 'inprogress';
- $file_id = $this->fileModel->insert(['file_name' => $filename,'client_id' => $client_id,'policy_id' => $policy_id,'created_by' => $loggedInUserID,'status' => $status,'action' => $action]);
+ $file_id = $this->fileModel->insert(['file_name' => $filename,'client_id' => $client_id,'policy_id' => $policy_id,'created_by' => $loggedInUserID,'status' => $status,'action' => $action]);//here field policy_id have client_policy_id and not policy id from policy master
$this->myLogger->logme("error",'{file_id} uploaded success',['file_id' => $file_id]);
//start validation process
@@ -179,8 +183,9 @@ class EmployeeController extends AdminController
$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('policies pm','files.policy_id = pm.id')
- ->join('clients c','files.client_id = c.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();
// dd($data['fileList']);die();
if($this->request->getMethod() == "get")
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index 5d97f51b..a64812fa 100644
--- a/app/Controllers/EmployeeServiceController.php
+++ b/app/Controllers/EmployeeServiceController.php
@@ -12,6 +12,7 @@ use App\Models\EmployeeModel;
use App\Models\EmployeePolicyModel;
use App\Models\ClientModel;
use App\Models\ClientPolicyModel;
+use App\Models\PolicesModel;
use App\Models\FileModel;
use App\Controllers\Jobs ;
@@ -27,6 +28,7 @@ class EmployeeServiceController extends AdminController
protected $clientModel;
protected $fileModel;
protected $clientPolicyModel;
+ protected $policiesModel;
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'] ]];
@@ -40,6 +42,7 @@ class EmployeeServiceController extends AdminController
$this->clientModel = new ClientModel();
$this->fileModel = new FileModel();
$this->clientPolicyModel = new ClientPolicyModel();
+ $this->policiesModel = new PolicesModel();
}
public function excelFileFormatValidation($params)
@@ -332,7 +335,7 @@ class EmployeeServiceController extends AdminController
{
foreach($res['error_data'] as $key => $value)
{
- array_push($result['error_summary'],$value['code']); //record not avail for deletion
+ array_push($result['error_summary'],$value['code']);
$result['error_data'][$rowid][($value['col_name'])]['error'][] = $value['msg'];
}
}
@@ -379,5 +382,66 @@ class EmployeeServiceController extends AdminController
}
+
+
+ public function employeesOnboard($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);
+ $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)
+ {
+ calculate_premimum($family,$policy_terms,$slab_details,$file);
+ }
+
+
+ }
+
+
}
diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php
index 1f1e9b47..ce67373e 100644
--- a/app/Helpers/excel_util_helper.php
+++ b/app/Helpers/excel_util_helper.php
@@ -225,8 +225,9 @@ if (!function_exists('name_and_empid_check_in_db'))
$res = $employeeModel
->join('client_policy cp',"employees.client_id = cp.client_id")
->join('employee_polices ep',"cp.id = ep.client_policy_id AND employees.id = ep.employee_id")
- ->where("cp.policy_id",$policy_id)
+ ->where("cp.client_policy",$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')
->findAll();
@@ -363,5 +364,125 @@ if (!function_exists('check_dependent_conflict'))
}
}
+if (!function_exists('generate_relationship_code'))
+{
+ function generate_relationship_code($arr)
+ {
+
+ }
+}
+
+if (!function_exists('calculate_premimum'))
+{
+ function calculate_premimum($family_data,$policy_terms,$slab_details,$fileArr)
+ {
+ // grid type
+ // 1 = premium => si
+ $grid_type = $slab_details['grid_master']['ui_type'];
+
+ 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);
+ //generate relationship code
+ $transformed_familiy_member_data = 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 (!function_exists('transform_excel_data_to_db'))
+{
+ function transform_excel_data_to_db($familyArr,$actionArr)
+ {
+ if($action == 'inception' || $action == '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['client_policy_id'] = $actionArr['policy_id'];
+
+
+ $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['file_id'] = $actionArr['id'];
+ $result['client_id'] = $actionArr['client_id'];
+ $result['change_event'] = $arr[14];
+ $result['action'] = $arr[17];
+ $result['policy_details'] = $policy;
+
+ return $result;
+
+ }
+ }
+}
+
+
+if (!function_exists('calculation_manager'))
+{
+ function calculation_manager($emp_data,$policy_terms,$slab_details)
+ {
+ // grid type
+ // 1 = premium => si
+ $grid_type = $slab_details['grid_master']['ui_type'];
+
+ switch ($grid_type) {
+ case "1":
+ //GPA - Sum Insured (SI) * Multiplier
+
+ break;
+ case "2":
+ //GPA - Flat Rate for all SI
+ break;
+ case "3":
+ //GMC - SI
+ break;
+ case "4":
+ //GMC - Employees Age band
+ break;
+ case "5":
+ //GMC - Employees Age + SI
+ break;
+ case "6":
+ //GMC - Employees + Dependent Age band
+ break;
+ case "7":
+ //GMC - Employees + Dependent Age + SI
+ break;
+ case "8":
+ //GMC - SI as per Grade or Band
+ break;
+ case "9":
+ //GMC - Flat Rate for all
+ break;
+ case "10":
+ //GMC - Maximum age of Dependents
+ break;
+ case "11":
+ //GMC - Maximum count per Family
+ break;
+
+ default:
+ echo "Not a valid day";
+}
+
+ }
+}
diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php
index e6955601..de91ab5e 100644
--- a/app/Models/ClientPolicyModel.php
+++ b/app/Models/ClientPolicyModel.php
@@ -35,6 +35,8 @@ class ClientPolicyModel extends Model
"created_by",
"updated_by",
"Is_active",
+ "date_of_exit",
+ "reason_for_exit"
];
public function getClientPolicyById($id){
@@ -101,7 +103,7 @@ class ClientPolicyModel extends Model
{
return $this->select('policy_terms')
->where('client_id',$client_id)
- ->where('policy_id',$policy_id)
+ ->where('id',$policy_id)
->get()
->getResult();
diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php
index 78cd79f4..8176101f 100644
--- a/app/Models/EmployeeModel.php
+++ b/app/Models/EmployeeModel.php
@@ -25,5 +25,6 @@ class EmployeeModel extends Model
"created_by",
"updated_by",
"is_active",
+ "file_id"
];
}
diff --git a/app/Models/PolicesModel.php b/app/Models/PolicesModel.php
index c9dc0015..779def89 100644
--- a/app/Models/PolicesModel.php
+++ b/app/Models/PolicesModel.php
@@ -3,6 +3,9 @@
namespace App\Models;
use CodeIgniter\Model;
+use App\Models\policyGridModel;
+use App\Models\policyPremium1Model;
+use App\Models\policyPremium2Model;
class PolicesModel extends Model
{
@@ -27,4 +30,41 @@ class PolicesModel extends Model
->get()
->getResult();
}
+
+
+ public function getPolicySlabRatesForEmpOnboard($policy_id,$client_id){
+
+
+ // $data = $this->getPolicyPremium($policy_id);
+ // $pattern = '/gmc/i';
+ // $subject = $data[0]->policy_type;
+ // if (preg_match($pattern, $subject)) {
+ // $search_term = 'GMC';
+ // } else {
+ // $search_term = 'GPA';
+ // }
+
+
+ $premium_slab_data = null;
+ // echo !isset($premium_slab_data);die();
+ // if($search_term === 'GPA'){
+ $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)))
+ {
+ echo '2';
+ $policyPremium2Model = new policyPremium2Model();
+ $premium_slab_data = $policyPremium2Model->where(['client_id' => $client_id, 'client_policy_id' => $policy_id, 'is_active' => 1])->findAll();
+ }
+ // }else{
+ ;
+ // }
+ // dd($premium_slab_data);
+ // dd($policyPremium1Model->getLastQuery());
+ //get policy id
+ $grid_id = $premium_slab_data[0]['policy_grid_id'];
+ $policyGridModel = new policyGridModel();
+ $results = $policyGridModel->find($grid_id);
+ return ['slab_rates' => $premium_slab_data,'grid_master' => $results];
+ }
}
diff --git a/app/Views/employee_upload.php b/app/Views/employee_upload.php
index 3fe85db6..8131a280 100644
--- a/app/Views/employee_upload.php
+++ b/app/Views/employee_upload.php
@@ -281,7 +281,54 @@
// for (var ckey in col)
// {
- file_error_html += (err_id == 1 ? "Mandatory values missing "+err_count+"" : (err_id == 2 ? "Values not in expected format "+err_count+"" : (err_id == 3 ? "Field contains not allowed values "+err_count+"" : (err_id == 4 ? "Rule Conflict "+err_count+"" : (err_id == 5 ? ""+file_error_data['error_data']+"" : (err_id == 6 ? ""+file_error_data['error_data']+"" : ""))))));
+ // file_error_html += (err_id == 1 ? "Mandatory values missing "+err_count+"" : (err_id == 2 ? "Values not in expected format "+err_count+"" : (err_id == 3 ? "Field contains not allowed values "+err_count+"" : (err_id == 4 ? "Rule Conflict "+err_count+"" : (err_id == 5 ? ""+file_error_data['error_data']+"" : (err_id == 6 ? ""+file_error_data['error_data']+"" : ""))))));
+ // var message;
+ switch (err_id) {
+ case 1:
+ file_error_html += "Mandatory values missing " + err_count + "";
+ break;
+ case 2:
+ file_error_html += "Values not in expected format " + err_count + "";
+ break;
+ case 3:
+ file_error_html += "Field contains not allowed values " + err_count + "";
+ break;
+ case 4:
+ file_error_html += "Rule Conflict " + err_count + "";
+ break;
+ case 5:
+ file_error_html += "" + file_error_data['error_data'] + "";
+ break;
+ case 6:
+ file_error_html += "" + file_error_data['error_data'] + "";
+ break;
+ case 7:
+ file_error_html += "Duplicate entry in file " + err_count + "";
+ break;
+ case 8:
+ file_error_html += "to be config";
+ break;
+ case 9:
+ file_error_html += "Duplicate entry " + err_count + "";
+ break;
+ case 10:
+ file_error_html += "Duplicate entry in file " + err_count + "";
+ break;
+ case 11:
+ file_error_html += "Rule conflict: Dependents not allowed " + err_count + "";
+ break;
+ case 12:
+ file_error_html += "Rule conflict: Dependent count greater than allowed dependent count " + err_count + "";
+ break;
+ case 13:
+ file_error_html += "Rule conflict: Twofold relationship found within family " + err_count + "";
+ break;
+
+ default:
+ file_error_html += "";
+ break;
+ }
+
file_error_html += '
';
// }