CHANGE_RFQ_NON_EB_EXPORT_EXCEL_AND_MAILS ; RV

This commit is contained in:
VENKATESHWARAN 2025-03-20 08:52:44 +05:30
parent 6875825a8f
commit cf39ce94df
5 changed files with 1467 additions and 333 deletions

View File

@ -37,7 +37,7 @@ use Kint\Kint;
use App\Controllers\Jobs;
use App\Controllers\JobWorker;
use Google\Service\FactCheckTools\Resource\Claims;
class LeadsController extends BaseController
{
@ -558,6 +558,8 @@ class LeadsController extends BaseController
$data['userList'] = $this->userModel->getUserListForRFQ();
$data['lead_data'] = $lead_data;
// dd($data);
$mail_content = "
<p>Dear Sir,</p>
<p>Greetings From Nhance India!</p>
@ -575,12 +577,12 @@ class LeadsController extends BaseController
// dd($data);
if ($data['lead_id'] != 75){
if ($lead_data['lead_form_type'] == 1){
$this->loadLayout('view_rfq.php', $data);
return $this->loadLayout('view_rfq.php', $data);
}else{
$this->viewNonEBRFQ($id);
return $this->loadLayout('view_rfq_non_eb', $data);
}
@ -1731,7 +1733,14 @@ 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);
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'];
@ -2409,7 +2418,7 @@ class LeadsController extends BaseController
return $financialYears;
}
// ------------RFQ NON EB-----------------------------------------------------------------------------------------
// ------------ RFQ NON EB FUNCTIONS-----------------------------------------------------------------------------------------
public function rfqNonEB()
{
@ -2543,6 +2552,12 @@ class LeadsController extends BaseController
) ?? "";
}
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);
@ -2550,7 +2565,6 @@ class LeadsController extends BaseController
return $this->loadLayout('leads_form_handler', $data);
}
public function getPolicyTypeFields()
{
@ -2585,83 +2599,23 @@ class LeadsController extends BaseController
return isset($viewMap[$policy_type_id]) ? view($viewMap[$policy_type_id], $data) : "";
}
// public function generateViewPageHtml($policy_type_id, $data = [])
// {
// $data['insurer'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
// $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
// ------------------- RFQ NON EB EXCEL EXPORT FUNCTION ---------------------------------------------------------------------------------------
// $html = "";
// if(in_array($policy_type_id, [1,6,7])){
// $html = view('rfq/gpa', $data);
// }else if(in_array($policy_type_id, [2,3,4,5])) {
// $html = view('rfq/gmc', $data);
// }else if($policy_type_id == 22) {
// $html = view('rfq/car');
// }else if($policy_type_id == 23) {
// $html = view('rfq/cpm');
// }else if($policy_type_id == 24) {
// $html = view('rfq/cyber_crime');
// }else if($policy_type_id == 25) {
// $html = view('rfq/do');
// }else if($policy_type_id == 27) {
// $html = view('rfq/eo');
// }else if($policy_type_id == 49) {
// $html = view('rfq/money');
// }else if($policy_type_id == 19) {
// $html = view('rfq/cgl');
// }else if($policy_type_id == 59) {
// $html = view('rfq/sfsp');
// }else if($policy_type_id == 63) {
// $html = view('rfq/wc');
// }else if($policy_type_id == 15) {
// $html = view('rfq/blu');
// }else if($policy_type_id == 16) {
// $html = view('rfq/bsu');
// }else if(in_array($policy_type_id, [44,45,46,47])) {
// $html = view('rfq/marine');
// }
// return $html;
// }
// ----------------------------------------------------------------------------------------------------------
//Construct excel file and save the file to the folder and return file path
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);
$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);
// dd($lead_data);
// dd($rfq_data, $lead_id, $type, $propsal_and_insurer);
// print_r($propsal_and_insurer); die;
// $data = json_decode($rfq_data['json'], true);
// $proposalData = end($data);
// array_pop($data);
// foreach ($data as $key => $value) {
// Kint::dump($value);
// }
// dd($data);
// if ($type == 2) {
// $data = $this->convertJsonForQCR($data, $type);
// if ($propsal_and_insurer !== null) {
// list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
// $data = $this->transformProposelData($data, $proposal_key, $insurer_key);
// }
// } else if ($type == 1) {
// $data = $this->convertJsonForQCR($data, $type);
// // dd($data);
// }
// dd($data);
$jsonData = json_decode($rfq_data['json'], true);
$proposalData = end($jsonData);
array_pop($jsonData);
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
@ -2732,11 +2686,11 @@ class LeadsController extends BaseController
]);
// Apply bold style to C column if the key is "Insured"
if ($key === "Insured") {
$sheet->getStyle("C{$rowNumber}")->applyFromArray([
'font' => ['bold' => true],
]);
}
// 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
@ -2749,257 +2703,212 @@ class LeadsController extends BaseController
$sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2);
$sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2);
$sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2);
$sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2);
$rowNumber += 2;
foreach ($jsonData as $key => $data) {
if ($type == 2) {
$data = $this->convertNonEbJsonForQCR($data, $type, $proposalData);
unset($data['proposalData']);
if ($propsal_and_insurer !== null) {
list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2);
$data = $this->transformProposelData($data, $proposal_key, $insurer_key);
}
} else if ($type == 1) {
$data = $this->convertNonEbJsonForQCR($data, $type, $proposalData);
unset($data['proposalData']);
}
// 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);
// // $rowNumber += 2;
if ($header['parentHeader'] == '') {
// $header['parentHeader'] = 'S.No.';
$sheet->getColumnDimension('A')->setWidth(10);
}
// // Add headers and subheaders
// $headers = $data['table_data']['headers'];
if ($header['parentHeader'] === 'Particulars') {
$sheet->getColumnDimension('B')->setWidth(60);
}
// $sheet->setCellValue("A{$rowNumber}", "Details of Coverage");
// $sheet->getStyle("A{$rowNumber}")->applyFromArray([
// 'font' => [
// 'bold' => true,
// ],
// 'fill' => [
// 'fillType' => Fill::FILL_SOLID,
// 'startColor' => ['rgb' => 'ADD8E6'],
// ],
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
// 'color' => ['argb' => 'FF000000'], // Black color
// ],
// ],
// ]);
// $subheader_count = array_sum(array_map(fn($header) => count($header['subHeaders']), $data['table_data']['headers']));
// $subheader_count = $subheader_count - 2;
// $headerCount = count($data['table_data']['headers']);
// $lastColumn = Coordinate::stringFromColumnIndex($subheader_count);
// // dd( $headerCount, $lastColumn);
if (strpos($header['parentHeader'], 'Proposal') === 0) {
$sheet->getColumnDimension('C')->setWidth(60);
$sheet->getColumnDimension('D')->setWidth(35);
}
// // Merge cells from A to the last column
// $mergeRange = "A{$rowNumber}:{$lastColumn}{$rowNumber}";
$startColumn = $columnLetter; // Start of the current header range
$subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
// $sheet->getStyle($mergeRange)->applyFromArray([
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
// 'color' => ['argb' => 'FF000000'], // Black color
// ],
// ],
// ]);
// 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'],
],
]);
// $sheet->mergeCells($mergeRange);
// $rowNumber = $rowNumber + 1;
// 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
}
// $subHeaderRow = $rowNumber + 1;
// $columnLetter = 'A';
// Add subheaders
foreach ($header['subHeaders'] as $subHeader) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
// foreach ($headers as $header) {
if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") {
$sheet->getColumnDimension($columnLetter)->setWidth(35);
} else {
$sheet->getColumnDimension('A')->setWidth(10);
}
// if (in_array($header['parentHeader'], ['Item Key', 'Action'])) {
// continue;
// }
$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
}
}
// if ($header['parentHeader'] === 'Sno') {
// $header['parentHeader'] = 'S.No.';
// $sheet->getColumnDimension('A')->setWidth(10);
// }
// 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
],
],
]);
// if ($header['parentHeader'] === 'Particulars') {
// $sheet->getColumnDimension('B')->setWidth(40);
// }
// Increase row height for headers and subheaders
$sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height
$sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height
// $startColumn = $columnLetter; // Start of the current header range
// $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header
$rowNumber = $subHeaderRow + 2;
$column_data = $data['table_data']['data'];
$serial_no = 1;
$maxColumnWidths = [];
// // 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,
// ],
// ]);
// Add table data rows
foreach ($column_data as $dataRow) {
// // 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
// }
$columnLetter = 'A';
// // Add subheaders
// foreach ($header['subHeaders'] as $subHeader) {
// $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
foreach ($dataRow['data'] as $cellData) {
// if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") {
// $sheet->getColumnDimension($columnLetter)->setWidth(35);
// } else {
// $sheet->getColumnDimension('A')->setWidth(10);
// }
if (in_array($cellData['parentth'], ['Action'])) {
continue;
}
// $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
// }
// }
if ($cellData['parentth'] == 'SNO') {
$sheet->setCellValue("{$columnLetter}{$rowNumber}", $serial_no);
} else if ($cellData['parentth'] == '') {
$mergeStart = $rowNumber; // Start row for merging
$mergeEnd = $rowNumber + ($cellData['rowspan'] - 1); // End row for merging
// // 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
// ],
// ],
// ]);
$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_value']);
}
// // Increase row height for headers and subheaders
// $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height
// $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height
$columnLetter++;
}
$rowNumber++;
$serial_no++;
}
// $rowNumber = $subHeaderRow + 2;
// $column_data = $data['table_data']['data'];
// $serial_no = 1;
// $maxColumnWidths = [];
$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
],
],
]);
// // Add table data rows
// foreach ($column_data as $dataRow) {
// $columnLetter = 'A';
// foreach ($dataRow['data'] as $cellData) {
// if (in_array($cellData['parentth'], ['Item Key', 'Action'])) {
// continue;
// }
// Auto-size columns
// foreach ($sheet->getColumnIterator() as $column) {
// $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
// }
// if ($cellData['parentth'] == 'Sno') {
// $sheet->setCellValue("{$columnLetter}{$rowNumber}", $serial_no);
// } else {
// $sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['value']);
// }
$dataRange = $sheet->calculateWorksheetDimension();
// $columnLetter++;
// }
// $rowNumber++;
// $serial_no++;
// }
$sheet->getStyle($dataRange)->getAlignment()
->setHorizontal(Alignment::HORIZONTAL_CENTER)
->setVertical(Alignment::VERTICAL_CENTER)
->setWrapText(true);
// $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
// ],
// ],
// ]);
$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 ($type == 2) {
if ($matches) {
$startColumn = $matches[1]; // A
$startRow = $matches[2]; // 1
$endColumn = $matches[3]; // G
$endRow = $matches[4]; // 75
// $rowNumber += 2;
// Convert column letter to index, reduce by 1, and convert back
$endColumnIndex = Coordinate::columnIndexFromString($endColumn) - 1;
$newEndColumn = Coordinate::stringFromColumnIndex($endColumnIndex);
// // Add premium data
// // dd($data);
// $labelArray = ["Premium", "GST (%)", "GST Amount (₹)", "Total"];
// $premiumData = $data['premium_data']['data'];
// $premium = [$labelArray[0]];
// $gst = [$labelArray[1]];
// $gstAmt = [$labelArray[2]];
// $total = [$labelArray[3]];
// 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);
}
// foreach ($premiumData as $proposal => $insurers) {
// if ($proposal != 'Particulars') {
// foreach ($insurers as $insurer => $values) {
// $premium[] = $values[$labelArray[0]];
// $gst[] = $values[$labelArray[1]];
// $gstAmt[] = $values[$labelArray[2]];
// $total[] = $values[$labelArray[3]];
// }
// }
// }
$lastRow = count($lead_data) + 1;
$leadRange = "A1:C{$lastRow}";
// foreach ([$premium, $gst, $gstAmt, $total] as $index => $rowData) {
// $columnLetter = 'B';
// foreach ($rowData as $key => $value) {
// $sheet->setCellValue("{$columnLetter}{$rowNumber}", $value);
// if ($key === 0) {
// $sheet->getStyle("{$columnLetter}{$rowNumber}")->applyFromArray(['font' => ['bold' => true,],]);
// }
// $columnLetter++;
// }
// $rowNumber++;
// }
// $premiumRange = "B" . ($rowNumber - 4) . ":" . chr(ord($columnLetter) - 2) . ($rowNumber - 1);
// // dd($premiumRange);
// $sheet->getStyle($premiumRange)->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:D{$lastRow}";
// $sheet->getStyle($leadRange)->applyFromArray([
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
// 'color' => ['argb' => 'FF000000'], // Black color
// ],
// ],
// ]);
$sheet->getStyle($leadRange)->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => 'FF000000'], // Black color
],
],
]);
}
// Set filename
$string = ($type == 2) ? 'QCR' : 'RFQ';
@ -3015,4 +2924,242 @@ class LeadsController extends BaseController
'fileName' => $filename,
];
}
public function convertNonEbJsonForQCR($jsonArr, $type, $proposeldata)
{
$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 (($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) {
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) {
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 (
isset($data['parentth']) && $data['parentth'] === "Action" &&
(
(isset($data['input_value']['qcr']) && $data['input_value']['qcr'] == 0) ||
(isset($data['input_value']['stc']) && $data['input_value']['stc'] == 0)
)
) {
unset($first_json['table_data']['data'][$rowKey]);
break; // Stop checking other columns for this row
}
}
}
// 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, $proposel, $insurer)
{
// print_r($data['premium_data']['data']); die;
$headerData = [];
// Default headers: S. No and Particulars
$defaultHeaders = [
[
'parentHeader' => 'Sno',
'subHeaders' => ['-']
],
[
'parentHeader' => 'Particulars',
'subHeaders' => ['-']
]
];
// Add default headers to the result
$headerData = array_merge($headerData, $defaultHeaders);
foreach ($data['table_data']['headers'] as $header) {
// Check if the parentHeader matches the target proposal
if ($header['parentHeader'] === $proposel) {
// Check if subHeaders contain the target insurer key
foreach ($header['subHeaders'] as $subHeader) {
if ($subHeader === $insurer) {
$headerData[] = [
'parentHeader' => $header['parentHeader'],
'subHeaders' => [
'Quote asked', // Default value
$subHeader // Matched insurer key
]
];
break;
}
}
}
}
$columnData = [];
foreach ($data['table_data']['data'] as $entry) {
$sno = $entry['SNO'];
$items = $entry['items'];
$row_id = $entry['row_id'];
$dataEntry = $entry['data'];
$result = [
"SNO" => $sno,
"items" => $items,
"items" => $row_id,
"data" => []
];
foreach ($dataEntry as $item) {
// Include Sno and Particulars by default
if (in_array($item['parentth'], ['Sno', 'Particulars'])) {
$result['data'][] = [
"parentth" => $item['parentth'],
"subth" => $item['subth'],
"value" => $item['value'],
"input_value" => $item['input_value'],
"display_value" => $item['display_value'],
"rowspan" => $item['rowspan'],
];
}
// Include Proposal with Quote Asked by default
if ($item['parentth'] === $proposel && $item['subth'] === "Quote asked") {
$result['data'][] = [
"parentth" => $item['parentth'],
"subth" => $item['subth'],
"value" => $item['value'],
"input_value" => $item['input_value'],
"display_value" => $item['display_value'],
"rowspan" => $item['rowspan'],
];
}
// Example of including matching specific proposals and insurers
if ($item['parentth'] === $proposel && $item['subth'] === $insurer) {
$result['data'][] = [
"parentth" => $item['parentth'],
"subth" => $item['subth'],
"value" => $item['value'],
"input_value" => $item['input_value'],
"display_value" => $item['display_value'],
"rowspan" => $item['rowspan'],
];
}
}
// Add to the final result
$columnData[] = $result;
}
return $data;
}
}

View File

@ -510,6 +510,10 @@ if (isset($selected_lead_type)) {
selecSalsePerson(data.salse_person_id);
}
let referenceDiv = document.getElementById('appendAreaForClaim');
referenceDiv.innerHTML = '';
referenceDiv.insertAdjacentHTML('beforeend', data.claims_details_html);
} catch (error) {
console.error('Error in dynamicLeadsDataForEdit function:', error);
}

View File

@ -53,7 +53,7 @@ hr.solid {
class="btn btn-primary waves-effect waves-light">Back</a>
</div>
</div>
<form role="form" class="parsley-examples" method="post" id="leads_form_id"
<form role="form" class="parsley-examples" method="post" id="leads_non_eb_form_id"
enctype="multipart/form-data">
<input type="hidden" name="id" id="leads_primarykey">
@ -340,9 +340,8 @@ hr.solid {
</div>
</div>
<div class="form-group text-right m-b-0" id="submitButton">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1"
id="btnSubmit">Submit</button>
<div class="form-group text-right m-b-0">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1">Submit</button>
</div>
</form>
@ -433,14 +432,15 @@ function getPolicyTypeFields(input) {
});
}
$("#leads_form_id").submit(function(event) {
$("#leads_non_eb_form_id").submit(function(event) {
event.preventDefault();
var isValid = $('#leads_form_id').parsley().validate();
var isValid = $('#leads_non_eb_form_id').parsley().validate();
console.log('isValid', isValid)
if (!isValid) {
$('#leads_form_id').find('input, select, textarea').each(function() {
$('#leads_non_eb_form_id').find('input, select, textarea').each(function() {
if ($(this).parsley().isValid() === false && !$(this).val()) {
console.log('Empty field ID:', this.id);
}
@ -455,7 +455,7 @@ $("#leads_form_id").submit(function(event) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
var formData = new FormData($('#leads_form_id')[0]);
var formData = new FormData($('#leads_non_eb_form_id')[0]);
var policy_type_ids = formData.getAll('policy_type_id[]');
console.log('form policy ', policy_type_ids);
@ -483,6 +483,11 @@ $("#leads_form_id").submit(function(event) {
customFieldData[key] = value;
});
const finyearJsonString = gatherClaimExperienceData();
console.log('finyearJsonString', finyearJsonString);
formData.append('fin_years_claims', finyearJsonString);
// Append the JSON string to the FormData object
formData.append('salse_person_id', jsonString);
formData.append('custom_fields', JSON.stringify(customFieldData));
@ -746,7 +751,7 @@ function getPolicyData(input) {
var increment = 1;
function appendThreeYearsClaims(count) {
function appendThreeYearsClaims() {
let claimsFields = `
@ -767,16 +772,11 @@ function appendThreeYearsClaims(count) {
</div>
<div class="form-group col-md-2">
<label for="first_claim_amount_${increment}">Settled Amount<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_claim_amount_${increment}" name="first_claim_amount[]">
<input type="text" class="form-control" id="first_settled_amount_${increment}" name="first_settled_amount[]">
</div>
<div class="form-group col-md-2">
<label for="first_cause_of_death_${increment}">Cause Of Loss <span class="text-danger">*</span></label>
<select class="form-control" id="first_cause_of_death_${increment}" name="first_cause_of_death[]">
<option value="">Select Cause of Death</option>
<?php foreach ($causeOfDeath as $cause => $death_value) {
echo "<option value='$cause'>$death_value</option>";
} ?>
</select>
<input type="text" class="form-control" id="first_cause_of_loss_${increment}" name="first_cause_of_loss[]">
</div>
<div class="form-group col-md-2">
<label for="first_claim_status_${increment}">Claim Status<span class="text-danger">*</span></label>
@ -784,8 +784,8 @@ function appendThreeYearsClaims(count) {
</div>
<div class="form-group col-md-2">
<div class="" style="position: relative; top: 28px; float: right; text-align: end;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeClaim(this, ${count})">x</a>
<a class="btn btn-primary waves-effect waves-light mr-1" onclick="appendThreeYearsClaims(${count})">+</a>
<a class="btn btn-danger waves-effect waves-light" onclick="removeClaim(this)">x</a>
<a class="btn btn-primary waves-effect waves-light mr-1" onclick="appendThreeYearsClaims()">+</a>
</div>
</div>
</div>
@ -801,4 +801,47 @@ function appendThreeYearsClaims(count) {
}
function removeClaim(btn) {
const container = document.getElementById('appendAreaForClaim');
const rows = container.querySelectorAll('.claim-row');
if (rows.length > 1) {
const row = btn.closest('.claim-row');
row.remove();
}
}
function gatherClaimExperienceData() {
let claimData = [];
$(".claim-row").each(function() {
let year = $(this).find("[name='first_year[]']").val();
let claimAmount = $(this).find("[name='first_claim_amount[]']").val();
let settledAmount = $(this).find("[name='first_settled_amount[]']").val();
let causeOfLoss = $(this).find("[name='first_cause_of_loss[]']").val();
let claimStatus = $(this).find("[name='first_claim_status[]']").val();
claimData.push({
"year": year,
"claim_amount": claimAmount,
"settled_amount": settledAmount,
"cause_of_loss": causeOfLoss,
"status": claimStatus,
});
});
let finalJson = {
"finyear": claimData
};
console.log(finalJson);
let jsonString = JSON.stringify(finalJson);
console.log(jsonString);
return jsonString;
}
</script>

View File

@ -0,0 +1,45 @@
<?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' => ''] ];
foreach ($claims as $key => $value) { ?>
<div class="row claim-row">
<div class="form-group col-md-2">
<label for="first_year">Year<span class="text-danger">*</span></label>
<select class="form-control first_year_" id="first_year" name="first_year[]">
<option value="">Select Year</option>
<?php foreach ($lastFiveYears as $year) {
$selected = ($year == $value['year']) ? 'selected' : '';
echo "<option value='$year' $selected>$year</option>";
} ?>
</select>
</div>
<div class="form-group col-md-2">
<label for="first_claim_amount_${increment}">Claim Amount<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_claim_amount_${increment}" name="first_claim_amount[]"
value="<?= htmlspecialchars($value['claim_amount']) ?>">
</div>
<div class="form-group col-md-2">
<label for="first_claim_amount_${increment}">Settled Amount<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_settled_amount_${increment}" name="first_settled_amount[]"
value="<?= htmlspecialchars($value['settled_amount']) ?>">
</div>
<div class="form-group col-md-2">
<label for="first_cause_of_death_${increment}">Cause Of Loss <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_cause_of_loss_${increment}" name="first_cause_of_loss[]"
value="<?= htmlspecialchars($value['cause_of_loss']) ?>">
</div>
<div class="form-group col-md-2">
<label for="first_claim_status_${increment}">Claim Status<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_claim_status_${increment}" name="first_claim_status[]"
value="<?= htmlspecialchars($value['status']) ?>">
</div>
<div class="form-group col-md-2">
<div class="" style="position: relative; top: 28px; float: right; text-align: end;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeClaim(this)">x</a>
<a class="btn btn-primary waves-effect waves-light mr-1" onclick="appendThreeYearsClaims()">+</a>
</div>
</div>
</div>
<?php } ?>
<?php } ?>

View File

@ -149,6 +149,17 @@
.swal2-html-container {
overflow: hidden !important;
}
.select2-selection__choice {
background-color: #0a8794 !important;
color: white !important;
font-weight: bold;
}
.select2-selection__choice__remove {
color: white !important;
margin-right: 5px;
}
</style>
@ -156,23 +167,31 @@
<div class="card">
<div class="card-body">
<div class="row" style="margin-bottom:1rem;">
<div class="row" style="margin-bottom: 1rem;">
<div class="col-6" style="align-self: center;">
<h4 style="position: relative;" id="rfq_qcr_page_title"> <?= isset($page_name) ? $page_name : 'RFQ Non-EB' ?></h4>
<h4 id="rfq_qcr_page_title">
<?= isset($page_name) ? htmlspecialchars($page_name, ENT_QUOTES, 'UTF-8') : 'RFQ Non-EB' ?>
</h4>
</div>
<div class="col-2" id="status_change" style="text-align: right; position: relative; top: 56px; left: 386px;">
<a onclick="checkTheTableDataChanged(1)" class="btn btn-primary">Back</a>
</div>
</div>
<div class="row" style="margin-bottom:1rem;margin-left:1px">
<div class="col-md-2">
<button class="btn btn-custom" id="addProposal"> Add New Proposal</button>
</div>
<div class="col-md-2">
<button id="saveRFQ" onclick="saveRFQ()" class="btn btn-primary" id="saveRFQ">Save RFQ</button>
</div>
<div class="col-md-2">
<button onclick="openQCR()" class="btn btn-primary" id="openQCR">Proceed to QCR</button>
</div>
<div class="row" style="margin-bottom: 1rem;margin-left: 0px;">
<button class="btn btn-custom rfqbtn" id="addProposal" style="margin-right: 10px;">Add New Proposal</button>
<button id="saveRFQ" onclick="saveRFQ()" class="btn btn-primary" style="margin-right: 10px;">Save RFQ</button>
<button id="openQCR" onclick="openQCR()" class="btn btn-primary rfqbtn" style="margin-right: 20px;">Proceed to QCR</button>
<a id="submitExcel" onclick="checkTheTableDataChanged(2)" class="btn btn-primary" style="margin-right: 10px;">Export Excel</a>
<button id="submitInternalMail" class="btn btn-primary" style="margin-right: 10px;" onclick="checkTheTableDataChanged(4)">Send Internal Mail</button>
<button id="submitMail" class="btn btn-primary" style="margin-right: 10px;" onclick="checkTheTableDataChanged(3)">Send Insurer Mail</button>
<button id="submitPlacement" class="btn btn-primary qcrbtn" onclick="checkTheTableDataChanged(6)">Placement</button>
</div>
<input type="hidden" id="lead_id" value="<?= $lead_data['id'] ?? "" ?>" />
<input type="hidden" id="lead_id" value="<?= htmlspecialchars($lead_data['id'] ?? "", ENT_QUOTES, 'UTF-8') ?>" />
<div id="allTableContainer">
<div id="tablesContainer"></div>
<?php include('policyRegisterModel.php'); ?>
@ -182,6 +201,191 @@
</div>
</div>
<!-- Modal content for Send Insurer and Client Mail -->
<div class="modal fade" id="list_model" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
aria-hidden="false">
<div class="modal-dialog modal-full-width">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myCenterModalLabel"></h4>
<button type="button" id="close_btn" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<div class="form-row" id="input_for_row">
</div>
</div>
<div class="form-group text-right m-b-0" id="hide_smbt_btn">
<button type="submit" class="btn btn-primary" onclick="constructURL(1)">Send Mail</button>
</div>
</div>
</div><!-- /.modal-content -->
</div>
</div><!-- /.modal -->
<!-- Modal content for Send Internal Mail -->
<div class="modal fade" id="internal_mail_modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
aria-hidden="false">
<div class="modal-dialog modal-full-width">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="internal_mail_modal_label">Send Internal Mail</h4>
<button type="button" id="close_btn" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-4">
<label for="to">To </label>
<select class="form-control" id="to" name="to" required>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['email'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-4">
<label for="cc">CC </label>
<select class="form-control" id="cc" name="cc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-12">
<label for="subject">Subject</label>
<input id="subject" type="text" class="form-control" name="subject" value="<?= isset($subject) ? $subject : " " ?>">
</div>
<div class="form-group col-md-12">
<label for="internal_mail_content">Mail Content</label>
<textarea id="internal_mail_content" class="form-control" name="internal_mail_content" rows="3"><?= isset($mail_content) ? $mail_content : " " ?></textarea>
</div>
</div>
</div>
<br>
<div class="form-group text-right m-b-0" id="hide_smbt_btn">
<button type="submit" class="btn btn-primary" onclick="constructURL(2)">Send Mail</button>
</div>
</div>
</div><!-- /.modal-content -->
</div>
</div><!-- /.modal -->
<!-- Modal content for Send Placement Mail -->
<div class="modal fade" id="placement_mail_modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
aria-hidden="false">
<div class="modal-dialog modal-full-width">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myCenterModalLabel">Placement</h4>
<button type="button" id="close_btn" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<!-- For display perpose placement alredy submited text display -->
<div class="form-group col-md-12">
<label><span id="alert_msg"class="text-danger"></span></label>
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label for="utr_no">UTR No.</label>
<input type="text" class="form-control" id="utr_no" name="utr_no" placeholder="Enter UTR No.">
</div>
<div class="form-group col-md-3">
<label for="placement_date">Placement Date</label>
<input type="text" class="form-control" id="placement_date" name="placement_date" placeholder="DD/MM/YYY">
</div>
<div class="form-group col-md-3">
<label for="premium_amount">Premium Amount</label>
<input type="text" class="form-control" id="premium_amount" name="premium_amount" placeholder="Enter Premium Amount">
</div>
<div class="form-group col-md-3">
<label for="total_amount">Total Amount</label>
<input type="text" class="form-control" id="total_amount" name="total_amount" placeholder="Enter Total Amount">
</div>
<div class="form-group col-md-3">
<label for="cd_amount">CD Amount</label>
<input type="text" class="form-control" id="cd_amount" name="cd_amount" placeholder="Enter CD Amount">
</div>
</div>
<hr>
<div class="form-row">
<div class="form-group col-md-6">
<label for="proposals"> Proposals/Insurer <span id="base_danger"class="text-danger">*</span></label>
<select class="form-control" id="proposals"name="proposals" onchange="getInsurerBranchContacts(this)" required>
<option value="" >Select Proposals</option>
</select>
</div>
<div class="form-group col-md-6">
<label for="placement_to"> To <span id="base_danger"class="text-danger">*</span></label>
<select class="form-control" id="placement_to" name="placement_to" required>
<option value="" >Select To Mail</option>
</select>
</div>
<div class="form-group col-md-6">
<label for="placement_cc">CC </label>
<select class="form-control" id="placement_cc" name="placement_cc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-12">
<label for="subject">Subject</label>
<input type="text" class="form-control" id="placement_subject" name="placement_subject" value="<?= isset($subject) ? $subject : " " ?>" placeholder="Enter Subject">
</div>
</div>
<hr>
<div class="form-row">
<div class="form-group col-md-12">
<label for="mail_content">Mail Content</label>
<textarea id="placement_mail_content" class="form-control" name="placement_mail_content" rows="3"><?= isset($mail_content) ? $mail_content : " " ?></textarea>
</div>
</div>
</div>
<div class="form-group text-right m-b-0" id="hide_smbt_btn">
<button type="submit" class="btn btn-primary" onclick="constructURL(3)">Send Mail</button>
</div>
</div>
</div><!-- /.modal-content -->
</div>
</div><!-- /.modal -->
<script>
var rfq_data = <?= isset($rfq_data['json']) ? $rfq_data['json'] : null ?>;
var rfq_or_qcr = 1;
@ -2760,6 +2964,8 @@
segments[segments.length - 1] = "2"; // Change the last segment
const newUrl = segments.join("/"); // Rebuild the URL
console.log('newUrl', newUrl)
history.pushState(null, "", newUrl); // Change the URL without reloading
rfq_or_qcr = 2;
@ -3111,7 +3317,10 @@
alignTableColumn();
$(".qcrProposal").show();
$("#saveRFQ").text("Save RFQ");
$("#submitMail").text("Send Insurer Mail");
$(".rfqbtn").show();
$(".qcrbtn").hide();
$("#saveRFQ").css("margin-right", "10px");
} else if (rfq_or_qcr == 2) {
$(".newInsurer").show();
@ -3123,12 +3332,17 @@
$(".insurer_proposal").show();
$(".qcrProposal").hide();
$("#saveRFQ").text("Save QCR");
$("#submitMail").text("Send Client Mail");
// $(".sno-checkboxes").prop("disabled", true);
$("#openQCR").hide();
hideNonQCRRows();
hideNonQCRColumns();
disableCheckbox();
$(".rfqbtn").hide();
$(".qcrbtn").show();
$("#saveRFQ").css("margin-right", "20px");
}
makeQuoteAskedColumnNonEditableorEditable();
@ -3448,4 +3662,685 @@
});
}
</script>
<!-- Export Excel and Mail Script -->
<script>
var proposalDataForDropDown = {};
const editorConfig = {
buttons: [
"bold",
"italic",
"strikethrough",
"|",
"superscript",
"subscript",
"|",
"align",
"fontsize",
"|",
"source" // Add the "source" button for editing HTML
],
fontsize: ["8px", "10px", "12px", "14px", "16px", "18px", "20px", "22px", "24px"], // Font sizes in pixels
showPlaceholder: false,
toolbarButtonSize: "small",
toolbarAdaptive: false,
saveHeightInStorage: true,
minHeight: 400,
height: 400, // Optional fixed height
defaultMode: "1", // Start in WYSIWYG mode
enableDragAndDropFileToEditor: true, // Allow file uploads via drag and drop
placeholder: "Start typing here...", // Optional placeholder text
};
$(document).ready(function(){
const path = window.location.pathname; // Get the current URL path
const segments = path.split('/'); // Split the path into segments
const lead_id = segments[segments.length - 2]; // Get the second last segment (15)
const rfq_type = segments[segments.length - 1]; // Get the last segment (2)
console.log('Lead ID:', lead_id);
console.log('Type:', rfq_type);
let excel_url = '<?= base_url('leads/exportQCRandRFQ/') ?>' + lead_id + '/' + rfq_type + '/' + 2
console.log(excel_url, excel_url);
$('#submitExcel').attr('data-url', excel_url);
$('#cc').select2({
placeholder: 'Select CC Mail',
});
$('#placement_cc').select2({
placeholder: 'Select CC Mail',
});
$('#proposals').select2({
placeholder: 'Select To proposal',
});
$('#placement_to').select2({
placeholder: 'Select To Mail',
});
$('#to').select2({
placeholder: 'Select To Mail',
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
let placementLeadData = <?= isset($lead_data) && isset($lead_data['proposel_data']) ? json_encode($lead_data['proposel_data']) : 'null'; ?>;
// console.log('placementLeadData', placementLeadData);
if (placementLeadData) {
placementLeadData = JSON.parse(placementLeadData);
let txt = 'The data has already been sent to the insurer '
+ placementLeadData.insurer_name
+ ' and the proposal is '
+ placementLeadData.proposel_name + '.';
$('#alert_msg').text(txt);
} else {
$('#alert_msg').text('');
console.log('placementLeadData is null or undefined.');
}
// Initialize the Jodit editor
const editor = Jodit.make("#placement_mail_content", editorConfig);
const editor2 = Jodit.make("#internal_mail_content", editorConfig);
var placement_date_datePicker = flatpickr("#placement_date", {
dateFormat: "d/m/Y",
allowInput: false,
});
})
function checkTheTableDataChanged(redirect_type){
if(redirect_type == 1){
//BACK BUTTON
window.location.href="<?= base_url("leads/list")?>"
}else if(redirect_type == 2){
//EXCEL EXPORT
let url = $('#submitExcel').data('url');
window.location.href = url;
}else if(redirect_type == 3){
//INSURER OR CLIENT MAIL SEND
showModal(1);
}else if(redirect_type == 4){
//INTERNAL MAIL SEND
showModal(2);
}else if(redirect_type == 5){
//PROCCED TO QCR
// submitQCRData();
let lead_id = $('#lead_id').val();
let url = '<?= base_url('rfq/list/') ?>' + lead_id + '/' + 2;
window.location.href = url;
}else if(redirect_type == 6){
//INTERNAL MAIL SEND
showModal(3);
}
}
function showModal(mail_type) {
if(mail_type == 1){
insurerAndClientMailPopUp()
}else if(mail_type == 2){
var myModal = new bootstrap.Modal(document.getElementById('internal_mail_modal'));
myModal.show();
// getMailContent('internal_mail_content');
}else if(mail_type == 3){
placementMailPopUp()
// getMailContent('placement_mail_content');
}
}
function insurerAndClientMailPopUp(){
var url = '';
var lead_id = $('#lead_id').val();
if (rfq_or_qcr == 2) {
$('#myCenterModalLabel').text('Client contact to send mail')
url = '<?= base_url('leads/list/') ?>' + lead_id;
} else {
$('#myCenterModalLabel').text('Choose insurer to send mail')
url = '<?= base_url('util/getLevelContects') ?>'
}
ajaxRequestForGetMailData(url);
var myModal = new bootstrap.Modal(document.getElementById('list_model'));
myModal.show();
}
function placementMailPopUp() {
console.log(proposalDataForDropDown);
const selectElement = document.getElementById('proposals');
// Clear existing options
selectElement.innerHTML = '<option value="">Select Proposals</option>';
// Loop through the proposal data and append options
for (const [proposalKey, proposalValue] of Object.entries(proposalDataForDropDown.over_all_column_data)) {
proposalValue.insurers.forEach(insurer => {
const option = document.createElement('option');
option.value = insurer.id;
option.setAttribute("data-id", `${proposalKey}-${insurer.display_name}`);
option.textContent = `${proposalKey} - ${insurer.display_name}`;
selectElement.appendChild(option);
});
}
// Show the modal
const myModal = new bootstrap.Modal(document.getElementById('placement_mail_modal'));
myModal.show();
}
function ajaxRequestForGetMailData(url) {
console.log(url);
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: url,
type: "GET",
dataType: 'json',
success: function(res) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
appendInput(res.data)
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
}
function appendInput(data) {
console.log(data);
var lead_id = $('#lead_id').val();
$('#input_for_row').empty();
let html = '';
if (rfq_or_qcr == 2) {
const url = '<?= base_url('leads/list') ?>?lead_id=' + lead_id;
html += `
<div class="form-group col-md-4">
<label for="contact_mail">Client Contact Mail</label>
<input value="${data.contact_person_email || ''}" type="text" id="contact_mail" class="form-control" placeholder="Contact Mail" readonly>
</div>
`;
if (!data.contact_person_email) {
html += `
<div class="form-group col-md-4">
<a href="${url}">Click here to update mail ID</a>
</div>
`;
}
if(user_role_id == 1 || user_role_id == 5){
html += `
<div class="form-group col-md-4">
<label for="client_cc">CC </label>
<select class="form-control" id="client_cc" name="client_cc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-4">
<label for="client_bcc">BCC </label>
<select class="form-control" id="client_bcc" name="client_bcc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
`;
}
html += `
<div class="form-group col-md-12">
<label for="mail_subject">Subject</label>
<input type="text" id="mail_subject" class="form-control" value="'<?= isset($subject) ? $subject : " " ?>'" placeholder="Subject">
</div>
`;
} else {
// Assuming `data.contacts` is an array of contact objects within the main data object
const contacts = data || {};
html = `
<div class="form-group col-md-4">
<label for="insurerContact">Insurers</label>
<select id="insurerContact" class="form-control" name="insurerContact[]" multiple>
<option></option>
`;
// Loop through each contact property within the `contacts` object
for (const id in contacts) {
const contact = contacts[id];
html += `
<option value="${contact.id}">${contact.insurer_name} - ${contact.branch_code} - ${contact.contact_person_name} - ${contact.contact_person_email}</option>
`;
}
html += `
</select>
</div>
`;
html += `
<div class="form-group col-md-4">
<label for="client_cc">CC </label>
<select class="form-control" id="client_cc" name="client_cc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="form-group col-md-4">
<label for="client_bcc">BCC </label>
<select class="form-control" id="client_bcc" name="client_bcc" required multiple>
<?php if (isset($userList)) { ?>
<?php foreach ($userList as $user) { ?>
<option value="<?= $user['id'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } ?>
<?php } ?>
</select>
</div>
`;
html += `
<div class="form-group col-md-12">
<label for="mail_subject">Subject</label>
<input value="<?= isset($subject) ? $subject : " " ?>" type="text" id="mail_subject" class="form-control" placeholder="Subject">
</div>
`;
}
html += `
<div class="form-group col-md-12">
<label for="insurer_and_client_mail_content">Mail Content</label>
<textarea id="insurer_and_client_mail_content" class="form-control" name="insurer_and_client_mail_content" rows="3"><?= isset($mail_content) ? $mail_content : " " ?></textarea>
</div>
`;
$('#input_for_row').append(html);
// Initialize select2 for the dropdown if insurerContact is present
if ($('#insurerContact').length) {
$('#insurerContact').select2({
placeholder: 'Select an Insurer',
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
}
// Initialize select2 for the dropdown if Client is present
if ($('#client_cc').length) {
$('#client_cc').select2({
placeholder: 'Select an CC',
});
$('#client_bcc').select2({
placeholder: 'Select an BCC',
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
}
// Initialize the Jodit editor
const editor = Jodit.make("#insurer_and_client_mail_content", editorConfig);
// getMailContent('insurer_and_client_mail_content');
}
function constructURL(url_type) {
if(url_type == 1){
constructURL_ForInsurerAndClientMailSend()
}else if(url_type == 2){
constructURL_ForInternalMailSend()
}else if(url_type == 3){
Swal.fire({
title: "Do you want to place the proposal data?",
// text: "Do you want Save this!",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33",
confirmButtonText: "Yes, Procced!"
}).then((result) => {
if (result.isConfirmed) {
constructURL_ForPlacementMailSend()
}else{
return false;
}
});
}
}
// Insurer and Client Mail
function constructURL_ForInsurerAndClientMailSend() {
var lead_id = $('#lead_id').val();
var mail_content = $('#insurer_and_client_mail_content').val();
var subject = $('#mail_subject').val();
var bcc = $('#client_bcc').val();
var cc = $('#client_cc').val();
console.log('lead_id', lead_id)
console.log('subject', subject)
console.log('mail_content', mail_content)
console.log('bcc', bcc)
console.log('cc', cc)
// Convert cc to JSON string
cc = cc.map(Number);
cc = JSON.stringify(cc);
// Convert bcc to JSON string
bcc = bcc.map(Number);
bcc = JSON.stringify(bcc);
// Prepare FormData object
var formData = new FormData();
formData.append('lead_id', lead_id);
formData.append('mail_content', mail_content);
formData.append('subject', subject);
formData.append('cc', cc);
formData.append('bcc', bcc);
if (rfq_or_qcr == 2) {
formData.append('file_type', 'qcr');
formData.append('recipient_type', 'client');
formData.append('recipient_mail', '');
} else {
var insurerContact = $('#insurerContact').val();
insurerContact = insurerContact.map(Number);
formData.append('file_type', 'rfq');
formData.append('recipient_type', 'insurer');
formData.append('recipient_mail', JSON.stringify(insurerContact));
}
ajaxRequest(formData)
console.log('formData', formData)
}
//Internal Mail
function constructURL_ForInternalMailSend() {
var lead_id = $('#lead_id').val();
let to = $('#to').val();
let mail_content = $('#internal_mail_content').val();
let subject = $('#subject').val();
let cc = $('#cc').val();
// Convert cc to JSON string
cc = cc.map(Number);
cc = JSON.stringify(cc);
// Determine file type
var file_type = rfq_or_qcr == 2 ? 'qcr' : 'rfq';
// Create FormData
var formData = new FormData();
formData.append('lead_id', lead_id);
formData.append('file_type', file_type);
formData.append('recipient_type', 'internal');
formData.append('to', to);
formData.append('cc', cc);
formData.append('subject', subject);
formData.append('mail_content', mail_content);
formData.append('recipient_mail', ''); // Empty value as per logic
ajaxRequest(formData)
}
//placement mail
function constructURL_ForPlacementMailSend() {
var lead_id = $('#lead_id').val();
let to = $('#placement_to').val();
let placement_date = $('#placement_date').val();
let utr_no = $('#utr_no').val();
let premium_amount = $('#premium_amount').val();
let total_amount = $('#total_amount').val();
let cd_amount = $('#cd_amount').val();
let subject = $('#placement_subject').val();
let mail_content = $('#placement_mail_content').val();
let proposal_insurer = $('#proposals option:selected').data('id');
let insurer_and_branch = $('#proposals').val();
let cc = $('#placement_cc').val();
// Process `to` field
to = to.split(',').map(email => email.trim());
cc = cc.map(Number); // or split if it's a string: `cc.split(',').map(email => email.trim())`
// Prepare FormData
var formData = new FormData();
formData.append('lead_id', lead_id);
formData.append('file_type', rfq_or_qcr == 2 ? 'qcr' : 'rfq');
formData.append('recipient_type', 'placement');
formData.append('recipient_mail', JSON.stringify(to));
formData.append('cc', JSON.stringify(cc));
formData.append('subject', subject);
formData.append('proposal_insurer', proposal_insurer);
formData.append('insurer_and_branch', insurer_and_branch);
formData.append('placement_date', placement_date);
formData.append('utr_no', utr_no);
formData.append('premium_amount', premium_amount);
formData.append('total_amount', total_amount);
formData.append('cd_amount', cd_amount);
formData.append('mail_content', mail_content);
ajaxRequest(formData);
}
function ajaxRequest(formData) {
var apiURL = '<?= base_url('leads/sendMail') ?>';
console.log(apiURL);
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: apiURL,
type: "POST",
data: formData,
processData: false, // Required for FormData
contentType: false, // Required for FormData
dataType: 'json',
success: function(res) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log(res);
if (res.status == 'success' && res.code == 200) {
toastr.success('Mail send Successfully', 'SUCCESS')
} else {
if (res.messgae) {
toastr.error(res.messgae, 'ERROR')
} else {
toastr.error('Mail send failed', 'ERROR')
}
}
$('.close').click()
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
$('#to').select2({
placeholder: 'Select To Mail',
});
$('#cc').val('').select2({
placeholder : 'select CC Mail'
});
// $('#subject').val('');
$('#proposals').val('');
$('#placement_to').val('').select2({
placeholder : 'select To Mail'
});
$('#placement_cc').val('').select2({
placeholder : 'select CC Mail'
});
$('#placement_subject').val('');
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
}
function objectToQueryString(obj) {
return Object.keys(obj).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&');
}
function getInsurerBranchContacts(input){
let insurer_and_branch = $(input).val();
console.log('insurer_and_branch', insurer_and_branch);
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: '<?= base_url('util/getInsurerBranchContacts/') ?>' + insurer_and_branch,
type: "GET",
dataType: 'json',
success: function(res) {
console.log(res)
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if(res.status == false){
toastr.warning(res.message, 'WARNING')
}else{
appendInsurerContact(res.data)
}
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
}
function appendInsurerContact(data) {
console.log(data)
$('#placement_to').empty();
$('#placement_to').append($('<option>', {
value: '',
text: 'Select'
}));
$.each(data, function(index, item) {
var option = $('<option>', {
value: item.id,
text: item.contact_person_email
});
$('#placement_to').append(option);
});
}
$('.close').click(function(){
$('#to').select2({
placeholder: 'Select To Mail',
});
$('#cc').val('').select2({
placeholder : 'select CC Mail'
});
// $('#subject').val('');
$('#proposals').val('');
$('#placement_to').val('').select2({
placeholder : 'select To Mail'
});
$('#placement_cc').val('').select2({
placeholder : 'select CC Mail'
});
$('#placement_subject').val('');
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
})
</script>