diff --git a/app/Config/Filters.php b/app/Config/Filters.php index 2cf9a260..00faa273 100755 --- a/app/Config/Filters.php +++ b/app/Config/Filters.php @@ -13,6 +13,7 @@ use App\Filters\AuthMVC; use App\Filters\HttpRequestLog; use App\Filters\CloseDbConnection; use App\Filters\AuthClientApi; +use App\Filters\CommissionApiFilter; use App\Filters\AuthJWT; @@ -36,7 +37,8 @@ class Filters extends BaseConfig 'HttpRequestLog' => HttpRequestLog::class, 'authJWT' => AuthJWT::class, 'AuthClientApi' => AuthClientApi::class, - 'CloseDbConnection' => CloseDbConnection::class + 'CloseDbConnection' => CloseDbConnection::class, + 'CommissionApiFilter' => CommissionApiFilter::class ]; /** diff --git a/app/Config/Routes.php b/app/Config/Routes.php index abca62d8..be79c96f 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -34,6 +34,8 @@ $routes->get("updateRenewalData", "ClientController::updateRenewalData"); $routes->get("updateRenewalDataNotExistingClient", "ClientController::updateRenewalDataNotExistingClient"); $routes->get("updateRenewalInsurerData", "ClientController::updateRenewalInsurerData"); $routes->get("sendMutipleToEmails", "MasterController::sendMutipleToEmails"); +$routes->post("getCommission", "InsuranceCommissionController::initiateCommissionCalc",['filter' => 'CommissionApiFilter']); +$routes->get("importRules", "RuleImportController::upload"); // $routes->post("iAgreeForAddOn", "EmployeeRestController::iAgreeForAddOn"); // $routes->get("sendCroneRemainderMail", "DashboardController::sendCroneRemainderMail"); // $routes->post("employeeUpload", "EmployeeRestController::employeeUpload"); @@ -478,6 +480,7 @@ $routes->group("rfq", ["filter" => "authMVC"], function ($routes) { $routes->get("driveListFiles", "GoogleDriveController::listFiles"); $routes->post('dmsSearch', 'PolicyTransactionController::dmsSearch', ['filter' => 'authMVC']); $routes->get('dmsSearch', 'PolicyTransactionController::dmsSearch', ['filter' => 'authMVC']); +$routes->get('payouts', 'PolicyTransactionController::payouts', ['filter' => 'authMVC']); $routes->get('downloadGdriveFile', 'GoogleDriveController::downloadGdriveFile', ['filter' => 'authMVC']); $routes->get('cli/sendZeptoMail', 'MasterController::testZeptoSMTP'); @@ -736,7 +739,6 @@ $routes->get('testTracelog','TestBusinessController::a'); $routes->get("claimView", "EmployeeRestController::claimView"); // General Tickets - $routes->post("ticketSave", "ThzController::ticketSave"); $routes->get("ticketList", "ThzController::ticketList"); $routes->post("ticketConversationSave", "ThzController::ticketConversationSave"); @@ -766,3 +768,11 @@ $routes->group('test', function($routes) { }); $routes->cli('cli/testcli', 'TestingController::testcli'); +//PARTNER PAYOUT +$routes->group('payout', function($routes) { + $routes->match (['get','post'],'list',"PayoutController::payoutList"); + $routes->post('fetchUtrDetails',"PayoutController::fetchUtrDetails"); + $routes->post('saveUtrDetails',"PayoutController::saveUtrDetails"); + $routes->post('removeUtrDetails',"PayoutController::removeUtrDetails"); +}); + diff --git a/app/Config/Services.php b/app/Config/Services.php index fab85a50..5f982877 100755 --- a/app/Config/Services.php +++ b/app/Config/Services.php @@ -7,6 +7,7 @@ use App\Libraries\Slug; use App\Libraries\MyLogger; use App\Libraries\GmailAPI; use App\Libraries\MyGoogleDrive; +use App\Libraries\RuleImportService; use App\Libraries\DataServiceSqlite; use App\Controllers\Home; @@ -80,5 +81,14 @@ class Services extends BaseService return new MyGoogleDrive(); } + + public static function ruleImportService($getShared = true) + { + if ($getShared) { + return static::getSharedInstance('ruleImportService'); + } + + return new RuleImportService(); + } } diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 0bed75f5..87ec5222 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -5673,6 +5673,10 @@ class ClientController extends AdminController // $response = $ticketServiceController->extractExcelData("claims_dump_form_client.xlsx"); // dd($response); + // $TicketController = new TicketController(); + // $response = $TicketController->getMoreInfo($requestFrom = 'rest', $ticket_id = 70); + // dd($response); + // ---------- EMP SERVICE CONTROLLER -------------------------------------------------------------------------------- $empServiceController = new EmployeeServiceController(); diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index a77a10cb..0330ed8f 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -16,7 +16,6 @@ use App\Controllers\VidalApiController; use App\Controllers\ICICILombardController; use App\Controllers\MediAssistApiController; - use App\Models\EmployeeModel; use App\Models\EmployeePolicyModel; use App\Models\ClientModel; @@ -43,8 +42,8 @@ use App\Models\HrFileUploadModel; -use App\Controllers\Jobs ; -use App\Controllers\JobWorker ; +use App\Controllers\Jobs; +use App\Controllers\JobWorker; use App\Controllers\TicketController; @@ -68,7 +67,7 @@ use Kreait\Firebase\Exception\MessagingException; class EmployeeRestController extends AdminController { - + use ResponseTrait; protected $myLogger; @@ -98,8 +97,8 @@ class EmployeeRestController extends AdminController protected $insurerModel; protected $hrFileUploadModel; protected $ticketMailTemplateModel; - - + + public function __construct() { // helper('utility'); @@ -111,7 +110,7 @@ class EmployeeRestController extends AdminController $this->clientRMModel = new ClientRMModel(); $this->policesModel = new PolicesModel(); $this->relationshipModel = new RelationshipModel(); - $this->fileModel= new FileModel(); + $this->fileModel = new FileModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->policyPremium1Model = new PolicyPremium1Model(); $this->policyPremium2Model = new PolicyPremium2Model(); @@ -131,13 +130,12 @@ class EmployeeRestController extends AdminController $this->insurerModel = new InsurerModel(); $this->hrFileUploadModel = new HrFileUploadModel(); $this->ticketMailTemplateModel = new TicketMailTemplateModel(); - } - + public function getEmployeeProfile() { - try { + try { $emp_code = $this->request->getGet('emp_code'); $client_id = $this->request->getGet('client_id'); $client_branch_id = $this->request->getGet('client_branch_id'); @@ -150,38 +148,37 @@ class EmployeeRestController extends AdminController // ->where('relationship', $relationship) // ->first(); $employee = $this->employeeModel - ->select('employees.*') - ->join('employee_polices', 'employees.id = employee_polices.employee_id') - ->where('employees.emp_code', $emp_code) - ->where('employees.client_id', $client_id) - ->where('employees.client_branch_id', $client_branch_id) - ->where('employees.is_active', 1 ) - ->where('employees.relationship', $relationship) - ->where('employee_polices.status', ['active']) - ->where('employees.is_active', 1) - ->where('employees.emp_status', ['active']) - ->first(); + ->select('employees.*') + ->join('employee_polices', 'employees.id = employee_polices.employee_id') + ->where('employees.emp_code', $emp_code) + ->where('employees.client_id', $client_id) + ->where('employees.client_branch_id', $client_branch_id) + ->where('employees.is_active', 1) + ->where('employees.relationship', $relationship) + ->where('employee_polices.status', ['active']) + ->where('employees.is_active', 1) + ->where('employees.emp_status', ['active']) + ->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; + 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); + ->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); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 404); } - } catch (\Throwable $th) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); - } + } catch (\Throwable $th) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500); + } } //not in use @@ -191,20 +188,19 @@ class EmployeeRestController extends AdminController $data = $this->request->getJSON(); if ($data) { $id = $data->id; - $employee = $this->employeeModel->where('is_active', 1 )->update($id, $data); + $employee = $this->employeeModel->where('is_active', 1)->update($id, $data); if ($employee) { $result = []; - return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); + 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); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 404); } } - } catch (\Throwable $th) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); - } - + } catch (\Throwable $th) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500); + } } //not in use @@ -213,8 +209,8 @@ class EmployeeRestController extends AdminController 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) { + $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'); @@ -222,16 +218,14 @@ class EmployeeRestController extends AdminController return $item; }; $employee = array_map($dateConverter, $employee); - return $this->respond(['status' => 'success','code' => 200,'data' => $employee],200); - + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $employee], 200); } else { - - return $this->respond(['status' => 'failed','code' => 404,'data' => []],404); + + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 404); } - } catch (\Throwable $th) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); - } - + } catch (\Throwable $th) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500); + } } //not in use @@ -245,257 +239,240 @@ class EmployeeRestController extends AdminController foreach ($data as $item) { $id = $item->id; $item->dob = $this->convertDateFormatYMD($item->dob); - $employee = $this->employeeModel->where('is_active', 1 )->update($id, (array)$item); + $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); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200); } else { $result = "No Matches"; - return $this->respond(['status' => 'failed','code' => 404,'data' => $result], 404); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 404); } } } catch (\Exception $e) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $e], 500); + 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 ($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->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); + $employee = $this->employeeModel->where('is_active', 1)->update($id, (array)$item); if ($employee) { $Count++; } - }else{ + } else { //create new data $item->family_floater_key = $this->RelationshipMap($item->relationship); - $item->gender = $this->GenderMap($item->relationship , $item->emp_code); + $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); + 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); + $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); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result], 200); } else { $result = "No Matches"; - return $this->respond(['status' => 'failed','code' => 404,'data' => $result], 404); + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 404); } } } catch (\Exception $e) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - } - public function getEmployeePayableValue($client_policy_id,$relationship) + public function getEmployeePayableValue($client_policy_id, $relationship) { - $terms = $this->clientPolicyModel->where('id',$client_policy_id)->get()->getRow()->policy_terms; + $terms = $this->clientPolicyModel->where('id', $client_policy_id)->get()->getRow()->policy_terms; - if(isset(json_decode($terms)->is_payable_employee)) - { + 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') - { + if ($relationship === 'Mother' || $relationship === 'Father' || $relationship === 'Father in Law' || $relationship === 'Mother in Law') { return $is_payable_obj->elders; - } - else if($relationship === 'Son' || $relationship === 'Daughter') - { + } else if ($relationship === 'Son' || $relationship === 'Daughter') { return $is_payable_obj->childern; - } - else if($relationship === 'Spouse') - { + } else if ($relationship === 'Spouse') { return $is_payable_obj->spouse; } - - }else{ + } else { return 0; } - - - - } - public function createEmployeePolicyData($employee_id,$emp_code,$client_id,$client_policy_id,$basic_cover_si = null,$payable_employee = 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) - { + + 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(); + $checkDataExist = $this->employeePolicyModel->where('employee_id', $employee_id)->where('client_policy_id', $client_policy_id)->first(); - if($checkDataExist){ + 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(); + $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 { - }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); - $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); + } - $this->employeePolicyModel->insert($data); - - } - - return true; + return true; } - public function updatePremiumAmount($client_policy_id , $emp_code , $client_branch_id) + 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) - { + $response = $this->calculatePremium($client_policy_id, $emp_code, null, $client_branch_id); - if(isset($value['temp'])) - { + 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) - { + ->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(); - + ->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) - { + $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)) - { + ->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) { + $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)){ + if (count($filterSelfPolicy)) { return $filterSelfPolicy[0]['date_coverage']; - }else{ + } 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) { + $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)){ + if (count($filterSelfBasePolicy)) { return $filterSelfBasePolicy[0]['date_coverage']; - }else{ return null; } + } 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'; + } else { + return null; } + } else { + return null; + } } - public function GenderMap($value,$empCode){ - + + 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'){ + } else if ($value === 'Son' || $value === 'Father' || $value === 'Father in Law') { return 'M'; - }else if($value === 'Spouse'){ + } 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'; } + $Gender = $this->employeeModel->where('emp_code', $empCode)->where('relationship', 'Self')->get()->getRow()->gender; + if ($Gender == 'M') { + return 'F'; + } else { + return 'M'; + } } } @@ -526,196 +503,178 @@ class EmployeeRestController extends AdminController 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); + 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); + 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); } + if ($openForEnrollment == false) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => 'Enrollment closed'], 404); + } - foreach ($requestData as $key => $value) - { + 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(); - - + ->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 { - }else{ - - $data['employee_id']= $value->employee_id; - $data['client_policy_id']= $value->client_policy_id; - $data['basic_cover_si']= $value->basic_cover_si; + $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); + 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); - + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); } catch (\Exception $e) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } } - public function findPremiumAmount($slabArray,$siAmount) + public function findPremiumAmount($slabArray, $siAmount) { foreach ($slabArray as $key => $value) { - if($value['si'] == $siAmount){ + 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); + $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); + 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')); - + $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); + 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')); + $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' - ]; + 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(); + // Create a new Spreadsheet object + $spreadsheet = new Spreadsheet(); - // Get the active sheet - $sheet = $spreadsheet->getActiveSheet(); + // 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) { + // Add headers $column = 'A'; - foreach ($headers as $dbField) { - $sheet->setCellValue($column . $row, $employee[$dbField]); + foreach ($headers as $header => $dbField) { + $sheet->setCellValue($column . '1', $header); $column++; } - $row++; + + // 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); } - - - // 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); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - } //not in use @@ -723,35 +682,30 @@ class EmployeeRestController extends AdminController { 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(); + ->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"){ + $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"){ + } else if ($value['is_addon'] == "3") { $value['type'] = 'Dependent AddOn'; - }else{ + } else { $value['type'] = $getSlabAndGridData['grid_master']['policy_type']; } - - array_push($result,$value); - - + + 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); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - } // Upload the Employee Detail in DB by Sheet Data @@ -764,12 +718,12 @@ class EmployeeRestController extends AdminController $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(); + $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); @@ -777,38 +731,36 @@ class EmployeeRestController extends AdminController // 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(); + $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; + $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 + $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'])) - { + $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); - } - - + 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)) - { + if (!file_exists($file_name_with_path)) { session()->setFlashdata('error', 'File not found'); return redirect()->to(base_url('employee/upload')); } @@ -824,7 +776,7 @@ class EmployeeRestController extends AdminController $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; @@ -876,25 +828,25 @@ class EmployeeRestController extends AdminController } } $dataToInsert = []; - $basic_cover_si= []; + $basic_cover_si = []; foreach ($extra['0'] as $index => $id) { - $relation =''; + $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'){ + } 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'){ + } 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'){ + } else if (strtolower(trim($extra['5'][$index])) === 'spouse') { $relation = 'spouse'; - }else{ + } else { $relation = 'self'; } // Simplified formatDate function // Assigning formatted dates - $doj = $extra['3'][$index] ; - $dob = $extra['6'][$index] ; + $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" @@ -903,10 +855,10 @@ class EmployeeRestController extends AdminController $dob_new_format = date('Y-m-d', strtotime($dob)); // Your existing code here - $emp_code =isset($extra['1'][$index]) ? $extra['1'][$index] : 0; + $emp_code = isset($extra['1'][$index]) ? $extra['1'][$index] : 0; $name = $extra['2'][$index]; - if($emp_code != 0 && $name != '' || $name != null){ + if ($emp_code != 0 && $name != '' || $name != null) { $record = [ // 'id' => $id, 'emp_code' => $emp_code, @@ -918,64 +870,63 @@ class EmployeeRestController extends AdminController 'family_floater_key' => $relation, 'dob' => $dob_new_format, 'email_corporate' => $extra['7'][$index], - 'mobile'=> $extra['8'][$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, + '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 - + '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]; - } + 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; + $basic_cover_si[] = $basic_cover_si_value; } } $count = 0; - $wholeData=[];// Initialize an empty array to store employee email. + $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 =[]; + $employee = $this->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{ + } else { $data_after_gpa_or_gmc = $dataToInsert[$a]; } date_default_timezone_set('Asia/Kolkata'); @@ -983,53 +934,53 @@ class EmployeeRestController extends AdminController $formatted_date_time = date('Y-m-d H:i:s', $current_timestamp); if ($employee) { - - $emp_id =$employee['id']; - $id =$emp_id; + + $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'])); + $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{ + } else { if ($dataToInsert[$a]['emp_code'] != 0) { - $result =false; + $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; + $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'])); + + + $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]); + $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', + $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, + '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['id'] = $existing_policy['id']; $emp_policy_data['updated_at'] = $formatted_date_time; $this->employeePolicyModel->save($emp_policy_data); } @@ -1043,21 +994,21 @@ class EmployeeRestController extends AdminController //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_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++; + + $wholeData[] = sendMailNotification::sendMailNotification('member_welcome_mail', $params); + $count++; } // if($count == 20 || $a == count($dataToInsert)-1){ @@ -1068,10 +1019,10 @@ class EmployeeRestController extends AdminController // $count = 0; // } // } - + // if ($dataToInsert[$a]['email_corporate'] != null || $dataToInsert[$a]['email_corporate'] != '' && $dataToInsert[$a]['relationship'] == 'Self') { - + } } @@ -1087,47 +1038,41 @@ class EmployeeRestController extends AdminController $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); + + $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); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - - - } //------------------------------------- - public function getAgeRange($terms,$familyFloatesValue) + 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{ + $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'); + $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"]; @@ -1135,51 +1080,51 @@ class EmployeeRestController extends AdminController $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(); + $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) { + 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); + $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; } + 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') - { + 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(); + $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) - { + 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; } @@ -1191,56 +1136,57 @@ class EmployeeRestController extends AdminController $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; + $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); + 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); } - - // Construct value for policy type GMC - // $getSlabAndGridData['grid_master']['policy_type'] == "GMC" - }else if($array->policy_type_id == 2 && $this->request->getGet('policy') == 'GMC' ) - { + $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) - { + + 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{ + } 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){ + if ($familyFloates->{'either-parents-pil'} != 0) { unset($familyFloates->parents); unset($familyFloates->parents_in_law); } @@ -1250,34 +1196,39 @@ class EmployeeRestController extends AdminController $dependent_and_si_value = 0; $dependent_and_si_premium_value = 0; $dependent_and_si_gst_value = 0; - foreach ($floters as $familyFloatesValue) { + foreach ($floters as $familyFloatesValue) { $dependent = preg_replace('/\d/', '', $familyFloatesValue); - - if(count($empData)){ + + 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;} + $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); + $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; @@ -1285,54 +1236,57 @@ class EmployeeRestController extends AdminController } } } - - + + // Remove Unwanted floter key from floters array based on either-parents-pil term value - if($familyFloates->{'either-parents-pil'} == 1 && count($floters)) - { + 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 (preg_replace('/\d/', '', $value) == 'parent') { + $count_parent++; + } + if (preg_replace('/\d/', '', $value) == 'parent_in_law') { + $count_parent_in_law++; + } } - if($count_parent != 2) { + if ($count_parent != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent_in_law') === false); } - if($count_parent_in_law != 2) { + 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)) - { + } 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 (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) { + 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)){ + 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']['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); + $temp2['data']['age_validation'] = $this->getAgeRange($decodedArray, $familyFloatesValue); + + array_push($data, $temp2); } } @@ -1341,56 +1295,51 @@ class EmployeeRestController extends AdminController $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); - + ->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); + if ($this->request->getGet('policy') == 'GMC') { + return $this->respond(['status' => 'success', 'code' => 200, 'data' => [$array]], 200); } - } - - // $result[] = $array; + + // $result[] = $array; } - return $this->respond(['status' => 'success','code' => 200,'data' => []], 200); - - - }else{ - return $this->respond(['status' => 'failed','code' => 404,'data' => []], 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->getLine()], 500); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getLine()], 500); } } - public function getGmcParrentsPolicy($GmcParrentsPolicy,$emp_code,$client_id,$client_branch_id) + 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(); + $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; @@ -1400,89 +1349,91 @@ class EmployeeRestController extends AdminController // Retrieve slab rate and grid master data by passing the ClientPolicyId and ClientId - $getSlabAndGridData = $this->policesModel->getPolicySlabRatesForEmpOnboard($array->ClientPolicyId,$array->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)) - { + ->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($tpaArray[0]->tpa_id != null) - $array->eCardDownload = base_url('download-e-card/') . $tpaArray[0]->rand_string.'/1'; - else - $array->eCardDownload = null; + if (count($tpaArray)) { - }else{ - $array->eCardDownload = null; + 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) - { + + 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{ + } 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){ + 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) { + foreach ($floters as $familyFloatesValue) { $dependent = preg_replace('/\d/', '', $familyFloatesValue); - - if(count($empData)){ + + 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;} + $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']['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); + $temp['data']['age_validation'] = $this->getAgeRange($array->Policy_Terms, $familyFloatesValue); + + + array_push($data, $temp); unset($empData[$key]); $floters = array_diff($floters, [$familyFloatesValue]); break; @@ -1492,49 +1443,52 @@ class EmployeeRestController extends AdminController } // Remove Unwanted floter key from floters array based on either-parents-pil term value - if($familyFloates->{'either-parents-pil'} == 1 && count($floters)) - { + 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 (preg_replace('/\d/', '', $value) == 'parent') { + $count_parent++; + } + if (preg_replace('/\d/', '', $value) == 'parent_in_law') { + $count_parent_in_law++; + } } - if($count_parent != 2) { + if ($count_parent != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent_in_law') === false); } - if($count_parent_in_law != 2) { + 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)) - { + } 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 (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) { + 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); + 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"; @@ -1543,24 +1497,22 @@ class EmployeeRestController extends AdminController $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) + 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){ + ->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) { @@ -1571,28 +1523,29 @@ class EmployeeRestController extends AdminController $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(); + $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) - { + 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(); + $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; } + 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'; @@ -1601,305 +1554,296 @@ class EmployeeRestController extends AdminController $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']['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) - { + if (isset($login_by_hr) && $login_by_hr == true) { return $array; - }else{ + } else { - if($array->enrolment_visibility == 1) + if ($array->enrolment_visibility == 1) return $array; else return false; - } - - - - }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') { + public function FloterConvertion($array) + { - if($value > 2){ $value = 2; } + $result = []; - 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; + 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; + return $result; } - public function FloterNotesConvertion($array){ + public function FloterNotesConvertion($array) + { $result = ' '; foreach ($array as $key => $value) { if ($value > 0) { - if($value == 1 && $key ==='either-parents-pil') { + if ($value == 1 && $key === 'either-parents-pil') { $result .= ' + Either 2 Parents or 2 Parents in law'; - }else if($value == 2 && $key ==='either-parents-pil') { + } else if ($value == 2 && $key === 'either-parents-pil') { $result .= ' + Any 2 of Parents and Parents in law'; - }else if($value != 0 && $key ==='spouse') { + } else if ($value != 0 && $key === 'spouse') { $string = str_replace('-', ' ', $key); $string = ucwords($string); - $result .= ' + '.$string; - }else if($value != 0 && $key ==='self') { + $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{ + } 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; + $result .= ' + ' . $value . ' ' . $string; } - - } } $first_two_chars = substr($result, 0, 3); - - if($first_two_chars == " +"){ + + if ($first_two_chars == " +") { $modified_string = substr($result, 3); - return "Allowed members ".$modified_string; - }else{ + return "Allowed members " . $modified_string; + } else { return $result; } - return substr($result, 0, 2) !== " +"; - - + return substr($result, 0, 2) !== " +"; } public function getClientDetails() - { + { try { - $client = $this->clientModel->where('id',$this->request->getGet('client_id'))->first(); - if(!empty($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); + $client = $this->clientModel->where('id', $this->request->getGet('client_id'))->first(); + if (!empty($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); + 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(); + $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']; + $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']) + $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() - ->getResult(); - + ->getRow(); - 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; + $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); + } - }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){ + 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) { + foreach ($floters as $familyFloatesValue) { $dependent = preg_replace('/\d/', '', $familyFloatesValue); - if(count($addOnEmployeeData)){ + 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;} + $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']['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); + $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; @@ -1907,285 +1851,303 @@ class EmployeeRestController extends AdminController } } } - + //Remove Unwanted floter key from floters array based on either-parents-pil term value - if($familyFloates->{'either-parents-pil'} == 1 && count($floters)) - { - + 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 (preg_replace('/\d/', '', $value) == 'parent') { + $count_parent++; + } + if (preg_replace('/\d/', '', $value) == 'parent_in_law') { + $count_parent_in_law++; + } } - if($count_parent != 2) { + if ($count_parent != 2) { $floters = array_filter($floters, fn($value) => strpos($value, 'parent_in_law') === false); } - if($count_parent_in_law != 2) { + 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)) - { + } 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++;} + $count_parent_in_law = 0; + foreach ($floters as $value) { + if (preg_replace('/\d/', '', $value) == 'parent') { + $count_parent++; } - if(($count_parent + $count_parent_in_law) == 2) { - $floters = array_filter($floters, fn($value) => strpos($value, 'parent') === false); + 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) { + 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); + $temp2['is_value_exist'] = false; + $temp2['data']['family_floater_key'] = $familyFloatesValue; + $temp2['data']['client_policy_id'] = $array['id']; + $temp2['data']['button_name'] = 'Add ' . ucfirst(str_replace('_', ' ', preg_replace('/\d/', '', $familyFloatesValue))); + $temp2['data']['form_type'] = preg_replace('/\d/', '', $familyFloatesValue); - array_push($data,$temp2); + $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;} + if ($this->request->getGet('policy') == 'GMC-DEPENDENT-ADDON') { + return $this->respond(['status' => 'success', 'code' => 200, 'data' => ['gmc_dependent_addon' => $responce]], 200); } - $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); - } + //array_push($PolicyData, $responce); - $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'] == 4) //Topup policy + { - }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); + } + } - $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); + } } } - $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); + 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); + 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(); + $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)) - { + 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'); + 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)) - { + $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(); + $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(); - + ->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){ + $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');} - + } 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(); + + $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['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_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'], @@ -2193,208 +2155,201 @@ class EmployeeRestController extends AdminController ]; // print_r($params);die; - $wholeData =sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params); + $wholeData = sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params); $mail_send_return = MailHelper::send_email($wholeData[0]); $this->myLogger->logme("error", $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)) - { + $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("error", $mail_send_return1); } - }else{ + } 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); + $client_hr_wholeData = sendMailNotification::sendMailNotification('client_hr_summary_mail', $params); - if($client_hr_wholeData != null && $client_hr_wholeData != '' &&count($client_hr_wholeData)) - { + 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("error", $mail_send_return2); } - }else{ + } else { $this->myLogger->logme("error", 'Client HR Mail Configuration not Enable for this client'); } } - }else{ + } else { $this->myLogger->logme("error", 'Member Review Mail Configuration not Enable for this client'); } - } - - return $this->respond(['status' => 'success','code' => 200,'data' => [] ], 200); + + 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 - { + 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){ // + 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 + $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{ + } 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; + $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_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 + $policy_terms = (array) $policy_terms[0]; // convert obj to array //get policy slab rates - $slab_details = $this->policesModel->getPolicySlabRatesForEmpOnboard($client_policy_id,$client_id); + $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']); + $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 + 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']); + $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']; + $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'); + $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); + $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) - { + 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); - + $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{ + 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); - + return $this->respond(['status' => 'success', 'code' => (count($employee_data_group_by_family) ? 200 : 404), 'data' => [$employee_data_group_by_family]], 200); } - } - public function getHRAccessData( $hr_id = null , $request_for = 'post_enrollment') + public function getHRAccessData($hr_id = null, $request_for = 'post_enrollment') { $hr_id = $this->request->getGet('hr_id') ?? $hr_id; $request_for = $this->request->getGet('request_for') ?? $request_for; - if($request_for == 'pre_enrollment'){ $idField = 'pre_hr_id'; }else{ $idField = 'post_hr_id'; } + if ($request_for == 'pre_enrollment') { + $idField = 'pre_hr_id'; + } else { + $idField = 'post_hr_id'; + } - $data = $this->hrAccessControlModel->where($idField , $hr_id)->where('is_active' , 1)->first(); + $data = $this->hrAccessControlModel->where($idField, $hr_id)->where('is_active', 1)->first(); - if($request_for == 'post_enrollment'){ return $data ?? []; } + if ($request_for == 'post_enrollment') { + return $data ?? []; + } - return $this->respond(['status' => (($data) ? 'success' : 'failed'),'code' => (($data) ? 200 : 404),'data' => $data ], 200); + return $this->respond(['status' => (($data) ? 'success' : 'failed'), 'code' => (($data) ? 200 : 404), 'data' => $data], 200); } public function getPolicyLevelEmployeeSummaryData() { - $hr_id = $this->request->getGet('hr_id'); - $HRAccessData = $this->getHRAccessData($hr_id,'post_enrollment'); + $hr_id = $this->request->getGet('hr_id'); + $HRAccessData = $this->getHRAccessData($hr_id, 'post_enrollment'); - if(isset($HRAccessData['allowed_active_policies'])) - { - $policyId = json_decode($HRAccessData['allowed_active_policies'],true); - }else{ - $policyId = []; - } + if (isset($HRAccessData['allowed_active_policies'])) { + $policyId = json_decode($HRAccessData['allowed_active_policies'], true); + } else { + $policyId = []; + } - if(count($policyId) == 0){ - return $this->respond(['status' => 'failed','code' => (count($policyId) ? 200 : 404),'data' => [] ], 200); - } + if (count($policyId) == 0) { + return $this->respond(['status' => 'failed', 'code' => (count($policyId) ? 200 : 404), 'data' => []], 200); + } - - - $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, client_policy.policy_no as policy_no, client_policy.insurer_id as insurer_id, DATE_FORMAT(client_policy.policy_end_date, "%d-%m-%Y") AS policy_expiry_date ') - ->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', $this->request->getGet('policy_status')) - ->whereIn('client_policy.id', $policyId) - ->findAll(); - - $result = []; - // dd( $ClientPolicyData); - foreach ($ClientPolicyData as $key => $value) - { - $policyTypeData = $this->policyTypeModel->where('id',$value['policy_type_id'])->get()->getRow(); - $insurerData = $this->insurerModel->where('id',$value['insurer_id'])->get()->getRow(); - $value['type'] = $policyTypeData->policy_type; - $value['policy_name'] = $policyTypeData->long_name; - $value['insurer_name'] = $insurerData->name; - $value['insurer_short_name'] = $insurerData->short_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')); - // dd($employeeDetails); - $activeCount = 0; - $inactiveCount = 0; - if(count($employeeDetails)) - { - foreach ($employeeDetails as $item) { - if ($item['emp_status'] === 'active') { - $activeCount++; - } elseif ($item['emp_status'] === 'inactive') { - $inactiveCount++; - } + $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, client_policy.policy_no as policy_no, client_policy.insurer_id as insurer_id, DATE_FORMAT(client_policy.policy_end_date, "%d-%m-%Y") AS policy_expiry_date ') + ->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', $this->request->getGet('policy_status')) + ->whereIn('client_policy.id', $policyId) + ->findAll(); + + + $result = []; + // dd( $ClientPolicyData); + foreach ($ClientPolicyData as $key => $value) { + $policyTypeData = $this->policyTypeModel->where('id', $value['policy_type_id'])->get()->getRow(); + $insurerData = $this->insurerModel->where('id', $value['insurer_id'])->get()->getRow(); + + $value['type'] = $policyTypeData->policy_type; + $value['policy_name'] = $policyTypeData->long_name; + $value['insurer_name'] = $insurerData->name; + $value['insurer_short_name'] = $insurerData->short_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')); + // dd($employeeDetails); + $activeCount = 0; + $inactiveCount = 0; + if (count($employeeDetails)) { + foreach ($employeeDetails as $item) { + if ($item['emp_status'] === 'active') { + $activeCount++; + } elseif ($item['emp_status'] === 'inactive') { + $inactiveCount++; } } - - $value['totalMembersCount'] = count($employeeDetails); - $value['membersCountOfActive'] = $activeCount; - $value['membersCountOfInactive'] = $inactiveCount; - - - array_push($result,$value); } - + + $value['totalMembersCount'] = count($employeeDetails); + $value['membersCountOfActive'] = $activeCount; + $value['membersCountOfInactive'] = $inactiveCount; - 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); + array_push($result, $value); + } + + + + 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); } - } @@ -2402,57 +2357,52 @@ class EmployeeRestController extends AdminController { $hr_id = $this->request->getGet('hr_id'); - $HRAccessData = $this->getHRAccessData($hr_id,'post_enrollment'); + $HRAccessData = $this->getHRAccessData($hr_id, 'post_enrollment'); // print_rr($HRAccessData);die(); - if(isset($HRAccessData['allowed_cd'])) - { - $allowed_cd = json_decode($HRAccessData['allowed_cd'],true); - }else{ - $allowed_cd = []; - } + if (isset($HRAccessData['allowed_cd'])) { + $allowed_cd = json_decode($HRAccessData['allowed_cd'], true); + } else { + $allowed_cd = []; + } // $allowed_cd = [125]; // print_r($allowed_cd);die(); - if(count($allowed_cd) == 0){ - return $this->respond(['status' => 'failed','code' => (count($allowed_cd) ? 200 : 404),'data' => [] ], 200); + if (count($allowed_cd) == 0) { + return $this->respond(['status' => 'failed', 'code' => (count($allowed_cd) ? 200 : 404), 'data' => []], 200); } $clientId = $this->request->getGet('client_id'); $clientController = new ClientController; - $result = $clientController->deposit($clientId , $requestFrom = 'rest' , []); + $result = $clientController->deposit($clientId, $requestFrom = 'rest', []); // print_rr($result);die(); $data = []; - - foreach ($result['clientData'] as $key => $value) - { - if( in_array($value->cd_ac_pk, $allowed_cd) ) - { - $temp['client_id'] = $value->client_id; - $temp['insurer_id'] = $value->insurer_id; - $temp['cd_ac_pk'] = $value->cd_ac_pk; - $temp['insurer_name'] = $value->insurer_name; - $temp['cd_master_account_no'] = $value->cd_master_account_no; - if (isset($result['balances'][$temp['insurer_id'].'-'.$temp['cd_ac_pk']])) { - $balance = $result['balances'][$temp['insurer_id'].'-'.$temp['cd_ac_pk']]->balance; - $temp['balance'] = $balance; - } else { - $temp['balance'] = "N/A"; - } - - array_push($data,$temp); + foreach ($result['clientData'] as $key => $value) { + if (in_array($value->cd_ac_pk, $allowed_cd)) { + $temp['client_id'] = $value->client_id; + $temp['insurer_id'] = $value->insurer_id; + $temp['cd_ac_pk'] = $value->cd_ac_pk; + $temp['insurer_name'] = $value->insurer_name; + $temp['cd_master_account_no'] = $value->cd_master_account_no; + + if (isset($result['balances'][$temp['insurer_id'] . '-' . $temp['cd_ac_pk']])) { + $balance = $result['balances'][$temp['insurer_id'] . '-' . $temp['cd_ac_pk']]->balance; + $temp['balance'] = $balance; + } else { + $temp['balance'] = "N/A"; } + + array_push($data, $temp); } - - - if($data) - { - return $this->respond(['status' => 'success','code' => (count($data) ? 200 : 404),'data' => $data ], 200); - }else{ - return $this->respond(['status' => 'failed','code' => (count($data) ? 200 : 404),'data' => [] ], 200); } - + + + if ($data) { + return $this->respond(['status' => 'success', 'code' => (count($data) ? 200 : 404), 'data' => $data], 200); + } else { + return $this->respond(['status' => 'failed', 'code' => (count($data) ? 200 : 404), 'data' => []], 200); + } } public function cdTransactionData() @@ -2463,8 +2413,8 @@ class EmployeeRestController extends AdminController $cdAccountPrimaryKey = $this->request->getGet('cd_ac_pk'); $clientController = new ClientController; - $result = $clientController->view_Deposit($insurerId , $requestFrom = 'rest' , $param = ['client_id'=>$clientId, 'cd_ac_pk'=>$cdAccountPrimaryKey ]); - + $result = $clientController->view_Deposit($insurerId, $requestFrom = 'rest', $param = ['client_id' => $clientId, 'cd_ac_pk' => $cdAccountPrimaryKey]); + $data['insurer_name'] = $result['insurerName']->name; $data['account_number'] = $result['insurerName']->cd_master_account_no; $data['total_deposit'] = $result['deposiamount']->total_credit; @@ -2472,17 +2422,15 @@ class EmployeeRestController extends AdminController $data['total_refund'] = $result['deposiamount']->total_refund; $data['currect_balance'] = $result['deposiamount']->balance; $data['deposit_data'] = $result['depositdata']; - + // dd($data); - if($data) - { - return $this->respond(['status' => 'success','code' => (count($data) ? 200 : 404),'data' => $data ], 200); - }else{ - return $this->respond(['status' => 'failed','code' => (count($data) ? 200 : 404),'data' => [] ], 200); + if ($data) { + return $this->respond(['status' => 'success', 'code' => (count($data) ? 200 : 404), 'data' => $data], 200); + } else { + return $this->respond(['status' => 'failed', 'code' => (count($data) ? 200 : 404), 'data' => []], 200); } - } @@ -2490,44 +2438,49 @@ class EmployeeRestController extends AdminController { if ($this->request->is('get')) { - + $data['claim_status'] = $this->claimStatusModel->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll(); $data['ticket_type'] = [ - ["ticket_type" => "1", "type_name" => "Claim-GMC"], - ["ticket_type" => "2", "type_name" => "Claim-GPA"], - ["ticket_type" => "3", "type_name" => "EDLI"], - ["ticket_type" => "4", "type_name" => "GTLI"], - ]; - - return $this->respond(['status' => (count($data) ? 'success' : 'failed'),'code' => (count($data) ? 200 : 404),'data' => $data ], 200); - + ["ticket_type" => "1", "type_name" => "Claim-GMC"], + ["ticket_type" => "2", "type_name" => "Claim-GPA"], + ["ticket_type" => "3", "type_name" => "EDLI"], + ["ticket_type" => "4", "type_name" => "GTLI"], + ]; + + return $this->respond(['status' => (count($data) ? 'success' : 'failed'), 'code' => (count($data) ? 200 : 404), 'data' => $data], 200); } $db = db_connect(); $search_data = $this->request->getJSON(true); // Get JSON as associative array - + $client_id = isset($search_data['client_id']) ? (int) $search_data['client_id'] : 0; unset($search_data['client_id']); $from_date = isset($search_data['from_date']) ? $search_data['from_date'] : null; $to_date = isset($search_data['to_date']) ? $search_data['to_date'] : null; unset($search_data['from_date'], $search_data['to_date']); - + $where = []; - + // Dynamically build WHERE conditions from non-empty parameters foreach ($search_data as $key => $value) { if (!empty($value) && $value !== 0 && $value !== '0') { $where["tm.$key"] = $value; } } - + $builder = $db->table('ticket_master tm'); $builder->select([ 'tm.id', 'tm.ticket_type_id', - 'tcs.claim_status AS status', + 'tcs.claim_status AS original_status', + "CASE + WHEN tcs.display_name IS NULL OR tcs.display_name = '' + THEN tcs.claim_status + ELSE UPPER(tcs.display_name) + END AS status + ", 'tm.claim_number AS claim_no', 'tm.claim_status_id', 'tm.is_head_approved', @@ -2541,11 +2494,11 @@ class EmployeeRestController extends AdminController 'tm.insured_name', 'c.short_name', 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', - + '(SELECT first_name FROM user_profiles WHERE user_profiles.id = tm.acm_id) AS acm_name', '(SELECT name FROM insurers WHERE insurers.id = tm.insurer_id) AS insurer_name_sub', '(SELECT name FROM tpa WHERE tpa.id = tm.tpa_id) AS tpa_name', - + 'tm.acm_id', 'tm.insurer_id', 'tm.client_policy_id', @@ -2588,35 +2541,34 @@ class EmployeeRestController extends AdminController 'pt.policy_type as policy_type', 'cp.policy_no as client_policy_no', ]); - + $builder->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left'); $builder->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left'); $builder->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1', 'left'); $builder->join('client_policy cp', 'tm.client_policy_id = cp.id', 'left'); $builder->join('policy_type pt', 'cp.policy_type_id = pt.id', 'left'); - + $builder->where('tm.is_active', 1); - + if ($client_id > 0) { $builder->where('tm.client_id', $client_id); } - + if (!empty($from_date) && !empty($to_date)) { $from_date_mysql = date('Y-m-d', strtotime($from_date)); $to_date_mysql = date('Y-m-d', strtotime($to_date)); $builder->where("DATE(tm.created_at) BETWEEN '$from_date_mysql' AND '$to_date_mysql'"); } - + if (!empty($where)) { $builder->where($where); } - + $builder->orderBy('tm.id', 'DESC'); - + $data = $builder->get()->getResultArray(); - return $this->respond(['status' => (count($data) ? 'success' : 'failed'),'code' => (count($data) ? 200 : 404),'data' => $data ], 200); - + return $this->respond(['status' => (count($data) ? 'success' : 'failed'), 'code' => (count($data) ? 200 : 404), 'data' => $data], 200); } public function claimView() @@ -2626,19 +2578,25 @@ class EmployeeRestController extends AdminController $data['ticket_history'] = $ticketController->ticketHistory($ticket_id); $data['claims_data'] = $this->ticketMaster->getTicketDataByTicketID($ticket_id); $data['ticket_data'] = $ticketController->getMoreInfo($requestFrom = 'rest', $ticket_id); - - // $data = $response['data']; // Assuming your full array is stored in $response // $ticketData = $data['ticket_data']; // $ticketHistory = $data['ticket_history']; + $ticketClaimStatus = $this->claimStatusModel->select('claim_status, display_name')->where('display_name is not null')->where('is_active', 1)->findAll(); + $status_list = array_column($ticketClaimStatus, 'display_name', 'claim_status'); + + $data['ticket_data'] = array_fill_keys(array_keys($data['ticket_data']), []); + + // Loop through ticket_data foreach ($data['ticket_data'] as $status => &$fields) { // Search ticket_history for matching old_status_value foreach ($data['ticket_history'] as $history) { + if ($history['old_status_value'] === $status) { // Attach modified_by and created_at - $fields['modified_by'] = $history['modified_by']; + // $fields['modified_by'] = $history['modified_by']; + $fields['modified_by'] = ""; $fields['modified_at'] = date('d-m-Y h:i A', strtotime($history['created_at'])); // Break after first match (assuming latest entry is enough) break; @@ -2646,6 +2604,32 @@ class EmployeeRestController extends AdminController } } + $new_ticket_data = []; + + foreach ($data['ticket_data'] as $oldKey => $value) { + + // Only process if key exists in status_list + if (!isset($status_list[$oldKey])) { + continue; // skip and do NOT add to new array + } + + // Get new key based on mapping + $newKey = $status_list[$oldKey]; + + // Avoid duplicates + if (!isset($new_ticket_data[$newKey])) { + $new_ticket_data[$newKey] = $value; + } + } + + uasort($new_ticket_data, function ($a, $b) { + $timeA = \DateTime::createFromFormat('d-m-Y h:i A', $a['modified_at']); + $timeB = \DateTime::createFromFormat('d-m-Y h:i A', $b['modified_at']); + return $timeA <=> $timeB; // Ascending + }); + + $data['ticket_data'] = $new_ticket_data; + $ticketMesssageModel = new TicketMessageModel(); $ticket_message = $ticketMesssageModel @@ -2657,7 +2641,7 @@ class EmployeeRestController extends AdminController $claim_file_urls = []; - if (isset($ticket_message['id'])) { + if (isset($ticket_message['id'])) { $claimFiles = new ClaimFilesModel(); $claim_files_data = $claimFiles @@ -2676,20 +2660,19 @@ class EmployeeRestController extends AdminController } $data['claim_files'] = $claim_file_urls; - - return $this->respond(['status' => (count($data) ? 'success' : 'failed'),'code' => (count($data) ? 200 : 404),'data' => $data, ], 200); + + return $this->respond(['status' => (count($data) ? 'success' : 'failed'), 'code' => (count($data) ? 200 : 404), 'data' => $data,], 200); } - + public function exportCashDepositData() { - $CashDepositData = $this->clientPolicyModel->getdepositData($this->request->getGet('client_id'),$this->request->getGet('insurer_id')); + $CashDepositData = $this->clientPolicyModel->getdepositData($this->request->getGet('client_id'), $this->request->getGet('insurer_id')); // echo '
';print_r($CashDepositData); echo '
';die; - if(count($CashDepositData)) - { + if (count($CashDepositData)) { // Define headers and map database fields to Excel fields $headers = [ 'Date' => 'created_at', @@ -2727,7 +2710,7 @@ class EmployeeRestController extends AdminController // Set the header for download - $filename = $CashDepositData[0]->insurer_name.'-CashDeposit.xlsx'; + $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'); @@ -2738,12 +2721,10 @@ class EmployeeRestController extends AdminController exit; return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); - - }else{ + } else { return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); } - } @@ -2751,126 +2732,121 @@ class EmployeeRestController extends AdminController { try { - $clientPolicy = $this->clientPolicyModel->where('id',$this->request->getGet('client_policy_id')) - ->where('open_for_enrollment',1)->findAll(); - - if(count($clientPolicy)) - { + $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]['is_addon'] == 2) //Topup { - if($clientPolicy[0]['policy_type_id'] == 4)//GMC-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', 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(); + $empData = $this->employeeModel->where('emp_code', $this->request->getGet('emp_code')) + ->where('is_addon_value', 1) + ->findAll(); } - - if(count($empData)) - { + + 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->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 + } 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) { + $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->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(); } - - $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); + + + 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); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - } function getEmployeeActiveOrInactivePolicy() { - if($this->request->getGet('type') == 'Active'){ $policy_status = 1; $policy_status_key = "Active"; }else{ $policy_status = 0; $policy_status_key = "InActive";} + if ($this->request->getGet('type') == 'Active') { + $policy_status = 1; + $policy_status_key = "Active"; + } else { + $policy_status = 0; + $policy_status_key = "InActive"; + } $dayInterval = 10; $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, DATE_ADD(client_policy.policy_end_date, INTERVAL {$dayInterval} DAY) as claims_grace_date") - ->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(); + ->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(); - - $employeeSelfData = $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(); + $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(); + + $employeeSelfData = $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(); $employeeName = $employeeSelfData->name ?? ""; - + //for get the pre enrollment policy count $empMobileNo = $this->request->getGet('mobile_no'); $clientId = $this->request->getGet('client_id'); - if(!empty($employeeSelfData) && isset($employeeSelfData->email_corporate)){ + if (!empty($employeeSelfData) && isset($employeeSelfData->email_corporate)) { $prePolicyCount = $this->getPreEmployeePolicyCount($empMobileNo, $clientId, $employeeSelfData->email_corporate); - }else{ + } else { $prePolicyCount = $this->getPreEmployeePolicyCount($empMobileNo, $clientId); } - - $whereArrayForId = []; - foreach ( $employeeData as $key => $value) { array_push($whereArrayForId, $value['id']); } - if(count($ClientPolicyData) > 0 && count($employeeData) > 0) - { + $whereArrayForId = []; + foreach ($employeeData as $key => $value) { + array_push($whereArrayForId, $value['id']); + } + + if (count($ClientPolicyData) > 0 && count($employeeData) > 0) { $result = []; foreach ($ClientPolicyData as $key => $ClientPolicyValue) { @@ -2878,38 +2854,31 @@ class EmployeeRestController extends AdminController continue; } - if($ClientPolicyValue['policy_type_id'] == 1) - { + if ($ClientPolicyValue['policy_type_id'] == 1) { $policyGroup = 'gpa'; $data['ticket_type_id'] = 2; $data['claim_subject'] = "Claim GPA"; $data['sum_insured_label'] = "Sum Assured"; - - }else if($ClientPolicyValue['policy_type_id'] == 6) - { + } else if ($ClientPolicyValue['policy_type_id'] == 6) { $policyGroup = 'other'; $data['ticket_type_id'] = 3; $data['claim_subject'] = "Claim EDLI"; $data['sum_insured_label'] = "Sum Assured"; - - }else if($ClientPolicyValue['policy_type_id'] == 7) - { + } else if ($ClientPolicyValue['policy_type_id'] == 7) { $policyGroup = 'other'; $data['ticket_type_id'] = 4; $data['claim_subject'] = "Claim GTLI"; $data['sum_insured_label'] = "Sum Assured"; - - }else - { + } else { $policyGroup = 'gmc'; $data['ticket_type_id'] = 1; $data['claim_subject'] = "Claim GMC"; $data['sum_insured_label'] = "Sum Insured"; } - $terms = json_decode($ClientPolicyValue['policy_terms'] , true); + $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']; @@ -2934,61 +2903,66 @@ class EmployeeRestController extends AdminController // 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'; } + 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) - { + ->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'; + 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['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, 'pre_policy_count' => $prePolicyCount ], 200); - - }else{ - return $this->respond(['status' => 'failed','code' => 404,'data' => [] ], 200); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result, 'emp_name' => $employeeName, 'pre_policy_count' => $prePolicyCount], 200); + } else { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); } - } - function policyTermsFiter($terms , $type) - { - if(empty($terms)){ + function policyTermsFiter($terms, $type) + { + if (empty($terms)) { return []; } @@ -3020,7 +2994,7 @@ class EmployeeRestController extends AdminController ]; $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", @@ -3042,59 +3016,51 @@ class EmployeeRestController extends AdminController ]; $finalarray = []; - if($type == 'gpa'){ + if ($type == 'gpa') { foreach ($gpa as $key => $value) { - if(isset($terms->$key)) - { - if($terms->$key == 1) - { + if (isset($terms->$key)) { + if ($terms->$key == 1) { $termsValue = 'Yes'; - }else if($terms->$key == 0) - { + } else if ($terms->$key == 0) { $termsValue = 'No'; - }else - { + } 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++) { + 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 if($type == 'other'){ + } else if ($type == 'other') { foreach ($terms as $key => $value) { - if($key != "multiple_sum_insured" && $value != ""){ + if ($key != "multiple_sum_insured" && $value != "") { $result = ucwords(str_replace('_', ' ', $key)); $finalarray[$result] = $value; } } - 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++) { + 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{ + } else { foreach ($gmc as $key => $value) { - if(isset($terms->$key)) - { - if($terms->$key == 1) - { + if (isset($terms->$key)) { + if ($terms->$key == 1) { $termsValue = 'Yes'; - }else if($terms->$key == 0) - { + } else if ($terms->$key == 0) { $termsValue = 'No'; - }else - { + } 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++) { + 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]; } } @@ -3119,42 +3085,40 @@ class EmployeeRestController extends AdminController public function getFEContent() { try { - + $feContentData = $this->feContentModel->findAll(); if (count($feContentData) > 0) { - - return $this->respond(['status' => 'success','code' => 200,'data' => $feContentData ],200); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $feContentData], 200); } else { - - return $this->respond(['status' => 'failed','code' => 404,'data' => 'No Data'],404); + + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => 'No Data'], 404); } - } catch (\Throwable $th) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); - } + } 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); + $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); + + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => 'No Data'], 404); } } catch (\Throwable $th) { - return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500); } } @@ -3162,29 +3126,28 @@ class EmployeeRestController extends AdminController 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 (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 @@ -3195,7 +3158,7 @@ class EmployeeRestController extends AdminController $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 @@ -3229,16 +3192,16 @@ class EmployeeRestController extends AdminController // $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']); @@ -3255,22 +3218,26 @@ class EmployeeRestController extends AdminController $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."); } + + 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(); + ->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'; }); + $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; @@ -3278,113 +3245,113 @@ class EmployeeRestController extends AdminController //Fetch employee policy details $employeeIds = array_column($employees, 'id'); - $policies = $this->employeePolicyModel->whereIn('employee_id', $employeeIds)->where('is_active',1)->findAll(); + $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']; + + 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) - { + 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); + 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); + ->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); + $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); + 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) - { + 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(); + 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(); - } + 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'; + 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(); + ->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'], @@ -3416,24 +3383,28 @@ class EmployeeRestController extends AdminController // Re-index the grouped policies $data['currentPolicies'] = array_values($groupedPolicies); - + return $this->respond(['data' => $data]); } - public function retriveOldData($self_enrolled_time,$table,$pk) + public function retriveOldData($self_enrolled_time, $table, $pk) { - $historyData = $this->auditHistoryModel->where('pk', $pk)->where('table_name',$table)->findAll(); + $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 ($val['created_at'] <= $self_enrolled_time) { + $beforeEnrolled[] = $val; + } else { + $afterEnrolled[] = $val; + } } - if(count($beforeEnrolled) && count($afterEnrolled)){ //After enrolment edited some of the data - + 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` @@ -3447,22 +3418,19 @@ class EmployeeRestController extends AdminController } $temp['data'] = $originalValues; return $temp; - - }else if(!count($beforeEnrolled) && !count($afterEnrolled)){ //After enrolment created new data + } else if (!count($beforeEnrolled) && !count($afterEnrolled)) { //After enrolment created new data $temp['table'] = $table; $temp['id'] = $pk; - $temp['data'] = ['is_active'=> 0 ]; + $temp['data'] = ['is_active' => 0]; return $temp; - - }else if(!count($beforeEnrolled) && count($afterEnrolled)){ //After enrolment created new data and edited some of the data + } 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 ]; + $temp['data'] = ['is_active' => 0]; return $temp; - - }else if(count($beforeEnrolled) && !count($afterEnrolled)){ //After enrolment nothing changes from the data + } else if (count($beforeEnrolled) && !count($afterEnrolled)) { //After enrolment nothing changes from the data return false; } @@ -3472,13 +3440,12 @@ class EmployeeRestController extends AdminController public function findThePolicyIsOpenForEnrollment($plicy_id) { - $policy = $this->clientPolicyModel->where('id',$plicy_id)->where('open_for_enrollment',1)->find(); + $policy = $this->clientPolicyModel->where('id', $plicy_id)->where('open_for_enrollment', 1)->find(); - if($policy) - return true; + if ($policy) + return true; else - return false; - + return false; } // ---------------- TICKET API's --------------------------------------------------------------------------------------------------- @@ -3505,7 +3472,7 @@ class EmployeeRestController extends AdminController $insured_emp_id = $received_data['insured_emp_id']; $file_data = []; - if(isset($get_file_data) && !empty($get_file_data)){ + if (isset($get_file_data) && !empty($get_file_data)) { $file_path = WRITEPATH . 'uploads/claim_files/'; $file_data = multi_file_Upload($get_file_data, $file_path, $get_docs_name); } @@ -3513,13 +3480,13 @@ class EmployeeRestController extends AdminController if (empty($received_data['doa'])) { $received_data['doa'] = null; - } else{ + } else { $ticket_data['doa'] = change_date_format($received_data['doa']); } if (empty($received_data['dod'])) { $received_data['dod'] = null; - } else{ + } else { $ticket_data['dod'] = change_date_format($received_data['dod']); } @@ -3562,22 +3529,22 @@ class EmployeeRestController extends AdminController $emp_ticket_data = $this->employeeModel->query($sql)->getResultArray(); // print_r(db_connect()->getLastQuery()); die; - if(!empty($emp_ticket_data)){ + 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'); - + ->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; @@ -3636,21 +3603,18 @@ class EmployeeRestController extends AdminController $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{ + } else { return $this->response->setJSON(['status' => false, 'code' => 200, 'message' => 'The employee is not active.'])->setStatusCode(404); } } public function handleCliamFiles($data, $ticket_id, $ticket_message_id = null) { - if(!empty($data) && !empty($ticket_id)) - { + if (!empty($data) && !empty($ticket_id)) { $insert_ids = []; $pdf_exist_in_the_file = false; $claim_file = new ClaimFilesModel(); @@ -3668,17 +3632,17 @@ class EmployeeRestController extends AdminController $insert_ids[] = $claim_file->insert($data); - if(getMimeTypeByFileName($value['file_name']) == "application/pdf"){ + if (getMimeTypeByFileName($value['file_name']) == "application/pdf") { $pdf_exist_in_the_file = true; } } - if($pdf_exist_in_the_file){ + if ($pdf_exist_in_the_file) { // this call for TPA integration $apiServiceController = new ApiServiceController(); $apiServiceController->pushClaims($ticket_id); log_message('error', "pushClaims function called with Ticket ID: {$ticket_id}, In Employee Rest Controller"); - }else{ + } else { log_message('error', "Failed to call the pushClaims function in EmployeeRestController for Ticket ID: {$ticket_id}, because the .pdf file does not exist."); } @@ -3777,8 +3741,7 @@ class EmployeeRestController extends AdminController } $filtered = array_values($filtered); - return $this->response->setJSON(['status' => true,'code' => 200, 'ticket_type' => $filtered ])->setStatusCode(200); - + return $this->response->setJSON(['status' => true, 'code' => 200, 'ticket_type' => $filtered])->setStatusCode(200); } catch (\Throwable $e) { $this->myLogger->logme('error', "Error in get_ticket_type: " . $e->getMessage() . " Trace: " . $e->getTraceAsString()); return $this->response->setJSON([ @@ -3804,7 +3767,7 @@ class EmployeeRestController extends AdminController $ticket_type = $this->request->getGet('ticket_type') ?? null; $ticket_id = $this->request->getGet('ticket_id') ?? null; $request = \Config\Services::request(); - $uri = $request->uri->getPath(); + $uri = $request->uri->getPath(); $returnType = ""; // $returnType = (strpos($uri, 'api') !== false) ? 'api' : 'web'; // dd($emp_id); @@ -3818,15 +3781,25 @@ class EmployeeRestController extends AdminController 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], + // ]; + $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], + 'Claim Received' => [1, 2, 3, 15, 16, 17, 18, 25, 26, 27, 28, 35, 36, 37, 38], + 'Under Process' => [5, 6, 7, 10, 19, 23, 45, 50, 29, 33, 51, 39, 43, 56], + 'Information Required' => [4], '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], + 'Denial Review Awaited' => [66], + 'Rejected' => [8, 49, 55, 60], ]; foreach ($ticket_data as $key => $value) { @@ -3836,6 +3809,7 @@ class EmployeeRestController extends AdminController $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; @@ -3843,9 +3817,9 @@ class EmployeeRestController extends AdminController 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]['claim_type_value'] = $claimType[$claimPrimaryTypey][$value['claim_type']] ?? null; $ticket_data[$key]['ticket_policy_type'] = $ticketTypeArray[$value['ticket_type_id']] ?? null; - + $claim_file_urls = []; if (isset($value['ticket_message_id'])) { @@ -3860,7 +3834,7 @@ class EmployeeRestController extends AdminController ->findAll(); foreach ($claim_files_data as &$value) { - $value['url'] = base_url('downloadClaimFile/') . $value['claim_file_id']; + $value['url'] = base_url('downloadClaimFile/') . $value['claim_file_id']; $claim_file_urls[] = $value; } unset($value); @@ -3868,7 +3842,6 @@ class EmployeeRestController extends AdminController // always set the key (empty if no files found) $ticket_data[$key]['claim_files'] = $claim_file_urls; - } } @@ -3876,7 +3849,8 @@ class EmployeeRestController extends AdminController } // not in use did for testing - function encrypt_for_sso(): string { + function encrypt_for_sso(): string + { $key = "32D1D5535157AF3D4667ADAB0CC795D77D022BB281AD3272EB134C72BD0B185E"; @@ -3930,8 +3904,6 @@ class EmployeeRestController extends AdminController $finalUrl = $baseURL . '/sso?userParams=' . $output . '&clientId=' . $clientId; return $finalUrl; - - } @@ -4040,7 +4012,7 @@ class EmployeeRestController extends AdminController // } public function getPreEmployeePolicyCount($mobile_no, $clientId = null, $email = null) - { + { log_message('error', 'STEP 1: getPreEmployeePolicyCount called with params: ' . json_encode(['mobile_no' => $mobile_no, 'client_id' => $clientId, 'email' => $email])); if (empty($mobile_no) && empty($email)) { @@ -4061,25 +4033,23 @@ class EmployeeRestController extends AdminController } else { log_message('error', 'STEP 4: No client found for ID: ' . $clientId); } - } else { log_message('error', 'STEP 3: No clientId provided. Skipping client lookup.'); } - if(!empty($email)){ + if (!empty($email)) { $post_data = [ 'email_id' => $email, 'client_short_name' => $client_short_name ]; - }else{ + } else { $post_data = [ 'mobile_number' => $mobile_no, 'client_short_name' => $client_short_name ]; - } - + log_message('error', 'STEP 5: Calling third-party API with payload: ' . json_encode($post_data)); @@ -4104,80 +4074,79 @@ class EmployeeRestController extends AdminController } } - private function callThirdPartyAPI($postData , $endPoint) + private function callThirdPartyAPI($postData, $endPoint) { $client = \Config\Services::curlrequest(); - $url = env('PRE_ENROLLMENT_BASEURL').$endPoint; - $response = $client->post( $url, ['json' => $postData, 'http_errors' => false ] ); + $url = env('PRE_ENROLLMENT_BASEURL') . $endPoint; + $response = $client->post($url, ['json' => $postData, 'http_errors' => false]); // return json_decode($response->getBody(), true); return $response->getBody(); } - //-------------------------------------------------------------------------------------------- - public function hrFileUpload() - { - try { - // Check file - $file = $this->request->getFile('file_name'); - if (!$file) { - return $this->response->setJSON([ - 'status' => false, - 'message' => "Invalid file or file not uploaded.", - 'data' => "No Data" - ]); - } - - // Upload folder path - $uploadPath = WRITEPATH . 'uploads/hr_files/'; - - // If directory not exists, create it - if (!is_dir($uploadPath)) { - mkdir($uploadPath, 0777, true); - } - - // New file name with timestamp - $newFileName = time() . '_' . $file->getRandomName(); - - // Move file - $file->move($uploadPath, $newFileName); - - // Prepare data - $data = [ - 'client_id' => $this->request->getPost('client_id'), - 'client_branch_id' => $this->request->getPost('client_branch_id'), - 'policy_id' => $this->request->getPost('policy_id'), - 'policy_no' => $this->request->getPost('policy_no'), - 'file_name' => $newFileName, - 'file_action' => $this->request->getPost('file_action'), - 'status' => 'Yet to start', - 'created_by' => $this->request->getPost('created_by'), - 'updated_by' => $this->request->getPost('created_by'), - ]; - - // Save into DB - $result = $this->hrFileUploadModel->insert($data); + //-------------------------------------------------------------------------------------------- + public function hrFileUpload() + { + try { + // Check file + $file = $this->request->getFile('file_name'); + if (!$file) { + return $this->response->setJSON([ + 'status' => false, + 'message' => "Invalid file or file not uploaded.", + 'data' => "No Data" + ]); + } - if($result){ + // Upload folder path + $uploadPath = WRITEPATH . 'uploads/hr_files/'; + + // If directory not exists, create it + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + + // New file name with timestamp + $newFileName = time() . '_' . $file->getRandomName(); + + // Move file + $file->move($uploadPath, $newFileName); + + // Prepare data + $data = [ + 'client_id' => $this->request->getPost('client_id'), + 'client_branch_id' => $this->request->getPost('client_branch_id'), + 'policy_id' => $this->request->getPost('policy_id'), + 'policy_no' => $this->request->getPost('policy_no'), + 'file_name' => $newFileName, + 'file_action' => $this->request->getPost('file_action'), + 'status' => 'Yet to start', + 'created_by' => $this->request->getPost('created_by'), + 'updated_by' => $this->request->getPost('created_by'), + ]; + + // Save into DB + $result = $this->hrFileUploadModel->insert($data); + + if ($result) { $this->giveNotificationToClientsAccountManager($data); - } - - return $this->respondCreated([ - 'status' => true, - 'message' => 'File uploaded successfully', - 'data' => $data - ]); - - } catch (\Exception $e) { - return $this->failServerError($e->getMessage()); - } - - } + } - private function giveNotificationToClientsAccountManager($data){ - - $client_name = $this->clientModel->where('id',$data['client_id'])->findAll()[0]['client_name'] ?? [] ; + return $this->respondCreated([ + 'status' => true, + 'message' => 'File uploaded successfully', + 'data' => $data + ]); + } catch (\Exception $e) { + return $this->failServerError($e->getMessage()); + } + } + + private function giveNotificationToClientsAccountManager($data) + { + + $client_name = $this->clientModel->where('id', $data['client_id'])->findAll()[0]['client_name'] ?? []; $account_manager_email = $this->clientRMModel->findAccountManagerEmail($data['client_id']); @@ -4185,20 +4154,20 @@ class EmployeeRestController extends AdminController $mailTemplate = $this->ticketMailTemplateModel->where('template_name', $templateName)->findAll()[0] ?? []; - if(empty($mailTemplate)){ + if (empty($mailTemplate)) { //empty mail template please update the template in database or create one..!! - log_message("error","Empty mail template for inception_addition please update the template in database or create one..!!"); - return ; + log_message("error", "Empty mail template for inception_addition please update the template in database or create one..!!"); + return; } - + $data['file_action'] = ucwords(preg_replace("/_/", " ", $data['file_action'])); $mailTemplate['mail_content'] = str_replace('%file_action%', $data['file_action'] ?? '', $mailTemplate['mail_content']); $mailTemplate['mail_content'] = str_replace('%client_name%', $client_name ?? '', $mailTemplate['mail_content']); $mailTemplate['mail_content'] = str_replace('%policy_no%', $data['policy_no'] ?? '', $mailTemplate['mail_content']); - $mailTemplate['subject'] = str_replace('%subject%',$data['file_action']??'',$mailTemplate['subject']); - $mailTemplate['subject'] = str_replace('%client_name%',$client_name??'',$mailTemplate['subject']); + $mailTemplate['subject'] = str_replace('%subject%', $data['file_action'] ?? '', $mailTemplate['subject']); + $mailTemplate['subject'] = str_replace('%client_name%', $client_name ?? '', $mailTemplate['subject']); $from_mail = ""; $to_mail = $account_manager_email; @@ -4208,62 +4177,60 @@ class EmployeeRestController extends AdminController $attachments = ""; $reply_to = ""; $bcc_string = ""; - - MailHelper::send_email(['from_mail' => $from_mail, 'mail' => $to_mail, 'cc' => $cc_string, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to, 'bcc' => $bcc_string]); - } + MailHelper::send_email(['from_mail' => $from_mail, 'mail' => $to_mail, 'cc' => $cc_string, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to, 'bcc' => $bcc_string]); + } + + public function updateHrFileUploadData() + { + try { + $id = $this->request->getPost('id'); + + if (!$id) { + return $this->failValidationErrors('ID is required for update.'); + } + + // Prepare data + $data = [ + 'client_id' => $this->request->getPost('client_id'), + 'client_branch_id' => $this->request->getPost('client_branch_id'), + 'policy_id' => $this->request->getPost('policy_id'), + 'policy_no' => $this->request->getPost('policy_no'), + 'file_action' => $this->request->getPost('file_action'), + 'status' => $this->request->getPost('status'), + 'updated_by' => $this->request->getPost('updated_by'), + ]; + + // Check if record exists + $record = $this->hrFileUploadModel->find($id); + if (!$record) { + return $this->failNotFound("Record with ID {$id} not found."); + } + + // Update record + $this->hrFileUploadModel->update($id, $data); + + return $this->respond([ + 'status' => true, + 'message' => 'File record updated successfully', + 'data' => $data + ], 200); + } catch (\Exception $e) { + return $this->failServerError($e->getMessage()); + } + } + + + public function hrFileDownload($id = null) + { + try { - public function updateHrFileUploadData() - { - try { - $id = $this->request->getPost('id'); - - if (!$id) { - return $this->failValidationErrors('ID is required for update.'); - } - - // Prepare data - $data = [ - 'client_id' => $this->request->getPost('client_id'), - 'client_branch_id' => $this->request->getPost('client_branch_id'), - 'policy_id' => $this->request->getPost('policy_id'), - 'policy_no' => $this->request->getPost('policy_no'), - 'file_action' => $this->request->getPost('file_action'), - 'status' => $this->request->getPost('status'), - 'updated_by' => $this->request->getPost('updated_by'), - ]; - - // Check if record exists - $record = $this->hrFileUploadModel->find($id); - if (!$record) { - return $this->failNotFound("Record with ID {$id} not found."); - } - - // Update record - $this->hrFileUploadModel->update($id, $data); - - return $this->respond([ - 'status' => true, - 'message' => 'File record updated successfully', - 'data' => $data - ], 200); - - } catch (\Exception $e) { - return $this->failServerError($e->getMessage()); - } - } - - - public function hrFileDownload($id = null) - { - try { - $file_id = $this->request->getGet('id') ?? $id; - + // Find record - $record = $this->hrFileUploadModel->where('id',$file_id)->find(); - + $record = $this->hrFileUploadModel->where('id', $file_id)->find(); + // print_rr( $record);die; if (!$record) { @@ -4281,19 +4248,19 @@ class EmployeeRestController extends AdminController // Force file download return $this->response->download($filePath, null) - ->setFileName($record[0]['file_name']); - } catch (\Exception $e) { - return $this->failServerError($e->getMessage()); - } - } - + ->setFileName($record[0]['file_name']); + } catch (\Exception $e) { + return $this->failServerError($e->getMessage()); + } + } + // public function hrFileList() // { // try { // $request = service('request'); // $builder = $this->hrFileUploadModel // ->select('hr_file_upload.* , c.short_name , cb.branch_name , lc.name as first_name '); - + // // Allowed filter keys // $filters = [ // 'client_id', @@ -4303,7 +4270,7 @@ class EmployeeRestController extends AdminController // 'status', // 'created_by' // ]; - + // // Apply filters dynamically // foreach ($filters as $key) { // $value = $request->getGetPost($key); // supports both GET and POST @@ -4311,13 +4278,13 @@ class EmployeeRestController extends AdminController // $builder->where($key, $value); // } // } - + // // Fetch results // $builder->join('clients c', 'c.id = hr_file_upload.client_id AND c.is_active = 1', 'left'); // $builder->join('client_branch cb', 'cb.id = hr_file_upload.client_branch_id AND cb.is_active = 1', 'left'); // $builder->join('level_contacts lc', 'lc.id = hr_file_upload.created_by AND lc.contact_type = "client" AND lc.is_active = 1', 'left'); // $data = $builder->findAll(); - + // return $this->respond([ // 'status' => true, // 'message' => 'File list fetched successfully', @@ -4370,10 +4337,10 @@ class EmployeeRestController extends AdminController FROM files f1 WHERE f1.is_active = 1 ORDER BY f1.id DESC - LIMIT 1) f', - 'f.hr_file_id = hr_file_upload.id', + LIMIT 1) f', + 'f.hr_file_id = hr_file_upload.id', 'left' - ); + ); // Allowed filter keys $filters = [ @@ -4406,7 +4373,7 @@ class EmployeeRestController extends AdminController return $this->failServerError($e->getMessage()); } } - + public function hrFileUploadMasters() { try { @@ -4432,14 +4399,14 @@ class EmployeeRestController extends AdminController if (empty($policy_id)) { $policy_id = $this->request->getGet('policy_id'); $api_name = $this->request->getGet('api_name'); - log_message('error', "Input parameters fetched from GET: policy_id={$policy_id}, api_name={$api_name}"); + log_message('error', "Input parameters fetched from GET: policy_id={$policy_id}, api_name={$api_name}"); } else { - log_message('error', "Input parameters received directly: policy_id={$policy_id}, api_name={$api_name}"); + log_message('error', "Input parameters received directly: policy_id={$policy_id}, api_name={$api_name}"); } // Step 2: Validate policy_id if (empty($policy_id)) { - log_message('error', 'Policy ID is empty'); + log_message('error', 'Policy ID is empty'); if ($return_type == 'api') { return $this->respond(['status' => false, 'code' => 200, 'message' => 'Policy ID missing']); } @@ -4447,14 +4414,14 @@ class EmployeeRestController extends AdminController } // Step 3: Fetch policy data - log_message('error', "Fetching policy data for policy_id={$policy_id}"); + log_message('error', "Fetching policy data for policy_id={$policy_id}"); $policy_data = $this->clientPolicyModel ->where('is_active', 1) ->where('id', $policy_id) ->first(); if (empty($policy_data)) { - log_message('error', "Policy data not found for policy_id={$policy_id}"); + log_message('error', "Policy data not found for policy_id={$policy_id}"); if ($return_type == 'api') { return $this->respond(['status' => false, 'code' => 200, 'message' => 'Policy data not found']); } @@ -4463,7 +4430,7 @@ class EmployeeRestController extends AdminController // Step 4: Check for TPA ID if (empty($policy_data['tpa_id'])) { - log_message('error', "TPA ID not found for policy_id={$policy_id}"); + log_message('error', "TPA ID not found for policy_id={$policy_id}"); if ($return_type == 'api') { return $this->respond(['status' => false, 'code' => 200, 'message' => 'TPA ID not found']); } @@ -4471,10 +4438,10 @@ class EmployeeRestController extends AdminController } $tpa_id = $policy_data['tpa_id']; - log_message('error', "Found TPA ID={$tpa_id} for policy_id={$policy_id}"); + log_message('error', "Found TPA ID={$tpa_id} for policy_id={$policy_id}"); // Step 5: Check if API service is enabled - log_message('error', "Checking TPA API service for TPA ID={$tpa_id} and API name={$api_name}"); + log_message('error', "Checking TPA API service for TPA ID={$tpa_id} and API name={$api_name}"); $tpaApiServiceModel = new TpaApiSeviceModel(); $api_data = $tpaApiServiceModel ->where('is_active', 1) @@ -4483,34 +4450,34 @@ class EmployeeRestController extends AdminController ->first(); if (!empty($api_data)) { - log_message('error', "API '{$api_name}' is enabled for TPA ID={$tpa_id}"); + log_message('error', "API '{$api_name}' is enabled for TPA ID={$tpa_id}"); if ($return_type == 'api') { return $this->respond(['status' => true, 'code' => 200, 'message' => 'API services enabled']); } return true; } else { - log_message('error', "API '{$api_name}' is NOT enabled for TPA ID={$tpa_id}"); + log_message('error', "API '{$api_name}' is NOT enabled for TPA ID={$tpa_id}"); if ($return_type == 'api') { return $this->respond(['status' => false, 'code' => 200, 'message' => 'API services not enabled']); } return false; } } catch (\Throwable $th) { - log_message('error', 'Exception in checkTpaApiEnable: ' . $th->getMessage()); + log_message('error', 'Exception in checkTpaApiEnable: ' . $th->getMessage()); if ($return_type == 'api') { return $this->respond(['status' => false, 'code' => 500, 'message' => 'Internal Server Error']); } return false; } finally { - log_message('error', '--- END checkTpaApiEnable ---'); + log_message('error', '--- END checkTpaApiEnable ---'); } } - public function getEcardURL() - { - try{ + public function getEcardURL() + { + try { $id = $this->request->getGet('id'); $emp_code = $this->request->getGet('emp_code'); @@ -4518,40 +4485,34 @@ class EmployeeRestController extends AdminController $policy_no = $this->request->getGet('policy_no'); $employee_policy = $this->employeePolicyModel - ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') - ->join('employees', 'employee_polices.employee_id = employees.id', 'left') - ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') - ->where('employee_polices.employee_id',$id) - ->where('employee_polices.client_policy_id',$client_policy_id) - ->where('employee_polices.is_active', 1 )->findAll(); + ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') + ->join('employees', 'employee_polices.employee_id = employees.id', 'left') + ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') + ->where('employee_polices.employee_id', $id) + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employee_polices.is_active', 1)->findAll(); - - if(count($employee_policy) > 0) - { - if($employee_policy[0]['tpa_id'] != null) - { - if($employee_policy[0]['tpa_primary_id'] == 2)//Medi assist + + if (count($employee_policy) > 0) { + if ($employee_policy[0]['tpa_id'] != null) { + if ($employee_policy[0]['tpa_primary_id'] == 2) //Medi assist { $mediAssistController = new MediAssistApiController(); - $data['eCardDownload'] = $mediAssistController->EcardRequest( $emp_code, $policy_no ); - }else{ - $data['eCardDownload'] = base_url('download-e-card/') . $employee_policy[0]['rand_string'].'/1'; + $data['eCardDownload'] = $mediAssistController->EcardRequest($emp_code, $policy_no); + } else { + $data['eCardDownload'] = base_url('download-e-card/') . $employee_policy[0]['rand_string'] . '/1'; } - } else { - $data['eCardDownload'] = null; + $data['eCardDownload'] = null; } - }else{ - $data['eCardDownload'] = null; + } else { + $data['eCardDownload'] = null; } - return $this->respond(['status' => true,'message' => '','data' => $data]); - - } catch(\Exception $e){ - + return $this->respond(['status' => true, 'message' => '', 'data' => $data]); + } catch (\Exception $e) { } - } - -} \ No newline at end of file + } +} diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 4b71694c..690e9c08 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -2471,7 +2471,7 @@ class EmployeeServiceController extends AdminController $member_data_count = count($member_data); if ($inception_data_count !== $member_data_count) { - $result['error_summary'][] = 15; + $result['error_summary'][] = 101; $result['error_message'] = " Inception Data Count: {$inception_data_count}   @@ -2504,7 +2504,7 @@ class EmployeeServiceController extends AdminController } if (!$match_found) { - array_push($result['error_summary'], 14); + array_push($result['error_summary'], 100); $result['error_data'][$inception_key]['sno']['error'][] = "This inception row was not found in the member data list."; } } diff --git a/app/Controllers/InsuranceCommissionController.php b/app/Controllers/InsuranceCommissionController.php new file mode 100644 index 00000000..11f61daa --- /dev/null +++ b/app/Controllers/InsuranceCommissionController.php @@ -0,0 +1,274 @@ +myLogger = \Config\Services::mylogger(); + // Load rules file if present in writable config path + // $rulesPath = WRITEPATH . 'config/insurance_rules.json'; + // if (file_exists($rulesPath)) { + // $this->loadRulesFromFile($rulesPath); + // } + } + + /** + * POST /insurance/calculate + * Accepts JSON body with policy data and returns commission calculation + */ + public function initiateCommissionCalc() + { + // Accept POST params (JSON, form-data, x-www-form-urlencoded) + $input = $this->request->getPost(); + + if (empty($input)) { + $json = $this->request->getJSON(true); + if ($json) { + $input = $json; + } + } + + if (empty($input)) { + return $this->failValidationError('No input data received'); + } + // -------- Required Params Check -------- + if (empty($input['policy_issue_date'])) { + return $this->failValidationError('policy_issue_date is required'); + } + + if (empty($input['department'])) { + return $this->failValidationError('department is required'); + } + + if (empty($input['insurer_id'])) { + return $this->failValidationError('insurer_id is required'); + } + + + // -------- Build Dynamic Rules Path -------- + $policyDate = strtotime($input['policy_issue_date']); + if (!$policyDate) { + return $this->failValidationError('Invalid policy_issue_date'); + } + + $month = strtoupper(date('M', $policyDate)); // SEP + $year = date('Y', $policyDate); // 2025 + $folderName = $month . $year; // SEP2025 + + $insurerId = $input['insurer_id']; // 5 + $department = ucfirst(strtolower($input['department'])); // Motor, Health, Fire + + // Final Path: WRITEPATH/rules/SEP2025/5_Motor.json + $rulesPath = WRITEPATH . "uploads/commission/rules/{$folderName}/{$insurerId}_{$department}.json"; + // echo $rulesPath;die(); + + if (!file_exists($rulesPath)) { + return $this->fail("Rules file not found at: {$rulesPath}"); + } + + // Load the dynamic rule set + $this->loadRulesFromFile($rulesPath); + + // -------- Execute Rule Matching & Commission Calculation -------- + try { + $result = $this->calculateCommission($input); + + $comment = isset($result['rule']['name']) + ? "Matched rule: " . $result['rule']['name'] + : "Matched rule: (unnamed rule)"; + + return $this->respond([ + 'success' => true, + 'data' => [ + 'payout' => $result['payout'], + 'rule' => $result['rule'], + 'comment' => $comment, + // 'rules_path_used' => $rulesPath + ] + ]); + + } catch (\Exception $e) { + return $this->fail($e->getMessage()); + } + } + + + /** + * Load rules JSON and normalise department keys to lowercase for lookups + */ + private function loadRulesFromFile(string $filePath) + { + if (!file_exists($filePath)) { + throw new \Exception("Rules file not found: {$filePath}"); + } + + $json = file_get_contents($filePath); + $parsed = json_decode($json, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + throw new \Exception('Invalid JSON in rules file: ' . json_last_error_msg()); + } + + // Normalise department keys to lowercase for consistent lookups + $this->rules = []; + foreach ($parsed as $dept => $rules) { + $this->rules[strtolower($dept)] = $rules; + } + } + + public function calculateCommission(array $policyData) + { + $department = $policyData['department'] ?? ''; + $deptKey = strtolower($department); + + if (!isset($this->rules[$deptKey])) { + throw new \Exception("No rules found for department: {$department}"); + } + + $matchingRules = []; + + foreach ($this->rules[$deptKey] as $rule) { + if ($this->evaluateConditions($rule['conditions'] ?? [], $policyData)) { + $matchingRules[] = $rule; + } + } + + if (empty($matchingRules)) { + throw new \Exception('No matching rules found for the policy data'); + } + + // Use the first matching rule. In future you can implement priority/weighting + $applicableRule = $matchingRules[0]; + + $payout = $this->applyCalculation($applicableRule['calculation'], $policyData); + + return ['rule' => $applicableRule, 'payout' => $payout]; + } + + private function evaluateConditions(array $conditions, array $data): bool + { + foreach ($conditions as $condition) { + $field = $condition['field']; + $operator = $condition['operator']; + $expectedValue = $condition['value']; + + if (!array_key_exists($field, $data)) { + return false; + } + + $actualValue = $data[$field]; + + if (!$this->compareValues($actualValue, $operator, $expectedValue)) { + return false; + } + } + + return true; + } + + private function compareValues($actual, string $operator, $expected): bool + { + switch ($operator) { + case '==': + return $actual == $expected; + case '!=': + return $actual != $expected; + case '>': + return $actual > $expected; + case '>=': + return $actual >= $expected; + case '<': + return $actual < $expected; + case '<=': + return $actual <= $expected; + case 'between': + return is_array($expected) && $actual >= $expected[0] && $actual <= $expected[1]; + case 'in': + return is_array($expected) && in_array($actual, $expected); + default: + throw new \Exception("Unsupported operator: {$operator}"); + } + } + + private function applyCalculation(array $calculation, array $policyData) + { + $type = $calculation['type'] ?? null; + + switch ($type) { + case 'percentage': + $percentage = $calculation['value'] ?? 0; + $base = $calculation['on'] ?? null; + + if ($base === null || !isset($policyData[$base])) { + throw new \Exception("Base value for calculation not found: {$base}"); + } + + return ($percentage / 100) * $policyData[$base]; + + case 'composite': + $total = 0; + + foreach ($calculation['components'] as $component) { + $percentage = $component['percentage'] ?? 0; + $base = $component['on'] ?? null; + + if ($base === null || !isset($policyData[$base])) { + throw new \Exception("Base value for calculation not found: {$base}"); + } + + if (!empty($component['only_first_year'])) { + if (!empty($policyData['is_renewal'])) { + continue; // Skip this component for renewals + } + } + + $total += ($percentage / 100) * $policyData[$base]; + } + + return $total; + + case 'fixed': + $fixedAmount = $calculation['value'] ?? 0; + + // If 'on' specified but not needed, return fixed amount as-is + return $fixedAmount; + + default: + throw new \Exception('Unsupported calculation type: ' . $type); + } + } + + public function getVolumeReward(array $premiumData) + { + $annualPremium = $premiumData['annual_premium'] ?? 0; + $department = $premiumData['department'] ?? ''; + + if ($department === 'Fire' || $department === 'Marine' || $department === 'Engineering') { + if ($annualPremium > 20000000) { + return 0.01 * $annualPremium; + } elseif ($annualPremium > 10000000) { + return 0.005 * $annualPremium; + } elseif ($annualPremium > 5000000) { + return 0.0025 * $annualPremium; + } + } elseif ($department === 'Motor') { + if ($annualPremium > 15000000) { + return 0.02 * $annualPremium; + } elseif ($annualPremium > 7500000) { + return 0.01 * $annualPremium; + } + } + + return 0; + } +} diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 76bd1a5a..d2ce1329 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -1976,6 +1976,9 @@ class MasterController extends AdminController 'lead_files' => WRITEPATH . 'uploads/lead_files/', 'claim_files' => WRITEPATH . 'uploads/claim_files/', 'claim_dump_excel' => WRITEPATH . 'uploads/claim_dump_excel/', + 'commission' => WRITEPATH . 'uploads/commission/', + 'files' => WRITEPATH . 'uploads/commission/files', + 'rules' => WRITEPATH . 'uploads/commission/rules', 'claim_sample_forms' => ROOTPATH . 'public/claim_sample_forms/', ]; diff --git a/app/Controllers/PayoutController.php b/app/Controllers/PayoutController.php new file mode 100644 index 00000000..06762fd8 --- /dev/null +++ b/app/Controllers/PayoutController.php @@ -0,0 +1,191 @@ +myLogger = \Config\Services::mylogger(); + + $this->payout_status = [ + 1 => "Draft", + 2 => "Pending", + 3 => "Complete", + ]; + + $this->invoiceItemModel = new InvoiceItemModel(); + $this->invoiceModel = new InvoiceModel(); + $this->invoiceUtrModel = new InvoiceUtrModel(); + $this->policyTransactionModel = new PolicyTransactionModel(); + } + + public function payoutList() + { + // for filtering list + if($this->request->is('post')){ + try{ + $data = $this->request->getPost(); + // print_r($data); die; + + $agent_id = $data['agent_id'] ?? null; + $status_id = $data['status_id'] ?? null; + $start_date = $data['start_date'] ?? null; + $end_date = $data['end_date'] ?? null; + + $payout_data = $this->invoiceModel->invoiceList($agent_id, $status_id, $start_date, $end_date); + + $payout_data['payout_list_data'] = $payout_data; + $payout_data = view('payout_list', $payout_data); + + if(!empty($payout_data)){ + return $this->respond(['status' => true, 'code' => 200, 'data' => $payout_data], 200); + }else{ + return $this->respond(['status' => false, 'code' => 400, 'data' => $payout_data, "message" => "No data found"], 200); + } + }catch (\Throwable $th) { + + $this->myLogger->logme("error", "PayoutController - payoutList: Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString()); + $errorData = [ + 'message' => $th->getMessage(), + 'file' => $th->getFile(), + 'line' => $th->getLine(), + 'code' => $th->getCode(), + 'trace' => $th->getTraceAsString(), + 'trace_array' => $th->getTrace(), // full array version (optional) + 'function' => $th->getTrace()[0]['function'] ?? null, + 'class' => $th->getTrace()[0]['class'] ?? null, + ]; + $payout_data = view('payout_list'); + return $this->respond(['status' => false, 'code' => 500, 'data' => $payout_data, "message" => "No data found", 'error_data' => $errorData], 500); + } + } + + // for list + $data['payout_status'] = $this->payout_status; + $data['agent_list'] = $this->invoiceModel->agentList(); + $payout_data['payout_list_data'] = $this->invoiceModel->invoiceList(); + $data['payout_list'] = view('payout_list', $payout_data); + + // dd($data); + return $this->loadLayout('payout_list_handler', $data); + } + + public function fetchUtrDetails() + { + $invoice_id = $this->request->getPost('invoice_id') ?? null; + $payout_data = $this->constructUtrDetails($invoice_id); + + if(!empty($payout_data)){ + return $this->respond(['status' => true, 'code' => 200, 'data' => $payout_data], 200); + }else{ + return $this->respond(['status' => false, 'code' => 400, 'data' => $payout_data, "message" => "No data found"], 200); + } + } + + public function constructUtrDetails($invoice_id) + { + $utr_data = $this->invoiceUtrModel->where('is_active', 1)->where('invoice_id', $invoice_id)->findAll(); + $summary_data = $this->invoiceModel->utrSummary($invoice_id); + + if($summary_data['invoice_amount'] == $summary_data['total_utr_amount']) { + $data['invoice_completed'] = true; + } + + $data['utr_list_data'] = $utr_data; + $data['summary'] = $summary_data; + $data = view('payout_utr_details', $data); + + return $data; + } + + public function saveUtrDetails() + { + $data = $this->request->getPost(); + $invoice_id = $this->request->getPost('invoice_id') ?? null; + $utr_id = $this->request->getPost('utr_pk') ?? null; + + if(isset($data['utr_date'])){ + $data['utr_date'] = change_date_format($data['utr_date']); + } + + + if(!empty($utr_id)){ + + $update = $this->invoiceUtrModel->where('id', $utr_id)->set($data)->update(); + $payout_edit_data = $this->constructUtrDetails($invoice_id); + + if($update){ + + $summary_data = $this->invoiceModel->utrSummary($invoice_id); + if($summary_data['invoice_amount'] == $summary_data['total_utr_amount']){ + $sql = "UPDATE partner_invoice SET payout_status = 2 WHERE id = ?"; + db_connect()->query($sql, [$invoice_id]); + } + + return $this->respond(['status' => true, 'code' => 200, 'data' => $payout_edit_data, "message" => "UTR successfully updated"], 200); + }else{ + return $this->respond(['status' => false, 'code' => 400, 'data' => $payout_edit_data, "message" => "Failed to update UTR"], 200); + } + + }else{ + + unset($data['utr_pk']); + $insert_id = $this->invoiceUtrModel->insert($data); + $payout_data = $this->constructUtrDetails($invoice_id); + + if($insert_id){ + + $summary_data = $this->invoiceModel->utrSummary($invoice_id); + if($summary_data['invoice_amount'] == $summary_data['total_utr_amount']){ + $sql = "UPDATE partner_invoice SET payout_status = 2 WHERE id = ?"; + db_connect()->query($sql, [$invoice_id]); + } + + return $this->respond(['status' => true, 'code' => 200, 'data' => $payout_data, "message" => "UTR added successfully"], 200); + }else{ + return $this->respond(['status' => false, 'code' => 400, 'data' => $payout_data, "message" => "Failed to add UTR"], 200); + } + } + } + + public function removeUtrDetails() + { + $data = $this->request->getPost(); + + if(isset($data['utr_id'])){ + + $sql = "UPDATE partner_invoice_utr SET is_active = 0 WHERE id = ?"; + $update = db_connect()->query($sql, [$data['utr_id']]); + + $payout_data = $this->constructUtrDetails($data['invoice_id'] ?? ""); + + if($update){ + return $this->respond(['status' => true, 'code' => 200, 'data' => $payout_data, "message" => "UTR removed successfully"], 200); + }else{ + return $this->respond(['status' => false, 'code' => 400, 'data' => $payout_data, "message" => "Failed to remove UTR"], 200); + } + }else { + return $this->respond(['status' => false, 'code' => 500, 'data' => "", "message" => "Failed to remove UTR"], 200); + } + } + + +} diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index a2f88d5f..8d24f27b 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -2811,6 +2811,20 @@ $this->loadLayout('dms_search', $data); } + public function payouts() + { + + $data['tab_name'] = 'Payouts'; + $data['page_name'] = 'Payouts'; + $data['payouts'] = []; + $data['agents'] = [ 1 => "Agent 1", 2 => "Agent 2", 3 => "Agent 3", 4 => "Agent 4", 5 => "Agent 5", 6 => "Agent 6", 7 => "Agent 7", 8 => "Agent 8"]; + $data['brokers'] = []; + + if ($this->request->is('post')) {} + if ($this->request->is('get')) {} + + $this->loadLayout('policy_transaction_payouts', $data); + } //--------------------------------------------------------------------------------------------------- public function getCoShareStatementDetails($pt_id) diff --git a/app/Controllers/RuleImportController.php b/app/Controllers/RuleImportController.php new file mode 100644 index 00000000..a3162499 --- /dev/null +++ b/app/Controllers/RuleImportController.php @@ -0,0 +1,350 @@ +ruleImportService = \Config\Services::ruleImportService(); + } + + /** + * Upload endpoint for form (POST) + * Input form field: 'rules_file' + */ + public function uploadORI() + { + // echo 'hi'; + !dd($result = $this->ruleImportService->processUpload(['id' => 1,'file_name' => 'sample_commission.csv','insurer_id' => 5, 'department' => 'motor' ,'commission_month' => '2025-11-10']));die; + try { + $file = $this->request->getFile('rules_file'); + if (!$file || !$file->isValid()) { + return $this->response->setJSON(['status'=>'error','message'=>'No file uploaded or upload error']); + } + + // Move uploaded file to writable temp location + $tmpPath = WRITEPATH . 'uploads/' . $file->getRandomName(); + $file->move(WRITEPATH . 'uploads', $file->getName()); // keep original name inside uploads + $uploadedFullPath = $file->getTempName(); // Note: CI may store in tmp; we will use moved file path instead + $movedPath = WRITEPATH . 'uploads/' . $file->getName(); + + // Process file + $result = $this->ruleImportService->processUpload($movedPath, $file->getName()); + + // Return JSON with annotated file link if present + if (isset($result['annotated_file']) && $result['annotated_file']) { + $annotUrl = base_url('writable/uploads/annotated/' . basename($result['annotated_file'])); + $result['annotated_url'] = $annotUrl; + } + + return $this->response->setJSON($result); + + } catch (\Throwable $e) { + log_message('critical', 'RuleImportController::upload ' . $e->getMessage()); + return $this->response->setJSON(['status'=>'exception','message'=>$e->getMessage()]); + } + } + + public function upload() + { + // Make sure filesystem helpers available if you need them + helper(['filesystem']); + + // CommissionFilesModel – adjust namespace if different + $commissionFilesModel = new \App\Models\CommissionFilesModel(); + + try { + // --------------------------------------------------------- + // 1. Get uploaded file + // --------------------------------------------------------- + $file = $this->request->getFile('rules_file'); + if (!$file || !$file->isValid()) { + log_message('warning', 'RuleImportController::upload - No file or invalid upload.'); + return $this->respond([ + 'status' => 'error', + 'message' => 'No file uploaded or upload error.' + ], 400); + } + + // --------------------------------------------------------- + // 2. Read POST fields + // --------------------------------------------------------- + $insurerId = $this->request->getPost('insurer_id'); + $department = $this->request->getPost('department'); + $commissionMonth = $this->request->getPost('commission_month'); + $createdBy = $this->request->getPost('created_by'); + + if (empty($insurerId) || empty($department) || empty($commissionMonth) || empty($createdBy)) { + log_message('warning', 'RuleImportController::upload - Missing required POST data.', [ + 'insurer_id' => $insurerId, + 'department' => $department, + 'commission_month' => $commissionMonth, + 'created_by' => $createdBy, + ]); + return $this->respond([ + 'status' => 'error', + 'message' => 'Missing required fields: insurer_id, department, commission_month, created_by.' + ], 400); + } + + // Optional / default fields + $postedFileName = $this->request->getPost('file_name') ?: $file->getClientName(); + $fileStatus = $this->request->getPost('file_status') ?: 'pending'; + $isActive = $this->request->getPost('is_active') !== null ? (int)$this->request->getPost('is_active') : 1; + // rules_count is given by user but we will override it after processing on success + $postedRulesCount = $this->request->getPost('rules_count') !== null + ? (int)$this->request->getPost('rules_count') + : 0; + + // --------------------------------------------------------- + // 3. Move file to WRITEPATH/uploads/commission/files using user filename + // (no random name as per your requirement) + // --------------------------------------------------------- + $uploadDir = WRITEPATH . 'uploads/commission/files/'; + if (!is_dir($uploadDir)) { + if (!mkdir($uploadDir, 0755, true) && !is_dir($uploadDir)) { + throw new \RuntimeException("Failed to create upload directory: {$uploadDir}"); + } + } + + // sanitize user file name but keep it deterministic (no random, no timestamp) + $safeName = preg_replace('/[^a-zA-Z0-9_\-\.]/', '_', $postedFileName); + $targetFileName = $safeName; + $movedFullPath = $uploadDir . $targetFileName; + + $file->move($uploadDir, $targetFileName); + if (!file_exists($movedFullPath)) { + log_message('error', "RuleImportController::upload - Failed to move uploaded file to {$movedFullPath}"); + return $this->respond([ + 'status' => 'error', + 'message' => 'Failed to store uploaded file.' + ], 500); + } + + log_message('info', "RuleImportController::upload - File moved to {$movedFullPath}"); + + // --------------------------------------------------------- + // 4. Insert commission_files row with status pending + // --------------------------------------------------------- + $insertData = [ + 'file_name' => $targetFileName, + 'insurer_id' => (int)$insurerId, + 'department' => $department, + 'commission_month'=> $commissionMonth, + 'rules_count' => 0, // will update on success + 'file_status' => $fileStatus, // 'pending' by default + 'is_active' => $isActive, + 'created_by' => (int)$createdBy, + 'created_at' => date('Y-m-d H:i:s'), + ]; + + $commissionFilesModel->insert($insertData); + $insertId = $commissionFilesModel->getInsertID(); + + if (empty($insertId)) { + log_message('error', 'RuleImportController::upload - Failed to insert commission_files record', ['data' => $insertData]); + return $this->respond([ + 'status' => 'error', + 'message' => 'Failed to record upload in database.' + ], 500); + } + + log_message('info', "RuleImportController::upload - commission_files inserted id={$insertId}", $insertData); + + // --------------------------------------------------------- + // 5. Call ruleImportService->processUpload with inserted file info + // As per your spec: + // $this->ruleImportService->processUpload([ + // 'id' => 1, + // 'file_name' => 'sample_commission.csv', + // 'insurer_id' => 5, + // 'department' => 'motor', + // 'commission_month' => '2025-11-10' + // ]) + // --------------------------------------------------------- + $payload = [ + 'id' => (int)$insertId, + 'file_name' => $targetFileName, + 'insurer_id' => (int)$insurerId, + 'department' => $department, + 'commission_month' => $commissionMonth, + ]; + + log_message('info', 'RuleImportController::upload - Calling ruleImportService->processUpload', ['payload' => $payload]); + + $result = $this->ruleImportService->processUpload($payload); + + if (!is_array($result) || !isset($result['status'])) { + log_message('error', 'RuleImportController::upload - Invalid service response', ['response' => $result]); + // update file status as failed + $commissionFilesModel->update($insertId, [ + 'file_status' => 'failed', + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + return $this->respond([ + 'status' => 'error', + 'message' => 'Invalid response from import service.' + ], 500); + } + + // --------------------------------------------------------- + // 6. Handle SUCCESS + // - result['rules'] exists + // - result['errors'] empty + // - NO annotated_file + // - Save rules as JSON in WRITEPATH/uploads/commission/json/{insurer_id}_{department}.json + // --------------------------------------------------------- + if ($result['status'] === 'success') { + $rulesArray = isset($result['rules']) && is_array($result['rules']) ? $result['rules'] : []; + $rulesCount = count($rulesArray); + + // Save JSON to WRITEPATH . 'uploads/commission/json/{insurer_id}_{department}.json' + $jsonDir = WRITEPATH . 'uploads/commission/json/'; + if (!is_dir($jsonDir)) { + if (!mkdir($jsonDir, 0755, true) && !is_dir($jsonDir)) { + throw new \RuntimeException("Failed to create JSON output directory: {$jsonDir}"); + } + } + + $deptSlug = preg_replace('/[^a-zA-Z0-9_\-]/', '_', strtolower($department)); + $jsonName = (int)$insurerId . '_' . $deptSlug . '.json'; + $jsonPath = $jsonDir . $jsonName; + + $jsonData = json_encode($rulesArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + if ($jsonData === false) { + log_message('error', 'RuleImportController::upload - json_encode failed for rules', [ + 'last_error' => json_last_error_msg() + ]); + // mark as failed since we cannot save rules + $commissionFilesModel->update($insertId, [ + 'file_status' => 'failed', + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + return $this->respond([ + 'status' => 'error', + 'message' => 'Failed to encode rules as JSON.' + ], 500); + } + + if (file_put_contents($jsonPath, $jsonData) === false) { + log_message('error', 'RuleImportController::upload - Failed to write rules JSON file', ['json_path' => $jsonPath]); + $commissionFilesModel->update($insertId, [ + 'file_status' => 'failed', + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + return $this->respond([ + 'status' => 'error', + 'message' => 'Failed to store rules JSON file.' + ], 500); + } + + log_message('info', 'RuleImportController::upload - Rules JSON written', [ + 'file_id' => $insertId, + 'json_path' => $jsonPath, + 'rules_cnt' => $rulesCount, + ]); + + // Update DB: status, rules_count, updated_by + $commissionFilesModel->update($insertId, [ + 'file_status' => 'processed', + 'rules_count' => $rulesCount, + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + // If you have a column for JSON path, uncomment: + // 'json_file_path' => $jsonPath, + ]); + + return $this->respond([ + 'status' => 'success', + 'message' => 'File processed successfully.', + 'file_id' => $insertId, + 'rules_count' => $rulesCount, + 'json_file' => $jsonPath, + 'service' => $result, // optional: return full service response if you want + ], 200); + } + + // --------------------------------------------------------- + // 7. Handle ERROR (validation failed etc.) + // - Do NOT save any rules JSON + // - Update file_status to validation_failed + // - Store annotated_file path if you have such a column + // --------------------------------------------------------- + if ($result['status'] === 'error') { + $annotatedPath = $result['annotated_file'] ?? null; + $errors = $result['errors'] ?? []; + + $updateData = [ + 'file_status' => 'validation_failed', + 'rules_count' => 0, // do not save rules + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + ]; + + // If you have a column for annotated file path, e.g. annotated_file_path + if ($annotatedPath) { + $updateData['annotated_file_path'] = $annotatedPath; + } + + $commissionFilesModel->update($insertId, $updateData); + + log_message('warning', "RuleImportController::upload - Validation failed for file_id={$insertId}", [ + 'errors' => $errors, + 'annotated_file' => $annotatedPath + ]); + + return $this->respond([ + 'status' => 'error', + 'message' => 'Validation failed. No rules saved.', + 'file_id' => $insertId, + 'errors' => $errors, + 'annotated_file' => $annotatedPath, + ], 422); + } + + // --------------------------------------------------------- + // 8. Unexpected status + // --------------------------------------------------------- + log_message('error', 'RuleImportController::upload - Unexpected result status from service', ['result' => $result]); + $commissionFilesModel->update($insertId, [ + 'file_status' => 'failed', + 'updated_by' => (int)$createdBy, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + + return $this->respond([ + 'status' => 'error', + 'message' => 'Unexpected import service result.' + ], 500); + + } catch (\Throwable $ex) { + log_message('critical', 'RuleImportController::upload exception: ' . $ex->getMessage(), [ + 'trace' => $ex->getTraceAsString() + ]); + + // Try to update the commission_files record if insertId exists + if (isset($insertId) && !empty($insertId)) { + try { + $commissionFilesModel->update($insertId, [ + 'file_status' => 'failed', + 'updated_by' => isset($createdBy) ? (int)$createdBy : null, + 'updated_at' => date('Y-m-d H:i:s'), + 'notes' => 'Upload exception: ' . $ex->getMessage(), + ]); + } catch (\Throwable $e2) { + log_message('error', 'RuleImportController::upload - failed to update commission_files after exception: ' . $e2->getMessage()); + } + } + + return $this->respond([ + 'status' => 'exception', + 'message' => $ex->getMessage(), + ], 500); + } + } +} diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index c8adbcbb..6219326a 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -2011,6 +2011,7 @@ class TicketController extends BaseController { $received_data = $this->request->getPost(); $ticket_type_id = $this->request->getPost('ticket_type_id') ?? null; + $client_id = $this->request->getPost('client_id') ?? null; $emp_id = $received_data['emp_id']; // Get all client policy IDs for the given employee @@ -2027,6 +2028,9 @@ class TicketController extends BaseController $builder->where('e.is_active', 1); $builder->where('ep.is_active', 1); $builder->where('e.emp_code', $self_data['emp_code']); + if(!empty($client_id)){ + $builder->where('e.client_id', $client_id); + } $builder->groupBy('client_policy_id'); $query = $builder->get(); diff --git a/app/Filters/CommissionApiFilter.php b/app/Filters/CommissionApiFilter.php new file mode 100644 index 00000000..d7ae956e --- /dev/null +++ b/app/Filters/CommissionApiFilter.php @@ -0,0 +1,55 @@ +getHeaderLine('X'); + $authHeader = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; + // echo $authHeader;die(); + if (empty($authHeader)) { + return service('response')->setJSON([ + 'success' => false, + 'error' => 'Authorization header missing' + ])->setStatusCode(403); + } + + // Expected format: Bearer YOUR_API_KEY + if (stripos($authHeader, 'Bearer ') !== 0) { + return service('response')->setJSON([ + 'success' => false, + 'error' => 'Invalid Authorization format. Expected: Bearer ' + ])->setStatusCode(403); + } + + $apiKey = trim(substr($authHeader, 7)); // extract token after 'Bearer ' + + $envKeys = getenv('ALLOWED_COMMISSION_API_KEYS'); + // Convert CSV -> Array + $allowedKeys = array_map('trim', explode(',', $envKeys)); + // print_r($allowedKeys);die(); + // Validate + if (!in_array($apiKey, $allowedKeys, true)) { + return service('response')->setJSON([ + 'success' => false, + 'error' => 'Invalid API Key' + ])->setStatusCode(403); + } + + // Allow request to proceed + return null; + } + + public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) + { + // Not needed + } +} diff --git a/app/Libraries/RuleImportService.php b/app/Libraries/RuleImportService.php new file mode 100644 index 00000000..3e471f57 --- /dev/null +++ b/app/Libraries/RuleImportService.php @@ -0,0 +1,1373 @@ +initializeExpectedColumns(); + $this->initializeValidators(); + $this->setupAnnotatedDirectory(); + } + + /** + * Initialize expected column headers + */ + private function initializeExpectedColumns(): void + { + $this->expectedColumns = [ + self::COL_RULE_NAME, + self::COL_POLICY_BUSINESS_TYPE, + self::COL_POLICY_NAME, + self::COL_PREMIUM_TYPE, + self::COL_VEHICLE_TYPE, + self::COL_VEHICLE_SUB_TYPE, + self::COL_MAKE, + self::COL_MODEL, + self::COL_CC_MIN, + self::COL_CC_MAX, + self::COL_FUEL_TYPE, + self::COL_VEHICLE_AGE_MIN, + self::COL_VEHICLE_AGE_MAX, + self::COL_VEHICLE_WEIGHT_MIN, + self::COL_VEHICLE_WEIGHT_MAX, + self::COL_RTO_STATE, + self::COL_RTO_CITY, + self::COL_RENEWAL_TYPE, + self::COL_RENEWAL_SUB_TYPE, + self::COL_COMMISSION_TYPE, + self::COL_COMMISSION_VALUE, + self::COL_COMMISSION_PARAMS, + self::COL_NOTES + ]; + } + + /** + * Initialize column validators + */ + private function initializeValidators(): void + { + $this->columnValidators = [ + self::COL_CC_MIN => 'validateNumeric', + self::COL_CC_MAX => 'validateNumeric', + self::COL_VEHICLE_AGE_MIN => 'validateNumeric', + self::COL_VEHICLE_AGE_MAX => 'validateNumeric', + self::COL_VEHICLE_WEIGHT_MIN => 'validateNumeric', + self::COL_VEHICLE_WEIGHT_MAX => 'validateNumeric', + self::COL_FUEL_TYPE => 'validateCommaList', + self::COL_COMMISSION_TYPE => 'validateCommissionType', + self::COL_COMMISSION_VALUE => 'validateNumeric', + self::COL_COMMISSION_PARAMS => 'validateCompositeParams', + ]; + } + + /** + * Setup annotated directory for error files + */ + private function setupAnnotatedDirectory(): void + { + $this->annotatedDir = WRITEPATH . 'uploads/commission/files/'; + if (!is_dir($this->annotatedDir)) { + mkdir($this->annotatedDir, 0755, true); + } + } + + /** + * Process uploaded file + * + * @param string $tempFilePath Temporary file path + * @param string $originalName Original filename + * @return array Processing result + */ + public function processUpload(array $params): array + { + // dd($params); + $startTime = microtime(true); + + try { + $this->department = $params['department']; + $this->uploadedCommissionFileID = $params['id']; + $tempFilePath = WRITEPATH.'uploads/commission/files/'.$params['file_name']; + $originalName = $params['file_name']; + // Validate file extension + $extension = $this->getFileExtension($params['file_name']); + $this->validateFileExtension($extension); + + // Load spreadsheet + $spreadsheet = $this->loadSpreadsheet($tempFilePath, $extension); + $sheet = $spreadsheet->getActiveSheet(); + + // Extract and validate headers + $headerMap = $this->extractHeaders($sheet); + $this->validateHeaders($headerMap); + // dd($headerMap); + + // Process rows + $this->validationResult = new ValidationResult(); + $rules = $this->processRows($sheet, $headerMap); + + // Generate annotated file if errors exist + $annotatedPath = null; + if ($this->validationResult->hasErrors()) { + $annotatedPath = $this->createAnnotatedFile( + $spreadsheet, + $headerMap, + $this->validationResult->getErrors(), + $originalName + ); + } + + $duration = round(microtime(true) - $startTime, 2); + + return $this->buildSuccessResponse($rules, $annotatedPath, $duration); + + } catch (Exception $e) { + log_message('error', "RuleImportService failed: " . $e->getMessage()); + return $this->buildErrorResponse($e); + } + } + + /** + * Get file extension + */ + private function getFileExtension(string $filename): string + { + return strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + } + + /** + * Validate file extension + */ + private function validateFileExtension(string $extension): void + { + if (!in_array($extension, self::SUPPORTED_EXTENSIONS, true)) { + throw new RuntimeException( + "Unsupported file type: {$extension}. " . + "Supported types: " . implode(', ', self::SUPPORTED_EXTENSIONS) + ); + } + } + + /** + * Load spreadsheet based on file type + */ + private function loadSpreadsheet(string $filePath, string $extension): Spreadsheet + { + if ($extension === 'csv') { + $reader = IOFactory::createReader('Csv'); + $reader->setDelimiter(','); + $reader->setEnclosure('"'); + return $reader->load($filePath); + } + + return IOFactory::load($filePath); + } + + /** + * Extract header row and create column mapping + */ + private function extractHeaders($sheet): array + { + $highestCol = $sheet->getHighestColumn(); + $headerRowData = $sheet->rangeToArray("A1:{$highestCol}1", null, true, true, true); + $headerRow = array_values($headerRowData[1]); + + $headerMap = []; + foreach ($headerRow as $index => $header) { + $label = trim((string)$header); + if ($label !== '') { + $headerMap[$label] = $index + 1; + } + } + + return $headerMap; + } + + /** + * Validate all required headers are present + */ + private function validateHeaders(array $headerMap): void + { + $missingColumns = array_diff($this->expectedColumns, array_keys($headerMap)); + + if (!empty($missingColumns)) { + throw new RuntimeException( + "Missing required columns: " . implode(', ', $missingColumns) + ); + } + } + + /** + * Process all data rows + */ + private function processRows($sheet, array $headerMap): array + { + $rules = []; + $highestRow = $sheet->getHighestRow(); + + for ($rowNum = 2; $rowNum <= $highestRow; $rowNum++) { + $rowData = $this->extractRowData($sheet, $headerMap, $rowNum); + + // Skip empty rows + if ($this->isEmptyRow($rowData)) { + continue; + } + + // Validate row + $this->validateRow($rowData, $rowNum); + + // Convert to rule if no errors + if (!$this->validationResult->hasRowErrors($rowNum)) { + $rules[] = $this->convertRowToRule($rowData); + } + } + + return $rules; + } + + /** + * Extract data from a single row + // */ + // private function extractRowData($sheet, array $headerMap, int $rowNum): array + // { + // $rowData = []; + // foreach ($headerMap as $colName => $colIndex) { + // $cell = $sheet->getCellByColumnAndRow($colIndex, $rowNum); + // $rowData[$colName] = trim((string)$cell->getValue()); + // } + // return $rowData; + // } + + + /** + * Extract data from a single row + * + * @param \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $sheet + * @param array $headerMap Column name => column index mapping + * @param int $rowNum Row number to extract + * @return array Associative array of column name => value + */ + private function extractRowData($sheet, array $headerMap, int $rowNum): array + { + $rowData = []; + + foreach ($headerMap as $colName => $colIndex) { + // Convert column index to letter (A, B, C, etc.) + $colLetter = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($colIndex); + + // Get cell value using coordinate (e.g., "A2", "B2") + $cellCoordinate = $colLetter . $rowNum; + $value = $sheet->getCell($cellCoordinate)->getValue(); + + // Handle different data types + if ($value instanceof \PhpOffice\PhpSpreadsheet\RichText\RichText) { + $value = $value->getPlainText(); + } + + $rowData[$colName] = trim((string)$value); + } + + return $rowData; + } + + /** + * Check if row is empty + */ + private function isEmptyRow(array $rowData): bool + { + foreach ($rowData as $value) { + if ($value !== '') { + return false; + } + } + return true; + } + + /** + * Validate a single row + */ + private function validateRow(array $rowData, int $rowNum): void + { + // Field-level validation + foreach ($this->columnValidators as $colName => $validatorMethod) { + $value = $rowData[$colName] ?? ''; + if (!$this->$validatorMethod($value)) { + $errorMessage = $this->buildValidationMessage($value, $colName, $validatorMethod); + $this->validationResult->addError($rowNum, $colName, $errorMessage); + } + } + + // Range validations + $this->validateRangePair($rowData, self::COL_CC_MIN, self::COL_CC_MAX, $rowNum); + $this->validateRangePair($rowData, self::COL_VEHICLE_AGE_MIN, self::COL_VEHICLE_AGE_MAX, $rowNum); + $this->validateRangePair($rowData, self::COL_VEHICLE_WEIGHT_MIN, self::COL_VEHICLE_WEIGHT_MAX, $rowNum); + + // Business rule validations + $this->validateBusinessRules($rowData, $rowNum); + } + + /** + * Validate range pairs (min <= max) + */ + private function validateRangePair( + array $rowData, + string $minCol, + string $maxCol, + int $rowNum + ): void { + $min = $rowData[$minCol] ?? ''; + $max = $rowData[$maxCol] ?? ''; + + if ($min !== '' && $max !== '' && is_numeric($min) && is_numeric($max)) { + if ((float)$min > (float)$max) { + $this->validationResult->addError( + $rowNum, + $minCol, + "{$min} : ERROR - {$minCol} cannot be greater than {$maxCol}" + ); + } + } + } + + /** + * Validate business logic rules + */ + private function validateBusinessRules(array $rowData, int $rowNum): void + { + $commissionType = strtolower($rowData[self::COL_COMMISSION_TYPE] ?? ''); + $commissionValue = $rowData[self::COL_COMMISSION_VALUE] ?? ''; + $commissionParams = $rowData[self::COL_COMMISSION_PARAMS] ?? ''; + + // Composite commission requires params + if ($commissionType === self::COMMISSION_COMPOSITE && empty($commissionParams)) { + $this->validationResult->addError( + $rowNum, + self::COL_COMMISSION_PARAMS, + "Required when commission type is composite" + ); + } + + // Flat commission requires value + if ($commissionType === self::COMMISSION_FLAT && empty($commissionValue)) { + $this->validationResult->addError( + $rowNum, + self::COL_COMMISSION_VALUE, + "Required when commission type is flat" + ); + } + + // Percentage commission requires value + if ($commissionType === self::COMMISSION_PERCENTAGE && empty($commissionValue)) { + $this->validationResult->addError( + $rowNum, + self::COL_COMMISSION_VALUE, + "Required when commission type is percentage" + ); + } + } + + // ==================== VALIDATORS ==================== + + /** + * Validate numeric values + */ + protected function validateNumeric(string $value): bool + { + if ($value === '') { + return true; + } + return filter_var($value, FILTER_VALIDATE_FLOAT) !== false; + } + + /** + * Validate comma-separated list + */ + protected function validateCommaList(string $value): bool + { + if ($value === '') { + return true; + } + return preg_match("/^[a-zA-Z0-9\s,\-]+$/", $value) === 1; + } + + /** + * Validate commission type + */ + protected function validateCommissionType(string $value): bool + { + if (trim($value) === '') { + return false; // Required field + } + return in_array(strtolower(trim($value)), self::COMMISSION_TYPES, true); + } + + /** + * Validate composite parameters (TP:OD:PA format) + */ + protected function validateCompositeParams(string $value): bool + { + if ($value === '') { + return true; + } + + // Format: number:number or number:number:number + if (!preg_match('/^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?)(?::(\d+(?:\.\d+)?))?$/', $value, $matches)) { + return false; + } + + // Validate percentage ranges (0-100) + $values = array_filter($matches, 'is_numeric'); + foreach ($values as $val) { + if ($val < 0 || $val > 100) { + return false; + } + } + + return true; + } + + /** + * Build validation error message + */ + protected function buildValidationMessage( + string $value, + string $colName, + string $validatorMethod + ): string { + $messages = [ + 'validateNumeric' => 'expecting numeric value only', + 'validateCommaList' => 'expecting comma-separated values', + 'validateCommissionType' => 'expecting one of: ' . implode(', ', self::COMMISSION_TYPES), + 'validateCompositeParams' => 'expecting format TP:OD:PA (e.g., 10:25:0)' + ]; + + $suffix = $messages[$validatorMethod] ?? 'invalid value'; + return empty($value) ? "ERROR - {$suffix}" : "{$value} : ERROR - {$suffix}"; + } + + // ==================== CONVERSION ==================== + + /** + * Convert row data to rule JSON structure + */ + protected function convertRowToRuleV1(array $rowData): array + { + $rule = [ + 'id' => $this->generateRuleId($rowData), + 'name' => $this->sanitize($rowData[self::COL_RULE_NAME] ?? ''), + 'policy_business_type' => $this->sanitize($rowData[self::COL_POLICY_BUSINESS_TYPE] ?? ''), + 'policy_name' => $this->sanitize($rowData[self::COL_POLICY_NAME] ?? ''), + 'premium_type' => $this->sanitize($rowData[self::COL_PREMIUM_TYPE] ?? ''), + 'vehicle' => $this->buildVehicleData($rowData), + 'fuel_type' => $this->parseFuelTypes($rowData[self::COL_FUEL_TYPE] ?? ''), + 'vehicle_age' => $this->buildRangeData( + self::COL_VEHICLE_AGE_MIN, + self::COL_VEHICLE_AGE_MAX, + $rowData + ), + 'vehicle_weight' => $this->buildRangeData( + self::COL_VEHICLE_WEIGHT_MIN, + self::COL_VEHICLE_WEIGHT_MAX, + $rowData + ), + 'rto' => $this->buildRtoData($rowData), + 'renewal_type' => $this->sanitize($rowData[self::COL_RENEWAL_TYPE] ?? ''), + 'commission' => $this->buildCommissionData($rowData), + 'notes' => $this->sanitize($rowData[self::COL_NOTES] ?? '') + ]; + + return $this->removeEmptyValues($rule); + } + + /** + * Generate unique rule ID + */ + private function generateRuleId(array $rowData): string + { + return 'rule_' . substr(md5(json_encode($rowData) . time()), 0, 13); + } + + /** + * Build vehicle data structure + */ + private function buildVehicleData(array $rowData): array + { + return [ + 'type' => $this->sanitize($rowData[self::COL_VEHICLE_TYPE] ?? ''), + 'sub_type' => $this->sanitize($rowData[self::COL_VEHICLE_SUB_TYPE] ?? ''), + 'make' => $this->sanitize($rowData[self::COL_MAKE] ?? ''), + 'model' => $this->sanitize($rowData[self::COL_MODEL] ?? ''), + 'cc' => [ + 'min' => $this->parseFloat($rowData[self::COL_CC_MIN] ?? ''), + 'max' => $this->parseFloat($rowData[self::COL_CC_MAX] ?? '') + ] + ]; + } + + /** + * Build range data (min/max) + */ + private function buildRangeData(string $minCol, string $maxCol, array $rowData): array + { + return [ + 'min' => $this->parseFloat($rowData[$minCol] ?? ''), + 'max' => $this->parseFloat($rowData[$maxCol] ?? '') + ]; + } + + /** + * Build RTO data structure + */ + private function buildRtoData(array $rowData): array + { + return [ + 'state' => $this->sanitize($rowData[self::COL_RTO_STATE] ?? ''), + 'city' => $this->sanitize($rowData[self::COL_RTO_CITY] ?? '') + ]; + } + + /** + * Build commission data structure + */ + private function buildCommissionData(array $rowData): array + { + $commissionType = strtolower($this->sanitize($rowData[self::COL_COMMISSION_TYPE] ?? '')); + + $commission = [ + 'type' => $commissionType, + 'value' => $this->parseFloat($rowData[self::COL_COMMISSION_VALUE] ?? '') + ]; + + if ($commissionType === self::COMMISSION_COMPOSITE) { + $commission['components'] = $this->parseCompositeParams( + $rowData[self::COL_COMMISSION_PARAMS] ?? '' + ); + } + + return $commission; + } + + /** + * Parse composite commission parameters + */ + private function parseCompositeParams(string $params): array + { + if (empty($params)) { + return []; + } + + $parts = explode(':', $params); + $components = []; + $premiumTypes = ['tp_premium', 'od_premium', 'pa_premium']; + + foreach ($premiumTypes as $index => $premiumType) { + if (isset($parts[$index]) && $parts[$index] !== '') { + $percentage = (float)$parts[$index]; + if ($percentage > 0) { + $components[] = [ + 'on' => $premiumType, + 'percentage' => $percentage + ]; + } + } + } + + return $components; + } + + /** + * Parse fuel types from comma-separated string + */ + private function parseFuelTypes(string $fuelTypeString): array + { + if (empty($fuelTypeString)) { + return []; + } + + return array_values(array_filter( + array_map('trim', explode(',', $fuelTypeString)), + fn($value) => $value !== '' + )); + } + + /** + * Sanitize string value + */ + private function sanitize(string $value): string + { + return trim($value); + } + + /** + * Parse float value + */ + private function parseFloat(string $value): ?float + { + if ($value === '' || !is_numeric($value)) { + return null; + } + return (float)$value; + } + + /** + * Remove null and empty values from array recursively + */ + private function removeEmptyValues(array $data): array + { + return array_filter($data, function($value) { + if (is_array($value)) { + $filtered = $this->removeEmptyValues($value); + return !empty($filtered); + } + return $value !== null && $value !== ''; + }); + } + + // ==================== ANNOTATION ==================== + + /** + * Create annotated file with errors + */ + // private function createAnnotatedFile( + // Spreadsheet $spreadsheet, + // array $headerMap, + // array $errors, + // string $originalName + // ): string { + // $sheet = $spreadsheet->getActiveSheet(); + + // // Add error column header + // $lastCol = $sheet->getHighestColumn(); + // $lastColIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($lastCol); + // $errorColIndex = $lastColIndex + 1; + + // $sheet->setCellValueByColumnAndRow($errorColIndex, 1, 'Validation Errors'); + + // // Annotate errors + // foreach ($errors as $rowNum => $columns) { + // $errorMessages = []; + + // foreach ($columns as $colName => $message) { + // $colIndex = $headerMap[$colName]; + // $cell = $sheet->getCellByColumnAndRow($colIndex, $rowNum); + + // // Set error value in original column + // $cell->setValueExplicit( + // $message, + // \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING + // ); + + // $errorMessages[] = "{$colName}: {$message}"; + // } + + // // Set combined error message + // $sheet->setCellValueByColumnAndRow( + // $errorColIndex, + // $rowNum, + // implode(' | ', $errorMessages) + // ); + // } + + // return $this->saveAnnotatedFile($spreadsheet, $originalName); + // } + + /** + * Create annotated file with errors (Enhanced with styling) + */ + private function createAnnotatedFile( + Spreadsheet $spreadsheet, + array $headerMap, + array $errors, + string $originalName + ): string { + $sheet = $spreadsheet->getActiveSheet(); + + // Add error column header + $lastCol = $sheet->getHighestColumn(); + $lastColIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($lastCol); + $errorColIndex = $lastColIndex + 1; + $errorColLetter = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($errorColIndex); + + // Set header for validation errors column + $headerCoordinate = $errorColLetter . '1'; + $sheet->setCellValue($headerCoordinate, 'Validation Errors'); + + // Optional: Style the header + $sheet->getStyle($headerCoordinate)->applyFromArray([ + 'font' => ['bold' => true], + 'fill' => [ + 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, + 'startColor' => ['rgb' => 'FFD700'] + ] + ]); + + // Annotate errors + foreach ($errors as $rowNum => $columns) { + $errorMessages = []; + + foreach ($columns as $colName => $message) { + if (!isset($headerMap[$colName])) { + continue; // Skip if column not found + } + + $colIndex = $headerMap[$colName]; + $colLetter = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($colIndex); + $cellCoordinate = $colLetter . $rowNum; + + // Set error value in original column + $sheet->setCellValueExplicit( + $cellCoordinate, + $message, + \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING + ); + + // Optional: Highlight error cells in red + $sheet->getStyle($cellCoordinate)->applyFromArray([ + 'fill' => [ + 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, + 'startColor' => ['rgb' => 'FFB6C1'] // Light red + ], + 'font' => ['color' => ['rgb' => 'FF0000']] // Red text + ]); + + $errorMessages[] = "{$colName}: {$message}"; + } + + // Set combined error message in the validation errors column + $errorCellCoordinate = $errorColLetter . $rowNum; + $sheet->setCellValue($errorCellCoordinate, implode(' | ', $errorMessages)); + + // Optional: Style the summary error cell + $sheet->getStyle($errorCellCoordinate)->applyFromArray([ + 'fill' => [ + 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, + 'startColor' => ['rgb' => 'FFA500'] // Orange + ] + ]); + } + + // Auto-size the error column for better readability + $sheet->getColumnDimension($errorColLetter)->setAutoSize(true); + + return $this->saveAnnotatedFile($spreadsheet, $originalName); + } + + + + + + /** + * Save annotated spreadsheet + */ + private function saveAnnotatedFile(Spreadsheet $spreadsheet, string $originalName): string + { + $safeName = preg_replace('/[^a-zA-Z0-9_\-\.]/', '_', $originalName); + $extension = $this->getFileExtension($originalName); + $timestamp = time(); + + $filename = "annotated_{$timestamp}_{$safeName}"; + $filename = "annotated_{$safeName}"; + $filepath = $this->annotatedDir . $filename; + + if ($extension === 'csv') { + $writer = IOFactory::createWriter($spreadsheet, 'Csv'); + $writer->setDelimiter(','); + $writer->setEnclosure('"'); + $writer->save($filepath); + } else { + $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); + if (!str_ends_with($filepath, '.xlsx')) { + $filepath .= '.xlsx'; + } + $writer->save($filepath); + } + + return $filepath; + } + + // ==================== RESPONSE BUILDERS ==================== + + /** + * Build success response + */ + private function buildSuccessResponse( + array $rules, + ?string $annotatedPath, + float $duration + ): array { + $hasErrors = $this->validationResult->hasErrors(); + + return [ + 'status' => $hasErrors ? 'error' : 'success', + 'rules' => $rules, + 'errors' => $hasErrors ? $this->validationResult->getErrors() : [], + 'annotated_file' => $annotatedPath, + 'statistics' => [ + 'total_rules' => count($rules), + 'error_count' => $this->validationResult->getErrorCount(), + 'duration_seconds' => $duration + ] + ]; + } + + /** + * Build error response + */ + private function buildErrorResponse(Exception $e): array + { + return [ + 'status' => 'exception', + 'message' => $e->getMessage(), + 'error_type' => get_class($e) + ]; + } + + + + /** + * Convert row data to rule engine JSON structure + * + * This function transforms Excel row data into a rule engine format with: + * - Conditions: Field-based criteria with operators (==, >=, <=, >, <, in) + * - Calculation: Commission calculation logic (percentage, flat/fixed, composite) + */ + protected function convertRowToRule(array $rowData): array + { + $rule = [ + 'id' => $this->generateRuleId($rowData), + 'name' => $this->sanitize($rowData[self::COL_RULE_NAME] ?? ''), + 'department' => $this->department, + 'file_id' => $this->uploadedCommissionFileID, + 'conditions' => $this->buildConditions($rowData), + 'calculation' => $this->buildCalculation($rowData) + ]; + + return $rule; + } + + /** + * Build conditions array from row data + * Converts Excel columns into rule engine conditions with operators + */ + private function buildConditions(array $rowData): array + { + $conditions = []; + + // Vehicle Type - exact match + if (!empty($rowData[self::COL_VEHICLE_TYPE])) { + $vehicleTypes = $this->parseCommaList($rowData[self::COL_VEHICLE_TYPE]); + + if (count($vehicleTypes) > 1) { + // Multiple values: use 'in' operator + $conditions[] = [ + 'field' => 'vehicle_type', + 'operator' => 'in', + 'value' => $vehicleTypes + ]; + } else { + // Single value: use '==' operator + $conditions[] = [ + 'field' => 'vehicle_type', + 'operator' => '==', + 'value' => $vehicleTypes[0] + ]; + } + } + + // Vehicle Sub Type + if (!empty($rowData[self::COL_VEHICLE_SUB_TYPE])) { + $conditions[] = [ + 'field' => 'vehicle_sub_type', + 'operator' => '==', + 'value' => $this->sanitize($rowData[self::COL_VEHICLE_SUB_TYPE]) + ]; + } + + // Make + if (!empty($rowData[self::COL_MAKE])) { + $makes = $this->parseCommaList($rowData[self::COL_MAKE]); + + if (count($makes) > 1) { + $conditions[] = [ + 'field' => 'make', + 'operator' => 'in', + 'value' => $makes + ]; + } else { + $conditions[] = [ + 'field' => 'make', + 'operator' => '==', + 'value' => $makes[0] + ]; + } + } + + // Model + if (!empty($rowData[self::COL_MODEL])) { + $models = $this->parseCommaList($rowData[self::COL_MODEL]); + + if (count($models) > 1) { + $conditions[] = [ + 'field' => 'model', + 'operator' => 'in', + 'value' => $models + ]; + } else { + $conditions[] = [ + 'field' => 'model', + 'operator' => '==', + 'value' => $models[0] + ]; + } + } + + // CC (Cubic Capacity) - Range handling + $ccMin = $rowData[self::COL_CC_MIN] ?? ''; + $ccMax = $rowData[self::COL_CC_MAX] ?? ''; + + if ($ccMin !== '' && $ccMax !== '') { + if ($ccMin === $ccMax) { + // Exact value + $conditions[] = [ + 'field' => 'cubic_capacity', + 'operator' => '==', + 'value' => (float)$ccMin + ]; + } else { + // Range: min and max + $conditions[] = [ + 'field' => 'cubic_capacity', + 'operator' => '>=', + 'value' => (float)$ccMin + ]; + $conditions[] = [ + 'field' => 'cubic_capacity', + 'operator' => '<=', + 'value' => (float)$ccMax + ]; + } + } elseif ($ccMin !== '') { + // Only minimum specified + $conditions[] = [ + 'field' => 'cubic_capacity', + 'operator' => '>=', + 'value' => (float)$ccMin + ]; + } elseif ($ccMax !== '') { + // Only maximum specified + $conditions[] = [ + 'field' => 'cubic_capacity', + 'operator' => '<=', + 'value' => (float)$ccMax + ]; + } + + // Fuel Type + if (!empty($rowData[self::COL_FUEL_TYPE])) { + $fuelTypes = $this->parseCommaList($rowData[self::COL_FUEL_TYPE]); + + if (count($fuelTypes) > 1) { + $conditions[] = [ + 'field' => 'fuel_type', + 'operator' => 'in', + 'value' => $fuelTypes + ]; + } else { + $conditions[] = [ + 'field' => 'fuel_type', + 'operator' => '==', + 'value' => $fuelTypes[0] + ]; + } + } + + // Vehicle Age - Range handling + $ageMin = $rowData[self::COL_VEHICLE_AGE_MIN] ?? ''; + $ageMax = $rowData[self::COL_VEHICLE_AGE_MAX] ?? ''; + + if ($ageMin !== '' && $ageMax !== '') { + if ($ageMin === $ageMax) { + $conditions[] = [ + 'field' => 'vehicle_age', + 'operator' => '==', + 'value' => (int)$ageMin + ]; + } else { + $conditions[] = [ + 'field' => 'vehicle_age', + 'operator' => '>=', + 'value' => (int)$ageMin + ]; + $conditions[] = [ + 'field' => 'vehicle_age', + 'operator' => '<=', + 'value' => (int)$ageMax + ]; + } + } elseif ($ageMin !== '') { + $conditions[] = [ + 'field' => 'vehicle_age', + 'operator' => '>=', + 'value' => (int)$ageMin + ]; + } elseif ($ageMax !== '') { + $conditions[] = [ + 'field' => 'vehicle_age', + 'operator' => '<=', + 'value' => (int)$ageMax + ]; + } + + // Vehicle Weight - Range handling + $weightMin = $rowData[self::COL_VEHICLE_WEIGHT_MIN] ?? ''; + $weightMax = $rowData[self::COL_VEHICLE_WEIGHT_MAX] ?? ''; + + if ($weightMin !== '' && $weightMax !== '') { + if ($weightMin === $weightMax) { + $conditions[] = [ + 'field' => 'vehicle_weight', + 'operator' => '==', + 'value' => (float)$weightMin + ]; + } else { + $conditions[] = [ + 'field' => 'vehicle_weight', + 'operator' => '>=', + 'value' => (float)$weightMin + ]; + $conditions[] = [ + 'field' => 'vehicle_weight', + 'operator' => '<=', + 'value' => (float)$weightMax + ]; + } + } elseif ($weightMin !== '') { + $conditions[] = [ + 'field' => 'vehicle_weight', + 'operator' => '>=', + 'value' => (float)$weightMin + ]; + } elseif ($weightMax !== '') { + $conditions[] = [ + 'field' => 'vehicle_weight', + 'operator' => '<=', + 'value' => (float)$weightMax + ]; + } + + // RTO State + if (!empty($rowData[self::COL_RTO_STATE])) { + $states = $this->parseCommaList($rowData[self::COL_RTO_STATE]); + + if (count($states) > 1) { + $conditions[] = [ + 'field' => 'rto_state', + 'operator' => 'in', + 'value' => $states + ]; + } else { + $conditions[] = [ + 'field' => 'rto_state', + 'operator' => '==', + 'value' => $states[0] + ]; + } + } + + // RTO City + if (!empty($rowData[self::COL_RTO_CITY])) { + $cities = $this->parseCommaList($rowData[self::COL_RTO_CITY]); + + if (count($cities) > 1) { + $conditions[] = [ + 'field' => 'rto_city', + 'operator' => 'in', + 'value' => $cities + ]; + } else { + $conditions[] = [ + 'field' => 'rto_city', + 'operator' => '==', + 'value' => $cities[0] + ]; + } + } + + // Policy Business Type + if (!empty($rowData[self::COL_POLICY_BUSINESS_TYPE])) { + $conditions[] = [ + 'field' => 'policy_business_type', + 'operator' => '==', + 'value' => $this->sanitize($rowData[self::COL_POLICY_BUSINESS_TYPE]) + ]; + } + + // Policy Name + if (!empty($rowData[self::COL_POLICY_NAME])) { + $conditions[] = [ + 'field' => 'policy_name', + 'operator' => '==', + 'value' => $this->sanitize($rowData[self::COL_POLICY_NAME]) + ]; + } + + // Premium Type (could be TP, OD, Comprehensive, etc.) + if (!empty($rowData[self::COL_PREMIUM_TYPE])) { + $premiumTypes = $this->parseCommaList($rowData[self::COL_PREMIUM_TYPE]); + + if (count($premiumTypes) > 1) { + $conditions[] = [ + 'field' => 'policy_type', + 'operator' => 'in', + 'value' => $premiumTypes + ]; + } else { + $conditions[] = [ + 'field' => 'policy_type', + 'operator' => '==', + 'value' => $premiumTypes[0] + ]; + } + } + + // Renewal Type + if (!empty($rowData[self::COL_RENEWAL_TYPE])) { + $renewalTypes = $this->parseCommaList($rowData[self::COL_RENEWAL_TYPE]); + + if (count($renewalTypes) > 1) { + $conditions[] = [ + 'field' => 'renewal_type', + 'operator' => 'in', + 'value' => $renewalTypes + ]; + } else { + $conditions[] = [ + 'field' => 'renewal_type', + 'operator' => '==', + 'value' => $renewalTypes[0] + ]; + } + } + + // Renewal Sub Type + if (!empty($rowData[self::COL_RENEWAL_SUB_TYPE])) { + $conditions[] = [ + 'field' => 'renewal_sub_type', + 'operator' => '==', + 'value' => $this->sanitize($rowData[self::COL_RENEWAL_SUB_TYPE]) + ]; + } + + return $conditions; + } + + /** + * Build calculation object based on commission type + */ + private function buildCalculation(array $rowData): array + { + $commissionType = strtolower(trim($rowData[self::COL_COMMISSION_TYPE] ?? '')); + $commissionValue = $rowData[self::COL_COMMISSION_VALUE] ?? ''; + $commissionParams = $rowData[self::COL_COMMISSION_PARAMS] ?? ''; + + switch ($commissionType) { + case 'composite': + return $this->buildCompositeCalculation($commissionParams); + + case 'percentage': + return $this->buildPercentageCalculation($commissionValue); + + case 'flat': + case 'fixed': + return $this->buildFixedCalculation($commissionValue); + + case 'tiered': + // For future implementation + return [ + 'type' => 'tiered', + 'tiers' => [] // To be implemented based on requirements + ]; + + default: + // Default to percentage if not specified + return $this->buildPercentageCalculation($commissionValue); + } + } + + /** + * Build composite calculation (multiple premium components) + */ + private function buildCompositeCalculation(string $params): array + { + $components = []; + + if (!empty($params)) { + $parts = explode(':', $params); + $premiumTypes = ['tp_premium', 'od_premium', 'pa_premium']; + + foreach ($premiumTypes as $index => $premiumType) { + if (isset($parts[$index]) && trim($parts[$index]) !== '') { + $percentage = (float)$parts[$index]; + if ($percentage > 0) { + $components[] = [ + 'percentage' => $percentage, + 'on' => $premiumType + ]; + } + } + } + } + + return [ + 'type' => 'composite', + 'components' => $components + ]; + } + + /** + * Build percentage calculation (single percentage on total/specific premium) + */ + private function buildPercentageCalculation(string $value): array + { + $percentage = !empty($value) ? (float)$value : 0; + + return [ + 'type' => 'percentage', + 'value' => $percentage, + 'on' => 'premium' // Default to total premium + ]; + } + + /** + * Build fixed/flat calculation (absolute amount) + */ + private function buildFixedCalculation(string $value): array + { + $amount = !empty($value) ? (float)$value : 0; + + return [ + 'type' => 'fixed', + 'value' => $amount, + 'on' => 'premium' // Default to total premium + ]; + } + + /** + * Parse comma-separated list into array + */ + private function parseCommaList(string $value): array + { + if (empty($value)) { + return []; + } + + return array_values(array_filter( + array_map('trim', explode(',', $value)), + fn($item) => $item !== '' + )); + } + +} + +/** + * ValidationResult - Helper class for managing validation errors + */ +class ValidationResult +{ + private array $errors = []; + + public function addError(int $row, string $column, string $message): void + { + $this->errors[$row][$column] = $message; + } + + public function hasErrors(): bool + { + return !empty($this->errors); + } + + public function hasRowErrors(int $row): bool + { + return isset($this->errors[$row]) && !empty($this->errors[$row]); + } + + public function getErrors(): array + { + return $this->errors; + } + + public function getErrorCount(): int + { + return array_sum(array_map('count', $this->errors)); + } + + public function getRowErrors(int $row): array + { + return $this->errors[$row] ?? []; + } +} \ No newline at end of file diff --git a/app/Models/CommissionFilesModel.php b/app/Models/CommissionFilesModel.php new file mode 100644 index 00000000..99a44a8b --- /dev/null +++ b/app/Models/CommissionFilesModel.php @@ -0,0 +1,67 @@ + 'required|min_length[1]|max_length[100]', + // 'insurer_id' => 'permit_empty|integer', + // 'department' => 'permit_empty|max_length[45]', + // 'commission_month' => 'permit_empty|valid_date', + // 'file_status' => 'permit_empty|max_length[10]', + // 'is_active' => 'permit_empty|in_list[0,1]' + // ]; + + protected $validationMessages = []; + protected $skipValidation = false; + + /** + * Get files with optional filters + */ + // public function getFiles($filters = []) + // { + // if (!empty($filters['insurer_id'])) { + // $this->where('insurer_id', $filters['insurer_id']); + // } + + // if (!empty($filters['department'])) { + // $this->where('department', $filters['department']); + // } + + // if (!empty($filters['file_status'])) { + // $this->where('file_status', $filters['file_status']); + // } + + // if (isset($filters['is_active'])) { + // $this->where('is_active', $filters['is_active']); + // } + + // return $this->orderBy('id', 'DESC')->findAll(); + // } +} diff --git a/app/Models/InvoiceItemModel.php b/app/Models/InvoiceItemModel.php new file mode 100644 index 00000000..328be1d9 --- /dev/null +++ b/app/Models/InvoiceItemModel.php @@ -0,0 +1,41 @@ + 'required|integer', + 'policy_id' => 'required|integer', + 'policy_no' => 'required|max_length[100]', + 'commission_amount' => 'decimal' + ]; + + protected $validationMessages = []; + protected $skipValidation = false; +} diff --git a/app/Models/InvoiceModel.php b/app/Models/InvoiceModel.php new file mode 100644 index 00000000..49d91ced --- /dev/null +++ b/app/Models/InvoiceModel.php @@ -0,0 +1,190 @@ + 'required|max_length[100]', + 'invoice_amount' => 'decimal', + 'agent_id' => 'required|integer', + 'invoice_date' => 'required|valid_date', + ]; + + protected $validationMessages = []; + protected $skipValidation = false; + + // Callbacks + protected $allowCallbacks = true; + protected $beforeInsert = ["checkAndADDCreatedByValue"]; + protected $afterInsert = []; + protected $beforeUpdate = ["checkAndUpdateUpdatedByValue"]; + protected $afterUpdate = []; + protected $beforeFind = []; + protected $afterFind = []; + protected $beforeDelete = []; + protected $afterDelete = []; + + protected function checkAndADDCreatedByValue(array $data) + { + // Check if 'updated_by' value is null or empty + if (empty($data['data']['created_by'])) { + // Set 'updated_by' value to the current session user ID + $data['data']['created_by'] = get_session_userid(); + } + + return $data; + } + + protected function checkAndUpdateUpdatedByValue(array $data) + { + // Check if 'updated_by' value is null or empty + if (empty($data['data']['updated_by'])) { + // Set 'updated_by' value to the current session user ID + $data['data']['updated_by'] = get_session_userid(); + } + + return $data; + } + + + public function invoiceList($agent_id = null, $status_id = null, $start_date = null, $end_date = null) + { + $data = $this->select(" + partner_invoice.*, + + -- Total UTR Amount + (SELECT SUM(piu.amount) + FROM partner_invoice_utr piu + WHERE piu.invoice_id = partner_invoice.id + AND piu.is_active = 1 + ) AS total_utr_amount, + + -- Balance Amount + (partner_invoice.invoice_amount - + IFNULL( + (SELECT SUM(piu2.amount) + FROM partner_invoice_utr piu2 + WHERE piu2.invoice_id = partner_invoice.id + AND piu2.is_active = 1 + ), + 0) + ) AS balance_amount, + + -- Payout status + CASE + WHEN payout_status = 1 THEN 'Pending' + WHEN payout_status = 2 THEN 'Complete' + END AS status_text, + + partner_agent.name as agent_name + ") + ->join('partner_agent', 'partner_invoice.agent_id = partner_agent.id') + ->where('partner_invoice.is_active', 1); + + if(!empty($agent_id)){ + $data->where('partner_invoice.agent_id', $agent_id); + } + + if(!empty($status_id)){ + $data->where('partner_invoice.payout_status', $status_id); + } + + if (!empty($start_date) && !empty($end_date)) { + + $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); + $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); + + $data->where('partner_invoice.invoice_date >=', $startDate) + ->where('partner_invoice.invoice_date <=', $endDate); + } + + if(!empty($agent_id) && !empty($status_id) && !empty($start_date) && !empty($end_date)){ + + $fromDate = date('Y-m-d', strtotime('-60 days')); + $toDate = date('Y-m-d 23:59:59'); + + $data->where('partner_invoice.created_at >=', $fromDate) + ->where('partner_invoice.created_at <=', $toDate); + + } + + $return_data = $data->orderBy('partner_invoice.id','desc')->findAll(); + + // print_r($this->db->getLastQuery()); die; + + return $return_data; + } + + public function agentList() + { + return $this->db->table('partner_agent')->where('is_active', 1)->get()->getResultArray(); + } + + public function utrSummary($invoice_id) + { + $data = $this->select(" + + partner_invoice.*, + + -- Total UTR Amount + (SELECT SUM(piu.amount) + FROM partner_invoice_utr piu + WHERE piu.invoice_id = partner_invoice.id + AND piu.is_active = 1 + ) AS total_utr_amount, + + -- Balance Amount + (partner_invoice.invoice_amount - + IFNULL( + (SELECT SUM(piu2.amount) + FROM partner_invoice_utr piu2 + WHERE piu2.invoice_id = partner_invoice.id + AND piu2.is_active = 1 + ), + 0) + ) AS balance_amount, + + -- Payout status + CASE + WHEN payout_status = 1 THEN 'Pending' + WHEN payout_status = 2 THEN 'Complete' + END AS status_text, + + partner_agent.name as agent_name + ") + ->join('partner_agent', 'partner_invoice.agent_id = partner_agent.id') + ->where('partner_invoice.is_active', 1) + ->where('partner_invoice.id', $invoice_id) + ->first(); + + return $data; + } +} diff --git a/app/Models/InvoiceUtrModel.php b/app/Models/InvoiceUtrModel.php new file mode 100644 index 00000000..a9da5960 --- /dev/null +++ b/app/Models/InvoiceUtrModel.php @@ -0,0 +1,73 @@ + 'required|integer', + 'utr_no' => 'required|max_length[100]', + 'amount' => 'decimal' + ]; + + protected $validationMessages = []; + protected $skipValidation = false; + + // Callbacks + protected $allowCallbacks = true; + protected $beforeInsert = ["checkAndADDCreatedByValue"]; + protected $afterInsert = []; + protected $beforeUpdate = ["checkAndUpdateUpdatedByValue"]; + protected $afterUpdate = []; + protected $beforeFind = []; + protected $afterFind = []; + protected $beforeDelete = []; + protected $afterDelete = []; + + protected function checkAndADDCreatedByValue(array $data) + { + // Check if 'updated_by' value is null or empty + if (empty($data['data']['created_by'])) { + // Set 'updated_by' value to the current session user ID + $data['data']['created_by'] = get_session_userid(); + } + + return $data; + } + + protected function checkAndUpdateUpdatedByValue(array $data) + { + // Check if 'updated_by' value is null or empty + if (empty($data['data']['updated_by'])) { + // Set 'updated_by' value to the current session user ID + $data['data']['updated_by'] = get_session_userid(); + } + + return $data; + } +} diff --git a/app/Models/TicketClaimStatusModel.php b/app/Models/TicketClaimStatusModel.php index 99078a03..87b09f3d 100644 --- a/app/Models/TicketClaimStatusModel.php +++ b/app/Models/TicketClaimStatusModel.php @@ -12,7 +12,7 @@ class TicketClaimStatusModel extends Model protected $returnType = 'array'; protected $useSoftDeletes = false; protected $protectFields = true; - protected $allowedFields = ["id", "ticket_type", "claim_status", "created_by", "updated_by", "is_active"]; + protected $allowedFields = ["id", "ticket_type", "claim_status", "display_name", "created_by", "updated_by", "is_active"]; // Callbacks protected $allowCallbacks = true; diff --git a/app/Views/employee_upload.php b/app/Views/employee_upload.php index 8a4e1c13..94e6b240 100755 --- a/app/Views/employee_upload.php +++ b/app/Views/employee_upload.php @@ -548,14 +548,14 @@ function fetchFileError(file_id) { "Rule conflict: Twofold relationship found within family " + err_count + ""; break; - case 14: + case 100: hasError14 = true; error_code = 14; file_error_html += "This inception row was not found in the member data list. " + err_count + ""; break; - case 15: + case 101: hasError15 = true; error_code = 15; file_error_html += diff --git a/app/Views/hr_access_controll.php b/app/Views/hr_access_controll.php index f845b288..f2d69989 100644 --- a/app/Views/hr_access_controll.php +++ b/app/Views/hr_access_controll.php @@ -144,7 +144,7 @@ // $listed_pre[] = $policies['branch_id'].'-'.$policies['policy_no']; // } - if($value['pre_branch_id'] !== $policies['branch_id']){ + if(empty($value['pre_hr_id']) || $value['pre_branch_id'] !== $policies['branch_id']){ continue; } ?> @@ -212,7 +212,7 @@ // $listed_post[] = $policies['branch_id'].'-'.$policies['policy_no']; // } - if($value['post_branch_id'] !== $policies['branch_id']){ + if(empty($value['post_hr_id']) || $value['post_branch_id'] !== $policies['branch_id']){ continue; } diff --git a/app/Views/layout/header.php b/app/Views/layout/header.php index d81c7f68..8fd011b7 100755 --- a/app/Views/layout/header.php +++ b/app/Views/layout/header.php @@ -2017,6 +2017,12 @@ +
  • + + + Payouts + +
  • diff --git a/app/Views/mail_template.php b/app/Views/mail_template.php index e4f6f20f..bead26fe 100644 --- a/app/Views/mail_template.php +++ b/app/Views/mail_template.php @@ -95,6 +95,7 @@ p{ background-image:url(''); background-size:contain; background-repeat:no-repeat; + background-position: center; "> diff --git a/app/Views/payout_list.php b/app/Views/payout_list.php new file mode 100644 index 00000000..d911715d --- /dev/null +++ b/app/Views/payout_list.php @@ -0,0 +1,357 @@ + + + + + + +
    +
    +
    +
    +
    +

    Payout List

    +
    +
    +
    + + + + + + + + + + + + + + + + + $row){ ?> + + + + + + + + + + + + + + +
    S.No.Inovice NoInvoice DateInvoice AmountUTR Total AmountBalanceStatusAgentAction
    + +
    +
    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/app/Views/payout_list_handler.php b/app/Views/payout_list_handler.php new file mode 100644 index 00000000..95aa9812 --- /dev/null +++ b/app/Views/payout_list_handler.php @@ -0,0 +1,184 @@ +
    +
    +
    +
    +
    +

    + Filter + + + +

    +
    +
    +
    +
    +
    + + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    + +
    + Clear + Submit +
    + +
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/app/Views/payout_utr_details.php b/app/Views/payout_utr_details.php new file mode 100644 index 00000000..0d9447ab --- /dev/null +++ b/app/Views/payout_utr_details.php @@ -0,0 +1,280 @@ +
    + +
    +
    + Invoice Amount: + "> + ₹ + +
    +
    + Total Paid: + "> + ₹ + +
    +
    + Remaining Balance: + "> + ₹ + +
    +
    + +
    +
    + +
    + + "> +
    +
    +
    + + +
    +
    +
    +
    + + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + Clear + +
    +
    + +
    +
    +
    +
    + +
    +
    Existing UTRs
    +
    + + + + + + + + + + + + + + $row){ + $row['utr_date'] = change_date_format($row['utr_date'], null, 'd/m/Y') ?? " - " + ?> + + + + + + + + + + + +
    S.No.UTR NoAmountDateAction
    + +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/app/Views/policy_transaction_payouts.php b/app/Views/policy_transaction_payouts.php new file mode 100644 index 00000000..e69de29b diff --git a/app/Views/ticket_form_gmc.php b/app/Views/ticket_form_gmc.php index 095e8de7..02f9dfb6 100644 --- a/app/Views/ticket_form_gmc.php +++ b/app/Views/ticket_form_gmc.php @@ -948,16 +948,21 @@ }) function getClientPolicy() { + console.log("get policy function called"); hiddenData = $("#empIDHidden").val(); hiddenData = JSON.parse(hiddenData); console.log('employee id ', hiddenData['emp_id']); let ticket_type_id = $('#ticket_type_id').val(); - console.log("ticket_type_id", ticket_type_id); + let client_id = $('#mobile_emp_client_data_list').val(); + console.log({ticket_type_id, client_id}); + data = { emp_id: hiddenData['emp_id'], ticket_type_id: ticket_type_id, + client_id: client_id, } + $.ajax({ url: '', type: "POST",