FEAT_CLAIM_HISTORY, NEW SHEET, EXCEL COSMETIC CHANGES

This commit is contained in:
Srinivas-Saravanan 2025-06-06 17:50:02 +05:30
parent d81f9428ff
commit 9da41dc4a4
4 changed files with 317 additions and 125 deletions

View File

@ -42,6 +42,7 @@ use App\Controllers\Jobs;
use App\Controllers\JobWorker; use App\Controllers\JobWorker;
use Google\Service\FactCheckTools\Resource\Claims; use Google\Service\FactCheckTools\Resource\Claims;
use GPBMetadata\Google\Type\Datetime; use GPBMetadata\Google\Type\Datetime;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class LeadsController extends BaseController class LeadsController extends BaseController
{ {
@ -243,7 +244,7 @@ class LeadsController extends BaseController
$leads_file_primary_key = $data['leads_file_id'] ?? []; $leads_file_primary_key = $data['leads_file_id'] ?? [];
$multi_file_data = []; $multi_file_data = [];
if(isset($data[$form_docs_name])){ if (isset($data[$form_docs_name])) {
$files = $this->request->getFileMultiple($form_file_name); $files = $this->request->getFileMultiple($form_file_name);
$multi_file_data = $this->uploadMultiFiles($files, $data[$form_docs_name], $leads_file_primary_key); $multi_file_data = $this->uploadMultiFiles($files, $data[$form_docs_name], $leads_file_primary_key);
} }
@ -447,6 +448,7 @@ class LeadsController extends BaseController
'source_policy_start_date' => $data['source_policy_start_date'] ?? null, 'source_policy_start_date' => $data['source_policy_start_date'] ?? null,
'source_policy_end_date' => $data['source_policy_end_date'] ?? null, 'source_policy_end_date' => $data['source_policy_end_date'] ?? null,
'claim_history' => $data['claim_history']
]; ];
} }
// print_r($processedData);die(); // print_r($processedData);die();
@ -716,10 +718,10 @@ class LeadsController extends BaseController
$subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}"; $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}";
} }
if($lead_data['policy_type_id'] == 1){ if ($lead_data['policy_type_id'] == 1) {
$data['totalSumAssured'] = $this->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => $id]); $data['totalSumAssured'] = $this->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => $id]);
}else{ } else {
$data['totalSumAssured'] = []; $data['totalSumAssured'] = [];
} }
$data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']); $data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']);
@ -817,13 +819,13 @@ class LeadsController extends BaseController
$qcr_created = true; $qcr_created = true;
} }
if(($data['submit_type'] ?? "") == 'QCR'){ if (($data['submit_type'] ?? "") == 'QCR') {
$inputJson = json_decode($data['json'], true); $inputJson = json_decode($data['json'], true);
$proposal_data = array_pop($inputJson); $proposal_data = array_pop($inputJson);
if(isset($proposal_data['proposal_data']['over_all_column_data'])){ if (isset($proposal_data['proposal_data']['over_all_column_data'])) {
$proposel_count = $proposal_data['proposal_data']['over_all_column_data']; $proposel_count = $proposal_data['proposal_data']['over_all_column_data'];
foreach ($proposel_count as $key => $value) { foreach ($proposel_count as $key => $value) {
if(!empty($value['insurers'])){ if (!empty($value['insurers'])) {
$qcr_created = true; $qcr_created = true;
} }
} }
@ -869,11 +871,11 @@ class LeadsController extends BaseController
if ($insertId) { if ($insertId) {
if(empty($rfq_created)){ if (empty($rfq_created)) {
$this->leadsModel->update($lead_id, ['status' => "rfq_created"]); $this->leadsModel->update($lead_id, ['status' => "rfq_created"]);
} }
if($qcr_created == true){ if ($qcr_created == true) {
$this->leadsModel $this->leadsModel
->where('id', $lead_id) ->where('id', $lead_id)
->whereNotIn('status', ['qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) ->whereNotIn('status', ['qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections'])
@ -1137,13 +1139,12 @@ class LeadsController extends BaseController
$lead_id = $this->request->getGet('lead_id'); $lead_id = $this->request->getGet('lead_id');
$data = [ $data = [
'no_of_installment' => 0, 'no_of_installment' => 0,
'is_installment'=> 0 'is_installment' => 0
]; ];
$this->leadsModel->where('id', $lead_id)->set($data)->update(); $this->leadsModel->where('id', $lead_id)->set($data)->update();
} }
return $this->respond(['status' => true, 'message' => 'Removed successfully'], 200); return $this->respond(['status' => true, 'message' => 'Removed successfully'], 200);
} }
//-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------ //-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------
@ -1221,7 +1222,7 @@ class LeadsController extends BaseController
if ($rfq_data['lead_type'] == 1) { if ($rfq_data['lead_type'] == 1) {
if (in_array($rfq_data['policy_type_id'], [2,3,4,5])) { if (in_array($rfq_data['policy_type_id'], [2, 3, 4, 5])) {
$lead_data = [ $lead_data = [
'Insured' => $rfq_data['client_name'], 'Insured' => $rfq_data['client_name'],
'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
@ -1233,7 +1234,7 @@ class LeadsController extends BaseController
'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d-m-Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d-m-Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", 'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d-m-Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d-m-Y', strtotime($rfq_data['policy_end_date'])) : "To be decided",
// 'Policy Run Days' => $rfq_data['policy_run_days'], // 'Policy Run Days' => $rfq_data['policy_run_days'],
]; ];
} else if (in_array( $rfq_data['policy_type_id'], [1, 6, 7])) { } else if (in_array($rfq_data['policy_type_id'], [1, 6, 7])) {
$lead_data = [ $lead_data = [
'Insured' => $rfq_data['client_name'], 'Insured' => $rfq_data['client_name'],
'No of Employees at Inception' => $rfq_data['incept_emp_count'], 'No of Employees at Inception' => $rfq_data['incept_emp_count'],
@ -1242,9 +1243,8 @@ class LeadsController extends BaseController
'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
]; ];
} }
} else { } else {
if (in_array($rfq_data['policy_type_id'], [2,3,4,5])) { if (in_array($rfq_data['policy_type_id'], [2, 3, 4, 5])) {
$lead_data = [ $lead_data = [
'Insured' => $rfq_data['client_name'], 'Insured' => $rfq_data['client_name'],
@ -1265,14 +1265,14 @@ class LeadsController extends BaseController
'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d-m-Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d-m-Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", 'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d-m-Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d-m-Y', strtotime($rfq_data['policy_end_date'])) : "To be decided",
'Policy Run Days' => $rfq_data['policy_run_days'], 'Policy Run Days' => $rfq_data['policy_run_days'],
'Inception Premium' => formatIndianCurrency($rfq_data['premium_at_inception']), 'Inception Premium' => formatIndianCurrency($rfq_data['premium_at_inception']),
'Premium as on ('.date('d-m-Y', strtotime($rfq_data['incurred_claims_date'])).')' => formatIndianCurrency($rfq_data['premium_date']), 'Premium as on (' . date('d-m-Y', strtotime($rfq_data['incurred_claims_date'])) . ')' => formatIndianCurrency($rfq_data['premium_date']),
'Earned Premium' => $rfq_data['earned_premium'], 'Earned Premium' => $rfq_data['earned_premium'],
'Incurred Claims as on ('.date('d-m-Y', strtotime($rfq_data['incurred_claims_date'])).')' => formatIndianCurrency($rfq_data['incurred_claims']), 'Incurred Claims as on (' . date('d-m-Y', strtotime($rfq_data['incurred_claims_date'])) . ')' => formatIndianCurrency($rfq_data['incurred_claims']),
'Annualised Claims' => formatIndianCurrency($rfq_data['annualised_claims']), 'Annualised Claims' => formatIndianCurrency($rfq_data['annualised_claims']),
'Incurred Claims Ratio' => $rfq_data['incurred_claims_ratio']." %", 'Incurred Claims Ratio' => $rfq_data['incurred_claims_ratio'] . " %",
'Earned Claims Ratio' => $rfq_data['earned_claims_ratio']." %", 'Earned Claims Ratio' => $rfq_data['earned_claims_ratio'] . " %",
]; ];
} else if (in_array( $rfq_data['policy_type_id'], [1, 6, 7])) { } else if (in_array($rfq_data['policy_type_id'], [1, 6, 7])) {
$lead_data = [ $lead_data = [
'Insured' => $rfq_data['client_name'], 'Insured' => $rfq_data['client_name'],
'No of Employees at Renewal' => $rfq_data['renewal_emp_count'], 'No of Employees at Renewal' => $rfq_data['renewal_emp_count'],
@ -1296,6 +1296,7 @@ class LeadsController extends BaseController
list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2); list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
$data = $this->transformProposelData($data, $proposal_key, $insurer_key); $data = $this->transformProposelData($data, $proposal_key, $insurer_key);
$is_placement = true; $is_placement = true;
$sheetName = 'Placement';
} }
} else if ($type == 1) { } else if ($type == 1) {
$sheetName = 'RFQ'; $sheetName = 'RFQ';
@ -1400,7 +1401,7 @@ class LeadsController extends BaseController
]); ]);
$subheader_count = array_sum(array_map(fn($header) => count($header['subHeaders']), $data['table_data']['headers'])); $subheader_count = array_sum(array_map(fn($header) => count($header['subHeaders']), $data['table_data']['headers']));
if($is_placement == false){ if ($is_placement == false) {
$subheader_count = $subheader_count - 2; $subheader_count = $subheader_count - 2;
} }
@ -1423,9 +1424,9 @@ class LeadsController extends BaseController
$sheet->mergeCells($mergeRange); $sheet->mergeCells($mergeRange);
$rowNumber_for_remove_quote_asked = $rowNumber; $rowNumber_for_remove_quote_asked = $rowNumber;
$rowNumber = $rowNumber + 1; $rowNumber = $rowNumber + 1;
if($type == 2){ if ($type == 2) {
$subHeaderRow = $rowNumber + 1; $subHeaderRow = $rowNumber + 1;
}else{ } else {
$subHeaderRow = $rowNumber_for_remove_quote_asked; $subHeaderRow = $rowNumber_for_remove_quote_asked;
} }
$columnLetter = 'A'; $columnLetter = 'A';
@ -1449,9 +1450,9 @@ class LeadsController extends BaseController
$subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
// Set parent header value // Set parent header value
if($is_placement == true && !in_array($header['parentHeader'] , ['Particulars', 'S.No.'])){ if ($is_placement == true && !in_array($header['parentHeader'], ['Particulars', 'S.No.'])) {
$sheet->setCellValue("{$startColumn}{$rowNumber}", "Terms"); $sheet->setCellValue("{$startColumn}{$rowNumber}", "Terms");
}else{ } else {
$sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']); $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']);
} }
$sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([ $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([
@ -1473,7 +1474,7 @@ class LeadsController extends BaseController
// Add subheaders // Add subheaders
foreach ($header['subHeaders'] as $subHeader) { foreach ($header['subHeaders'] as $subHeader) {
if($type == 2 && $is_placement == false){ if ($type == 2 && $is_placement == false) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
} }
@ -1483,7 +1484,7 @@ class LeadsController extends BaseController
$sheet->getColumnDimension('A')->setWidth(10); $sheet->getColumnDimension('A')->setWidth(10);
} }
if($is_placement == false){ if ($is_placement == false) {
$sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([ $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
'alignment' => [ 'alignment' => [
@ -1513,9 +1514,9 @@ class LeadsController extends BaseController
$sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height
$sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height
if($is_placement == true){ if ($is_placement == true) {
$rowNumber = $subHeaderRow; $rowNumber = $subHeaderRow;
}else{ } else {
$rowNumber = $subHeaderRow + 2; $rowNumber = $subHeaderRow + 2;
} }
// dd($rowNumber); // dd($rowNumber);
@ -1591,9 +1592,9 @@ class LeadsController extends BaseController
$rowNumber++; $rowNumber++;
} }
if($is_placement == true){ if ($is_placement == true) {
$prevColumn3 = $this->getPreviousColumn($columnLetter); $prevColumn3 = $this->getPreviousColumn($columnLetter);
}else{ } else {
$prevColumn3 = $this->getPreviousColumn($columnLetter, 2); $prevColumn3 = $this->getPreviousColumn($columnLetter, 2);
} }
$premiumRange = "B" . ($rowNumber - 4) . ":" . "{$prevColumn3}" . ($rowNumber - 1); $premiumRange = "B" . ($rowNumber - 4) . ":" . "{$prevColumn3}" . ($rowNumber - 1);
@ -1612,13 +1613,13 @@ class LeadsController extends BaseController
//set imgage and align the row and column //set imgage and align the row and column
// Kint::dump($columnLetter); // Kint::dump($columnLetter);
if($type == 2){ if ($type == 2) {
if($is_placement == true){ if ($is_placement == true) {
$columnLetter_img = $this->getPreviousColumn($columnLetter); $columnLetter_img = $this->getPreviousColumn($columnLetter);
}else{ } else {
$columnLetter_img = $this->getPreviousColumn($columnLetter, 2); $columnLetter_img = $this->getPreviousColumn($columnLetter, 2);
} }
}else{ } else {
$columnLetter_img = $this->getPreviousColumn($columnLetter); $columnLetter_img = $this->getPreviousColumn($columnLetter);
} }
// dd($columnLetter_img); // dd($columnLetter_img);
@ -1709,7 +1710,7 @@ class LeadsController extends BaseController
// Set filename // Set filename
$string = ($type == 2) ? ( $is_placement == true ? 'Placement' : 'QCR') : 'RFQ'; $string = ($type == 2) ? ($is_placement == true ? 'Placement' : 'QCR') : 'RFQ';
$current_year = date('Y'); $current_year = date('Y');
$next_year = $current_year + 1; $next_year = $current_year + 1;
$policy_year = "$current_year-$next_year"; $policy_year = "$current_year-$next_year";
@ -1817,7 +1818,7 @@ class LeadsController extends BaseController
['file_path' => WRITEPATH . 'uploads/lead_files/' . $lead_data['file_name'], 'sheets' => [0, 1]], ['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/' .$lead_data['file_name']; $outputPath = WRITEPATH . 'uploads/lead_files/' . $lead_data['file_name'];
$result_merge = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath); $result_merge = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath);
if ($result_merge) { if ($result_merge) {
// Call the delete function after the file is successfully created // Call the delete function after the file is successfully created
@ -2206,9 +2207,9 @@ class LeadsController extends BaseController
$attachment_file_ids = $params['selected_attachment_files']; $attachment_file_ids = $params['selected_attachment_files'];
$from_mail = getenv('email.fromEmail'); $from_mail = getenv('email.fromEmail');
if(in_array($recipient_type ,['placement', 'insurer', 'internal'])){ if (in_array($recipient_type, ['placement', 'insurer', 'internal'])) {
$from_mail = "im@nhanceindia.in"; $from_mail = "im@nhanceindia.in";
}else if(in_array($recipient_type, ['client'])){ } else if (in_array($recipient_type, ['client'])) {
$from_mail = "bs@nhanceindia.in"; $from_mail = "bs@nhanceindia.in";
} }
@ -2262,7 +2263,7 @@ class LeadsController extends BaseController
// Handle case where param_cc_mail is not valid // Handle case where param_cc_mail is not valid
// return $this->respond(['status' => 'failed','code' => 400,'data' => '','message' => 'CC mail not found!'], 200); // return $this->respond(['status' => 'failed','code' => 400,'data' => '','message' => 'CC mail not found!'], 200);
} }
}else if($recipient_type == 'placement'){ } else if ($recipient_type == 'placement') {
$cc_mails = isset($params['cc']) ? json_decode($params['cc'], true) : ""; $cc_mails = isset($params['cc']) ? json_decode($params['cc'], true) : "";
} }
@ -2354,7 +2355,6 @@ class LeadsController extends BaseController
->where(['contact_type' => 'insurer', 'is_active' => 1]) ->where(['contact_type' => 'insurer', 'is_active' => 1])
->whereIn('id', $recipient_mail) ->whereIn('id', $recipient_mail)
->findAll(); ->findAll();
} else if ($recipient_type == 'client') { } else if ($recipient_type == 'client') {
$mailIDS = explode(',', $params['contact_mail']); $mailIDS = explode(',', $params['contact_mail']);
@ -2387,9 +2387,9 @@ class LeadsController extends BaseController
foreach ($recipient_data as $recipient) { foreach ($recipient_data as $recipient) {
$message = $original_message; $message = $original_message;
$message = str_replace("{{RECIPIENT_NAME}}", $recipient['name'] != "" ? $recipient['name'] :" ", $message); $message = str_replace("{{RECIPIENT_NAME}}", $recipient['name'] != "" ? $recipient['name'] : " ", $message);
$message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'] != "" ? $lead_data['client_name'] : "", $message); $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'] != "" ? $lead_data['client_name'] : "", $message);
$message = str_replace("{{POLICY_LONG_NAME}}",$lead_data['long_name'] != ""? $lead_data['long_name'] : "", $message); $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'] != "" ? $lead_data['long_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("{{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) ?? '--'; $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--';
@ -2422,7 +2422,7 @@ class LeadsController extends BaseController
'placement_date' => !empty($params['placement_date']) ? change_date_format($params['placement_date']) : null, 'placement_date' => !empty($params['placement_date']) ? change_date_format($params['placement_date']) : null,
'payment_date' => !empty($params['payment_date']) ? change_date_format($params['payment_date']) : null, 'payment_date' => !empty($params['payment_date']) ? change_date_format($params['payment_date']) : null,
'utr_no' => $params['utr_no'] ?? null, 'utr_no' => $params['utr_no'] ?? null,
'is_cd' => $params['is_cd'] ?? null , 'is_cd' => $params['is_cd'] ?? null,
'premium_amount' => $params['premium_amount'] ?? null, 'premium_amount' => $params['premium_amount'] ?? null,
'total_amount' => $params['total_amount'] ?? null, 'total_amount' => $params['total_amount'] ?? null,
'cd_amount' => $params['cd_amount'] ?? null, 'cd_amount' => $params['cd_amount'] ?? null,
@ -2432,42 +2432,41 @@ class LeadsController extends BaseController
$this->leadsModel->where('id', $lead_id)->set($data)->update(); $this->leadsModel->where('id', $lead_id)->set($data)->update();
if(isset($params['installments']) && !empty($params['installments'])){ if (isset($params['installments']) && !empty($params['installments'])) {
$installment_data = json_decode($params['installments'], true); $installment_data = json_decode($params['installments'], true);
if(!empty($installment_data)){ if (!empty($installment_data)) {
foreach ($installment_data as $key => $value) { foreach ($installment_data as $key => $value) {
// print_r($value);die // print_r($value);die
$value['payment_date'] = !empty($value['payment_date']) && strtotime($value['payment_date']) $value['payment_date'] = !empty($value['payment_date']) && strtotime($value['payment_date'])
? date('Y/m/d', strtotime($value['payment_date'])) ? date('Y/m/d', strtotime($value['payment_date']))
: null; : null;
if(isset($value['id']) && !empty($value['id'])){ if (isset($value['id']) && !empty($value['id'])) {
$this->leadInstallmentPaymentDetails->where('id', $value['id'])->set($value)->update(); $this->leadInstallmentPaymentDetails->where('id', $value['id'])->set($value)->update();
}else{ } else {
$this->leadInstallmentPaymentDetails->insert($value); $this->leadInstallmentPaymentDetails->insert($value);
} }
} }
} }
} }
} }
if ($recipient_type == 'client') { if ($recipient_type == 'client') {
$this->leadsModel $this->leadsModel
->where('id', $lead_id) ->where('id', $lead_id)
->whereNotIn('status', ['lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) ->whereNotIn('status', ['lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections'])
->set(['status' => "qcr_sent"]) ->set(['status' => "qcr_sent"])
->update(); ->update();
} }
if ($recipient_type == 'insurer') { if ($recipient_type == 'insurer') {
$this->leadsModel $this->leadsModel
->where('id', $lead_id) ->where('id', $lead_id)
->whereNotIn('status', ['qcr_created', 'qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) ->whereNotIn('status', ['qcr_created', 'qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections'])
->set(['status' => "rfq_sent"]) ->set(['status' => "rfq_sent"])
->update(); ->update();
} }
//delete attachment file //delete attachment file
@ -2789,7 +2788,7 @@ class LeadsController extends BaseController
return $client_id; return $client_id;
} catch (\Throwable $e) { } catch (\Throwable $e) {
$this->myLogger->logme('error','createClientWithLeadData failed'); $this->myLogger->logme('error', 'createClientWithLeadData failed');
return false; return false;
} }
} }
@ -2809,7 +2808,7 @@ class LeadsController extends BaseController
return $branch_id; return $branch_id;
} catch (\Throwable $e) { } catch (\Throwable $e) {
$this->myLogger->logme('error','createClientBranchAndContactWithLeadData failed'); $this->myLogger->logme('error', 'createClientBranchAndContactWithLeadData failed');
return false; return false;
} }
} }
@ -2827,7 +2826,7 @@ class LeadsController extends BaseController
return $client_policy_id; return $client_policy_id;
} catch (\Throwable $e) { } catch (\Throwable $e) {
$this->myLogger->logme('error','createClientPolicyWithLeadData failed'); $this->myLogger->logme('error', 'createClientPolicyWithLeadData failed');
return false; return false;
} }
} }
@ -2931,7 +2930,7 @@ class LeadsController extends BaseController
// log_message('error', 'Converted JSON: ' . json_encode($converted_json)); // log_message('error', 'Converted JSON: ' . json_encode($converted_json));
return $this->convertQCRJsonToPolicyTerms($converted_json, $data['policy_type_id'], $proposel_data['proposel_name'], $proposel_data['insurer_name']); return $this->convertQCRJsonToPolicyTerms($converted_json, $data['policy_type_id'], $proposel_data['proposel_name'], $proposel_data['insurer_name']);
} catch (\Throwable $e) { } catch (\Throwable $e) {
$this->myLogger->logme('error','preparePolicyTermsFromRFQ'); $this->myLogger->logme('error', 'preparePolicyTermsFromRFQ');
return null; return null;
} }
} }
@ -3078,7 +3077,6 @@ class LeadsController extends BaseController
if (strpos($tableGroup['tableId'], 'summary') !== false) { if (strpos($tableGroup['tableId'], 'summary') !== false) {
$policy_type = explode('_', $tableGroup['tableId'])[0] ?? ''; $policy_type = explode('_', $tableGroup['tableId'])[0] ?? '';
$finalItem = $policy_type . ' - ' . $item; $finalItem = $policy_type . ' - ' . $item;
} }
$terms_array[$finalItem] = $value; $terms_array[$finalItem] = $value;
} }
@ -3322,7 +3320,7 @@ class LeadsController extends BaseController
3 => 'rfq/gmc', 3 => 'rfq/gmc',
4 => 'rfq/gmc', 4 => 'rfq/gmc',
5 => 'rfq/gmc', 5 => 'rfq/gmc',
17=> 'rfq/burglary', 17 => 'rfq/burglary',
22 => 'rfq/car', 22 => 'rfq/car',
23 => 'rfq/cpm', 23 => 'rfq/cpm',
24 => 'rfq/cyber_crime', 24 => 'rfq/cyber_crime',
@ -3349,7 +3347,11 @@ class LeadsController extends BaseController
public function constructNonEbExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null) public function constructNonEbExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null)
{ {
$rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type); $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type);
$claim_history = $rfq_data['claim_history'];
// dd($claim_history);
$lead_data = json_decode($rfq_data['custom_fields'], true) ?? []; $lead_data = json_decode($rfq_data['custom_fields'], true) ?? [];
$lead_data['claim_history'] = $claim_history;
// dd($lead_data);
if (!is_array($lead_data)) { if (!is_array($lead_data)) {
$lead_data = []; $lead_data = [];
} }
@ -3359,29 +3361,67 @@ class LeadsController extends BaseController
if (isset($rfq_data['registration_json']) && !empty($rfq_data['registration_json'])) { if (isset($rfq_data['registration_json']) && !empty($rfq_data['registration_json'])) {
$policy_registration_data = json_decode($rfq_data['registration_json'], true); $policy_registration_data = json_decode($rfq_data['registration_json'], true);
} }
// dd($policy_registration_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); $jsonData = json_decode($rfq_data['json'], true);
$proposalData = end($jsonData); $proposalData = end($jsonData);
array_pop($jsonData); array_pop($jsonData);
$length = 0;
// dd($jsonData[0]['table_data']['headers']);
foreach ($jsonData as $key => $data) {
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);
foreach ($data['table_data']['headers'] as $header) {
if ($header['parentHeader'] != "Action") {
foreach ($header['subHeaders'] as $subHeader) {
// Kint::dump($header['parentHeader']);
// Kint::dump($subHeader);
$length++;
}
}
}
// dd($length);
$columnLetterForTitle = Coordinate::stringFromColumnIndex($length - 1);
$columnLetterForImage = Coordinate::stringFromColumnIndex($length);
// dd($columnLetter);
$sheetName = 'Worksheet';
if ($type == 2) {
$sheetName = 'QCR';
if ($propsal_and_insurer !== null) {
$sheetName = 'Placement';
}
} else if ($type == 1) {
$sheetName = 'RFQ';
}
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(); $sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle($sheetName);
// Start with lead_data at the top // Start with lead_data at the top
$rowNumber = 1; $rowNumber = 1;
$title = "Nhance India Insurance Broking Pvt Ltd"; $title = "Nhance India Insurance Broking Pvt Ltd";
$mergeRange1 = "A{$rowNumber}:B{$rowNumber}"; $mergeRange1 = "A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}";
$sheet->mergeCells($mergeRange1); $sheet->mergeCells($mergeRange1);
$sheet->setCellValue("A{$rowNumber}", $title); $sheet->setCellValue("A{$rowNumber}", $title);
$sheet->getStyle("A{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}")->applyFromArray([
@ -3398,24 +3438,25 @@ class LeadsController extends BaseController
// Calculate title width // Calculate title width
$maxWidthA = mb_strlen($title); $maxWidthA = mb_strlen($title);
// dd($columnLetterForImage);
// Set column width to fit the image properly // Set column width to fit the image properly
$sheet->getColumnDimension('C')->setWidth(20); // Adjust as needed $sheet->getColumnDimension($columnLetterForImage)->setWidth(20); // Adjust as needed
$sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed $sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed
$drawing = new Drawing(); $drawing = new Drawing();
$path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path
$drawing->setPath($path); $drawing->setPath($path);
$drawing->setCoordinates("C{$rowNumber}"); // Set position in column C $drawing->setCoordinates("{$columnLetterForImage}{$rowNumber}"); // Set position in column C
$drawing->setHeight(35); // Adjust image height $drawing->setHeight(35); // Adjust image height
// Center align the image in the cell // Center align the image in the cell
$drawing->setOffsetX(30); // Adjust horizontal offset $drawing->setOffsetX(50); // Adjust horizontal offset
$drawing->setOffsetY(5); // Adjust vertical offset $drawing->setOffsetY(5); // Adjust vertical offset
$drawing->setWorksheet($sheet); $drawing->setWorksheet($sheet);
// Apply center alignment to the cell // Apply center alignment to the cell
$sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyle("{$columnLetterForImage}{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); $sheet->getStyle("{$columnLetterForImage}{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$rowNumber++; $rowNumber++;
@ -3424,15 +3465,31 @@ class LeadsController extends BaseController
//Lead Data //Lead Data
foreach ($lead_data as $key => $value) { foreach ($lead_data as $key => $value) {
// if ($key == 'risk_location') {
// $key == 'risk_details';
// }
// Kint::dump($key);
// Kint::dump($value);
$formattedKey = ucwords(str_replace('_', ' ', $key)); $formattedKey = ucwords(str_replace('_', ' ', $key));
$formattedKey = $formattedKey == "Risk Location" ? "Risk Details" : $formattedKey;
$formattedKey = $formattedKey == "Address" ? "Communication Address" : $formattedKey;
$formattedValue = ucwords(str_replace("_", " ", $value));
if ($key == "claim_history") {
$formattedValue = $value == "1" ? "Yes" : "No";
}
// Kint::dump($formattedValue);
// Merge A:B for key // Merge A:B for key
$mergeRangeKey = "A{$rowNumber}:B{$rowNumber}"; $mergeRangeKey = "A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}";
$sheet->mergeCells($mergeRangeKey); $sheet->mergeCells($mergeRangeKey);
// Set values in merged cells // Set values in merged cells
$sheet->setCellValue("A{$rowNumber}", $formattedKey); $sheet->setCellValue("A{$rowNumber}", $formattedKey);
$sheet->setCellValue("C{$rowNumber}", $value); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", $formattedValue);
// Apply styles for alignment and bold text in A:B // Apply styles for alignment and bold text in A:B
$sheet->getStyle($mergeRangeKey)->applyFromArray([ $sheet->getStyle($mergeRangeKey)->applyFromArray([
@ -3453,16 +3510,22 @@ class LeadsController extends BaseController
// Track max width needed for columns // Track max width needed for columns
$maxWidthA = max($maxWidthA, mb_strlen($formattedKey)); // Consider title and keys $maxWidthA = max($maxWidthA, mb_strlen($formattedKey)); // Consider title and keys
$maxWidthB = max($maxWidthB, mb_strlen((string) $value)); $maxWidthB = max($maxWidthB, mb_strlen((string) $value));
// if (!empty($policy_registration_data)) {
// dd($policy_registration_data);
// }
$rowNumber++; $rowNumber++;
} }
// die();
// Set column width based on max content length (adjusted for padding) // Set column width based on max content length (adjusted for padding)
$sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2); $sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2);
$sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2); // $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2);
$sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); // $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2);
$rowNumber += 1; // $rowNumber += 1;
//Policy Registration //Policy Registration
if (!empty($policy_registration_data)) { if (!empty($policy_registration_data)) {
foreach ($policy_registration_data as $key => $value) { foreach ($policy_registration_data as $key => $value) {
@ -3470,7 +3533,7 @@ class LeadsController extends BaseController
$startRow = $rowNumber; // Track where the block starts $startRow = $rowNumber; // Track where the block starts
// Title Row // Title Row
$titleMergeRangeKey = "A{$rowNumber}:C{$rowNumber}"; $titleMergeRangeKey = "A{$rowNumber}:{$columnLetterForImage}{$rowNumber}";
$sheet->mergeCells($titleMergeRangeKey); $sheet->mergeCells($titleMergeRangeKey);
$sheet->setCellValue("A{$rowNumber}", ucfirst($key) . " Policy Details"); $sheet->setCellValue("A{$rowNumber}", ucfirst($key) . " Policy Details");
@ -3491,9 +3554,9 @@ class LeadsController extends BaseController
// Policy Type // Policy Type
if (isset($value['policyType'])) { if (isset($value['policyType'])) {
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Policy Type"); $sheet->setCellValue("A{$rowNumber}", "Policy Type");
$sheet->setCellValue("C{$rowNumber}", $value['policyType']); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", $value['policyType']);
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}:C{$rowNumber}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
@ -3505,9 +3568,9 @@ class LeadsController extends BaseController
$rowNumber++; $rowNumber++;
} else { } else {
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Policy Type"); $sheet->setCellValue("A{$rowNumber}", "Policy Type");
$sheet->setCellValue("C{$rowNumber}", ucfirst($key) . " Policy"); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", ucfirst($key) . " Policy");
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}:C{$rowNumber}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
@ -3523,9 +3586,9 @@ class LeadsController extends BaseController
// Type of Business & Nature of Business // Type of Business & Nature of Business
if (isset($value['productSelection']) && !empty($value['productSelection'])) { if (isset($value['productSelection']) && !empty($value['productSelection'])) {
// Type of Business // Type of Business
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Type of Business"); $sheet->setCellValue("A{$rowNumber}", "Type of Business");
$sheet->setCellValue("C{$rowNumber}", $this->buisnessType[$value['productSelection']['type_of_buisness']] ?? ''); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", $this->buisnessType[$value['productSelection']['type_of_buisness']] ?? '');
$sheet->getStyle("A{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
@ -3538,9 +3601,9 @@ class LeadsController extends BaseController
$rowNumber++; $rowNumber++;
// Nature of Business // Nature of Business
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Nature of Business"); $sheet->setCellValue("A{$rowNumber}", "Nature of Business");
$sheet->setCellValue("C{$rowNumber}", $value['productSelection']['buisness_nature'] ?? ''); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", $value['productSelection']['buisness_nature'] ?? '');
$sheet->getStyle("A{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
@ -3555,9 +3618,9 @@ class LeadsController extends BaseController
if (isset($value['policyDetails']) && !empty($value['policyDetails'])) { if (isset($value['policyDetails']) && !empty($value['policyDetails'])) {
// Type of Business // Type of Business
$sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Terrorism"); $sheet->setCellValue("A{$rowNumber}", "Terrorism");
$sheet->setCellValue("C{$rowNumber}", ucfirst($value['policyDetails']['terrorism'] ?? 'No')); $sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", ucfirst($value['policyDetails']['terrorism'] ?? 'No'));
$sheet->getStyle("A{$rowNumber}")->applyFromArray([ $sheet->getStyle("A{$rowNumber}")->applyFromArray([
'font' => ['bold' => true], 'font' => ['bold' => true],
@ -3568,13 +3631,40 @@ class LeadsController extends BaseController
]); ]);
$rowNumber++; $rowNumber++;
}
if (!empty($value['locations'])) {
foreach ($value['locations'] as $index => $location) {
// Merge title cell
$sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}");
$sheet->setCellValue("A{$rowNumber}", "Risk " . ($location['select_location'] ?? 'Unknown'));
// Clean and safe address string
$address1 = ucfirst($location['policyRisk']['address1'] ?? '');
$address2 = ucfirst($location['policyRisk']['address2'] ?? '');
$pinCode = $location['policyRisk']['pin_code'] ?? 'No';
$fullAddress = "{$address1}, {$address2}, {$pinCode}";
$sheet->setCellValue("{$columnLetterForImage}{$rowNumber}", $fullAddress);
// Style the title cell
$sheet->getStyle("A{$rowNumber}")->applyFromArray([
'font' => ['bold' => true],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
],
]);
$rowNumber++;
}
} }
$endRow = $rowNumber - 1; // Block ends at previous row
$endRow = $rowNumber; // Block ends at previous row
// Apply border to the whole block // Apply border to the whole block
$sheet->getStyle("A{$startRow}:C{$endRow}")->applyFromArray([ $sheet->getStyle("A{$startRow}:{$columnLetterForImage}{$endRow}")->applyFromArray([
'borders' => [ 'borders' => [
'allBorders' => [ 'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
@ -3583,8 +3673,9 @@ class LeadsController extends BaseController
], ],
]); ]);
$rowNumber += 1; // Add space before the next block // $rowNumber += 1; // Add space before the next block
} }
$rowNumber--;
// die(); // die();
} }
@ -3645,7 +3736,7 @@ class LeadsController extends BaseController
$startColumn = $columnLetter; // Start of the current header range $startColumn = $columnLetter; // Start of the current header range
$subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
// Kint::dump($subHeaderCount);
// Set parent header value // Set parent header value
$sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']); $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']);
$sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([ $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([
@ -3668,6 +3759,7 @@ class LeadsController extends BaseController
$endColumn = $startColumn; // No merge needed if only one subheader $endColumn = $startColumn; // No merge needed if only one subheader
} }
// Kint::dump($header);
// Add subheaders // Add subheaders
foreach ($header['subHeaders'] as $subHeader) { foreach ($header['subHeaders'] as $subHeader) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
@ -3700,7 +3792,6 @@ class LeadsController extends BaseController
], ],
]); ]);
// Apply border to the header range // Apply border to the header range
$prevColumn4 = $this->getPreviousColumn($columnLetter); $prevColumn4 = $this->getPreviousColumn($columnLetter);
$headerRange = "A{$rowNumber}:" . "{$prevColumn4}" . "{$subHeaderRow}"; $headerRange = "A{$rowNumber}:" . "{$prevColumn4}" . "{$subHeaderRow}";
@ -3820,7 +3911,7 @@ class LeadsController extends BaseController
} }
$lastRow = count($lead_data) + 1; $lastRow = count($lead_data) + 1;
$leadRange = "A1:C{$lastRow}"; $leadRange = "A1:{$columnLetterForImage}{$lastRow}";
$sheet->getStyle($leadRange)->applyFromArray([ $sheet->getStyle($leadRange)->applyFromArray([
'borders' => [ 'borders' => [
@ -3832,6 +3923,70 @@ class LeadsController extends BaseController
]); ]);
} }
if (!empty($rfq_data['fin_years_claims'])) {
$claim_details = json_decode($rfq_data['fin_years_claims'], true) ?? [];
if (!empty($claim_details['finyear'])) {
// Get headers dynamically
$headers = array_map(function ($key) {
return ucwords(str_replace('_', ' ', $key));
}, array_keys($claim_details['finyear'][0]));
$newSheet = new Worksheet($spreadsheet, 'Claims Experience');
$spreadsheet->addSheet($newSheet);
$spreadsheet->setActiveSheetIndexByName('Claims Experience');
$sheet = $spreadsheet->getActiveSheet();
// Set headers
$sheet->fromArray($headers, NULL, 'A1');
// Apply background color and bold style to headers
$headerCellRange = 'A1:' . chr(64 + count($headers)) . '1'; // e.g., A1:G1
$sheet->getStyle($headerCellRange)->getFont()->setBold(true);
$sheet->getStyle($headerCellRange)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('ADD8E6');
// Add border to header
$sheet->getStyle($headerCellRange)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
// Fill data and apply borders
$row = 2;
foreach ($claim_details['finyear'] as $record) {
$col = 'A';
foreach ($record as $value) {
$sheet->setCellValue($col . $row, $value);
$col++;
}
// Apply border to each data row
$sheet->getStyle('A' . $row . ':' . chr(64 + count($headers)) . $row)
->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
$row++;
}
// Auto-size all columns based on header count
for ($i = 0; $i < count($headers); $i++) {
$colLetter = chr(65 + $i); // 'A', 'B', etc.
$sheet->getColumnDimension($colLetter)->setAutoSize(true);
}
// Enable wrap text for all cells
$maxColLetter = chr(64 + count($headers)); // Last column letter
$sheet->getStyle("A2:{$maxColLetter}{$row}")->getAlignment()->setWrapText(true);
// Optional: center vertically for neatness
$sheet->getStyle("A2:{$maxColLetter}{$row}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
// Optional: Make row height auto (helps when wrap text is on)
for ($i = 2; $i < $row; $i++) {
$sheet->getRowDimension($i)->setRowHeight(-1);
}
}
}
// dd($rowNumber); // dd($rowNumber);
// Set filename // Set filename
$string = ($type == 2) ? 'QCR' : 'RFQ'; $string = ($type == 2) ? 'QCR' : 'RFQ';
@ -3994,11 +4149,11 @@ class LeadsController extends BaseController
// Ensure 'subHeaders' exists and is an array before filtering // Ensure 'subHeaders' exists and is an array before filtering
if (isset($header['subHeaders']) && is_array($header['subHeaders'])) { if (isset($header['subHeaders']) && is_array($header['subHeaders'])) {
$header['subHeaders'] = array_filter($header['subHeaders'], function ($subHeader) { $header['subHeaders'] = array_filter($header['subHeaders'], function ($subHeader) {
return in_array($subHeader, ['Quote asked', '-'], true); return in_array($subHeader, ['Sum Insured', '-'], true);
}); });
} }
} }
// Kint::dump($header);
//Remove insurer Row wise data for RFQ //Remove insurer Row wise data for RFQ
$groupedRows = []; $groupedRows = [];
foreach ($first_json['table_data']['data'] as &$row) { foreach ($first_json['table_data']['data'] as &$row) {
@ -4007,7 +4162,7 @@ class LeadsController extends BaseController
$row['data'] = array_filter( $row['data'] = array_filter(
$row['data'], $row['data'],
function ($item) { function ($item) {
return in_array($item['subth'], ['Sum Insured', '-',"Liability Limit"]); return in_array($item['subth'], ['Sum Insured', '-', "Liability Limit"]);
} }
); );

View File

@ -97,6 +97,7 @@ class LeadsModel extends Model
'is_installment', 'is_installment',
'no_of_installment', 'no_of_installment',
'is_policy_created', 'is_policy_created',
'claim_history'
]; ];

View File

@ -300,7 +300,8 @@
<div id="appendArea"></div> <div id="appendArea"></div>
<div id="appendAreaForClaim"></div> <div id="appendAreaForClaim">
</div>
<hr> <hr>
@ -528,6 +529,9 @@
console.log('finyearJsonString', finyearJsonString); console.log('finyearJsonString', finyearJsonString);
formData.append('fin_years_claims', finyearJsonString); formData.append('fin_years_claims', finyearJsonString);
cliam_history_status = $("#claim_history").prop("checked") ? 1 : 0;
formData.append('claim_history',cliam_history_status);
// Append the JSON string to the FormData object // Append the JSON string to the FormData object
formData.append('salse_person_id', jsonString); formData.append('salse_person_id', jsonString);
@ -879,9 +883,15 @@
function appendThreeYearsClaims() { function appendThreeYearsClaims() {
let claimsFields = ` let claimsFields = `${!document.querySelector('#claim_history') ? `<div class="custom-control custom-switch">
<input type="checkbox" onchange="claimHistoryToggle()" class="custom-control-input" id="claim_history" name="claim_history" checked />
<label class="custom-control-label" for="claim_history">Claims History</label>
</div><br>`: ``}`
<div class="row claim-row"> claimsFields += `
<div id = "claimHistoryRow" class="row claim-row">
<div class="form-group col-md-2"> <div class="form-group col-md-2">
<label for="first_year_${increment}">Year<span class="text-danger">*</span></label> <label for="first_year_${increment}">Year<span class="text-danger">*</span></label>
@ -990,4 +1000,22 @@
return jsonString; return jsonString;
} }
function claimHistoryToggle() {
cliam_history_status = $("#claim_history").prop("checked") ? 1 : 0;
// alert(cliam_history_status);
if (cliam_history_status == 1) {
if ($(".claim-row").length > 0) {
// Rows already exist, just show them
$(".claim-row").show();
} else {
// No rows yet, so create them
appendThreeYearsClaims();
}
} else {
$(".claim-row").hide();
}
}
</script> </script>

View File

@ -1,6 +1,14 @@
<?php if(isset($lead_edit_data)) { <?php if(isset($lead_edit_data)) {
$claims = !empty($lead_edit_data['fin_years_claims_array']) ? $lead_edit_data['fin_years_claims_array'] : [ ['year' => '', 'claim_amount' => '', 'status' => '', 'claim_type' => '', 'cause_of_death' => '', 'death_date' => ''] ]; $claims = !empty($lead_edit_data['fin_years_claims_array']) ? $lead_edit_data['fin_years_claims_array'] : [ ['year' => '', 'claim_amount' => '', 'status' => '', 'claim_type' => '', 'cause_of_death' => '', 'death_date' => ''] ];
foreach ($claims as $key => $value) { ?> ?>
<div class="custom-control custom-switch">
<input type="checkbox" onchange="claimHistoryToggle()" class="custom-control-input" id="claim_history" name="claim_history" <?= $lead_edit_data['claim_history'] == 1 ? "checked" : "" ?> />
<label class="custom-control-label" for="claim_history">Claims History</label>
</div><br>
<?php
if ($lead_edit_data['claim_history'] == 1) {
foreach ($claims as $key => $value) { ?>
<div class="row claim-row"> <div class="row claim-row">
<div class="form-group col-md-2"> <div class="form-group col-md-2">
@ -51,5 +59,5 @@
</div> </div>
</div> </div>
<?php } ?> <?php } } ?>
<?php } ?> <?php } ?>