myLogger = \Config\Services::mylogger(); $this->employeeModel = new EmployeeModel(); $this->employeePolicyModel = new EmployeePolicyModel(); $this->clientModel = new ClientModel(); $this->policesModel = new PolicesModel(); $this->relationshipModel = new RelationshipModel(); $this->fileModel= new FileModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->policyPremium1Model = new PolicyPremium1Model(); $this->policyPremium2Model = new PolicyPremium2Model(); } public function getEmployeeProfile() { try { $emp_code = $this->request->getGet('emp_code'); if ($emp_code) { $relationship = 'self'; $employee = $this->employeeModel->where('emp_code', $emp_code) ->where('is_active', 1 ) ->where('relationship', $relationship) ->first(); $result = $employee; return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); } else { $result = "No Match's"; return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404); } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } public function editEmployeeProfile() { try { $data = $this->request->getJSON(); if ($data) { $id = $data->id; $employee = $this->employeeModel->where('is_active', 1 )->update($id, $data); if ($employee) { $result = []; return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); } else { $result = "No Match's"; return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404); } } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } public function getEmployeeAndDependence() { try { $emp_code = $this->request->getGet('emp_code'); if ($emp_code) { $employee = $this->employeeModel->where('is_active', 1 )->where('emp_code', $emp_code)->findAll(); $dateConverter = function($item) { if ($item['dob'] !== '0000-00-00') { $dateTime = \DateTime::createFromFormat('Y-m-d', $item['dob']); $item['dob'] = $dateTime->format('d-m-Y'); } return $item; }; $employee = array_map($dateConverter, $employee); return $this->respond(['status' => 'success','code' => 200,'data' => $employee],200); } else { return $this->respond(['status' => 'failed','code' => 404,'data' => []],404); } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } public function editEmployeeAndDependence() { try { $data = $this->request->getJSON(); if ($data) { $updatedCount = 0; foreach ($data as $item) { $id = $item->id; $item->dob = $this->convertDateFormatYMD($item->dob); $employee = $this->employeeModel->where('is_active', 1 )->update($id, (array)$item); if ($employee) { $updatedCount++; } } if ($updatedCount > 0) { $result = []; return $this->respond(['status' => 'success','code' => 200,'data' => $result], 200); } else { $result = "No Matches"; return $this->respond(['status' => 'failed','code' => 404,'data' => $result], 404); } } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e], 500); } } public function addEmployeeAndDependence() { try { $data = $this->request->getJSON(); if ($data) { $Count = 0; foreach ($data as $item) { if (isset($item->id)) { //update old data $id = $item->id; $item->family_floater_key = $this->RelationshipMap($item->relationship); $item->gender = $this->GenderMap($item->relationship , $item->emp_code); $item->dob = $this->convertDateFormatYMD($item->dob); $item->emp_status = 'draft'; $employee = $this->employeeModel->where('is_active', 1 )->update($id, (array)$item); if ($employee) { $Count++; } }else{ //create new data $item->family_floater_key = $this->RelationshipMap($item->relationship); $item->gender = $this->GenderMap($item->relationship , $item->emp_code); $item->dob = $this->convertDateFormatYMD($item->dob); $item->emp_status = 'draft'; $employee = $this->employeeModel->insert($item); if ($employee) { $Count++; } } } if ($Count > 0) { if(!isset($item->is_addon_value)) { $this->createEmployeePolicyData($employee,$item->emp_code,$item->client_id,$item->client_policy_id); }else{ $this->createEmployeePolicyData($employee,$item->emp_code,$item->client_id,$item->client_policy_id,$item->basic_cover_si); } $this->updatePremiumAmount($data[0]->client_policy_id , $data[0]->emp_code); $result = []; return $this->respond(['status' => 'success','code' => 200,'data' => $result], 200); } else { $result = "No Matches"; return $this->respond(['status' => 'failed','code' => 404,'data' => $result], 404); } } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function createEmployeePolicyData($employee_id,$emp_code,$client_id,$client_policy_id,$basic_cover_si = null) { if($basic_cover_si != null){ $client_policy = $this->clientPolicyModel->where('id', $client_policy_id)->where('client_id', $client_id)->first(); $policy_terms = json_decode($client_policy['policy_terms']); $basic_cover_si = $policy_terms->sum_insured; }else{ $basic_cover_si = $basic_cover_si; } $checkDataExist = $this->employeePolicyModel->where('employee_id',$employee_id)->where('client_policy_id',$client_policy_id)->first(); if($checkDataExist){ $this->employeePolicyModel ->where('client_policy_id',$client_policy_id ) ->where('employee_id' , $employee_id ) ->where('is_active', 1 ) ->set(array('basic_cover_si'=> $basic_cover_si )) ->update(); }else{ $data['employee_id']= $employee_id; $data['client_policy_id']= $client_policy_id; $data['basic_cover_si']= $basic_cover_si; $data['status']= 'draft'; $this->employeePolicyModel->insert($data); } return true; } public function updatePremiumAmount($client_policy_id , $emp_code) { $response = $this->calculatePremium($client_policy_id , $emp_code); if(count($response[$emp_code])) { foreach ($response[$emp_code] as $key => $value) { $checkIfExist = $this->employeePolicyModel->where('employee_id', $value['temp']['emp_id']) ->where('client_policy_id', $value['policy_details']['client_policy_id']) ->where('is_active', 1 ) ->findAll(); if($checkIfExist) { $this->employeePolicyModel ->where('client_policy_id',$value['policy_details']['client_policy_id'] ) ->where('employee_id' , $value['temp']['emp_id'] ) ->where('is_active', 1 ) ->set(array('premium'=> $value['policy_details']['rata_premimum'] , 'gst'=> $value['policy_details']['gst'] )) ->update(); } } } } public function RelationshipMap($value){ if ($value === 'Mother' || $value === 'Father') { return 'parent'; } else if($value === 'Son' || $value === 'Daughter'){ return 'child'; }else if($value === 'Father in Law' || $value === 'Mother in Law'){ return 'parent_in_law'; }else if($value === 'Spouse'){ return 'spouse'; } } public function GenderMap($value,$empCode){ if ($value === 'Mother' || $value === 'Daughter' || $value === 'Mother in Law') { return 'F'; } else if($value === 'Son' || $value === 'Father' || $value === 'Father in Law'){ return 'M'; }else if($value === 'Spouse'){ $Gender = $this->employeeModel->where('emp_code',$empCode)->where('relationship','Self')->get()->getRow()->gender; if($Gender == 'M'){ return 'F'; }else{ return 'M'; } } } private function convertDateFormatYMD($dateString) { // Attempt to create a DateTime object from the provided date string $dateTime = \DateTime::createFromFormat('d-m-Y', $dateString); if ($dateTime instanceof \DateTime) { return $dateTime->format('Y-m-d'); } else { return null; } } private function convertDateFormatDMY($dateString) { // Attempt to create a DateTime object from the provided date string $dateTime = \DateTime::createFromFormat('Y-m-d', $dateString); if ($dateTime instanceof \DateTime) { return $dateTime->format('d-m-Y'); } else { return null; } } public function deleteDependence() { try { if($this->request->getGet('id')) { $this->employeeModel->where('id', $this->request->getGet('id') ) ->where('is_active', 1 ) ->set(array('is_active'=> 0 )) ->update(); $this->employeePolicyModel->where('employee_id',$this->request->getGet('id') ) ->where('is_active', 1 ) ->set(array('is_active'=> 0 )) ->update(); return $this->respond(['status' => 'success','code' => 200,'data' =>[] ], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => [] ], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function getEmployeeAndDependenceByClientId() { try { $empData = $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0); if ($empData) { return $this->respond(['status' => 'success', 'code' => 200, 'data' => $empData], 200); } else { return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function getClientPolicy() { try { $ClientPolicyData = $this->clientPolicyModel->select('client_policy.id as client_policy_id , client_policy.client_id as client_id, policies.id as policy_id,policies.policy_type_id as policy_type_id, policies.name as policy_name , client_policy.is_addon as is_addon') ->join('policies', 'client_policy.policy_id = policies.id', 'left') ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->findAll(); $result = []; foreach ($ClientPolicyData as $key => $value) { $getSlabAndGridData = $this->policesModel->getPolicySlabRatesForEmpOnboard( $value['client_policy_id'],$value['client_id']); if($value['is_addon'] == "2"){ $value['type'] = 'SI TopUp'; }else if($value['is_addon'] == "3"){ $value['type'] = 'Dependent AddOn'; }else{ $value['type'] = $getSlabAndGridData['grid_master']['policy_type']; } array_push($result,$value); } if ($ClientPolicyData) { return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200); } else { return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } // public function getEmployeePolicy() // { // try { // $id = $this->request->getGet('id'); // $emp_code = $this->request->getGet('emp_code'); // $keysToRemove = ["removable_keys"]; // $empPolicy = $this->employeeModel->getEmployeePolicy($id); // $empData = $this->employeeModel->where('emp_code',$emp_code)->findAll(); // if ($empPolicy) { // $result = []; // foreach ($empPolicy as $array) { // $decodedArray = json_decode($array->Policy_Terms); // $refusingData = (object) array_diff_key((array) $decodedArray, array_flip($keysToRemove)); // $array->Policy_Terms = $refusingData; // $getSlabAndGridData = $this->policesModel->getPolicySlabRatesForEmpOnboard($array->ClientPolicyId,$array->ClientId); // $array->SlabRates = $getSlabAndGridData['slab_rates']; // $array->GridMaster = $getSlabAndGridData['grid_master']; // if($getSlabAndGridData['grid_master']['policy_type'] == "GPA"){ // $default_si = $array->Policy_Terms->sumInsured2; // $index = -1; // foreach ($array->SlabRates as $key => $value) { // if ($value['si'] == $default_si) { // $index = $key; // break; // } // } // if ($index >= 0) { // $element =$array->SlabRates[$index]; // array_splice($array->SlabRates, $index, 1); // array_unshift($array->SlabRates, $element); // } // $employee_policy = $this->employeePolicyModel->where('employee_id',$id)->where('client_policy_id',$array->ClientPolicyId)->get()->getRow(); // if($employee_policy){ // $gpaSI['family_floater_key'] = 'self'; // $gpaSI['label'] = 'Self'; // $gpaSI['employee_id'] = $employee_policy->employee_id; // $gpaSI['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : null; // $gpaSI['premium'] = isset($employee_policy->premium) ? $employee_policy->premium : null; // $gpaSI['client_policy_id'] = $array->ClientPolicyId; // $array->mapped_family_floaters = $gpaSI; // }else{ // $gpaSI['family_floater_key'] = 'self'; // $gpaSI['label'] = 'Self'; // $gpaSI['employee_id'] = $id; // $gpaSI['basic_cover_si'] = null; // $gpaSI['premium'] = null; // $gpaSI['client_policy_id'] = $array->ClientPolicyId; // $array->mapped_family_floaters = $gpaSI; // } // }else if($getSlabAndGridData['grid_master']['policy_type'] == "GMC"){ // // re-arranging order of si // $default_si = $array->Policy_Terms->sum_insured; // // Filter the array using the callback function // $getPremium = array_filter($array->SlabRates , function ($value) use ($default_si) { return $value['si'] == $default_si; } ); // $default_premium = $getPremium[0]['premium']; // $index = -1; // foreach ($array->SlabRates as $key => $value) { // if ($value['si'] == $default_si) { // $index = $key; // break; // } // } // if ($index >= 0) { // $element =$array->SlabRates[$index]; // array_splice($array->SlabRates, $index, 1); // array_unshift($array->SlabRates, $element); // } // //map family floates array to employee and dependent // $familyFloates = $array->Policy_Terms->family_floaters; // $data = []; // foreach ($familyFloates as $familyFloatesValue) { // $dependent = preg_replace('/\d/', '', $familyFloatesValue); // if(count($empData)){ // foreach ($empData as $key => $value) { // if ($value['family_floater_key'] === $dependent) { // $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array->ClientPolicyId)->get()->getRow(); // $temp['family_floater_key'] = $familyFloatesValue; // $temp['label'] = $value['relationship']; // $temp['name'] = $value['name']; // $temp['employee_id'] = $value['id']; // $temp['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : null; // $temp['premium'] = isset($employee_policy->premium) ? $employee_policy->premium : null; // $temp['client_policy_id'] = $array->ClientPolicyId; // array_push($data,$temp); // unset($empData[$key]); // break; // } // } // } // } // $array->mapped_family_floaters = $data; // $temp2=[]; // foreach ($array->SlabRates as $key => $value) { // $value['additional_premium'] = $value['premium'] - $default_premium; // array_push($temp2,$value); // } // $array->SlabRates = $temp2; // } // $result[] = $array; // } // return $this->respond(['status' => 'success','code' => 200,'data' => $result], 200); // }else{ // return $this->respond(['status' => 'failed','code' => 404,'data' => []], 404); // } // } catch (\Exception $e) { // return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); // } // } // Get the RelationShip list public function createOrUpdateEmployeePolicySiAmount() { try { $requestData = $this->request->getJSON(); foreach ($requestData as $key => $value) { $checkIfExist = $this->employeePolicyModel->where('employee_id', $value->employee_id) ->where('client_policy_id', $value->client_policy_id) ->where('is_active', 1 ) ->findAll(); // dd($checkIfExist); if ($checkIfExist) { $empPolicy = $this->employeePolicyModel->updateSiAndPremium($value->client_policy_id, $value->employee_id, $value->basic_cover_si); }else{ $data['employee_id']= $value->employee_id; $data['client_policy_id']= $value->client_policy_id; $data['basic_cover_si']= $value->basic_cover_si; $data['status'] = 'draft'; $this->employeePolicyModel->insert($data); } } $this->updatePremiumAmount($requestData[0]->client_policy_id , $requestData[0]->emp_code); return $this->respond(['status' => 'success','code' => 200,'data' => []], 200); } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function findPremiumAmount($slabArray,$siAmount) { foreach ($slabArray as $key => $value) { if($value['si'] == $siAmount){ return $value['premium']; break; } } } public function relationshipList() { try { $relation_ships= $this->relationshipModel->findAll(); if(count($relation_ships) > 0){ return $this->respond(['status' => 'success','code' => 200,'data' => $relation_ships], 200); }else{ return $this->respond(['status' => 'success','code' => 200,'data' => "No Data..!"], 200); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } // Upload the Employee Detail in DB by Sheet Data public function employeeUpload() { try { $file = $this->request->getFile('file'); $client_id = $this->request->getPost('client_id'); $policy_id = $this->request->getPost('policy_id'); $jwt = $this->request->getHeader('Authorization'); $jwtParts = explode(' ', $jwt); $token = $jwtParts[2]; $decodedPayload = json_decode(base64_decode(explode('.', $token)[1]), true); // get the employee id from token $employee_id = $decodedPayload['id']; $client_policy = $this->clientPolicyModel->where('id', $policy_id)->where('client_id', $client_id)->first(); if ($client_policy) { $policy = $this->policesModel->where('id', $client_policy['policy_id'])->first(); $policy_permium_1 = $this->policyPremium1Model->where(['client_id' => $client_id , 'client_policy_id' => $policy_id,'is_active' =>1])-> first(); $policy_permium_2 = $this->policyPremium2Model->where(['client_id' => $client_id , 'client_policy_id' => $policy_id,'is_active' =>1])-> first(); $sum_insured_amount_for_check_employee_1 = isset($policy_permium_1['si']) ? $policy_permium_1['si'] : null; $sum_insured_amount_for_check_employee_2 = isset($policy_permium_2['si']) ? $policy_permium_2['si'] : null; $is_moved = $file->move(WRITEPATH . 'uploads/import_excel'); $filename = $file->getName(); $file_name_with_path = WRITEPATH."/uploads/import_excel/".$filename; //check the file exist or not if(!file_exists($file_name_with_path)) { session()->setFlashdata('error', 'File not found'); return redirect()->to(base_url('employee/upload')); } // Load the Excel file $spreadsheet = IOFactory::load($file_name_with_path); // Get the active sheet $sheet = $spreadsheet->getActiveSheet(); // Get the highest row and column numbers $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $highestRowAndColumn = $sheet->getHighestRowAndColumn(); $data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); $extractData['file_name']= $filename; $extractData['client_id']= $client_id; $extractData['status']= 'success'; $extractData['policy_id']= $policy_id; $extractData['action']= 'enrollment'; $extractData['created_by']=$employee_id; $file_data =$this->fileModel->insert($extractData); $extra = []; if (count($data[0]) == 11) { $value = ['Sno','Emp_Code','Name','DOJ','Gender','Relation','DOB','Mail','Mobile','SI','Grade']; $check_miss_match = []; for ($i=0; $i 0) { return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "Column Name's are miss Match's!", 'data'=> $check_miss_match], 200); } } if(count($data[0]) != 11){ return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "Uploaded file row count is Not Match!" ], 200); } //this change the column name into index number for ($i = 0; $i < count($data[0]); $i++) { $data[0][$i] = $i; } for ($i = 0; $i < count($data); $i++) { if ($i == 0) { // Loop through the first row to extract keys for ($j = 0; $j < count($data[$i]); $j++) { $extra[$data[$i][$j]] = []; // Initialize keys with empty array } } else { // Loop through subsequent rows for ($j = 0; $j < count($data[$i]); $j++) { // Append values to corresponding keys in $extra if (isset($extra[$data[0][$j]])) { // Make sure the key exists in the $extra array $extra[$data[0][$j]][] = $data[$i][$j]; } } } } $dataToInsert = []; $basic_cover_si= []; // if ($extra[9]) { // $new_array = []; // for ($i=0; $i < count($extra[9]); $i++) { // if ($sum_insured_amount_for_check_employee_2 != $extra[9][$i] || $sum_insured_amount_for_check_employee_1 != $extra[9][$i]) { // $new_array[] = $i+1; // } // } // if (count($new_array) > 0) { // $count =count($new_array); // return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "$count Employee Sum Insured is Not Match.. " , 'data' => $new_array], 200); // } // } foreach ($extra['0'] as $index => $id) { $relation =''; if ($extra['5'][$index] === 'Mother' || $extra['5'][$index] === 'Father') { $relation = 'parent'; } else if($extra['5'][$index] === 'Son' || $extra['5'][$index] === 'Daughter'){ $relation = 'child'; }else if($extra['5'][$index] === 'Father in Law' || $extra['5'][$index] === 'Mother in Law'){ $relation = 'parent_in_law'; }else if($extra['5'][$index] === 'Spouse'){ $relation = 'spouse'; }else{ $relation = 'self'; } // Simplified formatDate function // Assigning formatted dates $doj = $extra['3'][$index] ; $dob = $extra['6'][$index] ; // Change date format for $doj $doj_new_format = date('Y-m-d', strtotime($doj)); // $doj_new_format will be "2001-02-12" // Change date format for $dob $dob_new_format = date('Y-m-d', strtotime($dob)); // Your existing code here $emp_code =isset($extra['1'][$index]) ? $extra['1'][$index] : 0; $name = $extra['2'][$index]; if($emp_code != 0 && $name != '' || $name != null){ $record = [ // 'id' => $id, 'emp_code' => $emp_code, 'name' => $name, // Check if the 'doj' key exists before accessing it 'doj' => $doj_new_format, 'gender' => $extra['4'][$index], 'relationship' => ucfirst($extra['5'][$index]), 'family_floater_key' => $relation, 'dob' => $dob_new_format, 'email_corporate' => $extra['7'][$index], 'mobile'=> $extra['8'][$index], 'client_id' => $client_id, 'emp_status'=>'draft', 'band'=> $extra['10'][$index], ]; $basic_cover_si_value = null; //Grid id is 10 and 11 sum insure value add only for self other grid type self sum insure is for the dependence if (isset($policy_permium_2['policy_grid_id']) == 10 || isset($policy_permium_2['policy_grid_id']) == 11) { if (strtolower($extra['5'][$index]) == 'self') { $basic_cover_si_value = $extra['9'][$index]; }else{ $basic_cover_si_value = null; } }else{ if (strtolower($extra['5'][$index]) == 'self') { $basic_cover_si_value = $extra['9'][$index]; }else{ for ($i=0; $i < count($extra['1']) ; $i++) { if ($extra['1'][$i] == $extra['1'][$index]) { if (strtolower($extra['5'][$i]) == 'self') { $basic_cover_si_value = $extra['9'][$i]; } } } } } $record2 = [ 'basic_cover_si' => $basic_cover_si_value, ]; $dataToInsert[] = $record; $basic_cover_si[]= $basic_cover_si_value; } } $count = 0; for ($a=0; $a employeeModel->checkExistingEmployee($dataToInsert[$a]); $emp_id =0; $data_after_gpa_or_gmc =[]; if ($policy['policy_type_id'] == 1) { if (strtolower($dataToInsert[$a]['relationship']) == 'self') { $data_after_gpa_or_gmc = $dataToInsert[$a]; } }else{ $data_after_gpa_or_gmc = $dataToInsert[$a]; } date_default_timezone_set('Asia/Kolkata'); $current_timestamp = time(); $formatted_date_time = date('Y-m-d H:i:s', $current_timestamp); if ($employee) { $emp_id =$employee['id']; $id =$emp_id; $data_after_gpa_or_gmc['id'] = $id; $data_after_gpa_or_gmc['updated_by'] = $employee_id; $data_after_gpa_or_gmc['updated_at'] = $formatted_date_time; $result = $this->employeeModel->save($data_after_gpa_or_gmc); if ($result) { $log_message = 'Update Employee - '.$employee['name'].'('.$employee['emp_code'].') with PK '.$employee['id']; $this->myLogger->logme('error',('Update - ' . $employee['id'].' - '. $employee['emp_code'] .' - '.$employee['name'])); } }else{ if ($dataToInsert[$a]['emp_code'] != 0) { $result =false; if (count($data_after_gpa_or_gmc) != 0) { $data_after_gpa_or_gmc['created_by'] = $employee_id; $result = $this->employeeModel->insert($data_after_gpa_or_gmc); } $emp_id =$result; if ($result) { $emp = $this->employeeModel->where('id', $result)->get()->getResult(); $policy_name = $this->employeePolicyModel->where('employee_id', $result)->get()->getResult();; $log_message = 'Insert Employee- '.$dataToInsert[$a]['name'] .'('.$dataToInsert[$a]['emp_code'] .') with PK '; $this->myLogger->logme('error',('Insert - ' . $dataToInsert[$a]['emp_code'] .' - '. $dataToInsert[$a]['name'])); } } } $emp_policy_data =[ 'employee_id'=>$emp_id, 'client_policy_id'=>$policy_id, 'status'=> 'draft', 'basic_cover_si'=>isset($basic_cover_si[$a]) ? $basic_cover_si[$a] : null ]; $employee_policy = $this->employeePolicyModel->checkExistingEmpPolicy(['employee_id' => $emp_id,'client_policy_id' => $policy_id]); if ($employee_policy) { foreach ($employee_policy as $existing_policy) { $emp_policy_data['id']= $existing_policy['id']; $emp_policy_data['updated_at'] = $formatted_date_time; $this->employeePolicyModel->save($emp_policy_data); } } else { $emp_policy = $this->employeePolicyModel->insert($emp_policy_data); } //trigger $mail = $dataToInsert[$a]['email_corporate']; $subject = 'Welcome, Employee Benefit Program Enrolment'; // $message = 'Dear ' . $dataToInsert[$a]['name'] . ",
We are glad to welcome you to the employee benefit program ," .$policy_name['name'] ."offered by your employer,


Click on the link below to review your personal and family details:
Review Details" ; $data['employee_name']=$dataToInsert[$a]['name']; $data['policy_name']=$policy['name']; $message = view('mail_welcome', $data); if ($dataToInsert[$a]['relationship'] == 'Self' && $mail != null || $mail != '') { $count++; $wholeData[] = ['mail' => $mail, 'subject' => $subject,'message'=> $message]; } // print_r($wholeData); // if ($dataToInsert[$a]['email_corporate'] != null || $dataToInsert[$a]['email_corporate'] != '' && $dataToInsert[$a]['relationship'] == 'Self') { if($count == 20 || $a == count($dataToInsert)-1){ $job_details = new Jobs(); $r = Jobs::addJob(['job_name' => 'bulk_mail','payload' => $wholeData]); // $wholeData[]= $r; // Mailhelper::bulk_mail($wholeData); $wholeData = []; $count = 0; } // print_r($r);//die(); // $jobWorker = new JobWorker(); //JobWorker::processJob($r); // $return_log = MailHelper::send_email($mail,$subject, $message); // $return_log = json_decode($return_log); // $this->myLogger->logme('info', "Email Status : {mail_status}, Sender Email:{email}", ['mail_status' => $return_log->status, 'email'=> $return_log->data]); } return $this->respond(['status' => 'success', 'code' => 200, 'message' => "Success" ], 200); }else{ return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "Client id and Client Policy id is Not Match!" ], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } //------------------------------------- public function getEmployeePolicy() { try { $id = $this->request->getGet('id'); $emp_code = $this->request->getGet('emp_code'); // This is an array containing keys to be removed from the terms and conditions array $keysToRemove = ["removable_keys"]; // Retrieve employee policy data by passing the employee primary key $empPolicy = $this->employeeModel->getEmployeePolicy($id); // Retrieve employee and dependents data by passing the employee code $employeeData = $this->employeeModel->where('emp_code',$emp_code)->where('is_active', 1 )->where('is_addon_value',0)->findAll(); // dd($empPolicy); if ($empPolicy) { $result = []; foreach ($empPolicy as $array) { // Reset employee array $empData = $employeeData; // Removes specific keys from the decoded array and assigns the result to $refusingData $decodedArray = json_decode($array->Policy_Terms); $refusingData = (object) array_diff_key((array) $decodedArray, array_flip($keysToRemove)); $array->Policy_Terms = $refusingData; // Retrieve slab rate and grid master data by passing the ClientPolicyId and ClientId $getSlabAndGridData = $this->policesModel->getPolicySlabRatesForEmpOnboard($array->ClientPolicyId,$array->ClientId); $array->SlabRates = $getSlabAndGridData['slab_rates']; $array->GridMaster = $getSlabAndGridData['grid_master']; // Construct value for policy type GPA if($getSlabAndGridData['grid_master']['policy_type'] == "GPA"){ // Filter employee data where the family_floater_key is 'self' $selfData = array_filter($empData, fn($arr) => trim(strtolower($arr['family_floater_key'])) === 'self'); $self['is_value_exist'] = true; $self['data']['family_floater_key'] = 'self'; $self['data']['employee_id'] = $id; $self['data']['relationship'] = 'Self'; $self['data']['name'] = $selfData[0]['name']; $self['data']['dob'] = $this->convertDateFormatDMY($selfData[0]['dob']); $self['data']['mobile'] = $selfData[0]['mobile']; $self['data']['client_policy_id'] = $array->ClientPolicyId; $array->mapped_family_floaters = $self; // Return result if($this->request->getGet('policy') == 'GPA') { return $this->respond(['status' => 'success','code' => 200,'data' => $array], 200); } // Construct value for policy type GMC }else if($getSlabAndGridData['grid_master']['policy_type'] == "GMC"){ // Map family floaters that already exist in the employee table $familyFloates = $array->Policy_Terms->family_floaters; // Generate Notes string based on familyFloates terms $array->notes = $this->FloterNotesConvertion($familyFloates); // Convert familyFloaters terms data to plain array $floters = $this->FloterConvertion($familyFloates); $data = []; foreach ($floters as $familyFloatesValue) { $dependent = preg_replace('/\d/', '', $familyFloatesValue); if(count($empData)){ foreach ($empData as $key => $value) { if ($value['family_floater_key'] === $dependent) { $temp['is_value_exist'] = true; $temp['data']['family_floater_key'] = $familyFloatesValue; $temp['data']['employee_id'] = $value['id']; $temp['data']['relationship'] = $value['relationship']; $temp['data']['name'] = $value['name']; $temp['data']['dob'] = $this->convertDateFormatDMY($value['dob']); $temp['data']['client_policy_id'] = $array->ClientPolicyId; $temp['data']['form_type'] = $dependent; array_push($data,$temp); unset($empData[$key]); $floters = array_diff($floters, [$familyFloatesValue]); break; } } } } // Remove Unwanted floter key from floters array based on either-parents-pil term value if($familyFloates->{'either-parents-pil'} == 1 && count($floters)) { $count_parent = 0; $count_parent_in_law = 0; foreach ($floters as $value) { if (preg_replace('/\d/', '', $value) == 'parent') { $count_parent++; } if (preg_replace('/\d/', '', $value) == 'parent_in_law') {$count_parent_in_law++;} } if($count_parent != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent_in_law') === false); } if($count_parent_in_law != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === false || strpos($value, 'parent_in_law') !== false); } } // Add family floter buttons placement data for FE validation if(count($floters)){ foreach ($floters as $familyFloatesValue) { $temp2['is_value_exist'] = false; $temp2['data']['family_floater_key'] = $familyFloatesValue; $temp2['data']['client_policy_id'] = $array->ClientPolicyId; $temp2['data']['button_name'] = 'Add '.ucfirst(str_replace('_', ' ', preg_replace('/\d/', '', $familyFloatesValue))); $temp2['data']['form_type'] = preg_replace('/\d/', '', $familyFloatesValue); array_push($data,$temp2); } } $array->mapped_family_floaters = $data; if($this->request->getGet('policy') == 'GMC'){ return $this->respond(['status' => 'success','code' => 200,'data' => $array], 200); } } $result[] = $array; } }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => []], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function FloterConvertion($array){ $result = []; foreach ($array as $key => $value) { if ($value > 0) { if ($value != 0 && $key === 'childrens') { for ($i = 1; $i <= $value; $i++) { $result[] = "child" . $i; } } else if($value != 0 && $key ==='parents') { for ($i = 1; $i <= $value; $i++) { $result[] = "parent" . $i; } }else if($value != 0 && $key ==='parents-in-law') { for ($i = 1; $i <= $value; $i++) { $result[] = "parent_in_law" . $i; } }else if($value != 0 && $key ==='either-parents-pil') { for ($i = 1; $i <= 2; $i++) { $result[] = "parent" . $i; $result[] = "parent_in_law" . $i; } }else { $result[] = $key; } } } return $result; } public function FloterNotesConvertion($array){ $result = 'Can Add Self '; foreach ($array as $key => $value) { if ($value > 0) { if($value != 0 && $key ==='either-parents-pil') { $result .= ' + Either 2 Parents or 2 Parents in law'; }else if($value != 0 && $key ==='spouse') { $string = str_replace('-', ' ', $key); $string = ucwords($string); $result .= ' + '.$string; }else if($value != 0 && $key ==='self') { }else if($value != 0 && $key ==='childrens') { if($value > 1){ $result .= ' + '.$value.' Children'; }else{ $result .= ' + '.$value.' Child'; } }else{ $string = str_replace('-', ' ', $key); $string = ucwords($string); $result .= ' + '.$value.' '.$string; } } } return $result; } public function getClientDetails() { try { $client = $this->clientModel->where('id',$this->request->getGet('client_id'))->first(); if($client) { $client['client_logo'] = base_url().'public/uploads/logo/'.$client['client_logo']; $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id'))->findAll(); return $this->respond(['status' => 'success','code' => 200,'data' => ['client'=>$client,'client_policy'=>$clientPolicy]], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => []], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function getAddOnPolicy() { try { $addOnEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('is_addon_value',1)->findAll(); $GMCEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('is_addon_value',0)->findAll(); $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id'))->findAll(); // dd($clientPolicy); if(count($clientPolicy)) { $PolicyData = []; foreach ($clientPolicy as $key => $array) { $responce = []; $decodedArray = json_decode($array['policy_terms']); $policy_terms = $decodedArray; $getSlabAndGridData = $this->policesModel->getPolicySlabRatesForEmpOnboard($array['id'],$array['client_id']); $responce['policy_name'] = $this->policesModel->where('id',$array['policy_id'])->get()->getRow()->name; $responce['SlabRates'] = $getSlabAndGridData['slab_rates']; $responce['GridMaster'] = $getSlabAndGridData['grid_master']; $responce['client_id'] = $array['client_id']; $responce['client_policy_id'] = $array['id']; $responce['is_addon'] = $array['is_addon']; $responce['open_for_enrollment'] = $array['open_for_enrollment']; $responce['policy_terms'] = $decodedArray; if($array['is_addon'] == 3) { // Map family floaters that already exist in the employee table $familyFloates = $policy_terms->family_floaters; // Convert familyFloaters terms data to plain array $floters = $this->FloterConvertion($familyFloates); $data = []; $dependent_and_si_value = 0; $dependent_and_si_premium_value = 0; $dependent_and_si_gst_value = 0; foreach ($floters as $familyFloatesValue) { $dependent = preg_replace('/\d/', '', $familyFloatesValue); if(count($addOnEmployeeData)){ foreach ($addOnEmployeeData as $key => $value) { if ($value['family_floater_key'] === $dependent) { $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array['id'])->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = $employee_policy->basic_cover_si; } if(isset($employee_policy->premium)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->premium;} if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} $temp['is_value_exist'] = true; $temp['data']['family_floater_key'] = $familyFloatesValue; $temp['data']['employee_id'] = $value['id']; $temp['data']['relationship'] = $value['relationship']; $temp['data']['name'] = $value['name']; $temp['data']['dob'] = $this->convertDateFormatDMY($value['dob']); $temp['data']['client_policy_id'] = $array['id']; $temp['data']['form_type'] = $dependent; $temp['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : null; $temp['data']['premium'] = isset($employee_policy->premium) ? $employee_policy->premium : null; array_push($data,$temp); unset($addOnEmployeeData[$key]); $floters = array_diff($floters, [$familyFloatesValue]); break; } } } } //Remove Unwanted floter key from floters array based on either-parents-pil term value if($familyFloates->{'either-parents-pil'} == 1 && count($floters)) { if(count($addOnEmployeeData) == 0) { $GMCEmpData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('is_addon_value',0) ->where('is_active', 1 ) ->where('family_floater_key','parent') ->findAll(); if(count($GMCEmpData) > 0){ $floters = array_diff($floters, ["parent1","parent2"]); }else{ $floters = array_diff($floters, ["parent_in_law1","parent_in_law2"]); } }else{ $count_parent = 0; $count_parent_in_law = 0; foreach ($floters as $value) { if (preg_replace('/\d/', '', $value) == 'parent') { $count_parent++; } if (preg_replace('/\d/', '', $value) == 'parent_in_law') {$count_parent_in_law++;} } if($count_parent != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent_in_law') === false); } if($count_parent_in_law != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === false || strpos($value, 'parent_in_law') !== false); } } } // Add family floter buttons placement data for FE validation if(count($floters)){ foreach ($floters as $familyFloatesValue) { $temp2['is_value_exist'] = false; $temp2['data']['family_floater_key'] = $familyFloatesValue; $temp2['data']['client_policy_id'] = $array['id']; $temp2['data']['button_name'] = 'Add '.ucfirst(str_replace('_', ' ', preg_replace('/\d/', '', $familyFloatesValue))); $temp2['data']['form_type'] = preg_replace('/\d/', '', $familyFloatesValue); array_push($data,$temp2); } } $responce['family_floaters_of_dependent_and_si_array'] = $data; $responce['family_floaters_of_dependent_and_si_value'] = $dependent_and_si_value; $responce['family_floaters_of_dependent_and_si_premium_value'] = $dependent_and_si_premium_value; $responce['family_floaters_of_dependent_and_gst_value'] = $dependent_and_si_gst_value; if($this->request->getGet('policy') == 'GMC-DEPENDENT-ADDON'){ return $this->respond(['status' => 'success','code' => 200,'data' => ['gmc_dependent_addon'=>$responce]], 200); } //array_push($PolicyData, $responce); }else if($array['is_addon'] == 2){ $only_si_array = []; $only_si_value = 0; $only_si_premium_value = 0; $only_si_gst_value = 0; foreach ($GMCEmployeeData as $key => $value) { $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array['id'])->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $only_si_value = $employee_policy->basic_cover_si; } if(isset($employee_policy->premium)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->premium;} if(isset($employee_policy->gst)){ $only_si_gst_value = $only_si_gst_value + $employee_policy->gst;} $temp3['is_value_exist'] = true; $temp3['data']['employee_id'] = $value['id']; $temp3['data']['relationship'] = $value['relationship']; $temp3['data']['name'] = $value['name']; $temp3['data']['dob'] = $this->convertDateFormatDMY($value['dob']); $temp3['data']['client_policy_id'] = $array['id']; $temp3['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : null; $temp3['data']['premium'] = isset($employee_policy->premium) ? $employee_policy->premium : null; array_push($only_si_array,$temp3); } $responce['family_floaters_of_only_si_array'] = $only_si_array; $responce['family_floaters_of_only_si_value'] = $only_si_value; $responce['family_floaters_of_only_si_premium_value'] = $only_si_premium_value; $responce['family_floaters_of_only_si_gst_value'] = $only_si_gst_value; if($this->request->getGet('policy') == 'GMC-SI-TOPUP'){ return $this->respond(['status' => 'success','code' => 200,'data' => ['gmc_si_topup'=>$responce]], 200); } } } // return $this->respond(['status' => 'success','code' => 200,'data' => ['addon_policy'=>$responce]], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => []], 404); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function iAgreeForAddOn() { $emp_code = $this->request->getGet('emp_code'); $client_policy_id = $this->request->getGet('client_policy_id'); $client_id = $this->request->getGet('client_id'); $this->employeeModel->where('emp_code', $emp_code ) ->where('is_active', 1 ) ->set(array('emp_status'=>'enrolled')) ->update(); $this->employeePolicyModel->where('client_policy_id', $client_policy_id ) ->where('is_active', 1 ) ->set(array('status'=>'enrolled')) ->update(); return $this->respond(['status' => 'success','code' => 200,'data' => [] ], 200); } //Post method - which receives client_policy id and empcode of the family. //Pull records againest emp code and calculate premium // retun array public function calculatePremium($clientPolicyId = null , $empCode = null, $default_si = null)//family level { helper('excel_util_helper'); $client_policy_id = $this->request->getVar('client_policy_id') ?? $clientPolicyId; $emp_code = $this->request->getVar('emp_code') ?? $empCode; $default_si = $this->request->getVar('si') ?? $default_si;// si amt which choosed in add on policy // dd($client_policy_id); $client_id = ($this->clientPolicyModel->select('client_id')->find($client_policy_id))['client_id']; // get policy and rack details $policy_terms = $this->clientPolicyModel->getPolicyDetails($client_id,$client_policy_id); $policy_type = $policy_terms[0]->is_addon; $base_policy = $policy_terms[0]->base_policy; $policy_terms = (array) $policy_terms[0];// convert obj to array //get policy slab rates $slab_details = $this->policesModel->getPolicySlabRatesForEmpOnboard($client_policy_id,$client_id); // print_r($slab_details);die(); $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(client_id: $client_id,client_policy_id: $client_policy_id,emp_code: $emp_code,emp_status:['draft','enrolled'],policy_status:['draft','enrolled']); if(!count($existing_famility_details) && $policy_type == 2)//top up addon only { //get basepolicy id then pull emplist from base policy if only current policy is DA addon policy and emplist is zero // echo 'inside'; $client_policy_id = $base_policy; $existing_famility_details = $this->employeeModel->getEmpFamilybyEmpCode(client_id: $client_id,client_policy_id: $client_policy_id,emp_code: $emp_code,emp_status:['draft','enrolled'],policy_status:['draft','enrolled']); } $file = ['id' => null,'client_id' => $client_id,'policy_id' => $client_policy_id,'action' => 'inception']; // dd($this->employeeModel->getLastQuery()); // print_r($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,$default_si); // dd($data); $employee_data_group_by_family[$emp_id] = $data; } if($clientPolicyId != null && $empCode != null) { return $employee_data_group_by_family; }else{ // dd ($employee_data_group_by_family); return $this->respond(['status' => 'success','code' => (count($employee_data_group_by_family) ? 200 : 404),'data' => [$employee_data_group_by_family] ], 200); } } }