myLogger = \Config\Services::mylogger(); $this->employeeModel = new EmployeeModel(); $this->employeePolicyModel = new EmployeePolicyModel(); $this->clientModel = new ClientModel(); $this->clientRMModel = new ClientRMModel(); $this->policesModel = new PolicesModel(); $this->relationshipModel = new RelationshipModel(); $this->fileModel= new FileModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->policyPremium1Model = new PolicyPremium1Model(); $this->policyPremium2Model = new PolicyPremium2Model(); $this->policyTypeModel = new PolicyTypeModel(); $this->notificationModel = new NotificationModel(); $this->userModel = new UserModel(); $this->feContentModel = new FEContentModel(); $this->addImgModel = new AddImgModel(); $this->clientBranchModel = new ClientBranchModel(); $this->auditHistoryModel = new AuditHistoryModel(); $this->claimStatusModel = new TicketClaimStatusModel(); $this->ticketMaster = new TicketMasterModel(); $this->ticketMessage = new TicketMessageModel(); $this->ticketController = new TicketController(); } public function getEmployeeProfile() { try { $emp_code = $this->request->getGet('emp_code'); $client_id = $this->request->getGet('client_id'); $client_branch_id = $this->request->getGet('client_branch_id'); if ($emp_code) { $relationship = 'self'; $employee = $this->employeeModel->where('emp_code', $emp_code) ->where('client_id', $client_id) ->where('client_branch_id', $client_branch_id) ->where('is_active', 1 ) ->where('relationship', $relationship) ->first(); if (null !== $this->request->getGet('client_policy_id')) { $date_coverage = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$this->request->getGet('client_policy_id'))->get()->getRow()->date_coverage; $employee['date_coverage'] = $date_coverage; } $result = $employee; $AccountManagerDetails = $this->clientRMModel->select('client_rm.* , user_profiles.*') ->join('user_profiles', 'client_rm.user_id = user_profiles.id', 'left') ->where('client_rm.client_id', $client_id ) ->where('client_rm.level', 3 ) ->findAll(); return $this->respond(['status' => 'success','code' => 200,'data' => $result, 'AccountManagerDetails'=> isset($AccountManagerDetails[0]) ? $AccountManagerDetails[0] : null ],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); } } //not in use 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); } } //not in use 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); } } //not in use 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(); $openForEnrollment = $this->findThePolicyIsOpenForEnrollment($data[0]->client_policy_id); if($openForEnrollment == false){ return $this->respond(['status' => 'failed','code' => 404,'data' => 'Enrollment closed'], 404); } 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($data[0]->id)) { $this->createEmployeePolicyData($data[0]->id , $data[0]->emp_code , $data[0]->client_id , $data[0]->client_policy_id , $data[0]->basic_cover_si); }else { $payable_employee = $this->getEmployeePayableValue($data[0]->client_policy_id,$data[0]->relationship); $this->createEmployeePolicyData($employee , $data[0]->emp_code , $data[0]->client_id , $data[0]->client_policy_id , $data[0]->basic_cover_si , $payable_employee); } $this->updatePremiumAmount($data[0]->client_policy_id , $data[0]->emp_code , $data[0]->client_branch_id); $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 getEmployeePayableValue($client_policy_id,$relationship) { $terms = $this->clientPolicyModel->where('id',$client_policy_id)->get()->getRow()->policy_terms; if(isset(json_decode($terms)->is_payable_employee)) { $is_payable_obj = json_decode($terms)->is_payable_employee; if ($relationship === 'Mother' || $relationship === 'Father' || $relationship === 'Father in Law' || $relationship === 'Mother in Law') { return $is_payable_obj->elders; } else if($relationship === 'Son' || $relationship === 'Daughter') { return $is_payable_obj->childern; } else if($relationship === 'Spouse') { return $is_payable_obj->spouse; } }else{ return 0; } } public function createEmployeePolicyData($employee_id,$emp_code,$client_id,$client_policy_id,$basic_cover_si = null,$payable_employee = 0) { 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; } $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['payable_employee']= $payable_employee; $data['status']= 'draft'; $data['date_coverage'] = $this->getEmployeeCoverageDate($emp_code, $client_policy_id); $this->employeePolicyModel->insert($data); } return true; } public function updatePremiumAmount($client_policy_id , $emp_code , $client_branch_id) { $response = $this->calculatePremium($client_policy_id , $emp_code , null , $client_branch_id); if(count($response[$emp_code])) { foreach ($response[$emp_code] as $key => $value) { if(isset($value['temp'])) { $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('basic_cover_si' => $value['policy_details']['basic_cover_si'],'premium'=> $value['policy_details']['premium'] , 'rata_premimum'=> $value['policy_details']['rata_premimum'] , 'gst'=> $value['policy_details']['gst'] )) ->update(); } } } } } public function getEmployeeCoverageDate($emp_code, $client_policy_id) { $empData = $this->employeeModel->where('emp_code',$emp_code)->where('relationship', 'self')->where('is_active',1)->first();; if($empData) { $empPolicyData = $this->employeePolicyModel->select('employee_polices.employee_id,employee_polices.client_policy_id,employee_polices.date_coverage,client_policy.policy_type_id,client_policy.base_policy') ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id', 'left') ->where('employee_polices.employee_id' , $empData['id'] ) ->where('employee_polices.is_active' , 1 ) ->findAll(); if(count($empPolicyData)) { // find same policy 'self' date of coverage $filterSelfPolicy = array_filter($empPolicyData, function($row) use ($client_policy_id) { return $row['client_policy_id'] == $client_policy_id; }); $filterSelfPolicy = array_values($filterSelfPolicy); // Reset the index of the filtered result if(count($filterSelfPolicy)){ return $filterSelfPolicy[0]['date_coverage']; }else{ // find base policy 'self' date of coverage $basePolicy = $this->clientPolicyModel->where('id',$client_policy_id)->get()->getRow()->base_policy; $filterSelfBasePolicy = array_filter($empPolicyData, function($row) use ($basePolicy) { return $row['client_policy_id'] == $basePolicy; }); $filterSelfBasePolicy = array_values($filterSelfBasePolicy); // Reset the index of the filtered result if(count($filterSelfBasePolicy)){ return $filterSelfBasePolicy[0]['date_coverage']; }else{ return null; } } }else{ return null; } }else{ return null; } } 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 createOrUpdateEmployeePolicySiAmount() { try { $requestData = $this->request->getJSON(); $openForEnrollment = $this->findThePolicyIsOpenForEnrollment($requestData[0]->client_policy_id); if($openForEnrollment == false){ return $this->respond(['status' => 'failed','code' => 404,'data' => 'Enrollment closed'], 404); } 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(); 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); } } if(count($requestData)) { $this->updatePremiumAmount($requestData[0]->client_policy_id , $requestData[0]->emp_code , $requestData[0]->client_branch_id); } 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); } } 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,branch_id:$this->request->getGet('client_branch_id')); 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 exportDataByClientPolicyId() { try { $empData = $this->employeePolicyModel->getEmployeePolicy( client_id:$this->request->getGet('client_id'),policy_id: $this->request->getGet('client_policy_id'),status:0,branch_id:$this->request->getGet('client_branch_id')); if(count($empData)) { // Define headers and map database fields to Excel fields $headers = [ 'Employee Code' => 'emp_code', 'Name' => 'name', 'Relationship' => 'relationship', 'DOB' => 'dob', 'Gender' => 'gender', 'Mobile' => 'mobile', 'Email' => 'email_corporate', 'SI' => 'basic_cover_si', 'Premium' => 'rata_premimum', 'Policy Name' => 'policy_name', 'Insurer Branch Name' => 'insurer_branch_name', 'TPA Name' => 'tpa_name', 'Status' => 'emp_status' ]; // Create a new Spreadsheet object $spreadsheet = new Spreadsheet(); // Get the active sheet $sheet = $spreadsheet->getActiveSheet(); // Add headers $column = 'A'; foreach ($headers as $header => $dbField) { $sheet->setCellValue($column . '1', $header); $column++; } // Add data $row = 2; foreach ($empData as $employee) { $column = 'A'; foreach ($headers as $dbField) { $sheet->setCellValue($column . $row, $employee[$dbField]); $column++; } $row++; } // Set the header for download $filename = $empData[0]['policy_name'].'-Enrolment.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); // Save the Excel file to output $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit; return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); }else{ return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } //not in use 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); } } // 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'); $client_branch_id = $this->request->getPost('client_branch_id'); $policy_id = $this->request->getPost('policy_id'); $client_data = $this->clientModel->where('id', $client_id)->first(); $notification = $this->notificationModel->where('client_id',$client_id)->where('template_name','member_welcome_mail')->first(); $jwt = $this->request->getHeaderLine('Authorization'); $jwtParts = explode(' ', $jwt); $token = $jwtParts[1]; $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)->where('client_branch_id', $client_branch_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/excel'); $filename = $file->getName(); $file_name_with_path = WRITEPATH."/uploads/excel/".$filename; //make an entry in DB $file_id = $this->fileModel->insert(['file_name' => $filename, 'client_id' => $client_id, 'policy_id' => $policy_id, 'created_by' => $employee_id, 'status' => 'inprogress', 'action' => 'enrollment', 'client_branch_id' => $client_branch_id]); //here field policy_id have client_policy_id and not policy id from policy master $this->myLogger->logme("error", '{file_id} - client uploaded success', ['file_id' => $file_id]); $empServiceController = new EmployeeServiceController(); $result = $empServiceController->excelFileFormatValidation(['file_id' => $file_id]); if(isset($result['error_summary']) && count($result['error_summary'])) { $result = $empServiceController->getExcelErrorData($file_id); return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "file upload failed with errors",'data' => $result], 200); } //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['client_branch_id']= $client_branch_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 json_encode($data[0]); // 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= []; foreach ($extra['0'] as $index => $id) { $relation =''; if (strtolower(trim($extra['5'][$index])) === 'mother' || strtolower(trim($extra['5'][$index])) === 'father') { $relation = 'parent'; } else if(strtolower(trim($extra['5'][$index])) === 'son' || strtolower(trim($extra['5'][$index])) === 'daughter'){ $relation = 'child'; }else if(strtolower(trim($extra['5'][$index])) === 'father in law' || strtolower(trim($extra['5'][$index])) === 'mother in law'){ $relation = 'parent_in_law'; }else if(strtolower(trim($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(trim($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_pay'=> $extra['11'][$index], 'unit'=> isset($extra['12'][$index]) ? $extra['12'][$index] : null, 'client_branch_id' => $client_branch_id, 'date_coverage' => $extra['13'][$index] != "" && $extra['13'][$index] != null ? change_date_format($extra['13'][$index],'d-M-Y','Y-m-d') : null ]; $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; $wholeData=[];// Initialize an empty array to store employee email. for ($a=0; $a employeeModel->checkExistingEmployee($dataToInsert[$a],$client_branch_id); $emp_id =0; $data_after_gpa_or_gmc =[]; if ($client_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'])); } } } $employee_policy = $this->employeePolicyModel->checkExistingEmpPolicy(['employee_id' => $emp_id,'client_policy_id' => $policy_id]); $emp_policy_data =[ 'employee_id'=>$emp_id, 'client_policy_id'=>$policy_id, 'status'=> 'draft', 'date_coverage' => $date_coverage, 'payable_employee' => check_pay_by_employee_or_company($client_policy['policy_terms'], $dataToInsert[$a]['relationship']), 'basic_cover_si'=>isset($basic_cover_si[$a]) ? $basic_cover_si[$a] : null, 'file_id' => isset($employee_policy['file_id']) && $employee_policy['file_id'] != '' ? $employee_policy['file_id'] : $file_id, ]; // print_r($employee_policy); die; 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); } $emp_policy_id = $employee_policy[0]['id']; } else { $emp_policy_id = $this->employeePolicyModel->insert($emp_policy_data); } if (isset($notification) && $notification['enabled'] == 1 && !empty($notification['mail_content'])) { //trigger // $wholeData=[]; if ($dataToInsert[$a]['relationship'] == 'Self' && isset($dataToInsert[$a]['email_corporate']) && !empty($dataToInsert[$a]['email_corporate'])) { $params['dataToInsert'] = $dataToInsert[$a]; $params['notification'] = $notification; $params['client_data'] = $client_data; $params['common'] = [ 'client_id' => $client_id, 'client_branch_id' => $client_branch_id, 'client_policy_id' => $policy_id, 'employee_policy_id' => $emp_policy_id ?? null, 'employee_id' => $emp_id, 'mail_type' => 'member_welcome_mail', ]; $wholeData[] = sendMailNotification::sendMailNotification('member_welcome_mail', $params); $count++; } // if($count == 20 || $a == count($dataToInsert)-1){ // if (count($wholeData) > 0) { // $job_details = new Jobs(); // $r = Jobs::addJob(['job_name' => 'bulk_mail','payload' => $wholeData]); // $wholeData = []; // $count = 0; // } // } // if ($dataToInsert[$a]['email_corporate'] != null || $dataToInsert[$a]['email_corporate'] != '' && $dataToInsert[$a]['relationship'] == 'Self') { } } // print_r($wholeData); die; // for bulk mail queue job push if (!empty($wholeData) && count($wholeData) > 0) { $wholeData = array_chunk($wholeData, 20); foreach ($wholeData as $key => $value) { $job_details = new Jobs(); $r = Jobs::addJob(['job_name' => 'bulk_mail', 'payload' => $value]); } } $this->fileModel->where('id', $file_id)->set(['status' => 'success','reason' => '','error_data' => ''])->update(); 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 getAgeRange($terms,$familyFloatesValue) { $ageRangeArray = ['self' => ['min' => 18, 'max' => 60] , 'spouse' => ['min' => 18, 'max' => 60] , 'child' => ['min' => 0, 'max' => 25] , 'elders' => ['min' => 18, 'max' => 60] ]; $ageKey = (preg_replace('/\d/', '', $familyFloatesValue) == 'parent' || preg_replace('/\d/', '', $familyFloatesValue) == 'parent_in_law') ? 'elders' : preg_replace('/\d/', '', $familyFloatesValue); if(isset($terms->age_ratio)){ return $terms->age_ratio->$ageKey; }else{ return $ageRangeArray[$ageKey]; } } public function getEmployeePolicy() { try { $id = $this->request->getGet('id'); $emp_code = $this->request->getGet('emp_code'); $client_id = $this->request->getGet('client_id'); $client_branch_id = $this->request->getGet('client_branch_id'); $login_by_hr = $this->request->getGet('login_by_hr'); // 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); // dd($empPolicy); // Retrieve employee and dependents data by passing the employee code $employeeData = $this->employeeModel->where('emp_code',$emp_code) ->where('client_id',$client_id) ->where('client_branch_id',$client_branch_id) ->where('is_active', 1 ) ->where('is_addon_value',0)->findAll(); 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']; if($array->tpa_id != null){ $array->eCardDownload = base_url('download-e-card/') . $array->rand_string.'/1'; }else{ $array->eCardDownload = null; } // Construct value for policy type GPA // $getSlabAndGridData['grid_master']['policy_type'] == "GPA" if($array->policy_type_id == 1 && $this->request->getGet('policy') == 'GPA') { $si_value = 0; $si_premium_value = 0; $si_gst_value = 0; // Filter employee data where the family_floater_key is 'self' $selfData = array_filter($empData, fn($arr) => trim(strtolower($arr['family_floater_key'])) === 'self'); $employee_policy = $this->employeePolicyModel->where('employee_id',$selfData[0]['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); $si_value = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { $si_premium_value = $si_premium_value + $employee_policy->rata_premimum; $si_gst_value = $si_gst_value + $employee_policy->gst; } $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; $self['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; $array->mapped_family_floaters = $self; $array->type = 'GPA'; $array->si_value = $si_value; $array->si_premium_value = $si_premium_value; $array->si_gst_value = $si_gst_value; $res = []; array_push($res,$array); $EDLIPolicy = $this->getAdditionalGPAPolicy($employeeData,6,$emp_code,$client_id,$client_branch_id,$login_by_hr); if($EDLIPolicy){ array_push($res,$EDLIPolicy); } $GTLIPolicy = $this->getAdditionalGPAPolicy($employeeData,7,$emp_code,$client_id,$client_branch_id,$login_by_hr); if($GTLIPolicy){ array_push($res,$GTLIPolicy); } return $this->respond(['status' => 'success','code' => 200,'data' => $res ], 200); // Return result if($this->request->getGet('policy') == 'GPA') { return $this->respond(['status' => 'success','code' => 200,'data' => $array], 200); } // Construct value for policy type GMC // $getSlabAndGridData['grid_master']['policy_type'] == "GMC" }else if($array->policy_type_id == 2 && $this->request->getGet('policy') == '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); if($getSlabAndGridData['slab_rates'][0]['premium_type'] == 1 || $getSlabAndGridData['slab_rates'][0]['premium_type'] == 3) { $array->floter_text_heading = 'Floater Sum Insured'; $array->floter_text_description = 'This is a floater sum insured. A floater is a type of sum insured that provides coverage to more than one member ot a family at the same time. Simply put, its a single insurance cover for the entire family.'; }else{ $array->floter_text_heading = 'Sum Insured'; $array->floter_text_description = ''; } // remove parent and parent-in-law from familyFloaters if($familyFloates->{'either-parents-pil'} != 0){ unset($familyFloates->parents); unset($familyFloates->parents_in_law); } $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($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)->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} 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->ClientPolicyId; $temp['data']['form_type'] = $dependent; $temp['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; $temp['data']['age_validation'] = $this->getAgeRange($decodedArray,$familyFloatesValue); 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); } } else if($familyFloates->{'either-parents-pil'} == 2 && 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 + $count_parent_in_law) == 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === 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); $temp2['data']['age_validation'] = $this->getAgeRange($decodedArray,$familyFloatesValue); array_push($data,$temp2); } } $array->mapped_family_floaters = $data; $array->type = "GMC"; $array->family_floaters_of_dependent_and_si_value = $dependent_and_si_value > 0 ? $dependent_and_si_value : 0; $array->family_floaters_of_dependent_and_si_premium_value = $dependent_and_si_premium_value > 0 ? round($dependent_and_si_premium_value) : 0; $array->family_floaters_of_dependent_and_gst_value = $dependent_and_si_gst_value > 0 ? round($dependent_and_si_gst_value) : 0; $checkGmcParentsPolicyExist = $this->clientPolicyModel->select('client_policy.id as ClientPolicyId , client_policy.client_id as ClientId, client_policy.policy_type_id as policy_type_id, policy_type.long_name as Policy_Name , client_policy.is_addon as is_addon , client_policy.open_for_enrollment as OpenForEnrollment , client_policy.inception_type as inception_type , client_policy.policy_terms as Policy_Terms') ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left') ->where('client_policy.policy_type_id', 3 ) ->where('client_policy.is_addon', 1 ) ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') ) ->where('client_policy.is_active', 1 ) ->get() ->getResult(); if($checkGmcParentsPolicyExist) { $GmcParrentsData = $this->getGmcParrentsPolicy($checkGmcParentsPolicyExist,$emp_code,$client_id,$client_branch_id); return $this->respond(['status' => 'success','code' => 200,'data' => [$array,$GmcParrentsData]], 200); } if($this->request->getGet('policy') == 'GMC'){ return $this->respond(['status' => 'success','code' => 200,'data' => [$array]], 200); } } // $result[] = $array; } return $this->respond(['status' => 'success','code' => 200,'data' => []], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => []], 200); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getLine()], 500); } } public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id,$client_branch_id) { $employeeData = $this->employeeModel->where('emp_code',$emp_code) ->where('client_id',$client_id) ->where('client_branch_id',$client_branch_id) ->where('is_active', 1 ) ->where('is_addon_value',0)->findAll(); // return $employeeData; foreach ($GmcParrentsPolicy as $key => $array) { // Reset employee array $empData = $employeeData; $array->Policy_Terms = json_decode($array->Policy_Terms); // 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']; $tpaArray = $this->employeeModel->select('employees.name as name , employee_polices.tpa_id as tpa_id , employee_polices.rand_string as rand_string') ->join('employee_polices', 'employee_polices.employee_id = employees.id') ->where('employees.emp_code',$emp_code) ->where('employees.is_active',1) ->where('employee_polices.client_policy_id',$array->ClientPolicyId) ->get() ->getResult(); if(count($tpaArray)) { if($tpaArray[0]->tpa_id != null) $array->eCardDownload = base_url('download-e-card/') . $tpaArray[0]->rand_string.'/1'; else $array->eCardDownload = null; }else{ $array->eCardDownload = null; } $array->eCardDownload = null; // 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); if($getSlabAndGridData['slab_rates'][0]['premium_type'] == 1 || $getSlabAndGridData['slab_rates'][0]['premium_type'] == 3) { $array->floter_text_heading = 'Floater Sum Insured'; $array->floter_text_description = 'This is a floater sum insured. A floater is a type of sum insured that provides coverage to more than one member ot a family at the same time. Simply put, its a single insurance cover for the entire family.'; }else{ $array->floter_text_heading = 'Sum Insured'; $array->floter_text_description = ''; } // remove parent and parent-in-law from familyFloaters if($familyFloates->{'either-parents-pil'} != 0){ unset($familyFloates->parents); unset($familyFloates->parents_in_law); } // 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($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)->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} 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->ClientPolicyId; $temp['data']['form_type'] = $dependent; $temp['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; $temp['data']['age_validation'] = $this->getAgeRange($array->Policy_Terms,$familyFloatesValue); 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); } } else if($familyFloates->{'either-parents-pil'} == 2 && 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 + $count_parent_in_law) == 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === 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); $temp2['data']['age_validation'] = $this->getAgeRange($array->Policy_Terms,$familyFloatesValue); array_push($data,$temp2); } } $array->mapped_family_floaters = $data; $array->type = "GMC - Parents"; $array->family_floaters_of_dependent_and_si_value = $dependent_and_si_value > 0 ? $dependent_and_si_value : 0; $array->family_floaters_of_dependent_and_si_premium_value = $dependent_and_si_premium_value > 0 ? round($dependent_and_si_premium_value) : 0; $array->family_floaters_of_dependent_and_gst_value = $dependent_and_si_gst_value > 0 ? round($dependent_and_si_gst_value) : 0; return $array; } } public function getAdditionalGPAPolicy($empData,$policy_type,$emp_code,$client_id,$client_branch_id,$login_by_hr) { $checkPolicyExist = $this->clientPolicyModel->select('client_policy.id as ClientPolicyId , client_policy.client_id as ClientId, client_policy.policy_type_id as policy_type_id, client_policy.is_addon as is_addon , client_policy.open_for_enrollment as OpenForEnrollment , client_policy.inception_type as inception_type , client_policy.policy_terms as Policy_Terms , client_policy.enrolment_visibility') ->where('client_policy.policy_type_id', $policy_type ) ->where('client_policy.is_addon', 1 ) ->where('client_policy.client_id', $client_id ) ->where('client_policy.client_branch_id', $client_branch_id ) ->where('client_policy.is_active', 1 ) ->get() ->getResult(); if($checkPolicyExist){ foreach ($checkPolicyExist as $key => $array) { $decodedArray = json_decode($array->Policy_Terms); $array->Policy_Terms = $decodedArray; $si_value = 0; $si_premium_value = 0; $si_gst_value = 0; // Filter employee data where the family_floater_key is 'self' $selfData = array_filter($empData, fn($arr) => trim(strtolower($arr['family_floater_key'])) === 'self'); $employee_policy = $this->employeePolicyModel->where('employee_id',$selfData[0]['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); $si_value = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { $si_premium_value = $si_premium_value + $employee_policy->rata_premimum; $si_gst_value = $si_gst_value + $employee_policy->gst; } $policyTypeData = $this->policyTypeModel->where('id',$policy_type)->get()->getRow(); $array->type = $policyTypeData->policy_type; $array->Policy_Name = $policyTypeData->long_name; $array->si_value = $si_value; $array->si_premium_value = $si_premium_value; $array->si_gst_value = $si_gst_value; if($employee_policy){ if($employee_policy->tpa_id != null){ $array->eCardDownload = base_url('download-e-card/') . $employee_policy->rand_string.'/1'; }else{ $array->eCardDownload = null; } $self['is_value_exist'] = true; $self['data']['family_floater_key'] = 'self'; $self['data']['employee_id'] = $selfData[0]['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; $self['data']['basic_cover_si'] = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; $array->mapped_family_floaters = $self; if (isset($login_by_hr) && $login_by_hr == true) { return $array; }else{ if($array->enrolment_visibility == 1) return $array; else return false; } }else{ return false; } } } } public function FloterConvertion($array){ $result = []; foreach ($array as $key => $value) { if ($value > 0 && $key != 'elders_count') { if ($value != 0 && $key === 'childrens') { if($value > 2){ $value = 2; } 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 = ' '; foreach ($array as $key => $value) { if ($value > 0) { if($value == 1 && $key ==='either-parents-pil') { $result .= ' + Either 2 Parents or 2 Parents in law'; }else if($value == 2 && $key ==='either-parents-pil') { $result .= ' + Any 2 of Parents and Parents in law'; }else if($value != 0 && $key ==='spouse') { $string = str_replace('-', ' ', $key); $string = ucwords($string); $result .= ' + '.$string; }else if($value != 0 && $key ==='self') { $result = 'Allowed members Self '; }else if($value != 0 && $key ==='childrens') { if($value > 1){ $result .= ' + '.$value.' Children'; }else{ $result .= ' + '.$value.' Child'; } }else if($value != 0 && $key ==='elders_count') { }else{ $string = str_replace('-', ' ', $key); $string = ucwords($string); $result .= ' + '.$value.' '.$string; } } } $first_two_chars = substr($result, 0, 3); if($first_two_chars == " +"){ $modified_string = substr($result, 3); return "Allowed members ".$modified_string; }else{ return $result; } return substr($result, 0, 2) !== " +"; } 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')) ->where('client_branch_id',$this->request->getGet('client_branch_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('client_id',$this->request->getGet('client_id')) ->where('client_branch_id',$this->request->getGet('client_branch_id')) ->where('is_addon_value',1)->findAll(); $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id')) ->where('client_branch_id',$this->request->getGet('client_branch_id')) ->where('policy_status', 1) ->where('is_active', 1) ->findAll(); if(count($clientPolicy)) { $self = $this->employeeModel->where('employees.is_active', 1) ->where('employees.emp_code', $this->request->getGet('emp_code')) ->where('employees.client_id', $this->request->getGet('client_id')) ->where('employees.client_branch_id', $this->request->getGet('client_branch_id')) ->where('employees.family_floater_key', 'self') ->get() ->getRow(); $band = $self->band; $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']); $uniqueData = []; $siValues = []; foreach ($getSlabAndGridData['slab_rates'] as $item) { if($getSlabAndGridData['grid_master']['emp_band'] == 1 ){ if ($item['grade'] == $band) { $uniqueData[] = $item; } }else{ if (!in_array($item['si'], $siValues) ) { if ($item['policy_grid_id'] == 11 && ($item['max_si'] != 0 || $item['max_si'] != null)) { $uniqueData[] = $item; $siValues[] = $item['si']; }else if($item['policy_grid_id'] != 11){ $uniqueData[] = $item; $siValues[] = $item['si']; } } } } $policyTypeData = $this->policyTypeModel->where('id',$array['policy_type_id'])->get()->getRow(); $responce['policy_name'] = $policyTypeData->long_name; $responce['type'] = $policyTypeData->policy_type; $responce['SlabRates'] = $uniqueData; $responce['GridMaster'] = $getSlabAndGridData['grid_master']; $responce['client_id'] = $array['client_id']; $responce['client_policy_id'] = $array['id']; $responce['is_addon'] = $array['is_addon']; $responce['OpenForEnrollment'] = $array['open_for_enrollment']; $responce['policy_terms'] = $decodedArray; $responce['policy_type_id'] = $array['policy_type_id']; //$responce['is_member_modify_allowed'] = $array['is_member_modify_allowed']; $responce['disclaimer'] = $array['disclaimer']; $tpaArray = $this->employeeModel->select('employees.name as name , employee_polices.tpa_id as tpa_id , employee_polices.rand_string as rand_string') ->join('employee_polices', 'employee_polices.employee_id = employees.id') ->where('employees.emp_code',$this->request->getGet('emp_code')) ->where('employees.is_active',1) ->where('employee_polices.client_policy_id',$array['id']) ->get() ->getResult(); if(count($tpaArray)) { if($tpaArray[0]->tpa_id != null) $responce['eCardDownload'] = base_url('download-e-card/') . $tpaArray[0]->rand_string.'/1'; else $responce['eCardDownload'] = null; }else{ $responce['eCardDownload'] = null; } if(count($getSlabAndGridData['slab_rates'])){ if($getSlabAndGridData['slab_rates'][0]['premium_type'] == 1 || $getSlabAndGridData['slab_rates'][0]['premium_type'] == 3) { $responce['floter_text_heading'] = 'Floater Sum Insured'; }else{ $responce['floter_text_heading'] = 'Sum Insured'; } } if($array['is_addon'] == 3 && $array['policy_type_id'] == 3)//dependent add on policy { if($this->request->getGet('client_id') == 8) // This changes only for client "sterling" { $selfGMC = $this->employeeModel->select('employees.name , employee_polices.basic_cover_si') ->join('employee_polices', 'employees.id = employee_polices.employee_id') ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id AND client_policy.policy_type_id = 2') ->where('employees.is_active', 1) ->where('employees.emp_code', $this->request->getGet('emp_code')) ->where('employees.client_id', $this->request->getGet('client_id')) ->where('employees.client_branch_id', $this->request->getGet('client_branch_id')) ->where('employees.family_floater_key', 'self') ->get() ->getRow(); $selfSi = $selfGMC->basic_cover_si; $filteredSlabRates = array_filter($responce['SlabRates'], function ($rate) use ($selfSi) { return $rate['si'] === $selfSi; }); // To reindex the array to have a proper 0 index $responce['SlabRates'] = array_values($filteredSlabRates); } // Map family floaters that already exist in the employee table $familyFloates = $policy_terms->family_floaters; // remove parent and parent-in-law from familyFloaters if($familyFloates->{'either-parents-pil'} != 0){ unset($familyFloates->parents); unset($familyFloates->parents_in_law); } // 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 = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} 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; $temp['data']['age_validation'] = $this->getAgeRange($decodedArray,$familyFloatesValue); 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)) { $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); } } else if($familyFloates->{'either-parents-pil'} == 2 && 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 + $count_parent_in_law) == 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === 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); $temp2['data']['age_validation'] = $this->getAgeRange($decodedArray,$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 > 0 ? $dependent_and_si_value : 0; $responce['family_floaters_of_dependent_and_si_premium_value'] = $dependent_and_si_premium_value > 0 ? round($dependent_and_si_premium_value) : 0; $responce['family_floaters_of_dependent_and_gst_value'] = $dependent_and_si_gst_value > 0 ? round($dependent_and_si_gst_value) : 0; 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 && $array['policy_type_id'] == 4)//Topup policy { $whereArray = []; foreach ( $decodedArray->family_floaters as $key => $value) { if($value != 0){ if($key == 'parents'){ $text = ["parent"]; } else if($key == 'childrens'){ $text = ["child"]; } else if($key == 'parents-in-law'){ $text = ["parent_in_law"];} else if($key ==='either-parents-pil') { $text = ["parent", "parent_in_law"];} else{ $text = [$key]; } $whereArray = array_merge($whereArray, $text); } } $getAddOnType = $this->clientPolicyModel->where('id',$array['base_policy'])->where('policy_status', 1)->get()->getRow(); $basePolicyAddOnType = $getAddOnType->is_addon; // if is_addon value is 1 it is GMC if not it is one of the Add On policy if($basePolicyAddOnType == 1){ $is_addon_value = 0; }else{ $is_addon_value = 1; } $only_si_array = []; $only_si_value = 0; $only_si_premium_value = 0; $only_si_gst_value = 0; $BasePolicyEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('is_addon_value',$is_addon_value)->whereIn('family_floater_key',$whereArray)->findAll(); foreach ($BasePolicyEmployeeData 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 = ($only_si_value == 0) ? $employee_policy->basic_cover_si : $only_si_value; } if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} 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'] = round($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); } }else if($array['is_addon'] == 2 && $array['policy_type_id'] == 5)//Parents Topup policy { $whereArray = []; foreach ( $decodedArray->family_floaters as $key => $value) { if($value != 0){ if($key == 'parents'){ $text = ["parent"]; } else if($key == 'childrens'){ $text = ["child"]; } else if($key == 'parents-in-law'){ $text = ["parent_in_law"];} else if($key ==='either-parents-pil') { $text = ["parent", "parent_in_law"];} else{ $text = [$key]; } $whereArray = array_merge($whereArray, $text); } } $getAddOnType = $this->clientPolicyModel->where('id',$array['base_policy'])->where('policy_status', 1)->get()->getRow(); $basePolicyAddOnType = $getAddOnType->is_addon; // if is_addon value is 1 it is GMC if not it is one of the Add On policy if($basePolicyAddOnType == 1){ $is_addon_value = 0; }else{ $is_addon_value = 1; } $only_si_array = []; $only_si_value = 0; $only_si_premium_value = 0; $only_si_gst_value = 0; $BasePolicyEmployeeData = $this->employeeModel->where('is_active', 1 )->where('emp_code',$this->request->getGet('emp_code'))->where('client_id',$this->request->getGet('client_id'))->where('is_addon_value',$is_addon_value)->whereIn('family_floater_key',$whereArray)->findAll(); foreach ($BasePolicyEmployeeData 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 = ($only_si_value == 0) ? $employee_policy->basic_cover_si : $only_si_value; } if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) { if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} 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'] = round($only_si_premium_value); $responce['family_floaters_of_only_si_gst_value'] = round($only_si_gst_value); if($this->request->getGet('policy') == 'GMC-SI-PARENT-TOPUP'){ return $this->respond(['status' => 'success','code' => 200,'data' => ['gmc_si_parent_topup'=>$responce]], 200); } } } return $this->respond(['status' => 'success','code' => 200,'data' => []], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => []], 200); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } public function iAgreeForAddOn() { $postData = json_decode($this->request->getBody(), true); $this->myLogger->logme("error", $this->request->getBody()); $client_policy_id = $postData['client_policy_id']; sort($client_policy_id); $emp_code = $postData['emp_code']; $client_id = $postData['client_id']; $empData = $this->employeeModel->where('emp_code', $emp_code )->where('client_id', $client_id ) ->where('is_active', 1 )->findAll(); $employeeIds = array_column($empData, 'id'); //for mail common parameter $filteredEmpData = array_filter($empData, fn($item) => $item['relationship'] === 'Self'); if (!is_null($client_policy_id) && is_array($client_policy_id)) { $array_list = []; foreach ($client_policy_id as $key => $value) { $policy = $this->clientPolicyModel->where('id',$value)->where('open_for_enrollment',1)->find(); if($policy) { $this->myLogger->logme("error", 'client policy id = '.$value.' is open for enrollment'); $empPolicyData = $this->employeePolicyModel->where('client_policy_id', $value ) ->where('is_active', 1 ) ->whereIn('employee_id',$employeeIds) ->findAll(); if(count($empPolicyData)) { $empIdsFromPolicyData = array_column($empPolicyData, 'employee_id'); //update emp polict table $this->employeePolicyModel->where('client_policy_id', $value ) ->where('is_active', 1 ) ->whereIn('employee_id', $empIdsFromPolicyData ) ->groupStart() ->where('status', 'draft') ->orWhere('status', 'enrolled') ->groupEnd() ->set(array('status'=>'enrolled')) ->update(); //update Employee table $this->employeeModel->where('emp_code', $emp_code) ->whereIn('id', $empIdsFromPolicyData) ->where('client_id', $client_id) ->where('is_active', 1) ->groupStart() ->where('emp_status', 'draft') ->orWhere('emp_status', 'enrolled') ->groupEnd() ->set(['emp_status' => 'enrolled']) ->update(); } $find = $this->employeeModel->getEmpFamilybyEmpCode(client_policy_id: $value,emp_code: $emp_code,client_id: $client_id,emp_status:['draft','enrolled'],policy_status:['draft','enrolled']); if(count($find) > 0){ $array_list[] = $find; } }else { $this->myLogger->logme("error", 'client policy id = '.$value.' is not open for enrollment');} } $notification = $this->notificationModel->where('client_id' ,$client_id)->where('template_name', 'member_review_and_summary_mail')->first(); if (isset($notification) && $notification['enabled'] == 1 && count($array_list)) { $params ['array_list'] = $array_list; $params ['client_policy_id'] = $client_policy_id; $params ['emp_code'] = $emp_code; $params ['client_id'] = $client_id; $params ['notification'] = $notification; $params['common'] = [ 'client_id' => $filteredEmpData[0]['client_id'], 'client_branch_id' => $filteredEmpData[0]['client_branch_id'], 'client_policy_id' => null, 'employee_policy_id' => null, 'employee_id' => $filteredEmpData[0]['id'], 'mail_type' => 'member_review_and_summary_mail', ]; // print_r($params);die; $wholeData =sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params); $mail_send_return = MailHelper::send_email($wholeData[0]); $this->myLogger->logme("info", $mail_send_return); if (isset($wholeData[0])) { $params['common']['mail_type'] = 'account_maneger_summary_mail'; $account_manager_wholeData =sendMailNotification::sendMailNotification('account_maneger_summary_mail', $params); if($account_manager_wholeData != null && $account_manager_wholeData != '' && count($account_manager_wholeData)) { foreach ($account_manager_wholeData as $key => $value) { $mail_send_return1 = MailHelper::send_email($value); $this->myLogger->logme("info", $mail_send_return1); } }else{ $this->myLogger->logme("error", 'Account Manager Mail Configuration not Enable for this client'); } $params['common']['mail_type'] = 'client_hr_summary_mail'; $client_hr_wholeData =sendMailNotification::sendMailNotification('client_hr_summary_mail', $params); if($client_hr_wholeData != null && $client_hr_wholeData != '' &&count($client_hr_wholeData)) { foreach ($client_hr_wholeData as $key => $value) { $mail_send_return2 = MailHelper::send_email($value); $this->myLogger->logme("info", $mail_send_return2); } }else{ $this->myLogger->logme("error", 'Client HR Mail Configuration not Enable for this client'); } } }else{ $this->myLogger->logme("error", 'Member Review Mail Configuration not Enable for this client'); } } 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 , $client_branch_id = null)//family level { // dd($clientPolicyId, $empCode, $default_si, $client_branch_id); helper('excel_util_helper'); if($this->request){ // $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 $client_branch_id = $this->request->getVar('client_branch_id') ?? $client_branch_id; }else{ //Cli and enrollment $client_policy_id = $clientPolicyId; $emp_code = $empCode; $default_si = $default_si;// si amt which choosed in add on policy $client_branch_id =$client_branch_id; } // 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'); // print_r(($employee_data_group_by_family));//die(); $existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $client_id,client_branch_id: $client_branch_id); foreach ($employee_data_group_by_family as $emp_id => $family) { $transformed_famility_details = transform_db_data_to_excel($family); $data = calculate_premium_new(family_data: $transformed_famility_details,policy_terms:$policy_terms,slab_details:$slab_details,fileArr: $file,existing_units: $existing_units,default_si : $default_si); $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); } } public function getCashDepositData() { $ClientPolicyData = $this->clientPolicyModel->select('client_policy.client_id as clientId , client_policy.insurer_id as insurerId,insurers.name as insurer_name') ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left') ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') ) ->where('client_policy.is_active', 1 ) ->where('client_policy.policy_status', 1) ->groupBy('client_policy.insurer_id') ->findAll(); $result = []; if(count($ClientPolicyData)) { foreach ($ClientPolicyData as $key => $value) { $data['clientId'] = $value['clientId']; $data['insurerId'] = $value['insurerId']; $data['insurerName'] = $value['insurer_name']; $data['depositData'] = $this->clientPolicyModel->getdepositData($value['clientId'],$value['insurerId']); $data['balance'] = count($data['depositData']) ? $data['depositData'][0]->balance : 0; $data['policyDetails'] = []; $ClientPolicyData = $this->clientPolicyModel->select('client_policy.id as client_policy_id , client_policy.client_id as client_id, client_policy.policy_type_id as policy_type_id, client_policy.is_addon as is_addon , client_policy.open_for_enrollment as OpenForEnrollment , client_policy.inception_type as inception_type ') ->where('client_policy.insurer_id', $value['insurerId'] ) ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') ) ->where('client_policy.is_active', 1 ) ->where('client_policy.policy_status', 1) ->findAll(); // dd( $ClientPolicyData); foreach ($ClientPolicyData as $key => $value) { $policyTypeData = $this->policyTypeModel->where('id',$value['policy_type_id'])->get()->getRow(); $value['type'] = $policyTypeData->policy_type; $value['policy_name'] = $policyTypeData->long_name; $employeeDetails = $this->employeePolicyModel->getEmployeePolicy( client_id:$value['client_id'],policy_id: $value['client_policy_id'],status:0,branch_id:$this->request->getGet('client_branch_id')); $enrolledCount = 0; $draftCount = 0; if(count($employeeDetails)) { foreach ($employeeDetails as $item) { if ($item['emp_status'] === 'enrolled') { $enrolledCount++; } elseif ($item['emp_status'] === 'draft') { $draftCount++; } } } $value['totalMembersCount'] = count($employeeDetails); $value['membersCountOfEnrolled'] = $enrolledCount; $value['membersCountOfDraft'] = $draftCount; array_push($data['policyDetails'],$value); } array_push($result,$data); } } if($result) { return $this->respond(['status' => 'success','code' => (count($result) ? 200 : 404),'data' => $result ], 200); }else{ return $this->respond(['status' => 'failed','code' => (count($result) ? 200 : 404),'data' => [] ], 200); } } public function exportCashDepositData() { $CashDepositData = $this->clientPolicyModel->getdepositData($this->request->getGet('client_id'),$this->request->getGet('insurer_id')); // echo '
';print_r($CashDepositData); echo '
';die; if(count($CashDepositData)) { // Define headers and map database fields to Excel fields $headers = [ 'Date' => 'created_at', 'Type' => 'transaction_type', 'Amount' => 'amount', 'Balance' => 'balance', 'Description' => 'description', 'Insurer Name' => 'insurer_name', 'Client Name' => 'clientname' ]; // Create a new Spreadsheet object $spreadsheet = new Spreadsheet(); // Get the active sheet $sheet = $spreadsheet->getActiveSheet(); // Add headers $column = 'A'; foreach ($headers as $header => $dbField) { $sheet->setCellValue($column . '1', $header); $column++; } // Add data $row = 2; foreach ($CashDepositData as $Cashvalue) { $column = 'A'; foreach ($headers as $dbField) { $sheet->setCellValue($column . $row, $Cashvalue->$dbField); $column++; } $row++; } // Set the header for download $filename = $CashDepositData[0]->insurer_name.'-CashDeposit.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); // Save the Excel file to output $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit; return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); }else{ return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); } } public function removeEmpAndEmpPolicyData() { try { $clientPolicy = $this->clientPolicyModel->where('id',$this->request->getGet('client_policy_id')) ->where('open_for_enrollment',1)->findAll(); if(count($clientPolicy)) { if($clientPolicy[0]['is_addon'] == 2)//Topup { if($clientPolicy[0]['policy_type_id'] == 4)//GMC-Topup { $empData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('is_addon_value', 0 ) ->findAll(); }else if($clientPolicy[0]['policy_type_id'] == 5)//GMC-Parent-Topup { $empData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('is_addon_value', 1 ) ->findAll(); } if(count($empData)) { foreach ($empData as $key => $value) { $this->employeePolicyModel->where('client_policy_id',$this->request->getGet('client_policy_id') ) ->where('employee_id', $value['id'] ) ->set(array('is_active'=> 0 )) ->update(); } } } else if($clientPolicy[0]['is_addon'] == 3)//Dependent addon { $empData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('is_addon_value', 1 )->findAll(); if(count($empData)) { foreach ($empData as $key => $value) { $this->employeePolicyModel->where('client_policy_id',$this->request->getGet('client_policy_id') ) ->where('employee_id', $value['id'] ) ->set(array('is_active'=> 0 )) ->update(); } $this->employeeModel->where('emp_code', $this->request->getGet('emp_code') ) ->where('is_active', 1 )->where('is_addon_value', 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' => [] ], 200); } } catch (\Exception $e) { return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } } function getEmployeeActiveOrInactivePolicy() { if($this->request->getGet('type') == 'Active'){ $policy_status = 1; }else{ $policy_status = 0; } $ClientPolicyData = $this->clientPolicyModel->select('client_policy.* , policy_type.policy_type as policy_type,insurers.name as insurer_name,tpa.name as tpa_name,tpa.network_hospitals as network_hospitals_url, policy_type.long_name as policy_long_name') ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left') ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left') ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left') ->where('client_policy.client_id', $this->request->getGet('client_id') ) ->where('client_policy.client_branch_id', $this->request->getGet('client_branch_id') ) ->where('client_policy.is_active', 1 ) ->where('client_policy.policy_status', $policy_status) ->where('client_policy.enrolment_visibility', 1 ) ->orderby('client_policy.id' , 'ASC') ->findAll(); // Retrieve employee and dependents data by passing the employee code $employeeData = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('client_id',$this->request->getGet('client_id')) ->where('client_branch_id',$this->request->getGet('client_branch_id')) ->where('is_active', 1 )->findAll(); $employeeName = $this->employeeModel->where('emp_code',$this->request->getGet('emp_code')) ->where('client_id',$this->request->getGet('client_id')) ->where('client_branch_id',$this->request->getGet('client_branch_id')) ->where('family_floater_key','self')->where('is_active', 1 ) ->get()->getRow()->name; $whereArrayForId = []; foreach ( $employeeData as $key => $value) { array_push($whereArrayForId, $value['id']); } if(count($ClientPolicyData) > 0 && count($employeeData) > 0) { $result = []; foreach ($ClientPolicyData as $key => $ClientPolicyValue) { if($ClientPolicyValue['policy_type_id'] == 1) { $policyGroup = 'gpa'; $data['ticket_type_id'] = 2; }else if($ClientPolicyValue['policy_type_id'] == 6) { $policyGroup = 'gpa'; $data['ticket_type_id'] = 3; }else if($ClientPolicyValue['policy_type_id'] == 7) { $policyGroup = 'gpa'; $data['ticket_type_id'] = 4; }else { $policyGroup = 'gmc'; $data['ticket_type_id'] = 1; } $terms = json_decode($ClientPolicyValue['policy_terms'] , true); $data['policy_terms'] = isset($terms['enrollment_display_key']) && !empty($terms['enrollment_display_key']) ? $terms['enrollment_display_key'] : $this->policyTermsFiter($terms, $policyGroup); $data['client_id'] = $ClientPolicyValue['client_id']; $data['client_policy_id'] = $ClientPolicyValue['id']; $data['policy_name'] = $ClientPolicyValue['policy_type']; $data['policy_type'] = $ClientPolicyValue['policy_type']; $data['policy_no'] = $ClientPolicyValue['policy_no']; $data['insurer_name'] = $ClientPolicyValue['insurer_name']; $data['tpa_name'] = $ClientPolicyValue['tpa_name']; $data['network_hospitals_url'] = $ClientPolicyValue['network_hospitals_url']; $data['policy_start_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_start_date']); $data['policy_end_date'] = $this->convertDateFormatDisplay($ClientPolicyValue['policy_end_date']); $data['heading'] = $ClientPolicyValue['policy_long_name']; // $data['policy_terms'] = $terms; // if($ClientPolicyValue['policy_type_id'] == 1){ $data['heading'] = 'Group Personal Accident Coverage'; }else // if($ClientPolicyValue['policy_type_id'] == 2){ $data['heading'] = 'Group Medical Coverage'; }else // if($ClientPolicyValue['policy_type_id'] == 3){ $data['heading'] = 'Group Medical Coverage - Parents'; }else // if($ClientPolicyValue['policy_type_id'] == 4){ $data['heading'] = 'Group Medical Coverage - Top Up'; }else // if($ClientPolicyValue['policy_type_id'] == 5){ $data['heading'] = 'Group Medical Coverage - Parents (Top Up)'; }else // if($ClientPolicyValue['policy_type_id'] == 7){ $data['heading'] = 'Group Term Life Insurance'; } if($ClientPolicyValue['policy_type_id'] == 1 || $ClientPolicyValue['policy_type_id'] == 6 || $ClientPolicyValue['policy_type_id'] == 7) { $data['floter_text_heading'] = 'Sum Insured'; }else{ if(isset($terms['family_floater']) && strpos(strtolower($terms['family_floater']), "no") !== false ){ $data['floter_text_heading'] = 'Sum Insured'; }else{ $data['floter_text_heading'] = 'Floter Sum Insured'; } } $employee_policy = $this->employeePolicyModel->select('employees.*,employee_polices.employee_id , employee_polices.basic_cover_si , employee_polices.premium , employee_polices.gst , employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid') ->join('employees', 'employee_polices.employee_id = employees.id', 'left') ->whereIn('employee_polices.employee_id',$whereArrayForId) ->where('employee_polices.client_policy_id',$ClientPolicyValue['id']) ->where('employee_polices.is_active', 1 )->findAll(); if(count($employee_policy) > 0) { $si_value = 0; $si_premium_value = 0; $si_gst_value = 0; foreach ($employee_policy as $key => $value) { if(isset($value['basic_cover_si'])){ $si_value = ($si_value == 0) ? $value['basic_cover_si'] : $si_value; } if(isset($value['premium'])){ $si_premium_value = $si_premium_value + $value['premium'];} if(isset($value['gst'])){ $si_gst_value = $si_gst_value + $value['gst'];} } if($employee_policy[0]['tpa_id'] != null) $data['eCardDownload'] = base_url('download-e-card/') . $employee_policy[0]['rand_string'].'/1'; else $data['eCardDownload'] = null; $data['si_value'] = $si_value; $data['si_premium_value'] = ($ClientPolicyValue['policy_type_id'] == 1 || $ClientPolicyValue['policy_type_id'] == 2) ? 0 : round($si_premium_value); $data['si_gst_value'] = ($ClientPolicyValue['policy_type_id'] == 1 || $ClientPolicyValue['policy_type_id'] == 2) ? 0 : round($si_gst_value); $data['EmployeePolicy'] = $employee_policy; array_push($result, $data); } } return $this->respond(['status' => 'success','code' => 200,'data' => $result , 'emp_name' => $employeeName ], 200); }else{ return $this->respond(['status' => 'failed','code' => 404,'data' => [] ], 200); } } function policyTermsFiter($terms , $type) { $gpa = [ "sumInsured2" => "Sum Insured", "totalSumInsured" => "Total Sum Assured", "self" => "Self", "self_min_age" => "Min Age", "self_max_age" => "Max Age", "accidentalDeathBenefit" => "Accidental Death Benefit", "permanentTotalDisablement" => "Permanent Total Disablement", "permanentPartialDisablement" => "Permanent Partial Disablement", "temporaryTotalDisablementBenefit" => "Temporary Total Disablement benefit", "accidentalHospitalizationExpenses" => "Accidental Hospitalization Expenses", "childrenEducationWelfareFund" => "Children Education Welfare Fund", "compassionateVisitExpenses" => "Compassionate Visit Expenses", "compassionateVisitExpensesData" => "Compassionate Visit Expenses Data", "brokenBoneExpenses" => "Broken Bone Expenses", "brokenBoneExpensesData" => "Broken Bone Expenses Data", "ambulanceCharges" => "Ambulance charges", "ambulanceChargesData" => "Ambulance charges Data", "burnExpenses" => "Burn Expenses", "burnExpensesData" => "Burn Expenses Data", "carriageOfDeadBody" => "Carriage of Dead Body", "carriageOfDeadBodyData" => "Carriage of Dead Body Data", "animalSnakeInsectBite" => "Animal/Snake/Insect bite", "terrorism" => "Terrorism", "worldwideCover" => "Worldwide Cover" ]; $gmc = [ "waiverofpreexistingdiseases" => "Waiver of Pre-existing Diseases", "waiverof1,2,3&4thyearexclusions" => "Waiver of 1, 2, 3 & 4th year Exclusions", "waiverof30dayswaitingperiod" => "Waiver of 30 days waiting period", "9monthwaitingperiodwaived" => "9-month waiting Period waived", "twindelivery" => "Twin Delivery", "maternitycoverage" => "Maternity Coverage", "preandpostnatal" => "Pre and Post natal", "prehospitalizationcover" => "Pre Hospitalization Cover", "posthospitalizationcover" => "Post Hospitalization Cover ", "congenitaldiseasesinternal" => "Congenital Diseases - Internal ", "congenitaldiseasesexternal" => "Congenital Diseases - External ", "roomrentlimit" => "Room Rent Limit", "proportionatedeductionclause" => "Proportionate Deduction Clause", "ayudhtreatmentcover" => "AYUSH treatment covered", "lasiksurgery" => "Lasik Surgery", "cataract" => "Cataract", "ailmentcapping" => "Ailment capping", "moderntreatmentsasperirdai" => "Modern Treatment " ]; $finalarray = []; if($type == 'gpa'){ foreach ($gpa as $key => $value) { if(isset($terms->$key)) { if($terms->$key == 1) { $termsValue = 'Yes'; }else if($terms->$key == 0) { $termsValue = 'No'; }else { $termsValue = $terms->$key; } $finalarray[$value] = $termsValue; } } if(isset(($terms->gpa_special_condition_label)) && is_array($terms->gpa_special_condition_label) && is_array($terms->gpa_special_condition_input)){ for ($i=0; $i < count($terms->gpa_special_condition_label); $i++) { $finalarray[$terms->gpa_special_condition_label[$i]] = $terms->gpa_special_condition_input[$i]; } } }else{ foreach ($gmc as $key => $value) { if(isset($terms->$key)) { if($terms->$key == 1) { $termsValue = 'Yes'; }else if($terms->$key == 0) { $termsValue = 'No'; }else { $termsValue = $terms->$key; } $finalarray[$value] = $termsValue; } } if(isset(($terms->special_condition_label)) && is_array($terms->special_condition_label) && is_array($terms->special_condition_input)){ for ($i=0; $i < count($terms->special_condition_label); $i++) { $finalarray[$terms->special_condition_label[$i]] = $terms->special_condition_input[$i]; } } } return $finalarray; } private function convertDateFormatDisplay($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 getFEContent() { try { $feContentData = $this->feContentModel->findAll(); if (count($feContentData) > 0) { return $this->respond(['status' => 'success','code' => 200,'data' => $feContentData ],200); } else { return $this->respond(['status' => 'failed','code' => 404,'data' => 'No Data'],404); } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } public function getAdvertisementImage() { try { $img = $this->addImgModel->where('is_active',1)->findAll(); if (count($img) > 0) { $data=[]; foreach ($img as $key => $value) { $url = base_url('public/uploads/add_image_upload/').$value['name']; array_push($data,$url); } return $this->respond(['status' => 'success','code' => 200,'data' => $data ],200); } else { return $this->respond(['status' => 'failed','code' => 404,'data' => 'No Data'],404); } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } public function storeFireBase() { try { $firebase_token = isset($this->request->getJSON()->firebase_token) ? $this->request->getJSON()->firebase_token : null; $mobile = isset($this->request->getJSON()->mobile) ? $this->request->getJSON()->mobile : null; $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null; // Ensure the mobile number is provided if (empty($mobile)) { return $this->respond(['status' => 'failed', 'code' => 400, 'message' => 'Mobile number is required'], 400); } // Fetch employee if (isset($mobile)) { $employee = $this->employeeModel->where('mobile', $mobile)->where('relationship', 'self')->where('is_active', 1)->first(); } else { $employee = $this->employeeModel->where('email_corporate', $email_id)->where('relationship', 'self')->where('is_active', 1)->first(); } if ($employee) { // Check if firebase_token is provided if (!empty($firebase_token)) { // Check if the current firebase_token is different from the new one if ($employee['firebase_token'] !== $firebase_token) { // Update the employee's firebase_token $data['firebase_token'] = $firebase_token; $id = $employee['id']; // return json_encode($data); // Direct database update query for testing $db = \Config\Database::connect(); $builder = $db->table('employees'); $update_emp = $builder->update($data, ['id' => $id]); // Check if the update was successful if ($db->affectedRows() > 0) { // Fetch the updated employee data $updated_employee = $this->employeeModel->find($id); return $this->respond(['status' => 'success', 'code' => 200, 'data' => $updated_employee], 200); } else { log_message('error', 'Update failed. No rows affected.'); return $this->respond(['status' => 'failed', 'code' => 500, 'message' => 'Failed to update employee data'], 500); } } else { return $this->respond(['status' => 'failed', 'code' => 400, 'message' => 'New Firebase Token is the same as the current one'], 200); } } else { return $this->respond(['status' => 'failed', 'code' => 400, 'message' => 'Firebase Token is required'], 400); } } else { return $this->respond(['status' => 'failed', 'code' => 404, 'message' => 'Employee not found'], 404); } } catch (\Throwable $th) { log_message('error', 'An error occurred: ' . $th->getMessage()); return $this->respond(['status' => 'failed', 'code' => 500, 'message' => 'An error occurred', 'error' => $th->getMessage()], 500); } } // public function sendPushNotification() // { // $deviceToken = 'cMVKESh8QzqIl8nh_yqbcl:APA91bHKm87Sh1goVJNKZtctV4etgLMQboI0eyDVn3MH1yf9cO-2RtQRlFnKLdataOxosoxm7a4JvATKjfI1_Bids46mGw5m8zesp90mR4odCbD_cJtGmBeMYt4hssSY0YtAht1emK_H'; // $title = 'Nhance'; // $body = 'All your policy enrolled successfully ..!'; // // Initialize Firebase with the service account // $firebase = (new Factory) // ->withServiceAccount(APPPATH . 'Config/google-services.json') // ->createMessaging(); // $notification = Notification::create($title, $body); // $message = CloudMessage::withTarget('token', $deviceToken) // ->withNotification($notification); // try { // $firebase->send($message); // return $this->response->setJSON(['status' => 'success']); // } catch (MessagingException $e) { // //return $this->response->setJSON(['status' => 'error', 'message' => $e->getMessage()]); // log_message('error', $e->getMessage()); // } // } public function getBackToEnrolledDetails() { // Get query parameters $empCode = $this->request->getGet('emp_code'); $clientId = $this->request->getGet('client_id'); $clientBranchId = $this->request->getGet('client_branch_id'); if (!$empCode || !$clientId || !$clientBranchId) { return $this->fail("emp_code, client_id, and client_branch_id are required parameters."); } //Fetch active employee details $employees = $this->employeeModel->select('id,emp_code,name,relationship,dob,emp_status,is_addon_value,created_at,updated_at') ->where([ 'emp_code' => $empCode, 'client_id' => $clientId, 'client_branch_id' => $clientBranchId, 'is_active' => 1 ]) ->findAll(); //Find status of self $selfEmployee = array_filter($employees, function($employee) { return $employee['relationship'] === 'Self'; }); $data['self_status'] = !empty($selfEmployee) ? array_values($selfEmployee)[0]['emp_status'] : null; $data['self_enrolled_time'] = !empty($selfEmployee) ? array_values($selfEmployee)[0]['updated_at'] : null; $data['self_employee_id'] = !empty($selfEmployee) ? array_values($selfEmployee)[0]['id'] : null; //Fetch employee policy details $employeeIds = array_column($employees, 'id'); $policies = $this->employeePolicyModel->whereIn('employee_id', $employeeIds)->where('is_active',1)->findAll(); //Find the stage of enrolment process $employeeStatuses = array_column($employees, 'emp_status'); $employeePolicyStatuses = array_column($policies, 'status'); $uniqueStatuses = array_unique(array_merge($employeeStatuses, $employeePolicyStatuses)); if(count($uniqueStatuses) > 1){ $enrolmentStagekey = 1; }else{ if($uniqueStatuses[0] == 'draft'){ $enrolmentStagekey = 0; }else{ $enrolmentStagekey = 2; } } $enrolmentStage = ['Draft Only','Intermittent Enrollment','Successful Enrollment']; $data['enrolment_stage'] = $enrolmentStage[$enrolmentStagekey]; $data['revert_employee_data'] = []; $data['revert_employee_policy_data'] = []; if($enrolmentStagekey == 1) { //Find active employee history $empIdsWithoutSelf = $employeeIds; $key = array_search($data['self_employee_id'], $empIdsWithoutSelf); unset($empIdsWithoutSelf[$key]); foreach ($empIdsWithoutSelf as $key => $pk) { $retrivedData = $this->retriveOldData($data['self_enrolled_time'],'employees',$pk); if($retrivedData != false) array_push($data['revert_employee_data'] , $retrivedData); } //Find inactive employee history $inActiveEmployees = $this->employeeModel->select('id,emp_code,name,relationship,dob,emp_status,is_addon_value,created_at,updated_at') ->where([ 'emp_code' => $empCode, 'client_id' => $clientId, 'client_branch_id' => $clientBranchId, 'is_active' => 0 ]) ->findAll(); $inActiveEmployeeIds = array_column($inActiveEmployees, 'id'); foreach ($inActiveEmployeeIds as $key => $pk) { $retrivedData = $this->retriveOldData($data['self_enrolled_time'],'employees',$pk); if($retrivedData != false) array_push($data['revert_employee_data'] , $retrivedData); } //Merged active and inactive employees , employee_polict history $mergedEmpIds = array_merge($employeeIds,$inActiveEmployeeIds); $empPolicyData = $this->employeePolicyModel->whereIn('employee_id', $mergedEmpIds)->findAll(); $employeePolicyIds = array_column($empPolicyData, 'id'); foreach ($employeePolicyIds as $key => $pk) { $retrivedData = $this->retriveOldData($data['self_enrolled_time'],'employee_polices',$pk); if($retrivedData != false) array_push($data['revert_employee_policy_data'] , $retrivedData); } } if($this->request->getGet('revert_data') == 1) { //update data back to employee if(count($data['revert_employee_data'])){ foreach ($data['revert_employee_data'] as $key => $val) { $this->employeeModel->where('id',$val['id'] )->set($val['data'])->update(); } } //update data back to employee policy if(count($data['revert_employee_policy_data'])){ foreach ($data['revert_employee_policy_data'] as $key => $val) { $this->employeePolicyModel->where('id',$val['id'] )->set($val['data'])->update(); } } //update enrolled status for self if(count($data['revert_employee_data']) || count($data['revert_employee_policy_data'])){ $this->employeeModel->where('id',$data['self_employee_id'] )->set(array('emp_status'=>'enrolled'))->update(); $data['retrieve_status'] = 'Data revert successfully'; }else{ $data['retrieve_status'] = 'There is no data to revert'; } } // Fetch all policies related to these employees who currently active $current_employee_data = $this->employeeModel->select('id,emp_code,name,relationship,dob,emp_status,is_addon_value,created_at,updated_at') ->where([ 'emp_code' => $empCode, 'client_id' => $clientId, 'client_branch_id' => $clientBranchId, 'is_active' => 1 ]) ->findAll(); $Ids = array_column($current_employee_data, 'id'); $policies = $this->employeePolicyModel->whereIn('employee_id', $Ids)->where('is_active',1)->findAll(); // Group policies by policy_id $groupedPolicies = []; foreach ($policies as $policy) { $policyId = $policy['client_policy_id']; if (!isset($groupedPolicies[$policyId])) { $groupedPolicies[$policyId] = [ 'policy_id' => $policy['id'], 'client_policy_id' => $policy['client_policy_id'], 'uhid' => $policy['uhid'], 'status' => $policy['status'], 'basic_cover_si' => $policy['basic_cover_si'], 'date_coverage' => $policy['date_coverage'], 'policy_end_date' => $policy['policy_end_date'], 'members' => [] ]; } // Add member details to the current policy foreach ($current_employee_data as $employee) { if ($employee['id'] === $policy['employee_id']) { $groupedPolicies[$policyId]['members'][] = [ 'id' => $employee['id'], 'emp_code' => $employee['emp_code'], 'name' => $employee['name'], 'relationship' => $employee['relationship'], 'dob' => $employee['dob'], 'emp_status' => $employee['emp_status'], 'is_addon_value' => $employee['is_addon_value'] ]; } } } // Re-index the grouped policies $data['currentPolicies'] = array_values($groupedPolicies); return $this->respond(['data' => $data]); } public function retriveOldData($self_enrolled_time,$table,$pk) { $historyData = $this->auditHistoryModel->where('pk', $pk)->where('table_name',$table)->findAll(); $beforeEnrolled = []; $afterEnrolled = []; // Split the array foreach ($historyData as $val) { if ($val['created_at'] <= $self_enrolled_time) { $beforeEnrolled[] = $val; } else { $afterEnrolled[] = $val; } } if(count($beforeEnrolled) && count($afterEnrolled)){ //After enrolment edited some of the data $temp['table'] = $table; $temp['id'] = $pk; // Extract earliest `old_value` for each `field_name` $originalValues = []; foreach ($afterEnrolled as $entry) { $field = $entry['field_name']; // If the field is not already in originalValues , update it if (!isset($originalValues[$field])) { $originalValues[$field] = $entry['old_value']; } } $temp['data'] = $originalValues; return $temp; }else if(!count($beforeEnrolled) && !count($afterEnrolled)){ //After enrolment created new data $temp['table'] = $table; $temp['id'] = $pk; $temp['data'] = ['is_active'=> 0 ]; return $temp; }else if(!count($beforeEnrolled) && count($afterEnrolled)){ //After enrolment created new data and edited some of the data $temp['table'] = $table; $temp['id'] = $pk; $temp['data'] = ['is_active'=> 0 ]; return $temp; }else if(count($beforeEnrolled) && !count($afterEnrolled)){ //After enrolment nothing changes from the data return false; } } public function findThePolicyIsOpenForEnrollment($plicy_id) { $policy = $this->clientPolicyModel->where('id',$plicy_id)->where('open_for_enrollment',1)->find(); if($policy) return true; else return false; } // ---------------- TICKET API's --------------------------------------------------------------------------------------------------- //Get Data from post for inserting ticket and message public function initiateClaim() { $received_data = $this->request->getPost(); // print_r($received_data); die; $employee_id = $received_data['emp_id']; $client_policy_id = $received_data['client_policy_id']; $insured_emp_id = $received_data['insured_emp_id']; if (empty($received_data['doa'])) { $received_data['doa'] = null; } else{ $ticket_data['doa'] = change_date_format($received_data['doa']); } if (empty($received_data['dod'])) { $received_data['dod'] = null; } else{ $ticket_data['dod'] = change_date_format($received_data['dod']); } $sql = " select cp.policy_type_id, cl_rm.user_id as acm_id, cp.insurer_id as insurer_id, cp.tpa_id as tpa_id, emp.client_id , emp.id as emp_id, emp_pol.uhid as policy_no, emp.emp_code, emp_pol.tpa_id as tpa_no, emp.name as emp_name, emp.email_corporate as emp_mail, emp.mobile as emp_mobile, empl.id as insured_emp_id, empl.name as insured_name, empl.relationship, CASE WHEN cp.policy_type_id IN (2, 3, 4, 5) THEN 1 WHEN cp.policy_type_id = 1 THEN 2 WHEN cp.policy_type_id = 6 THEN 3 WHEN cp.policy_type_id = 7 THEN 4 ELSE NULL END AS ticket_type_id from employees emp left join employees empl on empl.id = $insured_emp_id and empl.is_active = 1 and empl.emp_status = 'active' left join employee_polices emp_pol on empl.id = emp_pol.employee_id and emp_pol.client_policy_id = $client_policy_id and emp_pol.is_active = 1 left join client_policy cp on cp.id = emp_pol.client_policy_id and cp.is_active = 1 left join client_rm cl_rm on cl_rm.client_id = empl.client_id and cl_rm.is_active = 1 and cl_rm.level = 3 where emp.id = $employee_id and emp.is_active = 1 and emp.emp_status = 'active' limit 1 "; $emp_ticket_data = $this->employeeModel->query($sql)->getResultArray(); // print_r(db_connect()->getLastQuery()); die; if(!empty($emp_ticket_data)){ $fetchData = $emp_ticket_data[0]; $claimStatusQuery = $this->claimStatusModel ->select('id') ->where('ticket_type', $fetchData['ticket_type_id']) ->orderBy('id', 'asc'); if ($fetchData['ticket_type_id'] == 1 && !empty($fetchData['tpa_no'])) { $results = $claimStatusQuery->findAll(2); $fetchData['claim_status_id'] = $results[1]['id'] ?? $results[0]['id']; } else { $fetchData['claim_status_id'] = $claimStatusQuery->first()['id']; } $fetchData['priority'] = 1; $fetchData['mode_of_intimation'] = 3; $fetchData['claim_type'] = 1; $fetchData = array_merge($fetchData, $received_data); $fetchData['relationship'] = strtolower($fetchData['relationship']) ?? $fetchData['relationship']; // print_r($fetchData); die; $insert_status = $this->ticketMaster->insert($fetchData); $ticket_id = $this->ticketMaster->insertID(); if ($insert_status && !empty($ticket_id)) { //insert first history $this->ticketController->putHistoryAfterInsert($fetchData, $ticket_id); $messagesData = [ 'ticket_id' => $ticket_id ?? null, 'sender' => 'user', 'claim_status' => $fetchData['claim_status_id'] ?? null, 'emp_mail' => $fetchData['emp_mail'] ?? null, 'mail_subject' => $fetchData['subject'] ?? "New Claim", 'mail_content' => $fetchData['message'] ?? "New Claim", ]; if (!empty($messagesData['ticket_id'])) { $TicketMessageModel = new TicketMessageModel(); $TicketMessageModel->insert($messagesData); } $mail_sent_status = ($this->ticketController->sendAutoMailTrigger($ticket_id)); if (gettype($mail_sent_status) == 'array') { $message = 'Claim Iniated Successfully'; return $this->respond(['status' => true, 'code' => 200, 'message' => $message], 200); } else { $mail_sent_status_object = json_decode($mail_sent_status); } if ($mail_sent_status_object->status == 'success') { $message_insert_status = $this->ticketController->autoMessageInsertBasedOnMailResponse($mail_sent_status, $ticket_id); if ($message_insert_status) { $message = 'Claim Initiated Successfully'; return $this->respond(['status' => true, 'code' => 200, 'message' => $message], 200); } else { $message = 'Claim Initiated, Mail Sent Successfully'; $this->myLogger->logme('error', "Claim initiated, Mail sent Successfully, Failed to store message:$ticket_id "); return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200); } } else { $message = 'Claim Initiated, Failed to send Mail '; $this->myLogger->logme('error', "Claim initiated, Failed to send Mail :$ticket_id "); return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200); } } else { $message = 'Something Went Wrong'; return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200); } }else{ return $this->response->setJSON(['status' => false, 'code' => 200, 'message' => 'The employee is not active.'])->setStatusCode(404); } } //department public function get_ticket_type() { $ticket_type = $this->ticketController->ticketType; $ticket_type = array_map(fn($value, $key) => (object) ['id' => $key, 'name' => $value], array_values($ticket_type), array_keys($ticket_type)); // print_r($ticket_type); die; return $this->response->setJSON(['ticket_type' => $ticket_type])->setStatusCode(200); } //ticket data public function get_ticket_data() { $priorityType = $this->ticketController->priorityType; $modeOFIntimate = $this->ticketController->modeOFIntimate; $claimType = $this->ticketController->claimType; $relationshipType = $this->ticketController->relationshipType; $ticketTypeArray = $this->ticketController->ticketType; $emp_id = $this->request->getGet('emp_id'); $ticket_type = $this->request->getGet('ticket_type') ?? null; $ticket_id = $this->request->getGet('ticket_id') ?? null; // dd($emp_id); if (empty($emp_id)) { return $this->response->setJSON(['status' => false, 'code' => 200, 'message' => 'emp_id is required.'])->setStatusCode(404); } $TicketMasterModel = new TicketMasterModel(); $ticket_data = $TicketMasterModel->get_ticket_data($emp_id, $ticket_type, $ticket_id); if (!empty($ticket_data)) { $client_claim_status = [ 'Received' => [1, 2, 3, 4, 15, 16, 17, 18, 25, 26, 27, 28, 35, 36, 37, 38], 'Rejected' => [8, 49, 55, 60], 'Cancelled' => [13, 47, 53, 58], 'Returned' => [14, 48, 54, 59], 'Closed' => [12, 22, 32, 42], 'Approved' => [9, 20, 30, 40], 'Settled' => [11, 24, 34], 'Under Process' => [5, 6, 7, 10, 19, 23, 45, 50, 29, 33, 51, 39, 43, 56], ]; foreach ($ticket_data as $key => $value) { foreach ($client_claim_status as $claim_key => $claim_value) { if (in_array($value['claim_status_id'], $claim_value)) { // Corrected argument order $ticket_data[$key]['claim_status'] = $claim_key ?? null; // Assign back to the main array } } $ticket_data[$key]['priority_type'] = $priorityType[$value['priority']] ?? null; $ticket_data[$key]['mode_of_intimate_type'] = $modeOFIntimate[$value['mode_of_intimation']] ?? null; $ticket_data[$key]['relationship_type'] = ucfirst($value['relationship']) ?? null; $claimPrimaryTypey = "1"; if (in_array($value['claim_type'], [2, 3, 4])) { $claimPrimaryTypey = "2"; } $ticket_data[$key]['claim_type_value'] = $claimType[$claimPrimaryTypey][$value['claim_type']] ?? null; $ticket_data[$key]['ticket_policy_type'] = $ticketTypeArray[$value['ticket_type_id']] ?? null; } } return $this->response->setJSON(['ticket_data' => $ticket_data])->setStatusCode(200); } public function getWellnessUrl() { $url = "https://aam.mohfw.gov.in/home/login"; if (!empty($url)) { return $this->respond([ 'status' => 'success', 'data' => $url ], 200); } else { return $this->respond([ 'status' => 'failed', 'message' => 'No link found' ], 200); } } }