diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 34ffe3d0..b12d4030 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -42,6 +42,7 @@ use App\Controllers\Jobs; use App\Controllers\JobWorker; use Google\Service\FactCheckTools\Resource\Claims; use GPBMetadata\Google\Type\Datetime; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; class LeadsController extends BaseController { @@ -118,7 +119,7 @@ class LeadsController extends BaseController 'completed_with_corrections' => 'Completed with Corrections', 'completed_without_corrections' => 'Completed without Corrections', ]; - + $this->claim_type_for_gpa = [ 'accident_death' => 'Accident Death', 'permanent_total_disablement' => 'Permanent Total Disablement', @@ -243,7 +244,7 @@ class LeadsController extends BaseController $leads_file_primary_key = $data['leads_file_id'] ?? []; $multi_file_data = []; - if(isset($data[$form_docs_name])){ + if (isset($data[$form_docs_name])) { $files = $this->request->getFileMultiple($form_file_name); $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_end_date' => $data['source_policy_end_date'] ?? null, + 'claim_history' => $data['claim_history'] ]; } // print_r($processedData);die(); @@ -681,9 +683,9 @@ class LeadsController extends BaseController if ($lead_data['lead_type'] != 1) { $client_policy_data = $this->clientPolicyModel->where('is_active', 1)->where('id', $lead_data['source_policy_id'])->first(); - if (isset($client_policy_data)) { + if (isset($client_policy_data)) { $data['policy_terms'] = $client_policy_data['policy_terms']; - } + } } $data['question_json'] = $lead_data['question_json']; @@ -716,15 +718,15 @@ class LeadsController extends BaseController $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}"; } - if($lead_data['policy_type_id'] == 1){ - $data['totalSumAssured'] = $this->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => $id]); - }else{ - $data['totalSumAssured'] = []; + if ($lead_data['policy_type_id'] == 1) { + $data['totalSumAssured'] = $this->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => $id]); + } else { + $data['totalSumAssured'] = []; } $data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']); $data['subject'] = $this->transformMailContent($lead_data, $subject, $data['page_name']); - + $data['placement_mail_content'] = $this->transformMailContent($lead_data, $mail_content, 'Placement'); $data['placement_subject'] = $this->transformMailContent($lead_data, $subject, 'Placement'); @@ -746,7 +748,7 @@ class LeadsController extends BaseController if ($lead_data['lead_type'] != 1 && $data['rfq_count'] == 0) { $client_policy_data = $this->clientPolicyModel->where('is_active', 1)->where('id', $lead_data['source_policy_id'])->first(); if (isset($client_policy_data)) { - + $data['rfq_data']['json'] = $client_policy_data['placement_json']; } } @@ -817,13 +819,13 @@ class LeadsController extends BaseController $qcr_created = true; } - if(($data['submit_type'] ?? "") == 'QCR'){ + if (($data['submit_type'] ?? "") == 'QCR') { $inputJson = json_decode($data['json'], true); $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']; foreach ($proposel_count as $key => $value) { - if(!empty($value['insurers'])){ + if (!empty($value['insurers'])) { $qcr_created = true; } } @@ -869,11 +871,11 @@ class LeadsController extends BaseController if ($insertId) { - if(empty($rfq_created)){ + if (empty($rfq_created)) { $this->leadsModel->update($lead_id, ['status' => "rfq_created"]); } - if($qcr_created == true){ + if ($qcr_created == true) { $this->leadsModel ->where('id', $lead_id) ->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'); $data = [ 'no_of_installment' => 0, - 'is_installment'=> 0 + 'is_installment' => 0 ]; $this->leadsModel->where('id', $lead_id)->set($data)->update(); } return $this->respond(['status' => true, 'message' => 'Removed successfully'], 200); - } //-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------ @@ -1211,7 +1212,7 @@ class LeadsController extends BaseController //Construct excel file and save the file to the folder and return file path public function constructExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null) - { + { helper('excel_util_helper'); $rfq_data = $this->RFQModel->getRFQTableDataWithLeadIDAndType($lead_id, $type); $is_placement = false; @@ -1221,7 +1222,7 @@ class LeadsController extends BaseController 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 = [ 'Insured' => $rfq_data['client_name'], '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", // '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 = [ 'Insured' => $rfq_data['client_name'], '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']] ?? "", ]; } - } 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 = [ '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", 'Policy Run Days' => $rfq_data['policy_run_days'], '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'], - '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']), - 'Incurred Claims Ratio' => $rfq_data['incurred_claims_ratio']." %", - 'Earned Claims Ratio' => $rfq_data['earned_claims_ratio']." %", + 'Incurred Claims Ratio' => $rfq_data['incurred_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 = [ 'Insured' => $rfq_data['client_name'], '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); $data = $this->transformProposelData($data, $proposal_key, $insurer_key); $is_placement = true; + $sheetName = 'Placement'; } } else if ($type == 1) { $sheetName = 'RFQ'; @@ -1399,8 +1400,8 @@ class LeadsController extends BaseController ], ]); $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; } @@ -1423,9 +1424,9 @@ class LeadsController extends BaseController $sheet->mergeCells($mergeRange); $rowNumber_for_remove_quote_asked = $rowNumber; $rowNumber = $rowNumber + 1; - if($type == 2){ + if ($type == 2) { $subHeaderRow = $rowNumber + 1; - }else{ + } else { $subHeaderRow = $rowNumber_for_remove_quote_asked; } $columnLetter = 'A'; @@ -1449,9 +1450,9 @@ class LeadsController extends BaseController $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header // 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"); - }else{ + } else { $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']); } $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([ @@ -1473,7 +1474,7 @@ class LeadsController extends BaseController // Add subheaders foreach ($header['subHeaders'] as $subHeader) { - if($type == 2 && $is_placement == false){ + if ($type == 2 && $is_placement == false) { $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); } @@ -1483,7 +1484,7 @@ class LeadsController extends BaseController $sheet->getColumnDimension('A')->setWidth(10); } - if($is_placement == false){ + if ($is_placement == false) { $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([ 'font' => ['bold' => true], 'alignment' => [ @@ -1513,9 +1514,9 @@ class LeadsController extends BaseController $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height - if($is_placement == true){ + if ($is_placement == true) { $rowNumber = $subHeaderRow; - }else{ + } else { $rowNumber = $subHeaderRow + 2; } // dd($rowNumber); @@ -1591,9 +1592,9 @@ class LeadsController extends BaseController $rowNumber++; } - if($is_placement == true){ + if ($is_placement == true) { $prevColumn3 = $this->getPreviousColumn($columnLetter); - }else{ + } else { $prevColumn3 = $this->getPreviousColumn($columnLetter, 2); } $premiumRange = "B" . ($rowNumber - 4) . ":" . "{$prevColumn3}" . ($rowNumber - 1); @@ -1612,13 +1613,13 @@ class LeadsController extends BaseController //set imgage and align the row and column // Kint::dump($columnLetter); - if($type == 2){ - if($is_placement == true){ + if ($type == 2) { + if ($is_placement == true) { $columnLetter_img = $this->getPreviousColumn($columnLetter); - }else{ + } else { $columnLetter_img = $this->getPreviousColumn($columnLetter, 2); } - }else{ + } else { $columnLetter_img = $this->getPreviousColumn($columnLetter); } // dd($columnLetter_img); @@ -1641,7 +1642,7 @@ class LeadsController extends BaseController ]); } - $sheet->getColumnDimension($columnLetter_img)->setWidth(40); + $sheet->getColumnDimension($columnLetter_img)->setWidth(40); $sheet->getRowDimension(1)->setRowHeight(40); // Adjust as needed $drawing = new Drawing(); @@ -1656,7 +1657,7 @@ class LeadsController extends BaseController $drawing->setWorksheet($sheet); //end - + // Auto-size columns // foreach ($sheet->getColumnIterator() as $column) { @@ -1709,7 +1710,7 @@ class LeadsController extends BaseController // Set filename - $string = ($type == 2) ? ( $is_placement == true ? 'Placement' : 'QCR') : 'RFQ'; + $string = ($type == 2) ? ($is_placement == true ? 'Placement' : 'QCR') : 'RFQ'; $current_year = date('Y'); $next_year = $current_year + 1; $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/' . $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); if ($result_merge) { // 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']; $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"; - }else if(in_array($recipient_type, ['client'])){ + } else if (in_array($recipient_type, ['client'])) { $from_mail = "bs@nhanceindia.in"; } @@ -2238,7 +2239,7 @@ class LeadsController extends BaseController $cc_data = isset($params['cc']) ? $params['cc'] : ""; $param_cc_mail = json_decode($cc_data, true); - + if (isset($param_cc_mail) && is_array($param_cc_mail) && count($param_cc_mail) > 0) { // Fetch user data where ID is in the param_cc_mail array $userData = $this->userModel @@ -2262,7 +2263,7 @@ class LeadsController extends BaseController // Handle case where param_cc_mail is not valid // 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) : ""; } @@ -2354,7 +2355,6 @@ class LeadsController extends BaseController ->where(['contact_type' => 'insurer', 'is_active' => 1]) ->whereIn('id', $recipient_mail) ->findAll(); - } else if ($recipient_type == 'client') { $mailIDS = explode(',', $params['contact_mail']); @@ -2387,9 +2387,9 @@ class LeadsController extends BaseController foreach ($recipient_data as $recipient) { $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("{{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("{{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, 'payment_date' => !empty($params['payment_date']) ? change_date_format($params['payment_date']) : 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, 'total_amount' => $params['total_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(); - if(isset($params['installments']) && !empty($params['installments'])){ + if (isset($params['installments']) && !empty($params['installments'])) { $installment_data = json_decode($params['installments'], true); - if(!empty($installment_data)){ + if (!empty($installment_data)) { foreach ($installment_data as $key => $value) { // print_r($value);die - $value['payment_date'] = !empty($value['payment_date']) && strtotime($value['payment_date']) - ? date('Y/m/d', strtotime($value['payment_date'])) - : null; - if(isset($value['id']) && !empty($value['id'])){ + $value['payment_date'] = !empty($value['payment_date']) && strtotime($value['payment_date']) + ? date('Y/m/d', strtotime($value['payment_date'])) + : null; + if (isset($value['id']) && !empty($value['id'])) { $this->leadInstallmentPaymentDetails->where('id', $value['id'])->set($value)->update(); - }else{ + } else { $this->leadInstallmentPaymentDetails->insert($value); } } } } - } if ($recipient_type == 'client') { $this->leadsModel - ->where('id', $lead_id) - ->whereNotIn('status', ['lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) - ->set(['status' => "qcr_sent"]) - ->update(); + ->where('id', $lead_id) + ->whereNotIn('status', ['lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) + ->set(['status' => "qcr_sent"]) + ->update(); } if ($recipient_type == 'insurer') { $this->leadsModel - ->where('id', $lead_id) - ->whereNotIn('status', ['qcr_created', 'qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) - ->set(['status' => "rfq_sent"]) - ->update(); + ->where('id', $lead_id) + ->whereNotIn('status', ['qcr_created', 'qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) + ->set(['status' => "rfq_sent"]) + ->update(); } //delete attachment file @@ -2789,7 +2788,7 @@ class LeadsController extends BaseController return $client_id; } catch (\Throwable $e) { - $this->myLogger->logme('error','createClientWithLeadData failed'); + $this->myLogger->logme('error', 'createClientWithLeadData failed'); return false; } } @@ -2809,7 +2808,7 @@ class LeadsController extends BaseController return $branch_id; } catch (\Throwable $e) { - $this->myLogger->logme('error','createClientBranchAndContactWithLeadData failed'); + $this->myLogger->logme('error', 'createClientBranchAndContactWithLeadData failed'); return false; } } @@ -2827,7 +2826,7 @@ class LeadsController extends BaseController return $client_policy_id; } catch (\Throwable $e) { - $this->myLogger->logme('error','createClientPolicyWithLeadData failed'); + $this->myLogger->logme('error', 'createClientPolicyWithLeadData failed'); return false; } } @@ -2931,7 +2930,7 @@ class LeadsController extends BaseController // 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']); } catch (\Throwable $e) { - $this->myLogger->logme('error','preparePolicyTermsFromRFQ'); + $this->myLogger->logme('error', 'preparePolicyTermsFromRFQ'); return null; } } @@ -2994,7 +2993,7 @@ class LeadsController extends BaseController case str_starts_with($item, 'special_condition') && $parentth === $proposel_name && $subth === $insurer_name: // log_message("error","INPUT".json_encode($input_value)); $parts = explode('-', $input_value); - + $labelKey = $policy_type == 1 ? 'gpa_special_condition_label' : 'special_condition_label'; $inputKey = $policy_type == 1 ? 'gpa_special_condition_input' : 'special_condition_input'; @@ -3074,11 +3073,10 @@ class LeadsController extends BaseController if (!empty($item) && !empty($value)) { $finalItem = $item; - + if (strpos($tableGroup['tableId'], 'summary') !== false) { $policy_type = explode('_', $tableGroup['tableId'])[0] ?? ''; $finalItem = $policy_type . ' - ' . $item; - } $terms_array[$finalItem] = $value; } @@ -3322,7 +3320,7 @@ class LeadsController extends BaseController 3 => 'rfq/gmc', 4 => 'rfq/gmc', 5 => 'rfq/gmc', - 17=> 'rfq/burglary', + 17 => 'rfq/burglary', 22 => 'rfq/car', 23 => 'rfq/cpm', 24 => 'rfq/cyber_crime', @@ -3349,7 +3347,11 @@ class LeadsController extends BaseController public function constructNonEbExcelToSaveTemp($lead_id, $type, $propsal_and_insurer = null) { $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['claim_history'] = $claim_history; + // dd($lead_data); if (!is_array($lead_data)) { $lead_data = []; } @@ -3359,29 +3361,67 @@ class LeadsController extends BaseController if (isset($rfq_data['registration_json']) && !empty($rfq_data['registration_json'])) { $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); $proposalData = end($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(); $sheet = $spreadsheet->getActiveSheet(); + $sheet->setTitle($sheetName); + + // Start with lead_data at the top $rowNumber = 1; $title = "Nhance India Insurance Broking Pvt Ltd"; - $mergeRange1 = "A{$rowNumber}:B{$rowNumber}"; + $mergeRange1 = "A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"; $sheet->mergeCells($mergeRange1); $sheet->setCellValue("A{$rowNumber}", $title); $sheet->getStyle("A{$rowNumber}")->applyFromArray([ @@ -3398,24 +3438,25 @@ class LeadsController extends BaseController // Calculate title width $maxWidthA = mb_strlen($title); + // dd($columnLetterForImage); // 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 $drawing = new Drawing(); $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path $drawing->setPath($path); - $drawing->setCoordinates("C{$rowNumber}"); // Set position in column C + $drawing->setCoordinates("{$columnLetterForImage}{$rowNumber}"); // Set position in column C $drawing->setHeight(35); // Adjust image height // Center align the image in the cell - $drawing->setOffsetX(30); // Adjust horizontal offset + $drawing->setOffsetX(50); // Adjust horizontal offset $drawing->setOffsetY(5); // Adjust vertical offset $drawing->setWorksheet($sheet); // Apply center alignment to the cell - $sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); - $sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); + $sheet->getStyle("{$columnLetterForImage}{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); + $sheet->getStyle("{$columnLetterForImage}{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); $rowNumber++; @@ -3424,15 +3465,31 @@ class LeadsController extends BaseController //Lead Data 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 = $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 - $mergeRangeKey = "A{$rowNumber}:B{$rowNumber}"; + $mergeRangeKey = "A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"; $sheet->mergeCells($mergeRangeKey); // Set values in merged cells $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 $sheet->getStyle($mergeRangeKey)->applyFromArray([ @@ -3453,16 +3510,22 @@ class LeadsController extends BaseController // Track max width needed for columns $maxWidthA = max($maxWidthA, mb_strlen($formattedKey)); // Consider title and keys $maxWidthB = max($maxWidthB, mb_strlen((string) $value)); + // if (!empty($policy_registration_data)) { + // dd($policy_registration_data); + + // } $rowNumber++; } + // die(); + // Set column width based on max content length (adjusted for padding) $sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2); - $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2); - $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); + // $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2); + // $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); - $rowNumber += 1; + // $rowNumber += 1; //Policy Registration if (!empty($policy_registration_data)) { foreach ($policy_registration_data as $key => $value) { @@ -3470,7 +3533,7 @@ class LeadsController extends BaseController $startRow = $rowNumber; // Track where the block starts // Title Row - $titleMergeRangeKey = "A{$rowNumber}:C{$rowNumber}"; + $titleMergeRangeKey = "A{$rowNumber}:{$columnLetterForImage}{$rowNumber}"; $sheet->mergeCells($titleMergeRangeKey); $sheet->setCellValue("A{$rowNumber}", ucfirst($key) . " Policy Details"); @@ -3491,9 +3554,9 @@ class LeadsController extends BaseController // Policy Type if (isset($value['policyType'])) { - $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"); $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([ 'font' => ['bold' => true], @@ -3505,9 +3568,9 @@ class LeadsController extends BaseController $rowNumber++; } else { - $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"); $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([ 'font' => ['bold' => true], @@ -3523,9 +3586,9 @@ class LeadsController extends BaseController // Type of Business & Nature of Business if (isset($value['productSelection']) && !empty($value['productSelection'])) { // Type of Business - $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"); $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([ 'font' => ['bold' => true], @@ -3538,9 +3601,9 @@ class LeadsController extends BaseController $rowNumber++; // Nature of Business - $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"); $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([ 'font' => ['bold' => true], @@ -3555,9 +3618,9 @@ class LeadsController extends BaseController if (isset($value['policyDetails']) && !empty($value['policyDetails'])) { // Type of Business - $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->mergeCells("A{$rowNumber}:{$columnLetterForTitle}{$rowNumber}"); $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([ 'font' => ['bold' => true], @@ -3568,13 +3631,40 @@ class LeadsController extends BaseController ]); $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 - $sheet->getStyle("A{$startRow}:C{$endRow}")->applyFromArray([ + $sheet->getStyle("A{$startRow}:{$columnLetterForImage}{$endRow}")->applyFromArray([ 'borders' => [ 'allBorders' => [ '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(); } @@ -3645,7 +3736,7 @@ class LeadsController extends BaseController $startColumn = $columnLetter; // Start of the current header range $subHeaderCount = count($header['subHeaders']); // Number of subheaders for this parent header - + // Kint::dump($subHeaderCount); // Set parent header value $sheet->setCellValue("{$startColumn}{$rowNumber}", $header['parentHeader']); $sheet->getStyle("{$startColumn}{$rowNumber}")->applyFromArray([ @@ -3668,6 +3759,7 @@ class LeadsController extends BaseController $endColumn = $startColumn; // No merge needed if only one subheader } + // Kint::dump($header); // Add subheaders foreach ($header['subHeaders'] as $subHeader) { $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); @@ -3700,7 +3792,6 @@ class LeadsController extends BaseController ], ]); - // Apply border to the header range $prevColumn4 = $this->getPreviousColumn($columnLetter); $headerRange = "A{$rowNumber}:" . "{$prevColumn4}" . "{$subHeaderRow}"; @@ -3719,7 +3810,7 @@ class LeadsController extends BaseController // $rowNumber = $subHeaderRow + 2; $rowNumber = $subHeaderRow + 1; - + $column_data = $data['table_data']['data']; // dd($column_data); $serial_no = 1; @@ -3820,7 +3911,7 @@ class LeadsController extends BaseController } $lastRow = count($lead_data) + 1; - $leadRange = "A1:C{$lastRow}"; + $leadRange = "A1:{$columnLetterForImage}{$lastRow}"; $sheet->getStyle($leadRange)->applyFromArray([ '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); // Set filename $string = ($type == 2) ? 'QCR' : 'RFQ'; @@ -3994,11 +4149,11 @@ class LeadsController extends BaseController // 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); + return in_array($subHeader, ['Sum Insured', '-'], true); }); } } - + // Kint::dump($header); //Remove insurer Row wise data for RFQ $groupedRows = []; foreach ($first_json['table_data']['data'] as &$row) { @@ -4007,7 +4162,7 @@ class LeadsController extends BaseController $row['data'] = array_filter( $row['data'], function ($item) { - return in_array($item['subth'], ['Sum Insured', '-',"Liability Limit"]); + return in_array($item['subth'], ['Sum Insured', '-', "Liability Limit"]); } ); diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php index fc0e2bb3..6b5264e8 100644 --- a/app/Models/LeadsModel.php +++ b/app/Models/LeadsModel.php @@ -97,6 +97,7 @@ class LeadsModel extends Model 'is_installment', 'no_of_installment', 'is_policy_created', + 'claim_history' ]; diff --git a/app/Views/leads_non_eb.php b/app/Views/leads_non_eb.php index b4548a73..50d28e46 100644 --- a/app/Views/leads_non_eb.php +++ b/app/Views/leads_non_eb.php @@ -300,7 +300,8 @@
-
+
+

@@ -528,6 +529,9 @@ console.log('finyearJsonString', 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 formData.append('salse_person_id', jsonString); @@ -879,9 +883,15 @@ function appendThreeYearsClaims() { - let claimsFields = ` + let claimsFields = `${!document.querySelector('#claim_history') ? `
+ + +

`: ``}` -
+ claimsFields += ` + + +
@@ -990,4 +1000,22 @@ 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(); + } + + } + \ No newline at end of file diff --git a/app/Views/rfq/claims_details_non_eb.php b/app/Views/rfq/claims_details_non_eb.php index 04592201..8f565ee0 100644 --- a/app/Views/rfq/claims_details_non_eb.php +++ b/app/Views/rfq/claims_details_non_eb.php @@ -1,6 +1,14 @@ '', 'claim_amount' => '', 'status' => '', 'claim_type' => '', 'cause_of_death' => '', 'death_date' => ''] ]; - foreach ($claims as $key => $value) { ?> + ?> +
+ /> + +

+ $value) { ?>
@@ -51,5 +59,5 @@
- + \ No newline at end of file