diff --git a/README.md b/README.md
index b56458c2..0a4cf0dd 100755
--- a/README.md
+++ b/README.md
@@ -9,3 +9,5 @@ From command propmt run the following cmds
Run speeific method
`php vendor/bin/phpunit tests\unit\PremiumCalculationTest.php --filter testPremiumCalculationWithPrimaryRackRateAndAdditionalRackRate`
+
+Test Comments
\ No newline at end of file
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index ee9ad2c0..b6d181b3 100755
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -22,7 +22,7 @@ $routes->get("update-policy-terms-for-corrections", "ClientController::updatePol
$routes->get("update_rack_rate_json", "ClientController::updateRackRateJson");
$routes->get("updatajson", "EmpDataServiceController::updatajson");
$routes->get("view", "EmployeeController::viewECard/$1");
-// $routes->get("exportQCRandRFQ", "LeadsController::exportQCRandRFQ");
+$routes->get("exportQCRandRFQ/(:any)", "LeadsController::exportQCRandRFQ/$1");
$routes->get("smapletest", "ClientController::smapletest");
$routes->get("testMailAttachments", "ClientController::testMailAttachments");
$routes->get("updatePolicyTermsKey", "ClientController::updatePolicyTermsKey");
@@ -346,6 +346,8 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) {
$routes->get('getCDAmount', 'ClientController::getCDAmount');
$routes->get('getTheEmpDataForClaim/(:any)', 'ClientController::getTheEmpDataForClaim/$1');
$routes->get('getTheEmpDataForClaimSearchByMobile/(:any)', 'ClientController::getTheEmpDataForClaimSearchByMobile/$1');
+ $routes->get('getLeadNonEB/(:any)', 'LeadsController::getLeadNonEB/$1');
+ $routes->get('getPolicyTypeFields', 'LeadsController::getPolicyTypeFields');
});
$routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
@@ -402,6 +404,7 @@ $routes->group("leads", ["filter" => "authMVC"], function ($routes) {
$routes->group("rfq", ["filter" => "authMVC"], function ($routes) {
$routes->post("create", "LeadsController::createRFQ");
+ $routes->post("savePolicyInfo", "LeadsController::savePolicyInfo");
$routes->post("createQCR", "LeadsController::createQCR");
$routes->get("list/(:any)", "LeadsController::viewRFQ/$1");
$routes->get("nonEB","LeadsController::rfqNonEB");
@@ -436,6 +439,7 @@ $routes->post("/employeeRest/getVerifiedUserData", "RestAuthenticationController
$routes->post("/employeeRest/verifyMpin", "RestAuthenticationController::verifyMpin");
$routes->post("/employeeRest/checkMpin", "RestAuthenticationController::checkMpin");
$routes->post("/employeeRest/verifyEmployeeEmailId", "RestAuthenticationController::verifyEmployeeWithEmailId");
+$routes->post("/employeeRest/updateEmpOTP", "RestAuthenticationController::updateEmpOTP");
//HR login api's
$routes->post("/employeeRest/verifyHrWithMobileNumber", "RestAuthenticationController::verifyHrWithMobileNumber");
diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php
index ca43f2d2..fb78c67b 100755
--- a/app/Controllers/ClientController.php
+++ b/app/Controllers/ClientController.php
@@ -4711,6 +4711,10 @@ class ClientController extends AdminController
// $empmodel = new EmployeeModel();
// $data = $empmodel->getEmployeePolicy(348);
// dd($data);
+
+
+ // $LeadsController = new LeadsController();
+ // $LeadsController->constructNonEbExcelToSaveTemp(92, 2, "Proposal 2-ICICIPRU-ICICI001");
}
// -------------------------------------------------------------------------------------------------------
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 94a28fb6..f46fc522 100755
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -2586,7 +2586,8 @@ class EmployeeRestController extends AdminController
{
$data['floter_text_heading'] = 'Sum Insured';
}else{
- if($terms->family_floater == 1){ $data['floter_text_heading'] = 'Floter Sum Insured'; }else{ $data['floter_text_heading'] = 'Sum Insured'; }
+
+ 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')
diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php
index f0f1cc7b..b361c5b3 100644
--- a/app/Controllers/LeadsController.php
+++ b/app/Controllers/LeadsController.php
@@ -28,6 +28,7 @@ use App\Models\InsurerBranchModel;
use App\Models\TPABranchModel;
use App\Models\RFQModel;
use App\Models\InsurerModel;
+use App\Models\OccupancyMasterModel;
use App\Helpers\MailHelper;
use App\Helpers\ExcelMergeHelper;
@@ -37,7 +38,7 @@ use Kint\Kint;
use App\Controllers\Jobs;
use App\Controllers\JobWorker;
-
+use Google\Service\FactCheckTools\Resource\Claims;
class LeadsController extends BaseController
{
@@ -60,6 +61,7 @@ class LeadsController extends BaseController
protected $tpaBranchModel;
protected $RFQModel;
protected $insurerModel;
+ protected $occupancyModel;
//variables for storing array
protected $issuer;
@@ -68,6 +70,7 @@ class LeadsController extends BaseController
protected $leadsStatus;
protected $claim_type_for_gpa;
protected $cause_of_death;
+ protected $buisnessType;
public function __construct()
@@ -88,10 +91,12 @@ class LeadsController extends BaseController
$this->tpaBranchModel = new TPABranchModel();
$this->RFQModel = new RFQModel();
$this->insurerModel = new InsurerModel();
+ $this->occupancyModel = new OccupancyMasterModel();
$this->issuer = [1 => 'JIBS', 2 => 'Nhance'];
$this->clientType = [1 => 'Group', 2 => 'Individual'];
$this->leadType = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
+ $this->buisnessType = [1 => 'Industrial', 2 => 'Non Industrial'];
$this->leadsStatus = [
'queued' => 'Queued',
'qcr_sent' => 'QCR sent',
@@ -113,19 +118,10 @@ class LeadsController extends BaseController
'suicide' => 'Suicide',
'accident' => 'Accident'
];
-
}
public function viewLeadsList()
{
-
- // $d = $this->constructExcelToSaveTemp(24, 1, $propsal_and_insurer = null);
- // $job_details = new Jobs();
- // $r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => ['lead_id' => 24]]);
- // $d = $this->calculateMembersDemography(['lead_id' => 24]);
- //$this->mergeQuoteExcelFileWithMembersListExcelFile(24, 1, $propsal_and_insurer = null);
- // dd($d);
-
$data['page_name'] = 'Leads';
// Set basic data
@@ -138,30 +134,13 @@ class LeadsController extends BaseController
$data['policy_type'] = $this->policyTypeModel->where('is_active', 1)->findAll();
$data['entity'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll();
- // Fetch insurer and TPA branch data
- $data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
- $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
- // print_r($data['tpa']);die();
- // Fetch sales team members who are active in team 5
- $data['salse_team'] = $this->userModel
- ->select('user_profiles.*')
- ->join('user_teams', 'user_profiles.id = user_teams.user_id')
- ->where('user_teams.team_id', 5)
- ->where('user_teams.is_active', 1)
- ->where('user_profiles.is_active', 1)
- ->findAll();
-
- // dd($data);
- $data['lastFiveYears'] = $this->getLastFiveFinancialYears();
- $data['gpaClaimType'] = $this->claim_type_for_gpa;
- $data['causeOfDeath'] = $this->cause_of_death;
// dd($lastFiveYears);
if ($this->request->is('get')) {
// Fetch leads data
- $data ['lead_data_list'] = $this->leadsModel->getLeadDataForLising();
+ $data['lead_data_list'] = $this->leadsModel->getLeadDataForLising();
// Load layout and pass data
$this->loadLayout('lead_filter', $data);
- }else{
+ } else {
$search_data = $this->request->getPost();
// print_r($search_data);
@@ -172,7 +151,7 @@ class LeadsController extends BaseController
$where[$search_objects] = $key;
}
}
-
+
$data['lead_data_list'] = $this->leadsModel->getLeadDataForLising($where);
$html = view('leads_list', $data);
return $this->respond(['status' => true, 'html' => $html], 200);
@@ -184,7 +163,7 @@ class LeadsController extends BaseController
// print_r($this->request->getPost()); die;
$id = $this->request->getPost('id');
$data = $this->prepareLeadData();
- // print_r($this->request->getPost()); die;
+ // print_r($data); die;
if (!$id) {
@@ -215,11 +194,68 @@ class LeadsController extends BaseController
$data['client_code'] = generate_client_code('IC');
}
- $data = $this->prepareMultipleLeadData($data);
+ if (isset($data['lead_form_type'])) {
+ $data = $this->prepareSingleLeadData($data);
+ } else {
+ $data = $this->prepareMultipleLeadData($data);
+ }
// print_r($data); die;
return $data;
}
+ private function prepareSingleLeadData($data)
+ {
+ // print_r($data); die;
+ $uploadFilePath = WRITEPATH . 'uploads/lead_files/';
+
+ // Get all uploaded files for 'file_name[]'
+ $files = $this->request->getFileMultiple('file_name');
+
+ // print_r($files); die;
+
+
+ // Separate the insurer and insurer branch, handle missing or invalid data
+ if (isset($data['insurer']) && strpos($data['insurer'], '-') !== false) {
+ list($insurer_branch_id, $insurer_id) = explode('-', $data['insurer']);
+ } else {
+ $insurer_branch_id = 0;
+ $insurer_id = 0;
+ }
+
+ $data['insurer_id'] = $insurer_id;
+ $data['insurer_branch_id'] = $insurer_branch_id;
+
+ // Separate the insurer and insurer branch, handle missing or invalid data
+ if (isset($data['tpa']) && strpos($data['tpa'], '-') !== false) {
+ list($tpa_branch_id, $tpa_id) = explode('-', $data['tpa']);
+ } else {
+ $tpa_branch_id = 0;
+ $tpa_id = 0;
+ }
+
+ $data['tpa_id'] = $tpa_id;
+ $data['tpa_branch_id'] = $tpa_branch_id;
+
+
+ if (!empty($data['policy_start_date'])) {
+ $data['policy_start_date'] = change_date_format($data['policy_start_date']);
+ } else {
+ $data['policy_start_date'] = null;
+ }
+
+ if (!empty($data['policy_end_date'])) {
+ $data['policy_end_date'] = change_date_format($data['policy_end_date']);
+ } else {
+ $data['policy_end_date'] = null;
+ }
+
+ $data['file_name'] = file_Upload($files, $uploadFilePath);
+ $processcedData[] = $data;
+
+ // print_r($data);die();
+ return $processcedData;
+ }
+
private function prepareMultipleLeadData($data)
{
// print_r($data); die;
@@ -230,14 +266,13 @@ class LeadsController extends BaseController
$files = $this->request->getFileMultiple('file_name');
// print_r($files); die;
-
- foreach($data['policy_type_id'] as $index => $value){
+
+ foreach ($data['policy_type_id'] as $index => $value) {
// Separate the insurer and insurer branch, handle missing or invalid data
if (isset($data['insurer'][$index]) && strpos($data['insurer'][$index], '-') !== false) {
list($insurer_branch_id, $insurer_id) = explode('-', $data['insurer'][$index]);
-
- }else{
+ } else {
$insurer_branch_id = 0;
$insurer_id = 0;
}
@@ -277,36 +312,22 @@ class LeadsController extends BaseController
$policy_end_date = null;
}
- if(!empty($data['incurred_claim_date'][$index])){
+ if (!empty($data['incurred_claim_date'][$index])) {
$incurred_claims_date = change_date_format($data['incurred_claim_date'][$index], 'd/m/Y', 'Y-m-d');
- }else{
+ } else {
$incurred_claims_date = null;
}
- if(!empty($data['premium_date'][$index])){
+ if (!empty($data['premium_date'][$index])) {
$premium_date = change_date_format($data['premium_date'][$index], 'd/m/Y', 'Y-m-d');
- }else{
+ } else {
$premium_date = null;
}
$file_name = file_Upload($files[$index], $uploadFilePath);
- $last_3_years_claims = null;
- if($value != 2){
- $last_3_years_claims = [];
- $finyear = json_decode($data['finyear']);
+ $last_3_years_claims = $data['finyear'];
- foreach ($finyear as $year){
- $received_policy_type = ($year->finyear[0]->policy_type);
- if ($value == $received_policy_type){
- array_push($last_3_years_claims,$year);
- }else{
- continue;
- }
- }
- $last_3_years_claims = json_encode($last_3_years_claims);
- }
-
$processedData[] = [
'lead_type' => $data['lead_type'],
'issuer' => $data['issuer'],
@@ -328,18 +349,18 @@ class LeadsController extends BaseController
'policy_type_id' => $value,
'salse_person_id' => $data['salse_person_id'] ?? 0,
- 'insurer_id' => $insurer_id ?? 0,
- 'insurer_branch_id' => $insurer_branch_id ?? 0,
- 'tpa_id' => $tpa_id ?? 0,
- 'tpa_branch_id' => $tpa_branch_id ?? 0,
- 'policy_start_date' => $policy_start_date,
- 'policy_end_date' => $policy_end_date,
- 'no_of_lives' => $data['no_of_lives'][$index] ?? null,
- 'incurred_claims' => $data['incurred_claims'][$index] ?? 0,
- 'location' => $data['location'][$index] ?? null,
- 'proposed_insurer_id' => $proposed_insurer_id ?? 0,
- 'proposed_insurer_branch_id' => $proposed_insurer_branch_id ?? 0,
- 'proposed_tpa_id' => $proposed_tpa_id ?? 0,
+ 'insurer_id' => $insurer_id ?? 0,
+ 'insurer_branch_id' => $insurer_branch_id ?? 0,
+ 'tpa_id' => $tpa_id ?? 0,
+ 'tpa_branch_id' => $tpa_branch_id ?? 0,
+ 'policy_start_date' => $policy_start_date,
+ 'policy_end_date' => $policy_end_date,
+ 'no_of_lives' => $data['no_of_lives'][$index] ?? null,
+ 'incurred_claims' => $data['incurred_claims'][$index] ?? 0,
+ 'location' => $data['location'][$index] ?? null,
+ 'proposed_insurer_id' => $proposed_insurer_id ?? 0,
+ 'proposed_insurer_branch_id' => $proposed_insurer_branch_id ?? 0,
+ 'proposed_tpa_id' => $proposed_tpa_id ?? 0,
'proposed_tpa_branch_id' => $proposed_tpa_branch_id ?? 0,
'renewal_emp_count' => $data['renewal_emp_count'][$index] ?? 0,
@@ -370,6 +391,9 @@ class LeadsController extends BaseController
'status' => $data['status'] ?? null,
'notes' => $data['notes'] ?? null,
+
+ 'lead_form_type' => $data['lead_form_type'] ?? 1,
+ 'custom_fields' => $data['custom_fields'] ?? null,
];
}
// print_r($processedData);die();
@@ -384,11 +408,13 @@ class LeadsController extends BaseController
$insertCount[] = $insert;
$this->insertLeadStatus($insert, $value['status'], 3);
- //for this push the job to the calculateMembersDemography() function
- $job_details = new Jobs();
- $r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => [
- 'lead_id' => $insert,
- ]]);
+ if ($value['lead_form_type'] == 1) {
+ //for this push the job to the calculateMembersDemography() function
+ $job_details = new Jobs();
+ $r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => [
+ 'lead_id' => $insert,
+ ]]);
+ }
}
if (count($insertCount) > 0) {
@@ -416,6 +442,12 @@ class LeadsController extends BaseController
->where('leads.is_active', 1)
->first();
+ $data['lead_edit_data'] = $this->leadsModel
+ ->where('leads.id', $id)
+ ->where('leads.is_active', 1)
+ ->first();
+
+
if (!empty($data['policy_start_date'])) {
$data['policy_start_date'] = change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
} else {
@@ -440,6 +472,19 @@ class LeadsController extends BaseController
$data['premium_date'] = null;
}
+ $data['lastFiveYears'] = $this->getLastFiveFinancialYears();
+ $data['gpaClaimType'] = $this->claim_type_for_gpa;
+ $data['causeOfDeath'] = $this->cause_of_death;
+
+ if (!empty($data['fin_years_claims'])) {
+ $decoded = json_decode($data['fin_years_claims'], true);
+ $data['lead_edit_data']['fin_years_claims_array'] = isset($decoded['finyear']) ? $decoded['finyear'] : [];
+ } else {
+ $data['lead_edit_data']['fin_years_claims_array'] = [];
+ }
+
+ $data['html'] = $this->generateViewPageHtml($data['policy_type_id'], $data) ?? "";
+
if ($data) {
return $this->respond(['status' => true, 'data' => $data], 200);
} else {
@@ -466,18 +511,18 @@ class LeadsController extends BaseController
{
$data['rfq_data'] = $this->RFQModel
- ->where('lead_id', $id)
- // ->where('type', $type)
- ->where('is_active', 1)
- ->orderBy('id', 'desc')
- ->first();
+ ->where('lead_id', $id)
+ // ->where('type', $type)
+ ->where('is_active', 1)
+ ->orderBy('id', 'desc')
+ ->first();
// dd($data);
$data['rfq_count'] = $this->RFQModel
- ->where('lead_id', $id)
- // ->where('type', 1)
- ->where('is_active', 1)
- ->countAllResults();
+ ->where('lead_id', $id)
+ // ->where('type', 1)
+ ->where('is_active', 1)
+ ->countAllResults();
$data['qcr_count'] = $this->RFQModel
->where('lead_id', $id)
@@ -489,18 +534,18 @@ class LeadsController extends BaseController
$data['lead_id'] = $id;
$lead_data = $this->leadsModel
- ->select('
+ ->select('
leads.*,
policy_type.question_json,
policy_type.policy_type,
policy_type.long_name,
user_profiles.email as created_person_email
')
- ->join('policy_type', 'leads.policy_type_id = policy_type.id')
- ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left')
- ->where('leads.id', $id)
- ->where('leads.is_active', 1)
- ->first();
+ ->join('policy_type', 'leads.policy_type_id = policy_type.id')
+ ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left')
+ ->where('leads.id', $id)
+ ->where('leads.is_active', 1)
+ ->first();
// dd($lead_data);
@@ -523,8 +568,8 @@ class LeadsController extends BaseController
In case of any query, please feel free to contact us.
Thank You!
";
-
-
+
+
$subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}";
$data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']);
@@ -532,12 +577,58 @@ class LeadsController extends BaseController
// dd($data);
- $this->loadLayout('view_rfq.php', $data);
+ if ($data['lead_data']['lead_form_type'] == 1) {
+
+ $this->loadLayout('view_rfq.php', $data);
+ } else if ($data['lead_data']['lead_form_type'] == 2) {
+
+ $data['occupancy'] = $this->occupancyModel->findAll();
+ // dd($data['occupancy']);
+ $data['policies'] = json_decode($data['question_json'], true)['policies'];
+ $data["child_table_data"] = json_decode($data['question_json'], true)['child_table_data'];
+ // $data['lead_register_data'] = json_decode($data['lead_data']['custom_fields']);
+ // dd($data['lead_register_data']);
+ $data['client_type'] = $this->clientType;
+ $data['buisness_type'] = $this->buisnessType;
+ $this->loadLayout('view_rfq_non_eb', $data);
+ }
}
+ public function savePolicyInfo()
+ {
+
+ $data = $this->request->getPost();
+
+ $lead_id = $data['lead_id'];
+ $json_data = $data['registration_json'];
+
+ $existingJson = $this->RFQModel->where('is_active', 1)->where("lead_id", $lead_id)->first()['registration_json'] ?? null;
+
+ if (empty($existingJson)) {
+ $this->RFQModel
+ ->where('lead_id', $lead_id)
+ ->where('type', 1)
+ ->where('is_active', 1)
+ ->set('is_active', 0)
+ ->update();
+
+ $insertData['lead_id'] = $lead_id;
+ $insertData['registration_json'] = json_encode($json_data);
+
+
+ $this->RFQModel->insert($insertData);
+
+ return $this->respond(['status' => true, "message" => "Policy Inforamtion saved"]);
+ } else {
+
+ return $this->respond(['status' => true, "message" => "Policy Inforamtion Already saved"]);
+ }
+ }
+
+
public function createRFQ()
{
-
+
// print_r($this->request->getPost('json')); die();
$data = $this->request->getPost();
@@ -550,12 +641,37 @@ class LeadsController extends BaseController
->set('is_active', 0)
->update();
- $result = $this->RFQModel->insert($data);
+ $registrationJson = $data['registration_json'] ?? null; // Use null coalescing operator for safety
+
+ if ($registrationJson) {
+ // If registration_json is provided, insert the data directly
+ $result = $this->RFQModel->insert($data);
+ } else {
+ // If registration_json is not provided, fetch the latest registration_json from the database
+ $this->RFQModel->select('registration_json')
+ ->where("lead_id", $lead_id)
+ ->order_by('id', 'DESC') // Assuming 'id' is an auto-increment field
+ ->limit(1);
+
+ $query = $this->RFQModel->get();
+ $latestRegistrationJson = $query->row()->registration_json ?? null;
+
+ if ($latestRegistrationJson) {
+ // If a valid registration_json is found, update the data and insert
+ $data['registration_json'] = $latestRegistrationJson;
+ $result = $this->RFQModel->insert($data);
+ } else {
+ // If no registration_json is found, insert the data as-is
+ $result = $this->RFQModel->insert($data);
+ }
+ }
if ($result) {
$message = "RFQ submitted successfully";
- if($data['submit_type'] == 'QCR'){ $message = "QCR submitted successfully"; }
+ if ($data['submit_type'] == 'QCR') {
+ $message = "QCR submitted successfully";
+ }
return $this->respond(['status' => true, 'id' => $result, 'message' => $message, 'data' => $data], 200);
}
@@ -590,15 +706,20 @@ class LeadsController extends BaseController
//export main route function
- public function exportQCRandRFQ($lead_id, $type, $export_type)
+ public function exportQCRandRFQ($lead_id, $type, $lead_form_type)
{
- $this->exportExcelForQCRandRFQ($lead_id, $type);
+ $this->exportExcelForQCRandRFQ($lead_id, $type, $lead_form_type);
}
//FOR EXCEL
- public function exportExcelForQCRandRFQ($lead_id, $type)
+ public function exportExcelForQCRandRFQ($lead_id, $type, $lead_form_type = 1)
{
- $filepath = $this->constructExcelToSaveTemp($lead_id, $type);
+ if ($lead_form_type == 2) {
+ $filepath = $this->constructNonEbExcelToSaveTemp($lead_id, $type);
+ } else {
+ $filepath = $this->constructExcelToSaveTemp($lead_id, $type);
+ }
+
$lead_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type);
// dd($filepath);
@@ -1126,7 +1247,7 @@ class LeadsController extends BaseController
$highestRowAndColumn = $members_sheet->getHighestRowAndColumn();
// dd($highestRowAndColumn);
$uncleaned_members = $members_sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
- $members = ExcelSanitizeHelper::sanitizeArrayData($uncleaned_members);
+ $members = ExcelSanitizeHelper::sanitizeArrayData($uncleaned_members);
//get age band data
$age_band_sheet = $spreadsheet->getSheet(1);
$highestRowAndColumn = $age_band_sheet->getHighestRowAndColumn();
@@ -1161,21 +1282,21 @@ class LeadsController extends BaseController
$result = $this->generateClassifierSpreadsheet($classifiers, WRITEPATH . 'uploads/lead_files/');
if ($result['success']) {
$this->myLogger->logme('error', "Spreadsheet generated successfully!");
-
+
echo "Location: " . $result['fullpath'] . "\n";
echo "Filename: " . $result['filename'] . "\n";
$filePaths = [
['file_path' => WRITEPATH . 'uploads/lead_files/' . $lead_data['file_name'], 'sheets' => [0, 1]],
- ['file_path' => WRITEPATH.'/uploads/lead_files/' . $result['filename'], 'sheets' => []],
+ ['file_path' => WRITEPATH . '/uploads/lead_files/' . $result['filename'], 'sheets' => []],
];
$outputPath = WRITEPATH . 'uploads/lead_files/Member_Data.xlsx';
$result_merge = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath);
if ($result_merge) {
// Call the delete function after the file is successfully created
- $deleteResponse = $this->deleteGeneratedFile($result['fullpath']);
-
- // Add delete message to response
- $response['deleteMessage'] = $deleteResponse['message'];
+ $deleteResponse = $this->deleteGeneratedFile($result['fullpath']);
+
+ // Add delete message to response
+ $response['deleteMessage'] = $deleteResponse['message'];
return ['status' => 'success', 'message' => 'Member_Data Merged Suceesfully'];
}
} else {
@@ -1307,17 +1428,17 @@ class LeadsController extends BaseController
throw new Exception("Failed to create directory: $outputDir");
}
}
-
+
// Check if directory is writable
if (!is_writable($outputDir)) {
throw new Exception("Directory is not writable: $outputDir");
}
-
+
// Generate unique filename
$timestamp = date('Y-m-d_His');
$filename = "member_classification_{$timestamp}.xlsx";
$filepath = $outputDir . DIRECTORY_SEPARATOR . $filename;
-
+
// Check if file already exists (shouldn't happen with timestamp, but just in case)
if (file_exists($filepath)) {
$counter = 1;
@@ -1327,31 +1448,31 @@ class LeadsController extends BaseController
$filename = "member_classification_{$timestamp}_{$counter}.xlsx";
$filepath = $outputDir . DIRECTORY_SEPARATOR . $filename;
}
-
+
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Demography_Data');
-
+
// Get all age bands
$age_bands = array_keys(reset($classifiers['general']));
array_pop($age_bands); // Remove 'Grand Total'
$age_bands[] = 'Grand Total'; // Add it back at the end
-
+
$currentRow = 5; // Start from row 5 to match the example
-
+
// Function to write section data
$writeSectionData = function ($data, $sheet, &$currentRow, $si_type) use ($age_bands) {
// Add section header for the SI type
$sheet->setCellValue('B' . $currentRow, strtoupper($si_type));
-
+
// Style section header
$sheet->getStyle('B' . $currentRow)->applyFromArray([
'font' => ['bold' => true, 'size' => 14],
'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER],
]);
-
+
$currentRow++; // Move to the next row after the section header
-
+
// Set headers for the data table
$sheet->setCellValue('B' . $currentRow, 'Relationship');
$col = 'C';
@@ -1359,7 +1480,7 @@ class LeadsController extends BaseController
$sheet->setCellValue($col . $currentRow, $band);
$col++;
}
-
+
// Style headers
$lastCol = chr(ord('B') + count($age_bands));
$headerRange = 'B' . $currentRow . ':' . $lastCol . $currentRow;
@@ -1375,9 +1496,9 @@ class LeadsController extends BaseController
'horizontal' => Alignment::HORIZONTAL_CENTER,
],
]);
-
+
$currentRow++;
-
+
// Write data rows
foreach ($data as $relation => $values) {
if ($relation !== 'Grand Total') {
@@ -1388,7 +1509,7 @@ class LeadsController extends BaseController
$sheet->setCellValue($col . $currentRow, $value);
$col++;
}
-
+
// Style data row
$dataRange = 'B' . $currentRow . ':' . $lastCol . $currentRow;
$sheet->getStyle($dataRange)->applyFromArray([
@@ -1402,11 +1523,11 @@ class LeadsController extends BaseController
'horizontal' => Alignment::HORIZONTAL_CENTER,
],
]);
-
+
$currentRow++;
}
}
-
+
// Add Grand Total row
$sheet->setCellValue('B' . $currentRow, 'Grand Total');
$col = 'C';
@@ -1414,7 +1535,7 @@ class LeadsController extends BaseController
$sheet->setCellValue($col . $currentRow, $data['Grand Total'][$band]);
$col++;
}
-
+
// Style Grand Total row
$totalRange = 'B' . $currentRow . ':' . $lastCol . $currentRow;
$sheet->getStyle($totalRange)->applyFromArray([
@@ -1433,31 +1554,31 @@ class LeadsController extends BaseController
'horizontal' => Alignment::HORIZONTAL_CENTER,
],
]);
-
+
$currentRow += 3; // Add gap after each section
};
-
+
// Write each SI section with gaps
foreach ($classifiers as $si_type => $data) {
$writeSectionData($data, $sheet, $currentRow, $si_type);
}
-
+
// Auto-size columns
foreach (range('B', chr(ord('B') + count($age_bands))) as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
-
+
// Create Excel file
try {
// Create Excel file
$writer = new Xlsx($spreadsheet);
$writer->save($filepath);
-
+
// Verify file was created successfully
if (!file_exists($filepath)) {
throw new Exception("Failed to create file: $filepath");
}
-
+
// Return the file info after creation
$response = [
'success' => true,
@@ -1467,7 +1588,6 @@ class LeadsController extends BaseController
];
return $response;
-
} catch (Exception $e) {
return [
'success' => false,
@@ -1475,7 +1595,7 @@ class LeadsController extends BaseController
];
}
}
-
+
// Function to delete generated file
public function deleteGeneratedFile($filePath)
{
@@ -1499,7 +1619,7 @@ class LeadsController extends BaseController
];
}
}
-
+
public function getAge($available_col, $member, $col_index)
{
if ($available_col == 'age') {
@@ -1580,7 +1700,7 @@ class LeadsController extends BaseController
$cc_data = isset($params['cc']) ? $params['cc'] : "";
$param_cc_mail = json_decode($cc_data, true);
-
+
if (isset($param_cc_mail) && is_array($param_cc_mail) && count($param_cc_mail) > 0) {
// Fetch user data where ID is in the param_cc_mail array
$userData = $this->userModel
@@ -1611,7 +1731,7 @@ class LeadsController extends BaseController
$bcc_data = isset($params['bcc']) ? $params['bcc'] : "";
$param_bcc_mail = json_decode($bcc_data, true);
-
+
if (isset($param_bcc_mail) && is_array($param_bcc_mail) && count($param_bcc_mail) > 0) {
// Fetch user data where ID is in the param_cc_mail array
$userData = $this->userModel
@@ -1645,8 +1765,15 @@ class LeadsController extends BaseController
$reply_to = $lead_data['created_person_email'] ?? "";
//get file path to attach
- $file_info = $this->constructExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer);
- log_message('error','File Info'.json_encode($file_info));
+
+ if ($lead_data["lead_form_type"] == 2) {
+ $file_info = $this->constructNonEbExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer);
+ } else {
+ $file_info = $this->constructExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer);
+ }
+
+ // $file_info = $this->constructExcelToSaveTemp($lead_id, ($file_type == 'rfq' ? 1 : 2), $propsal_and_insurer);
+ log_message('error', 'File Info' . json_encode($file_info));
if ($lead_data['file_name'] != null && $lead_data['file_name'] != '') {
$temp_file_path = $file_info['filePath'];
$temp_file_name = $file_info['fileName'];
@@ -1660,7 +1787,7 @@ class LeadsController extends BaseController
$result = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath);
// print_rr($result);
}
- }else{
+ } else {
$result = $file_info['filePath'];
// return $this->respond(['status' => 'fail', 'code' => 200, 'messgae' => 'File Not Found'], 200);
}
@@ -1697,12 +1824,12 @@ class LeadsController extends BaseController
$original_message = 'Request for Quotation (RFQ)
Dear {{RECIPIENT_NAME}},
We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.
RFQ Details
| Client name | {{CLIENT_NAME}} |
|---|
| Coverage Type | {{POLICY_LONG_NAME}} |
|---|
| Policy Start Date | {{POLICY_START_DATE}} |
|---|
| Policy Duration | {{DURATION}} |
|---|
Please note: Additional terms and details are included in the attachment for your reference.
Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.
Best regards,
Nhance India Pvt Ltd
© Nhance India Pvt Ltd. All rights reserved.
';
//for mail content
- if(!empty($mail_content)){
+ if (!empty($mail_content)) {
$original_message = $mail_content;
}
//for mail subject
- if(!empty($mail_subject)){
+ if (!empty($mail_subject)) {
$subject = $mail_subject;
}
@@ -1893,16 +2020,16 @@ class LeadsController extends BaseController
return $data;
}
-
+
public function convertJsonForQCR($json, $type)
{
if ($json) {
-
+
// Deep copy of JSON
$first_json = json_decode(json_encode($json), true);
// dd($first_json);
-
- if($type == 2){
+
+ if ($type == 2) {
// Column-wise Check: Remove headers and relevant data if qcr == 0
foreach ($json['proposal_data']['over_all_column_data'] as $proposalKey => $proposalData) {
@@ -1925,8 +2052,8 @@ class LeadsController extends BaseController
// Remove proposalKey from over_all_column_data
unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]);
-
- if($type == 2){
+
+ if ($type == 2) {
// Remove proposalKey from premium_data
unset($first_json['premium_data']['data'][$proposalKey]);
}
@@ -1934,7 +2061,7 @@ class LeadsController extends BaseController
// Insurer Check: Remove subHeaders and relevant data for insurers with qcr == 0
foreach ($proposalData['insurers'] as $insurerIndex => $insurer) {
- if (($insurer['qcr'] === 0 || $insurer['qcr'] === false) || ($insurer['stc'] === 0 || $insurer['stc'] === false) ) {
+ if (($insurer['qcr'] === 0 || $insurer['qcr'] === false) || ($insurer['stc'] === 0 || $insurer['stc'] === false)) {
foreach ($first_json['table_data']['headers'] as &$header) {
if (isset($header['subHeaders'])) {
$header['subHeaders'] = array_values(array_filter($header['subHeaders'], function ($sub) use ($insurer) {
@@ -1953,7 +2080,7 @@ class LeadsController extends BaseController
// Remove insurer from proposal's insurers array
unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]['insurers'][$insurerIndex]);
- if($type == 2){
+ if ($type == 2) {
unset($first_json['premium_data']['data'][$proposalKey][$insurer['display_name']]);
}
}
@@ -1977,8 +2104,7 @@ class LeadsController extends BaseController
$proposal['insurers'] = array_values($proposal['insurers']);
return $proposal;
}, $first_json['proposal_data']['over_all_column_data']);
-
- }else{
+ } else {
//remove insurer as Subheaders for RFQ
foreach ($first_json['table_data']['headers'] as &$header) {
@@ -2012,10 +2138,9 @@ class LeadsController extends BaseController
$proposal['insurers'] = [];
}
}
-
+
// Ensure to reset the reference
unset($proposal);
-
}
return $first_json;
@@ -2180,7 +2305,7 @@ class LeadsController extends BaseController
//Function for convert the RFQ and QCR Json to Policy Terms Json
public function convertQCRJsonToPolicyTerms($data, $policy_type, $proposel_name, $insurer_name)
- {
+ {
//transform the data into the currernt proposel and insurere ( get single proposel )
$data = $this->transformProposelData($data, $proposel_name, $insurer_name);
@@ -2225,7 +2350,7 @@ class LeadsController extends BaseController
$si_amt = explode(',', $value);
$terms_array[$item] = $si_amt[0] ?? '';
$terms_array['multiple_sum_insured'] = array_slice($si_amt, 1);
-
+
// Add age_ratio after Sum insured
if ($policy_type == 1) {
$terms_array['age_ratio'] = $age_ratio;
@@ -2236,7 +2361,7 @@ class LeadsController extends BaseController
// CASE 3: Handle family floaters
case $item === 'family_composition':
$terms_array['family_floaters'] = isJsonString($input_value) ? json_decode($input_value, true) : $input_value;
-
+
// Add age_ratio after family floaters
if ($policy_type == 2) {
$terms_array['age_ratio'] = $age_ratio;
@@ -2279,77 +2404,14 @@ class LeadsController extends BaseController
//------------------------------------------------------------------------------------------------
- // public function transformMailContent($lead_id, $page_name)
- // {
- // helper('excel_util_helper');
- // // $params = $this->request->getGet();
-
- // // print_r($params); die;
- // // $lead_id = $params['lead_id'];
- // // $file_type = $params['file_type']; //rfq or qcr
- // // $recipient_type = $params['recipient_type']; //insurer or client or internal or placement
- // // $recipient_mail = $params['recipient_mail']; // - only primary key of contacts
- // // $propsal_and_insurer = isset($params['proposal_insurer']) ? $params['proposal_insurer'] : null;
-
- // // if ($recipient_type == 'insurer' && empty($recipient_mail)) {
- // // return $this->respond(['status' => 'failed', 'code' => 400, 'data' => '', 'messgae' => 'Recipient mail not found ! '], 200);
- // // }
-
- // //gather lead info
- // $lead_data = $this->leadsModel
- // ->select('leads.*,policy_type.long_name,policy_type.policy_type,user_profiles.email as created_person_email')
- // ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left')
- // ->join('user_profiles', 'leads.created_by = user_profiles.id', 'left')
- // ->where('leads.id', $lead_id)
- // ->first();
-
- // // dd($lead_data);
-
- // if($lead_data){
-
- // $recipient_data = ['name' => "Team"];
- // // $original_message = 'Request for Quotation (RFQ)
Dear {{RECIPIENT_NAME}},
We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.
RFQ Details
| Client name | {{CLIENT_NAME}} |
|---|
| Coverage Type | {{POLICY_LONG_NAME}} |
|---|
| Policy Start Date | {{POLICY_START_DATE}} |
|---|
| Policy Duration | {{DURATION}} |
|---|
Please note: Additional terms and details are included in the attachment for your reference.
Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.
Best regards,
Nhance India Pvt Ltd
© Nhance India Pvt Ltd. All rights reserved.
';
- // $original_message = `Dear Sir,
-
- // Greetings From Nhance India!
-
- // Please find attached the RFQ for {{POLICY_TYPE}} policy pertaining to {{RECIPIENT_NAME}}
- // Kindly request you to share the competitive quotes at the earliest
- // In case of any query, Please feel free to contact us.
- // Thank You !`;
-
- // $message = $original_message;
- // $message = str_replace("{{RECIPIENT_NAME}}", $lead_data['client_name'], $message);
- // $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'] ?? $lead_data['policy_type'], $message);
- // $message = str_replace("{{POLICY_TYPE}}", $lead_data['policy_type'], $message);
- // $message = str_replace("{{RFQ_OR_QCR}}", $page_name, $message);
-
- // $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'], $message);
- // $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'], 'Y-m-d', 'd-m-Y'), $message);
- // $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--';
-
- // dd($message);
- // // return $this->respond(['status' => true, 'code' => 200, 'data' => $message], 200);
- // return $message;
-
- // }else{
-
- // // return $this->respond(['status' => false, 'code' => 404, 'message' => "This lead has not data"], 200);
- // return '';
- // }
-
-
-
- // }
-
public function transformMailContent($lead_data, $mail_content, $page_name)
- {
- $current_year = date('Y');
+ {
+ $current_year = date('Y');
$next_year = $current_year + 1;
$policy_year = "$current_year-$next_year";
if ($lead_data) {
-
+
// Replacing placeholders with actual values
$message = $mail_content;
$message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'] ?? "Valued Client", $message);
@@ -2359,37 +2421,716 @@ class LeadsController extends BaseController
$message = str_replace("{{POLICY_YEAR}}", $policy_year, $message);
return $message;
-
} else {
return ''; // Return empty if no lead data found
}
}
- function getLastFiveFinancialYears() {
- $currentYear = date('Y');
+ function getLastFiveFinancialYears()
+ {
+ $currentYear = date('Y');
$currentMonth = date('m');
-
+
// In India, the financial year starts from April (04)
if ($currentMonth < 4) {
$currentYear--; // Adjust year if it's Jan-Mar
}
-
+
$financialYears = [];
-
+
for ($i = 0; $i < 5; $i++) {
$startYear = $currentYear - $i - 1;
$endYear = $currentYear - $i;
$financialYears[] = "$startYear-$endYear";
}
-
+
return $financialYears;
}
- public function rfqNonEB(){
+ // ------------ RFQ NON EB FUNCTIONS-----------------------------------------------------------------------------------------
+
+ public function rfqNonEB()
+ {
$this->loadLayout('view_rfq_non_eb');
}
-
-
+
+ public function getLeadNonEB($type, $id = null)
+ {
+ // Set basic data
+ $data = [
+ 'issuer' => $this->issuer,
+ 'client_type' => $this->clientType,
+ 'lead_type' => $this->leadType,
+ 'lead_status' => $this->leadsStatus,
+ 'policy_type' => $this->policyTypeModel->where('is_active', 1)->findAll(),
+ 'entity' => $this->kycEntityTypeModel->where('is_active', 1)->findAll(),
+ 'insurer' => $this->insurerBranchModel->getInsurerBranchesWithInsurerNames(),
+ 'tpa' => $this->tpaBranchModel->getTpaBranchesWithTpaNames(),
+ 'lastFiveYears' => $this->getLastFiveFinancialYears(),
+ 'gpaClaimType' => $this->claim_type_for_gpa,
+ 'causeOfDeath' => $this->cause_of_death,
+ 'selected_lead_type' => $type,
+ ];
+
+ // Fetch sales team members who are active in team 5
+ $data['salse_team'] = $this->userModel
+ ->select('user_profiles.*')
+ ->join('user_teams', 'user_profiles.id = user_teams.user_id')
+ ->where('user_teams.team_id', 5)
+ ->where('user_teams.is_active', 1)
+ ->where('user_profiles.is_active', 1)
+ ->findAll();
+
+ if (!empty($id)) {
+ $data['lead_edit_data'] = $this->leadsModel->where('id', $id)->first() ?? [];
+
+ // Decode and merge custom fields if present
+ $custom_fields_data = !empty($data['lead_edit_data']['custom_fields'])
+ ? json_decode($data['lead_edit_data']['custom_fields'], true)
+ : [];
+
+ if (!empty($custom_fields_data) && is_array($custom_fields_data)) {
+ $data['lead_edit_data'] = array_merge($data['lead_edit_data'], $custom_fields_data);
+ }
+
+ if (!empty($data['lead_edit_data'])) {
+ foreach (['policy_start_date', 'policy_end_date', 'incurred_claims_date', 'premium_date'] as $dateField) {
+ $data['lead_edit_data'][$dateField] = !empty($data['lead_edit_data'][$dateField])
+ ? change_date_format($data['lead_edit_data'][$dateField], 'Y-m-d', 'd/m/Y')
+ : null;
+ }
+
+ $data['lead_edit_data']['fin_years_claims_array'] = !empty($data['lead_edit_data']['fin_years_claims'])
+ ? json_decode($data['lead_edit_data']['fin_years_claims'], true)['finyear'] ?? []
+ : [];
+
+ $data['lead_edit_data']['html'] = $this->generateViewPageHtml(
+ $data['lead_edit_data']['policy_type_id'] ?? null,
+ $data
+ ) ?? "";
+ }
+
+ if ($data['lead_edit_data']['lead_type'] != 1 && $data['lead_edit_data']['lead_form_type'] == 2) {
+ $data['lead_edit_data']['claims_details_html'] = view('rfq/claims_details_non_eb', $data['lead_edit_data']);
+ } else {
+ $data['lead_edit_data']['claims_details_html'] = "";
+ }
+ }
+
+ // dd($data);
+
+ return $this->loadLayout('leads_form_handler', $data);
+ }
+
+ public function getPolicyTypeFields()
+ {
+
+ $policy_type_id = $this->request->getGET('policy_type_id');
+
+ $html = $this->generateViewPageHtml($policy_type_id) ?? "";
+
+ if (!empty($html)) {
+ return $this->respond(['status' => true, 'code' => 200, 'message' => 'Policy Type FIELDS are found', 'data' => $html], 200);
+ } else {
+ return $this->respond(['status' => false, 'code' => 400, 'message' => 'Fields not found for this policy type'], 200);
+ }
+ }
+
+ public function generateViewPageHtml($policy_type_id, $data = [])
+ {
+ $data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
+ $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
+
+ $viewMap = [
+ 1 => 'rfq/gpa',
+ 6 => 'rfq/gpa',
+ 7 => 'rfq/gpa',
+ 2 => 'rfq/gmc',
+ 3 => 'rfq/gmc',
+ 4 => 'rfq/gmc',
+ 5 => 'rfq/gmc',
+ 22 => 'rfq/car',
+ 23 => 'rfq/cpm',
+ 24 => 'rfq/cyber_crime',
+ 25 => 'rfq/do',
+ 27 => 'rfq/eo',
+ 49 => 'rfq/money',
+ 19 => 'rfq/cgl',
+ 59 => 'rfq/sfsp',
+ 63 => 'rfq/wc',
+ 15 => 'rfq/blu',
+ 16 => 'rfq/bsu',
+ 44 => 'rfq/marine',
+ 45 => 'rfq/marine',
+ 46 => 'rfq/marine',
+ 47 => 'rfq/marine',
+ 50 => 'rfq/office'
+ ];
+
+ return isset($viewMap[$policy_type_id]) ? view($viewMap[$policy_type_id], $data) : "";
+ }
+
+ // ------------------- RFQ NON EB EXCEL EXPORT FUNCTION ---------------------------------------------------------------------------------------
+
+ public function constructNonEbExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null)
+ {
+
+ $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type);
+
+ $lead_data = json_decode($rfq_data['custom_fields'], true) ?? [];
+ if (!is_array($lead_data)) {
+ $lead_data = [];
+ }
+ $lead_data = array_merge(['Insured' => $rfq_data['client_name']], $lead_data);
+
+ // if(!empty($rfq_data['fin_years_claims'])){
+ // $claim_details = json_decode($rfq_data['fin_years_claims'], true) ?? [];
+ // if(!empty($claim_details['finyear'])){
+ // $lead_data['claim_details'] = $claim_details['finyear'];
+ // }
+ // Kint::dump($claim_details);
+ // }
+
+
+ $jsonData = json_decode($rfq_data['json'], true);
+ $proposalData = end($jsonData);
+ array_pop($jsonData);
+
+ $spreadsheet = new Spreadsheet();
+ $sheet = $spreadsheet->getActiveSheet();
+
+ // Start with lead_data at the top
+ $rowNumber = 1;
+
+ $title = "Nhance India Insurance Broking Pvt Ltd";
+ $mergeRange1 = "A{$rowNumber}:B{$rowNumber}";
+ $sheet->mergeCells($mergeRange1);
+ $sheet->setCellValue("A{$rowNumber}", $title);
+ $sheet->getStyle("A{$rowNumber}")->applyFromArray([
+ 'font' => [
+ 'bold' => true,
+ 'size' => 20
+ ],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
+ ],
+ ]);
+
+ // Calculate title width
+ $maxWidthA = mb_strlen($title);
+
+ // Set column width to fit the image properly
+ $sheet->getColumnDimension('C')->setWidth(20); // Adjust as needed
+ $sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed
+
+ $drawing = new Drawing();
+ $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path
+ $drawing->setPath($path);
+ $drawing->setCoordinates("C{$rowNumber}"); // Set position in column C
+ $drawing->setHeight(35); // Adjust image height
+
+ // Center align the image in the cell
+ $drawing->setOffsetX(30); // Adjust horizontal offset
+ $drawing->setOffsetY(5); // Adjust vertical offset
+ $drawing->setWorksheet($sheet);
+
+ // Apply center alignment to the cell
+ $sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+ $sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
+
+ $rowNumber++;
+
+ // Initialize max width tracking variables
+ $maxWidthB = 0;
+
+ foreach ($lead_data as $key => $value) {
+ $formattedKey = ucwords(str_replace('_', ' ', $key));
+
+ // Merge A:B for key
+ $mergeRangeKey = "A{$rowNumber}:B{$rowNumber}";
+ $sheet->mergeCells($mergeRangeKey);
+
+ // Set values in merged cells
+ $sheet->setCellValue("A{$rowNumber}", $formattedKey);
+ $sheet->setCellValue("C{$rowNumber}", $value);
+
+ // Apply styles for alignment and bold text in A:B
+ $sheet->getStyle($mergeRangeKey)->applyFromArray([
+ 'font' => ['bold' => true],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
+ ],
+ ]);
+
+ // Apply bold style to C column if the key is "Insured"
+ // if ($key === "Insured") {
+ // $sheet->getStyle("C{$rowNumber}")->applyFromArray([
+ // 'font' => ['bold' => true],
+ // ]);
+ // }
+
+ // Track max width needed for columns
+ $maxWidthA = max($maxWidthA, mb_strlen($formattedKey)); // Consider title and keys
+ $maxWidthB = max($maxWidthB, mb_strlen((string) $value));
+
+ $rowNumber++;
+ }
+
+ // Set column width based on max content length (adjusted for padding)
+ $sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2);
+ $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2);
+ $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2);
+
+ $rowNumber += 2;
+
+ // Kint::dump($jsonData);
+
+ foreach ($jsonData as $key => $data) {
+
+ // Kint::dump($data, 'First');
+
+ if ($type == 2) {
+
+ $data = $this->convertNonEbJsonForQCR($data, $type, $proposalData, $key);
+
+ // Kint::dump($data, 'Second');
+
+ if ($propsal_and_insurer !== null) {
+ list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
+ $data = $this->transformNonEbProposelData($data, $proposal_key, $insurer_key, $key);
+ }
+ unset($data['proposalData']);
+ } else if ($type == 1) {
+ $data = $this->convertNonEbJsonForQCR($data, $type, $proposalData, $key);
+ unset($data['proposalData']);
+ }
+
+ // dd($data);
+ // Add headers and subheaders
+ $headers = $data['table_data']['headers'];
+ // dd($headers);
+
+ $rowNumber = $rowNumber + 1;
+
+ $subHeaderRow = $rowNumber + 1;
+ $columnLetter = 'A';
+
+ foreach ($headers as $header) {
+
+ if (in_array($header['parentHeader'], ['Action'])) {
+ continue;
+ }
+
+ $sheet->getColumnDimension($columnLetter)->setWidth(60);
+
+
+ if ($header['parentHeader'] == 'Policy') {
+ // $header['parentHeader'] = 'S.No.';
+ $sheet->getColumnDimension('A')->setWidth(10);
+ }
+
+ if ($header['parentHeader'] === 'Particulars') {
+ $sheet->getColumnDimension('B')->setWidth(60);
+ }
+
+ if (strpos($header['parentHeader'], 'Proposal') === 0) {
+ $sheet->getColumnDimension('C')->setWidth(60);
+ $sheet->getColumnDimension('D')->setWidth(35);
+ }
+
+
+ $startColumn = $columnLetter; // Start of the current header range
+ $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
+
+ // Set parent header value
+ $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']);
+ $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([
+ 'font' => ['bold' => true],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
+ ],
+ 'fill' => [
+ 'fillType' => Fill::FILL_SOLID,
+ 'startColor' => ['rgb' => 'ADD8E6'],
+ ],
+ ]);
+
+ // Merge header cells if it spans multiple subheaders
+ if ($subHeaderCount > 1) {
+ $endColumn = chr(ord($startColumn) + $subHeaderCount - 1); // Calculate the end column
+ $sheet->mergeCells("{$startColumn}{$rowNumber}:{$endColumn}{$rowNumber}");
+ } else {
+ $endColumn = $startColumn; // No merge needed if only one subheader
+ }
+
+ // Add subheaders
+ foreach ($header['subHeaders'] as $subHeader) {
+ $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
+
+ if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") {
+ $sheet->getColumnDimension($columnLetter)->setWidth(35);
+ } else {
+ $sheet->getColumnDimension('A')->setWidth(10);
+ }
+
+ $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([
+ 'font' => ['bold' => true],
+ 'alignment' => [
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
+ ],
+ ]);
+ $columnLetter++; // Move to the next column for subheaders
+ }
+ }
+
+ // Apply border to the header range
+ $headerRange = "A{$rowNumber}:" . chr(ord($columnLetter) - 1) . "{$subHeaderRow}";
+ $sheet->getStyle($headerRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+
+ // Increase row height for headers and subheaders
+ $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height
+ $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height
+
+ $rowNumber = $subHeaderRow + 2;
+ $column_data = $data['table_data']['data'];
+ $serial_no = 1;
+ $maxColumnWidths = [];
+
+ // Add table data rows
+ foreach ($column_data as $dataRow) {
+
+ $columnLetter = 'A';
+
+ foreach ($dataRow['data'] as $cellData) {
+
+ if (in_array($cellData['parentth'], ['Action'])) {
+ continue;
+ }
+
+ if ($cellData['parentth'] == 'SNO') {
+ $sheet->setCellValue("{$columnLetter}{$rowNumber}", $serial_no);
+ } else if ($cellData['parentth'] == 'Policy') {
+ $mergeStart = $rowNumber; // Start row for merging
+ $mergeEnd = $rowNumber + ($cellData['rowspan'] - 1); // End row for merging
+
+ $sheet->setCellValue("{$columnLetter}{$mergeStart}", $dataRow['SNO']);
+ $sheet->mergeCells("{$columnLetter}{$mergeStart}:{$columnLetter}{$mergeEnd}");
+ $sheet->getStyle("{$columnLetter}{$mergeStart}:{$columnLetter}{$mergeEnd}")
+ ->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
+ } else {
+ $sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['display_content']);
+ }
+
+ $columnLetter++;
+ }
+ $rowNumber++;
+ $serial_no++;
+ }
+
+ $dataRange = "A" . ($subHeaderRow + 1) . ":" . chr(ord($columnLetter) - 1) . ($rowNumber - 1);
+ $sheet->getStyle($dataRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+
+ // Auto-size columns
+ // foreach ($sheet->getColumnIterator() as $column) {
+ // $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
+ // }
+
+ $dataRange = $sheet->calculateWorksheetDimension();
+
+ $sheet->getStyle($dataRange)->getAlignment()
+ ->setHorizontal(Alignment::HORIZONTAL_CENTER)
+ ->setVertical(Alignment::VERTICAL_CENTER)
+ ->setWrapText(true);
+
+ $sheet->getStyle('A1')->applyFromArray([
+ 'alignment' => [
+ 'wrapText' => false, // Disables text wrapping for A1
+ ],
+ ]);
+
+ // Apply border to the entire sheet
+ preg_match('/([A-Z]+)(\d+):([A-Z]+)(\d+)/', $dataRange, $matches);
+
+ if ($matches) {
+ $startColumn = $matches[1]; // A
+ $startRow = $matches[2]; // 1
+ $endColumn = $matches[3]; // G
+ $endRow = $matches[4]; // 75
+
+ // Convert column letter to index, reduce by 1, and convert back
+ $endColumnIndex = Coordinate::columnIndexFromString($endColumn) - 1;
+ $newEndColumn = Coordinate::stringFromColumnIndex($endColumnIndex);
+
+ // Generate the new range (e.g., "A1:F75" instead of "A1:G75")
+ $newDataRange = "{$startColumn}{$startRow}:{$newEndColumn}{$endRow}";
+ // $sheet->getStyle($newDataRange)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
+ }
+
+ $lastRow = count($lead_data) + 1;
+ $leadRange = "A1:C{$lastRow}";
+
+ $sheet->getStyle($leadRange)->applyFromArray([
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => 'FF000000'], // Black color
+ ],
+ ],
+ ]);
+ }
+
+ // dd($rowNumber);
+ // Set filename
+ $string = ($type == 2) ? 'QCR' : 'RFQ';
+ $filename = "{$string}_{$rfq_data['client_short_name']}_{$rfq_data['policy_type']}_" . date('YmdHis') . '.xlsx';
+
+ // Save to temporary location
+ $uploadFilePath = WRITEPATH . 'tmp/' . $filename;
+ $writer = new Xlsx($spreadsheet);
+ $writer->save($uploadFilePath);
+
+ return [
+ 'filePath' => $uploadFilePath,
+ 'fileName' => $filename,
+ ];
+ }
+
+ public function convertNonEbJsonForQCR($jsonArr, $type, $proposeldata, $indexOfTheTable)
+ {
+
+ $first_json = $jsonArr;
+ $first_json = array_merge($first_json, $proposeldata);
+
+ if ($type == 2) {
+
+ // Column-wise Check: Remove headers and relevant data if qcr == 0
+ foreach ($first_json['proposal_data']['over_all_column_data'] as $proposalKey => $proposalData) {
+
+ if ((isset($proposalData['qcr']) && isset($proposalData['stc'])) && ($proposalData['qcr'] == 0 || $proposalData['qcr'] === false) || ($proposalData['stc'] == 0 || $proposalData['stc'] === false)) {
+
+ // Remove matching parentHeader in headers
+ foreach ($first_json['table_data']['headers'] as $index => $header) {
+ if ($header['parentHeader'] === $proposalKey) {
+ unset($first_json['table_data']['headers'][$index]);
+ }
+ }
+
+ // Remove data entries with matching parentth
+ foreach ($first_json['table_data']['data'] as &$item) {
+ $item['data'] = array_values(array_filter($item['data'], function ($entry) use ($proposalKey) {
+ return $entry['parentth'] !== $proposalKey;
+ }));
+ }
+
+ // Remove proposalKey from over_all_column_data
+ unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]);
+
+ if ($type == 2) {
+ // Remove proposalKey from premium_data
+ unset($first_json['premium_data']['data'][$proposalKey]);
+ }
+ }
+
+ // Insurer Check: Remove subHeaders and relevant data for insurers with qcr == 0
+ foreach ($proposalData['insurers'] as $insurerIndex => $insurer) {
+
+ $qcr = $insurer['qcr'] ?? null;
+ $stc = $insurer['stc'] ?? null;
+
+ if (($qcr === 0 || $qcr === false) || ($stc === 0 || $stc === false)) {
+
+ foreach ($first_json['table_data']['headers'] as &$header) {
+ if (isset($header['subHeaders'])) {
+ $header['subHeaders'] = array_values(array_filter($header['subHeaders'], function ($sub) use ($insurer) {
+ return $sub !== $insurer['display_name'];
+ }));
+ }
+ }
+
+
+ foreach ($first_json['table_data']['data'] as &$item) {
+ $item['data'] = array_values(array_filter($item['data'], function ($entry) use ($insurer) {
+ return $entry['subth'] !== $insurer['display_name'];
+ }));
+ }
+
+ // Remove insurer from proposal's insurers array
+ unset($first_json['proposal_data']['over_all_column_data'][$proposalKey]['insurers'][$insurerIndex]);
+
+ if ($type == 2) {
+ unset($first_json['premium_data']['data'][$proposalKey][$insurer['display_name']]);
+ }
+ }
+ }
+ }
+
+ // Row-wise Check: Remove rows if qcr == 0 for actions
+ foreach ($first_json['table_data']['data'] as $rowKey => $rowData) {
+ foreach ($rowData['data'] as $data) {
+
+ if ($indexOfTheTable == 0) {
+
+ if ($data['parentth'] == "Policy" && $data['input_value'] != "Checked") {
+ unset($first_json['table_data']['data'][$rowKey]);
+ break;
+ }
+ } else {
+ if (
+ isset($data['parentth'], $data['input_value']['qcr'], $data['input_value']['stc']) &&
+ $data['parentth'] === "Action" &&
+ ($data['input_value']['qcr'] == 0 || $data['input_value']['stc'] == 0)
+ ) {
+ unset($first_json['table_data']['data'][$rowKey]);
+ break;
+ }
+ }
+ }
+ }
+
+ // Reindex arrays to maintain proper structure
+ $first_json['table_data']['headers'] = array_values($first_json['table_data']['headers']);
+ $first_json['table_data']['data'] = array_values($first_json['table_data']['data']);
+ $first_json['proposal_data']['over_all_column_data'] = array_map(function ($proposal) {
+ $proposal['insurers'] = array_values($proposal['insurers']);
+ return $proposal;
+ }, $first_json['proposal_data']['over_all_column_data']);
+ } else {
+
+ //remove insurer as Subheaders for RFQ
+ foreach ($first_json['table_data']['headers'] as &$header) {
+ // Ensure 'subHeaders' exists and is an array before filtering
+ if (isset($header['subHeaders']) && is_array($header['subHeaders'])) {
+ $header['subHeaders'] = array_filter($header['subHeaders'], function ($subHeader) {
+ return in_array($subHeader, ['Quote asked', '-'], true);
+ });
+ }
+ }
+
+ //Remove insurer Row wise data for RFQ
+ foreach ($first_json['table_data']['data'] as &$row) {
+
+ // Filter the inner data array
+ $row['data'] = array_filter(
+ $row['data'],
+ function ($item) {
+ return in_array($item['subth'], ['Quote asked', '-']);
+ }
+ );
+
+ $row['data'] = array_values($row['data']);
+ }
+
+ // Ensure to unset the reference after the loop
+ unset($row);
+
+ // Remove insurers from Proposal Data key for RFQ
+ foreach ($proposeldata['proposal_data']['over_all_column_data'] as $key => &$proposal) {
+ if (isset($proposal['insurers'])) {
+ // Set the insurers array to empty
+ $proposal['insurers'] = [];
+ }
+ }
+
+ // Ensure to reset the reference
+ unset($proposal);
+ }
+ return $first_json;
+
+ return null;
+ }
+
+ public function transformNonEbProposelData(&$data, $proposal, $insurer, $tableCount)
+ {
+ // Kint::dump($data, $proposal, $insurer, $tableCount);
+
+ // Initialize headers with defaults
+ $headerData = [];
+
+ // Add the first two default headers only once
+ $headerData[] = [
+ 'parentHeader' => $data['table_data']['headers'][0]['parentHeader'],
+ 'subHeaders' => ['-']
+ ];
+ $headerData[] = [
+ 'parentHeader' => $data['table_data']['headers'][1]['parentHeader'],
+ 'subHeaders' => ['-']
+ ];
+
+ $second_table_name = $data['table_data']['headers'][1]['parentHeader'] ?? "";
+
+ // Loop through the headers to find matching proposal and insurer
+ foreach ($data['table_data']['headers'] as $header) {
+ if ($header['parentHeader'] === $proposal) {
+ foreach ($header['subHeaders'] as $subHeader) {
+ if ($subHeader === $insurer) {
+ $headerData[] = [
+ 'parentHeader' => $header['parentHeader'],
+ 'subHeaders' => ['Quote asked', $subHeader]
+ ];
+ break 2; // Exit both loops after match is found
+ }
+ }
+ }
+ }
+
+ // Update the original data's headers
+ $data['table_data']['headers'] = $headerData;
+
+ foreach ($data['table_data']['data'] as &$entry) {
+
+ $sno = $entry['SNO'];
+ $items = $entry['items'];
+ $row_id = $entry['row_id'];
+
+ $filteredData = [];
+
+ foreach ($entry['data'] as $item) {
+
+ // Always include SNO and Particulars
+ if (in_array($item['parentth'], ['S.NO', "Policy", "", 'Particulars', $second_table_name])) {
+ $filteredData[] = $item;
+ }
+
+ // Include Proposal with Quote Asked
+ if ($item['parentth'] === $proposal && $item['subth'] === "Quote asked") {
+ $filteredData[] = $item;
+ }
+
+ // Include specific proposal and insurer
+ if ($item['parentth'] === $proposal && $item['subth'] === $insurer) {
+ $filteredData[] = $item;
+ }
+ }
+
+ // Update the entry with filtered data
+ $entry['SNO'] = $sno;
+ $entry['items'] = $items;
+ $entry['row_id'] = $row_id;
+ $entry['data'] = $filteredData;
+ }
+ unset($entry);
+
+ // kint::dump($data);
+ return $data;
+ }
}
diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php
index 616a69cd..3d141b2b 100755
--- a/app/Controllers/RestAuthenticationController.php
+++ b/app/Controllers/RestAuthenticationController.php
@@ -164,6 +164,20 @@ class RestAuthenticationController extends AdminController
}
}
+ public function updateEmpOTP()
+ {
+
+ $email = $this->request->getJSON()->email;
+ $otp = $this->request->getJSON()->otp;
+
+ $this->employeeModel->where('email_corporate', $email)->where('relationship', 'Self')
+ ->where('is_active', 1)->set(array('otp' => $otp))
+ ->update();
+
+ return true;
+
+ }
+
public function getVerifiedUserData()
{
diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php
index bc47a3ff..84e9c9bf 100644
--- a/app/Models/LeadsModel.php
+++ b/app/Models/LeadsModel.php
@@ -84,6 +84,9 @@ class LeadsModel extends Model
'total_si_at_incept',
'total_si_at_renewal',
'fin_years_claims',
+
+ 'lead_form_type',
+ 'custom_fields',
];
diff --git a/app/Models/OccupancyMasterModel.php b/app/Models/OccupancyMasterModel.php
new file mode 100644
index 00000000..2db89bfa
--- /dev/null
+++ b/app/Models/OccupancyMasterModel.php
@@ -0,0 +1,22 @@
+
-
-