Merge branch 'dev' of bitbucket.org:jubilian/nhance into dev

This commit is contained in:
VENKATESHWARAN 2025-05-12 15:09:33 +05:30
commit ce78806007
17 changed files with 995 additions and 498 deletions

View File

@ -357,6 +357,7 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) {
$routes->get('getLeadNonEB/(:any)', 'LeadsController::getLeadNonEB/$1');
$routes->get('getPolicyTypeFields', 'LeadsController::getPolicyTypeFields');
$routes->get('removeMultiFile', 'LeadsController::removeMultiFile');
$routes->get('removeInstallments', 'LeadsController::removeInstallments');
});
$routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
@ -544,6 +545,7 @@ $routes->group("/bdsReport", ["filter" => "authMVC"], function ($routes) {
$routes->group("/ticket", ["filter" => "authMVC"], function ($routes) {
$routes->match( ['get', 'post'], 'list','TicketController::ticketList');
$routes->get('feedback-list','TicketController::feedbackList');
$routes->get('remove','TicketController::removeTicket');
$routes->get('new/(:any)','TicketController::ticket_form/$1');
$routes->post('create','TicketController::createTicket');
$routes->post('update','TicketController::updateTicket');

View File

@ -44,6 +44,7 @@ use App\Models\ClientApiModel;
use App\Controllers\EmpDataServiceController;
use App\Controllers\GoogleDriveController;
use App\Controllers\PolicyTransactionController;
use App\Helpers\sendMailNotification;
use App\Models\PTCOShareDetailsModel;
@ -4604,9 +4605,14 @@ class ClientController extends AdminController
// $employeeRestController->employeesEnrollmentInsert(['file_id' => 836]);
// $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]);
$empServiceController = new EmployeeServiceController();
// $res = $empServiceController->excelFileFormatValidation(['file_id' => '873']);
// $res = $empServiceController->excelFileDataValidation(['file_id' => '874']);
// $res = $empServiceController->excelFileFormatValidation(['file_id' => '865']);
// $res = $empServiceController->excelFileDataValidation(['file_id' => '865']);
// $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '829']);
// $res = $empServiceController->employeeDisembark(['file_id' => '858']);
$policyTransactionController = new PolicyTransactionController();
// $res = $policyTransactionController->validateInsurerStatement(['file_id' => '17']);
// $res = $policyTransactionController->updateInsurerStatement(['file_id' => '22']);
// dd('-----', $res);

View File

@ -728,6 +728,7 @@ class EmployeeServiceController extends AdminController
$allowedHighestColumn = end($columns_to_check);
// dd($allowedHighestColumn);
$excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
// !dd(array_chunk($excel_data,20)[0]);
//check no of columns in excel
@ -997,7 +998,7 @@ class EmployeeServiceController extends AdminController
$allowedHighestColumn = end($columns_to_check);
$excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
// print_r($keys);die();
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
//remove header
unset($excel_data[0]);
@ -1367,7 +1368,15 @@ class EmployeeServiceController extends AdminController
break;
}
// echo '<br>START- ' . $row[2];
$employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->where('client_branch_id',$file['client_branch_id'])->first();
$employee = $this->employeeModel
->where('emp_code', $row[1])
->where('name',$row[2])
->where('client_id',$file['client_id'])
->where('client_branch_id',$file['client_branch_id'])
->where('emp_status !=','truncated')
->where('is_active', 1)
->first();
// $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first();
// dd($employee);
if(is_array($employee) && count($employee))
@ -1380,6 +1389,7 @@ class EmployeeServiceController extends AdminController
->where('name',$employee['name'])
->where('field_name','emp_status')
->where('status !=','truncated')
->where('is_active', 1)
->findAll();
// dd($existing_endorsements);

View File

@ -30,6 +30,7 @@ use App\Models\RFQModel;
use App\Models\InsurerModel;
use App\Models\OccupancyMasterModel;
use App\Models\LeadFilesModel;
use App\Models\LeadInstallmentPaymentDetails;
use App\Helpers\MailHelper;
use App\Helpers\ExcelMergeHelper;
@ -65,6 +66,7 @@ class LeadsController extends BaseController
protected $insurerModel;
protected $occupancyModel;
protected $leadFilesModel;
protected $leadInstallmentPaymentDetails;
//variables for storing array
protected $issuer;
@ -96,6 +98,7 @@ class LeadsController extends BaseController
$this->insurerModel = new InsurerModel();
$this->occupancyModel = new OccupancyMasterModel();
$this->leadFilesModel = new LeadFilesModel();
$this->leadInstallmentPaymentDetails = new LeadInstallmentPaymentDetails();
$this->issuer = [1 => 'JIBS', 2 => 'Nhance'];
$this->clientType = [1 => 'Group', 2 => 'Individual'];
@ -104,14 +107,18 @@ class LeadsController extends BaseController
$this->buisnessType = array_column($data, 'name', 'id');
// $this->buisnessType = [1 => 'Public Sector', 2 => 'Private Sector',3=> 'Trust',4 => 'Proprietorship',5 => 'Partnership',6 => 'Private',7 => 'Individual'];
$this->leadsStatus = [
'queued' => 'In-Queued',
'qcr_sent' => 'QCR sent',
'lost' => 'Lost',
'co_insurer_pending' => 'Co-Insurer Pending',
'won' => 'Won',
'completed_with_corrections' => 'Completed with Corrections',
'completed_without_corrections' => 'Completed w/o Corrections',
'queued' => 'In-Queued',
'rfq_created' => 'RFQ Created',
'rfq_sent' => 'RFQ Sent',
'qcr_created' => 'QCR Created',
'qcr_sent' => 'QCR Sent',
'lost' => 'Lost',
'co_insurer_pending' => 'Co-Insurer Pending',
'won' => 'Won',
'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',
@ -594,12 +601,14 @@ class LeadsController extends BaseController
$this->leadFilesModel->where('id', $value['id'])->set($lead_file_data)->update();
} else {
$lead_file_data = [
'lead_id' => $lead_id,
'docs_name' => $value['docs_name'],
'file_name' => $value['file_name'],
];
$this->leadFilesModel->insert($lead_file_data);
if (!empty($value['file_name'])) {
$lead_file_data = [
'lead_id' => $lead_id,
'docs_name' => $value['docs_name'],
'file_name' => $value['file_name'],
];
$this->leadFilesModel->insert($lead_file_data);
}
}
if ($key == 0 && !empty($value['file_name'])) {
@ -621,6 +630,8 @@ class LeadsController extends BaseController
return $this->respond(['status' => false, 'message' => 'File could not be removed.'], 200);
}
}
//--------RFQ-----------------------------------------------------------------------------------------------
@ -678,7 +689,7 @@ class LeadsController extends BaseController
$data['exclusiveUserList'] = $this->userModel->getexclusiveUserListForRFQ();
$data['lead_data'] = $lead_data;
$mail_content = "
$mail_content = '
<p>Dear Sir,</p>
<p>Greetings From Nhance India!</p>
<p>Please find attached the {{RFQ_OR_QCR}} for <strong>{{POLICY_TYPE}}</strong> policy pertaining to <strong>{{CLIENT_NAME}}</strong>.</p>
@ -689,13 +700,11 @@ class LeadsController extends BaseController
<div style=\"margin: 0; padding: 0; line-height: 1.2;\">
<div>{{LOGGED_USER_NAME}}</div>
<div>Email: {{LOGGED_USER_EMAIL}}</div>
<div>Mobile: {{LOGGED_USER_MOBILE}}</div>
</div>
";
<img src="{{LOGO_PATH}}" alt="Nhance Logo" width="100" style="margin-top:10px;">
';
if ($data['lead_data']['policy_end_date'] != null) {
$subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}} {{POLICY_END_DATE}}";
@ -707,6 +716,8 @@ class LeadsController extends BaseController
$data['subject'] = $this->transformMailContent($lead_data, $subject, $data['page_name']);
$data['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null;
$installment_data['installments'] = $this->leadInstallmentPaymentDetails->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null;
$data['lead_data']['installment_data'] = view('rfq/installment_fields', $installment_data) ?? null;
$data['attachment_html'] = view('rfq/attachment_files', $data) ?? "";
$data['user_team'] = $this->userModel->select("ut.team_id")->join("user_teams ut", "ut.user_id = user_profiles.id and ut.is_active = 1")->where("user_profiles.is_active", 1)->first()['team_id'];
// dd($data);
@ -781,12 +792,27 @@ class LeadsController extends BaseController
return $this->respond(['status' => false, 'message' => 'Lead ID is required'], 400);
}
$rfq_created = $this->RFQModel->where('lead_id', $lead_id)->where('is_active', 1)->countAllResults();
$qcr_created = false;
$inputJson = json_decode($data['json'], true);
if (isset($inputJson['premium_data']) && !empty($inputJson['premium_data'])) {
$sortedJson = $this->reorderProposalsByInsurerTotal($inputJson);
$data['json'] = json_encode($sortedJson);
$qcr_created = true;
}
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'])){
$proposel_count = $proposal_data['proposal_data']['over_all_column_data'];
foreach ($proposel_count as $key => $value) {
if(!empty($value['insurers'])){
$qcr_created = true;
}
}
}
}
$data['type'] = 1;
@ -826,6 +852,19 @@ class LeadsController extends BaseController
}
if ($insertId) {
if(empty($rfq_created)){
$this->leadsModel->update($lead_id, ['status' => "rfq_created"]);
}
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'])
->set(['status' => "qcr_created"])
->update();
}
$message = ($data['submit_type'] ?? '') == 'QCR' ? 'QCR saved successfully' : 'RFQ saved successfully';
return $this->respond([
'status' => true,
@ -1068,6 +1107,17 @@ class LeadsController extends BaseController
return $result;
}
public function removeInstallments()
{
$id = $this->request->getGet('id');
// print_r($id); die;
if (!empty($id)) {
$this->leadInstallmentPaymentDetails->whereIn('id', $id)->set(['is_active' => 0])->update();
return $this->respond(['status' => true, 'message' => 'Removed successfully'], 200);
} else {
return $this->respond(['status' => false, 'message' => 'Could not be removed.'], 200);
}
}
//-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------
@ -1144,36 +1194,32 @@ class LeadsController extends BaseController
if ($rfq_data['policy_type_id'] == 2) {
$lead_data = [
'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'Policy Status' => $rfq_data['status'],
'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
'No of Employees' => $rfq_data['incept_emp_count'],
'No of Dependents' => $rfq_data['incept_dept_count'],
'Total Lives' => $rfq_data['incept_no_of_lives'],
'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])),
'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 ($rfq_data['policy_type_id'] == 1) {
$lead_data = [
'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'No of Employees at Inception' => $rfq_data['incept_emp_count'],
'Total Sum Insured at Inception ' => $rfq_data['total_si_at_incept'],
'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])),
'Policy Status' => $rfq_data['status'],
'Existing Insurer' => $rfq_data['insurer_name'],
'TPA ' => $rfq_data['tpa_name'],
'Policy Period' => !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 Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
];
}
} else {
if ($rfq_data['policy_type_id'] == 2) {
$lead_data = [
'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'Policy Status' => $rfq_data['status'],
'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
'No of Employees at Inception' => $rfq_data['incept_emp_count'],
'No of Dependents at Inception' => $rfq_data['incept_dept_count'],
@ -1187,7 +1233,7 @@ class LeadsController extends BaseController
'No of Dependents at Renewal' => $rfq_data['renewal_dept_count'],
'Total Lives at Renewal ' => $rfq_data['renewal_no_of_lives'],
'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])),
'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' => $rfq_data['premium_at_inception'],
'Premium as on (Date - DD MM YYYY should be entered based on the claims dump report)' => $rfq_data['premium_date'],
@ -1199,12 +1245,11 @@ class LeadsController extends BaseController
];
} else if ($rfq_data['policy_type_id'] == 1) {
$lead_data = [
'policy_end_date' => $rfq_data['policy_end_date'],
'Insured' => $rfq_data['client_name'],
'No of Employees at Renewal' => $rfq_data['renewal_emp_count'],
'Total Sum Insured at Renewal ' => $rfq_data['total_si_at_renewal'],
'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])),
'Policy Status' => $rfq_data['status'],
'Policy Period' => !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 Type' => $this->leadType[$rfq_data['lead_type']] ?? "",
'Existing Insurer' => $rfq_data['insurer_name'],
'TPA ' => $rfq_data['tpa_name'],
];
@ -1214,13 +1259,16 @@ class LeadsController extends BaseController
$data = json_decode($rfq_data['json'], true);
// dd($data);
$sheetName = 'Worksheet';
if ($type == 2) {
$sheetName = 'QCR';
$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) {
$sheetName = 'RFQ';
$data = $this->convertJsonForQCR($data, $type);
// dd($data);
}
@ -1228,6 +1276,7 @@ class LeadsController extends BaseController
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle($sheetName);
// Start with lead_data at the top
@ -1247,22 +1296,6 @@ class LeadsController extends BaseController
],
]);
// Set column width to fit the image properly
$sheet->getColumnDimension('C')->setWidth(20); // Adjust as needed
$sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed
$drawing = new Drawing();
$path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path
$drawing->setPath($path);
$drawing->setCoordinates("C{$rowNumber}"); // Set position in column B
$drawing->setHeight(35); // Adjust image height
// Center align the image in the cell
$drawing->setOffsetX(30); // Adjust horizontal offset
$drawing->setOffsetY(5); // Adjust vertical offset
$drawing->setWorksheet($sheet);
// Apply center alignment to the cell
$sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
@ -1309,11 +1342,10 @@ class LeadsController extends BaseController
$rowNumber++;
}
// Set column width based on max content length (adjusted for padding)
// // Set column width based on max content length (adjusted for padding)
$sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2);
$sheet->getColumnDimension('B')->setWidth($maxWidthA * 5);
$sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2);
// $sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2);
$sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.6);
// $rowNumber += 2;
@ -1355,9 +1387,13 @@ class LeadsController extends BaseController
]);
$sheet->mergeCells($mergeRange);
$rowNumber_for_remove_quote_asked = $rowNumber;
$rowNumber = $rowNumber + 1;
$subHeaderRow = $rowNumber + 1;
if($type == 2){
$subHeaderRow = $rowNumber + 1;
}else{
$subHeaderRow = $rowNumber_for_remove_quote_asked;
}
$columnLetter = 'A';
foreach ($headers as $header) {
@ -1398,9 +1434,12 @@ class LeadsController extends BaseController
// Add subheaders
foreach ($header['subHeaders'] as $subHeader) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") {
if($type == 2){
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
}
if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C") {
$sheet->getColumnDimension($columnLetter)->setWidth(35);
} else {
$sheet->getColumnDimension('A')->setWidth(10);
@ -1519,6 +1558,51 @@ class LeadsController extends BaseController
]);
}
//set imgage and align the row and column
// Kint::dump($columnLetter);
if($type == 2){
$columnLetter_img = $this->getPreviousColumn($columnLetter, 2);
}else{
$columnLetter_img = $this->getPreviousColumn($columnLetter);
}
// dd($columnLetter_img);
$company_name = $this->getPreviousColumn($columnLetter_img);
$mergeRange1 = "A1:{$company_name}1";
$sheet->mergeCells($mergeRange1);
$rowCount = count($lead_data);
for ($i = 2; $i <= $rowCount + 1; $i++) {
$mergeRange1 = "C{$i}:{$columnLetter_img}{$i}";
$sheet->mergeCells($mergeRange1);
$sheet->getStyle($mergeRange1)->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => 'FF000000'], // Black color
],
],
]);
}
$sheet->getColumnDimension($columnLetter_img)->setWidth(40);
$sheet->getRowDimension(1)->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("{$columnLetter_img}1"); // Set position in column B
$drawing->setHeight(35); // Adjust image height
// Center align the image in the cell
$drawing->setOffsetX(110); // Adjust horizontal offset
$drawing->setOffsetY(10); // Adjust vertical offset
$drawing->setWorksheet($sheet);
//end
// Auto-size columns
// foreach ($sheet->getColumnIterator() as $column) {
// $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
@ -1556,7 +1640,7 @@ class LeadsController extends BaseController
}
$lastRow = count($lead_data) + 1;
$leadRange = "A1:C{$lastRow}";
$leadRange = "A1:{$columnLetter_img}{$lastRow}";
$sheet->getStyle($leadRange)->applyFromArray([
'borders' => [
@ -1576,12 +1660,12 @@ class LeadsController extends BaseController
$policy_year = "$current_year-$next_year";
if (!empty($rfq_data['policy_end_date'])) {
$policy_expiry = strtotime($lead_data['policy_end_date']);
$policy_expiry = strtotime($rfq_data['policy_end_date']);
$formatted_policy = date("d-m-Y", $policy_expiry);
$filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '(Due On ' . $formatted_policy . ')' . '.xlsx';
} else {
$filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '_' . '.xlsx';
}
@ -2087,11 +2171,12 @@ class LeadsController extends BaseController
$bcc_mails = [];
//get CC Mails
if ($recipient_type == 'internal' || $recipient_type == 'placement' || $recipient_type == 'insurer' || $recipient_type == 'client') {
if ($recipient_type == 'internal' || $recipient_type == 'insurer' || $recipient_type == 'client') {
$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
@ -2115,6 +2200,8 @@ 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'){
$cc_mails = isset($params['cc']) ? json_decode($params['cc'], true) : "";
}
//get BCC Mails
@ -2182,6 +2269,7 @@ class LeadsController extends BaseController
$result = $file_info['filePath'];
// return $this->respond(['status' => 'fail', 'code' => 200, 'messgae' => 'File Not Found'], 200);
}
// print_rr($result); die;
// print_rr($file_info);
// $file_path = WRITEPATH."uploads/excel/sample/correction.xls";
@ -2200,15 +2288,11 @@ class LeadsController extends BaseController
//get recipient address
if ($recipient_type == 'insurer' || $recipient_type == 'placement') {
// print_r($recipient_mail); die;
$recipient_data = $this->levelContactModel
->where(['contact_type' => 'insurer', 'is_active' => 1])
->whereIn('id', $recipient_mail)
->findAll();
// print_r($recipient_data); die;
} else if ($recipient_type == 'client') {
$mailIDS = explode(',', $params['contact_mail']);
@ -2270,16 +2354,52 @@ class LeadsController extends BaseController
$data = [
'proposel_data' => json_encode($lead_update_data),
'status' => 'won',
'placement_date' => change_date_format($params['placement_date'], 'd/m/Y', 'Y-m-d'),
'payment_date' => change_date_format($params['payment_date'], 'd/m/Y', 'Y-m-d'),
'utr_no' => $params['utr_no'],
'is_cd' => $params['is_cd'],
'premium_amount' => $params['premium_amount'],
'total_amount' => $params['total_amount'],
'cd_amount' => $params['cd_amount'],
'placement_date' => date('Y-m-d', strtotime($params['placement_date']) ?? "") ?? null,
'payment_date' => date('Y-m-d', strtotime($params['payment_date'] ?? "")) ?? null,
'utr_no' => $params['utr_no'] ?? 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,
'no_of_installment' => $params['no_of_installment'] ?? null,
'is_installment' => $params['is_installment'] ?? null,
];
$this->leadsModel->where('id', $lead_id)->set($data)->update();
if(isset($params['installments']) && !empty($params['installments'])){
$installment_data = json_decode($params['installments'], true);
if(!empty($installment_data)){
foreach ($installment_data as $key => $value) {
$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{
$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();
}
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();
}
//delete attachment file
@ -2919,6 +3039,10 @@ class LeadsController extends BaseController
$current_year = date('Y');
$next_year = $current_year + 1;
$policy_year = "$current_year-$next_year";
$page_name = $page_name == "QCR" ? "Quote Comparison Report" : $page_name;
$log_path = base_url() . '/public/assets/images/Nhance-Logo-Final.png';
// $log_path ='https://venbait.in/nhance/dev/public/assets/images/Nhance-Logo-Final.png';
// dd($log_path);
$policy_expiry = strtotime($lead_data['policy_end_date']);
@ -2941,6 +3065,7 @@ class LeadsController extends BaseController
$message = str_replace("{{LOGGED_USER_NAME}}", ucfirst($logged_user_data['first_name']) . " " . ucfirst($logged_user_data['last_name']), $message);
$message = str_replace("{{LOGGED_USER_EMAIL}}", $logged_user_data['email'], $message);
$message = str_replace("{{LOGGED_USER_MOBILE}}", $logged_user_data['mobile'], $message);
$message = str_replace("{{LOGO_PATH}}", $log_path, $message);
return $message;
} else {
@ -3937,10 +4062,15 @@ class LeadsController extends BaseController
$lead_file = $this->leadFilesModel->where('lead_id', $lead_id)->where('id', $id)->where('is_active', 1)->first();
if ($lead_file) {
$attachments[] = [
'fileName' => $lead_file['file_name'],
'filePath' => $lead_file_path . $lead_file['file_name']
];
$fullPath = $lead_file_path . $lead_file['file_name'];
if (file_exists($fullPath) && !empty($fileName)) {
$attachments[] = [
'fileName' => $lead_file['file_name'],
'filePath' => $fullPath
];
}
}
}
}

View File

@ -2380,7 +2380,7 @@ class PolicyTransactionController extends BaseController
if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) {
$total_amt += $actual_bp_brokerage;
//percentage reverse calculation
if ($actual_bp_per == 0 || $actual_bp_per == "") {
if (($actual_bp_per == 0 || $actual_bp_per == 0) && !empty($actual_bp_amt)) {
$actual_bp_per = round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2);
}
} else {
@ -2395,7 +2395,7 @@ class PolicyTransactionController extends BaseController
if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") {
$total_amt += $actual_tp_brokerage;
//percentage reverse calculation
if ($actual_tp_per == 0 || $actual_tp_per == "") {
if (($actual_tp_per == 0 || $actual_tp_per == "") && !empty($actual_tp_amt)) {
$actual_tp_per = ($actual_tp_brokerage / $actual_tp_amt) * 100;
}
} else {
@ -2410,7 +2410,7 @@ class PolicyTransactionController extends BaseController
if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") {
$total_amt += $actual_tep_brokerage;
//percentage reverse calculation
if ($actual_tep_per == 0 || $actual_tep_per == "") {
if (($actual_tep_per == 0 || $actual_tep_per == "") && !empty($actual_tep_amt)) {
$actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100;
}
} else {

View File

@ -954,10 +954,27 @@ class TicketController extends BaseController
}
public function convertHtmlToText($html)
{
if(!empty($html)){
$dom = new DOMDocument();
@$dom->loadHTML($html);
return strip_tags($dom->saveHTML());
}else{
return '';
}
}
public function removeTicket()
{
$dom = new DOMDocument();
@$dom->loadHTML($html);
return strip_tags($dom->saveHTML());
$ticket_id = $this->request->getGet('ticket_id');
if(!empty($ticket_id)){
$data['is_active'] = 0;
$this->ticketMasterModel->where('id', $ticket_id)->set($data)->update();
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Claim removed successfully'], 200);
}else{
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove Claim'], 200);
}
}
//---- Email Trigger Part----------------------------------------------------------------------------------------------

View File

@ -0,0 +1,54 @@
<?php
namespace App\Models;
use CodeIgniter\Model;
class LeadInstallmentPaymentDetails extends Model
{
protected $table = 'lead_installment_payment_details';
protected $primaryKey = 'id';
protected $allowedFields = [
'lead_id',
'installment_amount',
'payment_date',
'utr_no',
'created_by',
'updated_by',
'is_active'
];
// Callbacks
protected $allowCallbacks = true;
protected $beforeInsert = ["checkAndADDCreatedByValue"];
protected $afterInsert = [];
protected $beforeUpdate = ["checkAndUpdateUpdatedByValue"];
protected $afterUpdate = [];
protected $beforeFind = [];
protected $afterFind = [];
protected $beforeDelete = [];
protected $afterDelete = [];
protected function checkAndADDCreatedByValue(array $data)
{
// Check if 'updated_by' value is null or empty
if (empty($data['data']['created_by'])) {
// Set 'updated_by' value to the current session user ID
$data['data']['created_by'] = get_session_userid();
}
return $data;
}
protected function checkAndUpdateUpdatedByValue(array $data)
{
// Check if 'updated_by' value is null or empty
if (empty($data['data']['updated_by'])) {
// Set 'updated_by' value to the current session user ID
$data['data']['updated_by'] = get_session_userid();
}
return $data;
}
}

View File

@ -92,7 +92,10 @@ class LeadsModel extends Model
'source_policy_end_date',
'payment_date',
'is_cd'
'is_cd',
'is_installment',
'no_of_installment',
];

View File

@ -1004,7 +1004,7 @@ maxDate.setDate(today.getDate() + 180);
// Request failed, handle error
console.error("Request failed:", status, error);
toastr.error('Something went wrong! Try later', 'Error');
$('#uploadForm')[0].reset();
// $('#uploadForm')[0].reset();
$('.close').click()
$('.loader').fadeOut();
$('.loader-mask').delay(10).fadeOut('slow');

View File

@ -1,131 +1,131 @@
<style>
body {
margin-top: 20px;
background: #FAFAFA;
}
body{
margin-top:20px;
background:#FAFAFA;
}
.order-card {
color: #fff;
}
.order-card {
color: #fff;
}
.bg-c-blue {
background: linear-gradient(45deg,#4099ff,#73b4ff);
}
.bg-c-blue {
background: linear-gradient(45deg, #4099ff, #73b4ff);
}
.bg-c-green {
background: linear-gradient(45deg,#2ed8b6,#59e0c5);
}
.bg-c-green {
background: linear-gradient(45deg, #2ed8b6, #59e0c5);
}
.bg-c-yellow {
background: linear-gradient(45deg,#FFB64D,#ffcb80);
}
.bg-c-yellow {
background: linear-gradient(45deg, #FFB64D, #ffcb80);
}
.bg-c-pink {
background: linear-gradient(45deg,#FF5370,#ff869a);
}
.bg-c-pink {
background: linear-gradient(45deg, #FF5370, #ff869a);
}
.bg-c-red {
background: linear-gradient(45deg,#FF4E50,#F9D423);
}
.bg-c-red {
background: linear-gradient(45deg, #FF4E50, #F9D423);
}
.bg-c-purple {
background: linear-gradient(45deg,#9D50BB,#6E48AA);
}
.bg-c-purple {
background: linear-gradient(45deg, #9D50BB, #6E48AA);
}
.bg-c-orange {
background: linear-gradient(45deg,#F2994A,#F2C94C);
}
.bg-c-orange {
background: linear-gradient(45deg, #F2994A, #F2C94C);
}
.bg-c-teal {
background: linear-gradient(45deg,#1ABC9C,#16A085);
}
.bg-c-teal {
background: linear-gradient(45deg, #1ABC9C, #16A085);
}
.bg-c-cyan {
background: linear-gradient(45deg,#00C9FF,#92FE9D);
}
.bg-c-cyan {
background: linear-gradient(45deg, #00C9FF, #92FE9D);
}
.bg-c-lime {
background: linear-gradient(45deg,#A8E063,#56AB2F);
}
.bg-c-lime {
background: linear-gradient(45deg, #A8E063, #56AB2F);
}
.bg-c-indigo {
background: linear-gradient(45deg,#3F51B5,#5A55AE);
}
.bg-c-indigo {
background: linear-gradient(45deg, #3F51B5, #5A55AE);
}
.bg-c-Pelorous {
background: linear-gradient(45deg, #00d6db, #00a8b5);
}
.bg-c-Pelorous {
background: linear-gradient(45deg, #00d6db, #00a8b5);
}
.bg-c-Pelorous2 {
background: linear-gradient(45deg, #02a8b5, #017f8b);
}
.bg-c-Pelorous2 {
background: linear-gradient(45deg, #02a8b5, #017f8b);
}
.bg-c-Pelorous3 {
background: linear-gradient(45deg, #098895, #046063);
}
.bg-c-Pelorous3 {
background: linear-gradient(45deg, #098895, #046063);
}
.bg-c-Grenadier {
background: linear-gradient(45deg, #ff9d37, #ff7a10);
}
.bg-c-Grenadier {
background: linear-gradient(45deg, #ff9d37, #ff7a10);
}
.bg-c-Grenadier2 {
background: linear-gradient(45deg, #ff8010, #ff4c00);
}
.bg-c-Grenadier2 {
background: linear-gradient(45deg, #ff8010, #ff4c00);
}
.bg-c-Grenadier3 {
background: linear-gradient(45deg, #f06306, #cc4b05);
}
.bg-c-Grenadier3 {
background: linear-gradient(45deg, #f06306, #cc4b05);
}
.bg-c-SilverChalice {
background: linear-gradient(45deg, #a3a8a8, #8f9494);
}
.bg-c-SilverChalice {
background: linear-gradient(45deg, #a3a8a8, #8f9494);
}
.bg-c-SilverChalice2 {
background: linear-gradient(45deg, #7e8484, #686e6e);
}
.bg-c-SilverChalice2 {
background: linear-gradient(45deg, #7e8484, #686e6e);
}
.bg-c-SilverChalice3 {
background: linear-gradient(45deg, #5c6363, #434949);
}
.bg-c-SilverChalice3 {
background: linear-gradient(45deg, #5c6363, #434949);
}
.card {
border-radius: 5px;
-webkit-box-shadow: 0 1px 2.94px 0.06px rgba(4,26,55,0.16);
box-shadow: 0 1px 2.94px 0.06px rgba(4,26,55,0.16);
border: none;
margin-bottom: 30px;
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.card {
border-radius: 5px;
-webkit-box-shadow: 0 1px 2.94px 0.06px rgba(4, 26, 55, 0.16);
box-shadow: 0 1px 2.94px 0.06px rgba(4, 26, 55, 0.16);
border: none;
margin-bottom: 30px;
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.card .card-block {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 25px;
padding-right: 25px;
}
.card .card-block {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 25px;
padding-right: 25px;
}
.order-card i {
font-size: 26px;
}
.order-card i {
font-size: 26px;
}
.f-left {
float: left;
}
.f-left {
float: left;
}
.f-right {
float: right;
}
.f-right {
float: right;
}
.m-b-1{
margin-top: 0;
margin-bottom: 5px;
}
.m-b-1 {
margin-top: 0;
margin-bottom: 5px;
}
</style>
<?php
$isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_team()) ? 'show active' : '';
$isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID, user_team()) ? 'show active' : '';
?>
<div class="tab-pane fade <?= $isActive ?>" id="leads-dash-tab">
<div class="row">
@ -133,7 +133,9 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
<div class="card bg-c-Pelorous order-card" onclick="hide_and_show_tile(1,1)">
<div class="card-block">
<h6 class="m-b-20 font-15">Leads</h6>
<h2 class="text-right"><i class="mdi mdi-playlist-check f-left"></i><span><?= isset($lead_data)? $lead_data['total'] : 0 ?></span></h2>
<h2 class="text-right"><i
class="mdi mdi-playlist-check f-left"></i><span><?= isset($lead_data) ? $lead_data['total'] : 0 ?></span>
</h2>
<p class="m-b-1">&nbsp;<span class="f-right"></span></p>
<p class="m-b-1">&nbsp;<span class="f-right"></span></p>
</div>
@ -143,7 +145,9 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
<div class="card bg-c-Pelorous order-card" onclick="hide_and_show_tile(1,2)">
<div class="card-block">
<h6 class="m-b-20 font-15">BDS Renewals</h6>
<h2 class="text-right"><i class="mdi mdi-playlist-check f-left"></i><span><?= isset($bds_renewal) ? $bds_renewal['total'] : 0?></span></h2>
<h2 class="text-right"><i
class="mdi mdi-playlist-check f-left"></i><span><?= isset($bds_renewal) ? $bds_renewal['total'] : 0 ?></span>
</h2>
<p class="m-b-1">&nbsp;<span class="f-right"></span></p>
<p class="m-b-1">&nbsp;<span class="f-right"></span></p>
</div>
@ -151,39 +155,42 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
</div>
</div>
<div class="row">
<div class="status_tile" style="padding-bottom: 10px;padding-left: 17px; ">
<a href="#" onclick="hide_and_show_tile(2)" ><i class="fas fa-arrow-left"></i> Back to Overview</a>
</div>
<div class="status_tile" style="padding-left: 30px;">
<a href="#" id="main_tile" >Current Tile : </a>
</div>
</div>
<div class="row">
<?php
<div class="status_tile" style="padding-bottom: 10px;padding-left: 17px; ">
<a href="#" onclick="hide_and_show_tile(2)"><i class="fas fa-arrow-left"></i> Back to Overview</a>
</div>
<div class="status_tile" style="padding-left: 30px;">
<a href="#" id="main_tile">Current Tile : </a>
</div>
</div>
<div class="row">
<?php
$colorSetCount = count($colorShades); // Number of color sets
$shadeCount = count($colorShades[0]); // Number of shades per set
$index = 0;
foreach ($lead_data as $key => $value) : ?>
<?php
if ($key == "total"|| $key == "won" || substr($key, -4) === "_ids") { continue; } // Skip the total key
<?php
if ($key == "total" || $key == "won" || substr($key, -4) === "_ids") {
continue;
} // Skip the total key
?>
<?php
// Initialize color set and shade indexes
$colorSetIndex = floor($index / $shadeCount) % $colorSetCount; // Reset color set after each set
$shadeIndex = $index % $shadeCount; // Cycle through shades within the set
// Initialize color set and shade indexes
$colorSetIndex = floor($index / $shadeCount) % $colorSetCount; // Reset color set after each set
$shadeIndex = $index % $shadeCount; // Cycle through shades within the set
// Get the background color for the current tile
$bgColor = $colorShades[$colorSetIndex][$shadeIndex];
// Get the background color for the current tile
$bgColor = $colorShades[$colorSetIndex][$shadeIndex];
?>
<?php
$formattedStatus = strlen($key) < 5 ? strtoupper($key): ucwords(str_replace('_', ' ', $key));
$truncatedStatus = strlen($formattedStatus) > 20 ? substr($formattedStatus, 0, 15) . '...' : $formattedStatus;
$showTooltip = strlen($formattedStatus) > 20;
$formattedStatus = strlen($key) < 5 ? strtoupper($key) : ucwords(str_replace('_', ' ', $key));
$truncatedStatus = strlen($formattedStatus) > 20 ? substr($formattedStatus, 0, 15) . '...' : $formattedStatus;
$showTooltip = strlen($formattedStatus) > 20;
?>
<div class="col-md-2 col-xl-1 leadStatusTitle_1" style="display: none;">
<div class="card order-card" style="background: <?= $bgColor ?>;" onclick="linkRedirectForLeads('<?= esc(strtolower(str_replace(' ', '_', $key)), 'js') ?>','<?= $lead_data[$key . '_ids'] ?? '' ?>')">
<div class="card order-card" style="background: <?= $bgColor ?>;"
onclick="linkRedirectForLeads('<?= esc(strtolower(str_replace(' ', '_', $key)), 'js') ?>','<?= $lead_data[$key . '_ids'] ?? '' ?>')">
<h2 class="text-center"><span><?= $value ?></span></h2>
<h6 class="m-b-20 font-15 text-center"
<?= $showTooltip ? 'data-toggle="tooltip" title="' . htmlspecialchars($formattedStatus, ENT_QUOTES, 'UTF-8') . '"' : '' ?>>
@ -191,35 +198,45 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
</h6>
</div>
</div>
<?php endforeach ?>
</div>
<div class="row">
<?php
<?php
$colorSetCount = count($colorShades); // Number of color sets
$shadeCount = count($colorShades[0]); // Number of shades per set
$index = 0;
foreach ($bds_renewal as $key => $value) : ?>
<?php
if ($key == "total" || substr($key, -4) === "_ids"){ continue; } // Skip the total key
?>
<?php
// Initialize color set and shade indexes
$colorSetIndex = floor($index / $shadeCount) % $colorSetCount; // Reset color set after each set
$shadeIndex = $index % $shadeCount; // Cycle through shades within the set
$index = 0;
// Get the background color for the current tile
$bgColor = $colorShades[$colorSetIndex][$shadeIndex];
foreach ($bds_renewal as $key => $value) : ?>
<?php
if ($key == "total" || substr($key, -4) === "_ids") {
continue;
} // Skip the total key
?>
<?php
$formattedStatus = strlen($key) < 5 ? strtoupper($key): ucwords(str_replace('_', ' ', $key));
$truncatedStatus = strlen($formattedStatus) > 20 ? substr($formattedStatus, 0, 15) . '...' : $formattedStatus;
$showTooltip = strlen($formattedStatus) > 20;
// Initialize color set and shade indexes
$colorSetIndex = floor($index / $shadeCount) % $colorSetCount; // Reset color set after each set
$shadeIndex = $index % $shadeCount; // Cycle through shades within the set
// Get the background color for the current tile
$bgColor = $colorShades[$colorSetIndex][$shadeIndex];
?>
<?php
$formattedStatus = strlen($key) < 5 ? strtoupper($key) : ucwords(str_replace('_', ' ', $key));
$truncatedStatus = strlen($formattedStatus) > 20 ? substr($formattedStatus, 0, 15) . '...' : $formattedStatus;
$showTooltip = strlen($formattedStatus) > 20;
?>
<div class="col-md-2 col-xl-1 leadStatusTitle_2" style="display: none;">
<div class="card order-card" style="background: <?= $bgColor ?>;" onclick="linkRedirectForPolicy('<?= isset($bds_renewal[$key . '_ids']) ? str_replace(' ', '_', $bds_renewal[$key . '_ids']) : '' ?>')">
<?php
$policyIds = isset($bds_renewal[$key . '_ids'])
? (is_array($bds_renewal[$key . '_ids'])
? implode('_', $bds_renewal[$key . '_ids'])
: str_replace(' ', '_', $bds_renewal[$key . '_ids']))
: '';
?>
<div class="card order-card" style="background: <?= $bgColor ?>;"
onclick="linkRedirectForPolicy('<?= $policyIds ?>')">
<h2 class="text-center"><span><?= $value ?></span></h2>
<h6 class="m-b-20 font-15 text-center"
<?= $showTooltip ? 'data-toggle="tooltip" title="' . htmlspecialchars($formattedStatus, ENT_QUOTES, 'UTF-8') . '"' : '' ?>>
@ -227,23 +244,23 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
</h6>
</div>
</div>
<?php endforeach ?>
</div>
</div>
<script>
$(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
$(".status_tile").hide();
});
function hide_and_show_tile(type,leadType = null) {
function hide_and_show_tile(type, leadType = null) {
if (type == 1) {
$('.leadTypeTile').hide();
$('.status_tile').show();
} else {
$('.leadTypeTile').show();
@ -254,12 +271,12 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
}
if (type == 1 && leadType != null && leadType == 1){
if (type == 1 && leadType != null && leadType == 1) {
$('.leadStatusTitle_1').show();
$('#main_tile').text("Viewing Details For : Leads");
}
if (type == 1 && leadType != null && leadType == 2){
if (type == 1 && leadType != null && leadType == 2) {
$('.leadStatusTitle_2').show();
$("#main_tile").text("Viewing Details For : BDS Renewals");
@ -267,25 +284,25 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
}
function linkRedirectForPolicy(ids){
function linkRedirectForPolicy(ids) {
var url = "<?= base_url("policy_tranction/inception/list") ?>";
var data = {
ids : ids,
is_dashboard : 1
ids: ids,
is_dashboard: 1
}
redirectWithPost(url,data, "POST");
redirectWithPost(url, data, "POST");
}
function linkRedirectForLeads(status,ids){
function linkRedirectForLeads(status, ids) {
var url = "<?= base_url("leads/list") ?>";
var data = {
ids : ids,
is_dashboard : 1
ids: ids,
is_dashboard: 1
}
redirectWithPost(url,data, "POST");
redirectWithPost(url, data, "POST");
}
function redirectWithPost(url, data = {}, method = "GET") {
@ -308,5 +325,4 @@ $isActive = get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_t
document.body.appendChild(form);
form.submit();
}
</script>

View File

@ -425,10 +425,10 @@
}
// console.log("form from : ", formDataSplitUp);
if (productSelectionData.multipleProduct == 'on') {
let selectionType = productSelectionData.multilocation_type;
// if (productSelectionData.multipleProduct == 'on') {
// let selectionType = productSelectionData.multilocation_type;
if (selectionType == 'multiFloater') {
// if (selectionType == 'multiFloater') {
let InProcess = [...document.querySelectorAll('[id^="stockInProcess_"]')].map(el => Number(el.value) || 0);
let rawMaterial = [...document.querySelectorAll('[id^="rawMaterial_"]')].map(el => Number(el.value) || 0);
let findMaterial = [...document.querySelectorAll('[id^="finishedStock_"]')].map(el => Number(el.value) || 0);
@ -456,16 +456,16 @@
return false;
}
// console.log("Total SI: ", totalSI);
} else {
let InProcess = [...document.querySelectorAll('[id^="stockInProcess_"]')].map(el => Number(el.value) || 0);
let rawMaterial = [...document.querySelectorAll('[id^="rawMaterial_"]')].map(el => Number(el.value) || 0);
let findMaterial = [...document.querySelectorAll('[id^="finishedStock_"]')].map(el => Number(el.value) || 0);
// } else {
// let InProcess = [...document.querySelectorAll('[id^="stockInProcess_"]')].map(el => Number(el.value) || 0);
// let rawMaterial = [...document.querySelectorAll('[id^="rawMaterial_"]')].map(el => Number(el.value) || 0);
// let findMaterial = [...document.querySelectorAll('[id^="finishedStock_"]')].map(el => Number(el.value) || 0);
totalSI = InProcess.reduce((acc, val) => acc + val, 0) +
rawMaterial.reduce((acc, val) => acc + val, 0) +
findMaterial.reduce((acc, val) => acc + val, 0);
}
}
// totalSI = InProcess.reduce((acc, val) => acc + val, 0) +
// rawMaterial.reduce((acc, val) => acc + val, 0) +
// findMaterial.reduce((acc, val) => acc + val, 0);
// }
// }
// console.log("Form is trying to submit : ", formDataSplitUp);
@ -655,13 +655,34 @@
}else{
// alert("you got ir");
policyRiskAddress.forEach(function() {
// console.log("increment count is ", increment2)
addHTMLInputForRiskSplitUP();
validatePolicyBasedOnProductSelection();
hideAndShowBurglary();
})
}
console.log("increment2",increment2);
console.log("policyRiskAddress.length",policyRiskAddress.length);
policyRiskAddress.forEach(function() {
if (increment2 <= policyRiskAddress.length) {
// console.log("increment count is ", increment2)
addHTMLInputForRiskSplitUP();
validatePolicyBasedOnProductSelection();
hideAndShowBurglary();
}
})
// else {
// const container = document.getElementById("addRiskSplitUp");
// container.innerHTML = "";
// increment2 = 1;
// if (increment2 <= policyRiskAddress.length) {
// policyRiskAddress.forEach(function() {
// // console.log("increment count is ", increment2)
// addHTMLInputForRiskSplitUP();
// validatePolicyBasedOnProductSelection();
// hideAndShowBurglary();
// // increment2++;
// })
// // alert("fdg");
// }
// }
}
} else {
if (contianertoCheck.innerHTML == "") {
addHTMLInputForRiskSplitUpWarninig();
@ -714,7 +735,8 @@
const newRowRisk = document.createElement("div");
// // console.log("Risk Split Up for address : ", policyRiskAddress.length)
// policyRiskAddress
console.log(increment2);
console.log(policyRiskAddress[increment2-1])
newRowRisk.innerHTML += `
<h5 class = "fire">Fire <?= isset($product) ? $product : "" ?> Details</h5>
<h5>Risk Split Up for Address : ${policyRiskAddress[increment2-1].address1} ${policyRiskAddress[increment2-1].address2}</h5>
@ -1043,7 +1065,7 @@
$('[class*="single_location"]').show();
$("#locationNoDIV").hide();
$("#location_no").removeAttr("required", false);
$('[class*="duplicate-btn"]').hide();
// $('[class*="duplicate-btn"]').hide();
$("[id^='select_location']").hide();
$('[id^="select_location"]').hide().prev('label').hide();
$("[id^='select_location']").removeAttr('required', false);

View File

@ -0,0 +1,35 @@
<?php
// Example: Loop through $installments array if available
if (!empty($installments)) {
foreach ($installments as $index => $installment) {
?>
<div class="form-row align-items-end">
<input type="hidden" name="installment_primary_key[]" value="<?= isset($installment['id']) ? $installment['id'] : '' ?>">
<div class="form-group col-md-3">
<label for="installment_amount">Installment Amount</label>
<input type="text" class="form-control" name="installment_amount[]" placeholder="Enter Amount"
value="<?= isset($installment['installment_amount']) ? $installment['installment_amount'] : '' ?>">
</div>
<div class="form-group col-md-3">
<label for="payment_date">Payment Date</label>
<input type="text" class="form-control payment_date" name="payment_date[]" placeholder="DD/MM/YYYY"
value="<?= isset($installment['payment_date']) && $installment['payment_date'] != '0000-00-00' ? date('d/m/Y', strtotime($installment['payment_date'])) : '' ?>">
</div>
<div class="form-group col-md-3">
<label for="utr_no">UTR No.</label>
<input type="text" class="form-control" name="utr_no[]" placeholder="Enter UTR No."
value="<?= isset($installment['utr_no']) ? $installment['utr_no'] : '' ?>">
</div>
<div class="form-group col-md-2">
<button type="button" class="btn btn-danger remove-installment">X</button>
</div>
</div>
<?php
}
}
?>

View File

@ -180,7 +180,15 @@
<!-- end first_data_points -->
<br><br>
<h5>Claim Details <span><i id="infoIcon" class="fas fa-info-circle info-icon" title="Click for more details"></i></span></h5>
<div style="display: flex; align-items: center; gap: 10px;">
<h5 style="margin: 0;">
Claim Details
<i id="infoIcon" class="fas fa-info-circle info-icon" title="Click for more details" style="margin-left: 5px;"></i>
<?= isset($ticket_data['claim_number']) && !empty($ticket_data['claim_number']) ? '( Claim No : ' . $ticket_data['claim_number'] . ' )' : '' ?>
</h5>
</div>
<hr>
<!-- second_data_points -->
@ -594,6 +602,11 @@
});
}
$field = $('#approved_description')
$field.prop('required', false);
var $parentDiv = $field.closest("div");
$parentDiv.find("label[for='approved_description'] .text-danger").remove();
}
$('#claim_status_id').on('change', function() {

View File

@ -432,6 +432,12 @@
} else if (value == 48 || value == 54 || value == 59) { // RETURNED
$('.returned').show();
}
$field = $('#approved_description')
$field.prop('required', false);
var $parentDiv = $field.closest("div");
$parentDiv.find("label[for='approved_description'] .text-danger").remove();
}
$('#claim_status_id').on('change', function() {

View File

@ -109,12 +109,13 @@ table.dataTable tbody td {
<th>TAT</th>
<th>ACTION</th>
</tr>
</thead>
<tbody>
<?php if (isset($ticket_data)) { ?>
<?php foreach($ticket_data as $index => $row){ ?>
<tr onclick="viewTicket(<?php echo $row['id']; ?>)" style="cursor: pointer;">
<tr data-id="<?= $row['id']; ?>" style="cursor: pointer;">
<td data-toggle="tooltip" data-placement="top"
@ -216,6 +217,16 @@ table.dataTable tbody td {
<td><?php echo $row['tat']; ?></td>
<td>
<div class="btn-group dropdown">
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown" aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item delete" data-id="<?= $row['id'];?>" onclick="removeClaim(this, '<?= htmlspecialchars($row['id'], ENT_QUOTES) ?>')">
<i class="mdi mdi-delete mr-2 text-muted font-18 vertical-middle"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php } ?>
<?php } ?>
@ -294,4 +305,41 @@ function viewTicket(ticket_id){
}
function removeClaim(input, ticket_id) {
confirmActionSweertAlert("Do you want to delete this Claim?", "Yes, Proceed!", "No, Cancel").then((confirmed) => {
if (confirmed) {
let url = '<?= base_url('ticket/remove') ?>';
// Include `pt_id` in the AJAX request if necessary
let requestData = { ticket_id: ticket_id };
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('Data fetched successfully:', response);
if (response.status === true) {
toastr.success(response.message, 'SUCCESS');
window.location.reload();
} else {
toastr.warning(response.message, 'WARNING');
}
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
});
}
});
}
$(document).on('click', 'tbody tr', function (e) {
// Exclude clicks on any elements inside the last column (actions)
if ($(e.target).closest('td').index() !== $(this).children('td').length - 1) {
const id = $(this).data('id');
console.log('Ticket ID', id)
viewTicket(id);
}
});
</script>

View File

@ -491,25 +491,14 @@
<div class="form-row">
<div class="form-group col-md-3">
<label for="payment_date">Payment Date</label>
<input type="text" class="form-control" id="payment_date" name="payment_date" placeholder="DD/MM/YYY" value="<?= isset($lead_data['payment_date']) ? date('d/m/Y', strtotime($lead_data['payment_date'])) : "" ?>">
</div>
<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." value="<?= isset($lead_data['utr_no']) ? $lead_data['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" value="<?= isset($lead_data['placement_date']) ? date('d/m/Y', strtotime($lead_data['placement_date'])) : "" ?>">
</div>
<div class="form-group col-md-3">
<label style = "padding-left: 15px;padding-top: 33px;" for="is_cd_switch">CD </label>
<input id="is_cd_switch" type="checkbox" name = "is_cd" value = "1" data-toggle="toggle" data-on="With CD" data-off="Without CD" data-onstyle="info" data-offstyle="dark" data-style="border" data-width="150" <?= isset($lead_data['is_cd']) && $lead_data['is_cd'] != 1 ? '' : 'checked' ?>
>
<label for="is_cd_switch">CD Entry</label>
<input id="is_cd_switch" type="checkbox" name = "is_cd" value = "1" data-toggle="toggle" data-on="With CD" data-off="Without CD" data-onstyle="info" data-offstyle="dark" data-style="border" data-width="218" <?= isset($lead_data['is_cd']) && $lead_data['is_cd'] != 1 ? '' : 'checked' ?>>
</div>
<div class="form-group col-md-3">
@ -519,20 +508,52 @@
<?php if (isset($lead_data['is_cd']) && $lead_data['is_cd'] == 1 || !isset($lead_data['is_cd'])) { ?>
<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" value="<?= isset($lead_data['cd_amount']) ? $lead_data['cd_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" value="<?= isset($lead_data['cd_amount']) ? $lead_data['cd_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" value="<?= isset($lead_data['cd_amount']) ? $lead_data['cd_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" value="<?= isset($lead_data['cd_amount']) ? $lead_data['cd_amount'] : "" ?>">
</div>
<?php } ?>
<div class="form-group col-md-3">
<label for="is_installment_switch">Installemnt </label>
<input id="is_installment_switch" type="checkbox" name = "is_installment" value = "1" data-toggle="toggle" data-on="With Installments" data-off="Without Installments" data-onstyle="info" data-offstyle="dark" data-style="border" data-width="218" <?= isset($lead_data['is_installment']) && $lead_data['is_installment'] == 1 ? 'checked' : '' ?>>
</div>
<div class="form-group col-md-3" style="<?= (!empty($lead_data['is_installment']) && $lead_data['is_installment'] == 1) ? 'display: block;' : 'display: none;' ?>">
<label for="no_of_installment">No of Installments</label>
<input type="text" class="form-control" id="no_of_installment" name="no_of_installment"
value="<?= isset($lead_data['no_of_installment']) ? $lead_data['no_of_installment'] : 1 ?>">
</div>
<?php if (isset($lead_data['is_installment']) && $lead_data['is_installment'] == 0 || !isset($lead_data['is_installment'])) { ?>
<div class="form-group col-md-3">
<label for="payment_date">Payment Date</label>
<input type="text" class="form-control" id="payment_date" name="payment_date" placeholder="DD/MM/YYY" value="<?= isset($lead_data['payment_date']) ? date('d/m/Y', strtotime($lead_data['payment_date'])) : "" ?>">
</div>
<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." value="<?= isset($lead_data['utr_no']) ? $lead_data['utr_no'] : "" ?>">
</div>
<?php } ?>
</div>
<hr>
<div id="installment_form_row">
<?= isset($lead_data['installment_data']) && !empty($lead_data['installment_data']) ? $lead_data['installment_data'] : '' ?>
</div>
<hr>
<div class="form-row">
<div class="form-group col-md-6">
@ -557,7 +578,7 @@
>
<?php foreach ($exclusiveUserList as $user) { ?>
<?php if ($page_name == "RFQ" || in_array($user['role'],[1,5]) || in_array($user['team_id'],[6,7])) { ?>
<option value="<?= $user['id'];?>">
<option value="<?= $user['email'];?>">
<?= $user['first_name'].' - '.$user['email'];?>
</option>
<?php } }?>
@ -694,6 +715,7 @@
policy_terms = JSON.parse(policy_terms_json);
jsonDataForHide = data?.premium_data ?? null;
console.log("data", data);
if(data){
proposalDataForDropDown = data.proposal_data;
if(!data.premium_data){
@ -837,7 +859,7 @@
$(document).ready(function () {
setInterval(function () {
submitData(1);
}, 15000);
}, 20000);
});
@ -3194,7 +3216,7 @@ function insurerAndClientMailPopUp(){
function placementMailPopUp() {
console.log(proposalDataForDropDown);
console.log("proposalDataForDropDown", proposalDataForDropDown);
const selectElement = document.getElementById('proposals');
@ -3451,137 +3473,6 @@ function constructURL(url_type) {
}
}
// function constructURL_ForInsurerAndClientMailSend() {
// var lead_id = $('#lead_id').val();
// var mail_content = $('#insurer_and_client_mail_content').val();
// var subject = $('#mail_subject').val();
// var apiURL;
// if (RFQ_or_QCR == 2) {
// apiURL = '<?= base_url('leads/sendMail') ?>?lead_id=' + encodeURIComponent(lead_id) +
// '&file_type=qcr' +
// '&recipient_type=client' +
// '&recipient_mail='+
// '&mail_content=' + String(mail_content) +
// '&subject=' + String(subject);
// } else {
// var insurerContact = $('#insurerContact').val();
// insurerContact = insurerContact.map(Number);
// console.log(insurerContact);
// apiURL = '<?= base_url('leads/sendMail') ?>?lead_id=' + encodeURIComponent(lead_id) +
// '&file_type=rfq' +
// '&recipient_type=insurer' +
// '&recipient_mail=' + JSON.stringify(insurerContact)+
// '&mail_content=' + String(mail_content) +
// '&subject=' + String(subject);
// }
// console.log(apiURL);
// ajaxRequest(apiURL);
// }
// 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();
// cc = cc.map(Number);
// cc = JSON.stringify(cc)
// var file_type = 'rfq';
// if (RFQ_or_QCR == 2) {
// file_type = 'qcr'
// }
// var queryParams = {
// lead_id: lead_id,
// file_type: file_type,
// recipient_type: 'internal',
// to: to,
// cc: cc,
// subject: subject,
// // mail_content: mail_content,
// recipient_mail: '',
// mail_content: mail_content,
// subject: subject,
// };
// const queryString = objectToQueryString(queryParams);
// console.log(queryString);
// var apiURL = '<?= base_url('leads/sendMail') ?>?'+queryString
// console.log(apiURL);
// ajaxRequest(apiURL);
// }
// function constructURL_ForPlacementMailSend() {
// var lead_id = $('#lead_id').val();
// let to = $('#placement_to').val();
// console.log('to mail', to);
// 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();
// cc = cc.map(Number);
// // cc = cc.split(',').map(email => email.trim());
// cc = JSON.stringify(cc);
// // to = to.map(String);
// // to = JSON.stringify(to)
// to = to.split(',').map(email => email.trim());
// to = JSON.stringify(to)
// console.log('to (array):', to);
// var file_type = 'rfq';
// if (RFQ_or_QCR == 2) {
// file_type = 'qcr'
// }
// var queryParams = {
// lead_id: lead_id,
// file_type: file_type,
// recipient_type: 'placement',
// to: to,
// cc: cc,
// subject: subject,
// proposal_insurer: proposal_insurer,
// insurer_and_branch: insurer_and_branch,
// recipient_mail: to,
// placement_date: placement_date,
// utr_no: utr_no,
// premium_amount: premium_amount,
// total_amount: total_amount,
// cd_amount: cd_amount,
// };
// const queryString = objectToQueryString(queryParams);
// console.log(queryString);
// var apiURL = '<?= base_url('leads/sendMail') ?>?'+queryString
// console.log(apiURL);
// ajaxRequest(apiURL);
// }
// Insurer and Client Mail
function constructURL_ForInsurerAndClientMailSend() {
@ -3694,16 +3585,44 @@ function constructURL_ForPlacementMailSend() {
let proposal_insurer = $('#proposals option:selected').data('id');
let insurer_and_branch = $('#proposals').val();
let cc = $('#placement_cc').val();
let no_of_installment = $('#no_of_installment').val();
let is_installment = $("#is_installment_switch").is(":checked") ? 1 : 0;
console.log("cc1", cc);
// 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())`
// cc = cc.map(Number); // or split if it's a string: `cc.split(',').map(email => email.trim())`
var selectedFiles = [];
$('#placement_mail_attachment .multi_file_attachment:checked').each(function () {
selectedFiles.push($(this).val());
});
let data = [];
$('#installment_form_row .form-row').each(function () {
let installment_amount = $(this).find('input[name="installment_amount[]"]').val();
let payment_date = $(this).find('input[name="payment_date[]"]').val();
let utr_no = $(this).find('input[name="utr_no[]"]').val();
let id = $(this).find('input[name="installment_primary_key[]"]').val();
console.log('installment_primary_key', id);
let obj = {
lead_id: lead_id,
installment_amount: installment_amount,
payment_date: payment_date,
utr_no: utr_no
};
if (id != undefined && id != null && id != '') {
obj.id = id;
}
data.push(obj);
});
// Prepare FormData
var formData = new FormData();
formData.append('lead_id', lead_id);
@ -3723,14 +3642,15 @@ function constructURL_ForPlacementMailSend() {
formData.append('cd_amount', cd_amount);
formData.append('mail_content', mail_content);
formData.append('selected_attachment_files', JSON.stringify(selectedFiles));
formData.append('installments', JSON.stringify(data));
formData.append('no_of_installment', no_of_installment);
formData.append('is_installment', is_installment);
ajaxRequest(formData);
}
function ajaxRequest(formData) {
var apiURL = '<?= base_url('leads/sendMail') ?>';
@ -3831,23 +3751,40 @@ function getInsurerBranchContacts(input){
function appendInsurerContact(data) {
console.log(data)
console.log(data);
$('#placement_to').empty();
$('#placement_to').append($('<option>', {
// Clear existing options and CC entries
$('#placement_to').empty().append($('<option>', {
value: '',
text: 'Select'
}));
$('.ccInsurerMail').remove();
$.each(data, function(index, item) {
var option = $('<option>', {
$('#placement_to').append($('<option>', {
value: item.id,
text: item.contact_person_email
});
$('#placement_to').append(option);
text: item.contact_person_email
}));
$('#placement_cc').append($('<option>', {
value: item.contact_person_email ?? "",
text: (item.contact_person_name || '') + (item.contact_person_email ? ' - ' + item.contact_person_email : '') + ' (Insurer)',
class: 'ccInsurerMail'
}));
});
// Re-initialize Select2
$('#placement_cc').val(null).select2({
placeholder: 'Select CC Mail'
});
// Style Select2 textarea input
setTimeout(function () {
$('textarea.select2-search__field').attr('rows', '1').css('resize', 'none');
}, 0);
}
$('.close').click(function(){
$('#to').select2({
@ -5760,7 +5697,6 @@ function appendMultiFileData(data) {
}
function convertRFQJsonToQCRJson(json) {
if (json) {
@ -5889,6 +5825,28 @@ function appendMultiFileData(data) {
}
})
$("#is_installment_switch").change(function (){
var switch_status = ($(this).is(":checked")? "on" : "off");
console.log("Switch status",switch_status);
if (switch_status == "on"){
$("#no_of_installment").show();
$("#payment_date").hide();
$("#utr_no").hide();
$("#no_of_installment").closest('.form-group').show();
$("#payment_date").closest('.form-group').hide();
$("#utr_no").closest('.form-group').hide();
addInstallmentHTML()
}else{
$("#no_of_installment").hide();
$("#payment_date").show();
$("#utr_no").show();
$("#no_of_installment").closest('.form-group').hide();
$("#payment_date").closest('.form-group').show();
$("#utr_no").closest('.form-group').show();
$('#installment_form_row').empty();
}
})
$(document).on("input", "#cd_amount, #premium_amount", function() {
// alert("Function called");
@ -5928,6 +5886,193 @@ function appendMultiFileData(data) {
return emails.every(email => getDomain(email) === firstDomain);
}
function addInstallmentHTML() {
let html = `
<div class="form-row align-items-end">
<div class="form-group col-md-3">
<label for="installment_amount">Installment Amount</label>
<input type="text" class="form-control" name="installment_amount[]" placeholder="Enter Amount">
</div>
<div class="form-group col-md-3">
<label for="payment_date">Payment Date</label>
<input type="text" class="form-control payment_date" name="payment_date[]" placeholder="DD/MM/YYYY">
</div>
<div class="form-group col-md-3">
<label for="utr_no">UTR No.</label>
<input type="text" class="form-control" name="utr_no[]" placeholder="Enter UTR No.">
</div>
<div class="form-group col-md-2">
<button type="button" class="btn btn-danger remove-installment">X</button>
</div>
</div>
`;
$('#installment_form_row').append(html);
$('.payment_date').flatpickr({
dateFormat: 'd/m/Y',
});
}
$(document).on('click', '.remove-installment', function () {
let $this = $(this); // Store reference to the clicked element
let row_count = $('#installment_form_row .form-row').length;
console.log("row_count", row_count);
let id = $this.closest('.form-row').find('input[name="installment_primary_key[]"]').val() ?? null;
console.log("id", id);
let ids = id ? [id] : [];
console.log("ids", ids);
if (id != null && row_count > 1) {
Swal.fire({
title: "Do you want to remove this?",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33",
confirmButtonText: "Yes, Proceed!"
}).then((result) => {
if (result.isConfirmed) {
let url = '<?= base_url('util/removeInstallments') ?>';
let requestData = { id: ids };
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('Data fetched successfully:', response);
if (response.status === true) {
toastr.success(response.message, 'SUCCESS');
$this.closest('.form-row').remove();
let updated_row_count = $('#installment_form_row .form-row').length;
$('#no_of_installment').val(updated_row_count);
console.log("after remove row_count", updated_row_count);
} else {
toastr.error(response.message, 'WARNING');
}
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}, function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while removing the installment.', 'ERROR');
});
}
});
} else {
if (row_count > 1) {
$this.closest('.form-row').remove();
let updated_row_count = $('#installment_form_row .form-row').length;
$('#no_of_installment').val(updated_row_count);
console.log("after remove row_count", updated_row_count);
} else {
console.log("Only one row left. Not removing.");
}
}
});
$('#no_of_installment').on('change', function () {
let no_of_installments = parseInt($(this).val());
let $installmentContainer = $('#installment_form_row');
let row_count = $installmentContainer.find('.form-row').length;
console.log("Form row count:", row_count);
if (row_count === 1) {
$installmentContainer.empty();
for (let index = 0; index < no_of_installments; index++) {
addInstallmentHTML();
}
} else if (no_of_installments === row_count) {
console.log('Same row count, no change needed.');
} else if (no_of_installments < row_count) {
// Remove extra rows from the end
let remove_count = row_count - no_of_installments;
let ids = $installmentContainer.find('.form-row')
.slice(-remove_count)
.find('input[name="installment_primary_key[]"]')
.map(function() {
return $(this).val();
}).get();
console.log('ids', ids);
if (ids != null) {
Swal.fire({
title: "Do you want to remove the last " + (remove_count ?? "") + " entries?",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33",
confirmButtonText: "Yes, Proceed!"
}).then((result) => {
if (result.isConfirmed) {
let url = '<?= base_url('util/removeInstallments') ?>';
let requestData = { id: ids };
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('Data fetched successfully:', response);
if (response.status === true) {
toastr.success(response.message, 'SUCCESS');
$installmentContainer.find('.form-row').slice(-remove_count).remove();
} else {
toastr.error(response.message, 'WARNING');
}
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}, function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while removing the installment.', 'ERROR');
});
}else{
$('#no_of_installment').val(row_count);
}
});
} else {
$installmentContainer.find('.form-row').slice(-remove_count).remove();
}
} else if (no_of_installments > row_count) {
// Add extra rows from the end
let add_count = no_of_installments - row_count;
for (let index = 0; index < add_count; index++) {
addInstallmentHTML();
}
} else {
// Add missing rows
let add_count = no_of_installments - row_count;
for (let index = 0; index < add_count; index++) {
addInstallmentHTML();
}
}
});
$(document).ready(function(){
setTimeout(function(){
$('.payment_date').flatpickr({
dateFormat: 'd/m/Y',
});
}, 2000)
})
</script>

View File

@ -426,27 +426,27 @@
<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.">
<input type="text" class="form-control" id="utr_no" name="utr_no" placeholder="Enter UTR No." value="<?= isset($lead_data['utr_no']) ? $lead_data['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">
<input type="text" class="form-control" id="placement_date" name="placement_date" placeholder="DD/MM/YYY" value="<?= isset($lead_data['placement_date']) ? date('d/m/Y', strtotime($lead_data['placement_date'])) : "" ?>">
</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">
<input type="text" class="form-control" id="premium_amount" name="premium_amount" placeholder="Enter Premium Amount" value="<?= isset($lead_data['premium_amount']) ? $lead_data['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">
<input type="text" class="form-control" id="total_amount" name="total_amount" placeholder="Enter Total Amount" value="<?= isset($lead_data['total_amount']) ? $lead_data['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">
<input type="text" class="form-control" id="cd_amount" name="cd_amount" placeholder="Enter CD Amount" value="<?= isset($lead_data['cd_amount']) ? $lead_data['cd_amount'] : "" ?>">
</div>
</div>
@ -472,7 +472,7 @@
<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']; ?>">
<option value="<?= $user['email']; ?>">
<?= $user['first_name'] . ' - ' . $user['email']; ?>
</option>
<?php } ?>
@ -1056,6 +1056,7 @@
newQuoteHeader.textContent = "Liability Limit";
}
newQuoteHeader.style.backgroundColor = randomColor;
newQuoteHeader.setAttribute('data-proposal', proposalCount);
headerRow2.insertBefore(newQuoteHeader, headerRow2.querySelector('th:last-child'));
// Add new cells to all rows
@ -1108,6 +1109,8 @@
hideProposalOptionsForChild();
showOrHideFieldsBasedOnRFQorQCR();
// styleTableColumns();
monitorTableChanges();
});
// #################################################################################
@ -2512,6 +2515,9 @@
data: formData,
method: "POST",
success: function(response) {
console.log('RFQ NON EB FORM SUBMIT RESPONSE : ', response);
if (response.status == true) {
localStorage.removeItem('policyData');
@ -4773,7 +4779,7 @@
// 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())`
// cc = cc.map(Number); // or split if it's a string: `cc.split(',').map(email => email.trim())`
var selectedFiles = [];
@ -4823,6 +4829,8 @@
dataType: 'json',
success: function(res) {
console.log('MAIL SEND API RESPONSE : ', res);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
@ -4843,9 +4851,8 @@
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
// console.error(xhr.responseText);
// console.error(status, error);
console.error(xhr.responseText);
console.error(status, error);
}
});
@ -4968,71 +4975,54 @@
}
function monitorTableChanges() {
console.log("monitoring table changes");
var proposalValue = "";
// Get the first table
const table = document.querySelector("table");
if (!table) return;
console.log("monitoring table changes");
const table = document.querySelector("table");
if (!table) return;
// Get the first row in the tbody
const firstRow = table.querySelector("tbody tr");
if (!firstRow) return;
const firstRow = table.querySelector("tbody tr");
if (!firstRow) return;
// console.log("firstRow : ",firstRow);
const cells = firstRow.querySelectorAll("td");
const headerRow1 = table.querySelector("thead tr:nth-child(1)");
const headerRow2 = table.querySelector("thead tr:nth-child(2)");
if (!headerRow1 || !headerRow2) return;
// Get all cells in the first row
const cells = firstRow.querySelectorAll("td");
// Get header rows to identify which columns are "Sum Insured"
const headerRow1 = table.querySelector("thead tr:nth-child(1)");
const headerRow2 = table.querySelector("thead tr:nth-child(2)");
if (!headerRow1 || !headerRow2) return;
const mainHeaders = headerRow1.querySelectorAll("th");
const subHeaders = headerRow2.querySelectorAll("th");
// console.log("headerRow1 : ",headerRow1);
// console.log("headerRow2 : ",headerRow2);
// Find which column is the "Sum Insured" column
let sumInsuredColumnIndex = -1;
const subHeaders = headerRow2.querySelectorAll("th");
subHeaders.forEach((th, index) => {
if (th.textContent.trim() === "Sum Insured") {
proposalValue = th.getAttribute("data-proposal");
sumInsuredColumnIndex = index;
subHeaders.forEach((subHeader, index) => {
const subHeaderText = subHeader.textContent.trim();
const mainHeaderText = mainHeaders[index]?.textContent.trim();
// Check if subheader is "Sum Insured" and main header starts with "Proposal" or "Exis"
if (subHeaderText === "Sum Insured" && /^(Proposal|Exis)/i.test(mainHeaderText)) {
const proposalValue = subHeader.getAttribute("data-proposal");
if (index < cells.length) {
const cell = cells[index];
let previousValue = "";
cell.addEventListener("focus", function () {
previousValue = this.textContent.trim();
});
cell.addEventListener("blur", function () {
const newValue = this.textContent.trim();
if (newValue !== previousValue) {
tdChanged = true;
changedNewSI = newValue;
$("#policySI").val(newValue);
console.log("new Value proposalValue", changedNewSI);
console.log("proposalValue",proposalValue);
updateAddON(newValue, proposalValue);
console.log("Sum Insured value changed to:", newValue);
}
});
}
});
// console.log("sumInsuredColumnIndex : ",sumInsuredColumnIndex);
if (sumInsuredColumnIndex === -1) return;
// Check if we have a cell at that index
if (cells.length > sumInsuredColumnIndex) {
console.log("It is there");
const sumInsuredCell = cells[sumInsuredColumnIndex];
let previousValue = "";
// Add event listener for changes
sumInsuredCell.addEventListener("focus", function () {
previousValue = this.textContent.trim();
});
sumInsuredCell.addEventListener("blur", function () {
const newValue = this.textContent.trim();
if (newValue !== previousValue) {
tdChanged = true;
changedNewSI = newValue;
$("#policySI").val(newValue);
console.log("new Value",changedNewSI);
// alert(newValue);
updateAddON(newValue,proposalValue);
console.log("Sum Insured value changed to:", newValue);
}
});
}else{
console.log("Sum Insured column not found");
}
}
});
}
function updateAddON(newValue,proposalValue = null) {
console.log("Function called");