diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index be5f2664..1d206b11 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -4223,24 +4223,46 @@ class ClientController extends AdminController } public function get_client_policy_data_using_policy_no() - { + { + $received_data = $this->request->getGet(); $policy_no = $this->request->getGet('policy_no'); + $client_id = $this->request->getGet('client_id'); + $client_branch_id = $this->request->getGet('client_branch_id'); + $policy_type_id = $this->request->getGet('policy_type_id'); + $data = $this->clientPolicyModel ->select(" client_policy.*, + policy_type.policy_type, clients.client_type, + clients.client_name, DATE_FORMAT(client_policy.policy_start_date, '%d/%m/%Y') as policy_start_date, DATE_FORMAT(client_policy.policy_end_date, '%d/%m/%Y') as policy_end_date ") ->join('clients', 'client_policy.client_id = clients.id') + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') ->where('client_policy.policy_no', $policy_no) ->where('client_policy.is_active', 1) + ->where('client_policy.policy_status', 1) ->first(); if ($data) { - return $this->respond(['status' => true, 'data' => $data, 'code' => 200], 200); + if ($data['client_id'] == $client_id && $data['client_branch_id'] == $client_branch_id) { + + if ($data['policy_type_id'] == $policy_type_id) { + return $this->respond(['status' => true, 'data' => $data, 'code' => 200, 'received_data' => $received_data], 200); + } else { + $policy_type = $this->policyTypeModel->where('id', $policy_type_id)->first(); + $message = 'This policy number is mapped to the selected client with policy type: ' . (!empty($data['policy_type']) ? $data['policy_type'] : 'N/A') . '. You selected: ' . (!empty($policy_type['policy_type']) ? $policy_type['policy_type'] : 'N/A') . '. Please check.'; + return $this->respond(['status' => true, 'data' => $data, 'code' => 409, "message" => $message, 'received_data' => $received_data], 200); + } + + } else { + $message = 'This policy number is already linked to another client' . (!empty($data['client_name']) ? '. Client name : ' . $data['client_name'] : '') . '. Please check'; + return $this->respond(['status' => true, 'code' => 409, "message" => $message, 'received_data' => $received_data, 'db_data' => $data], 200); + } } else { - return $this->respond(['status' => false, 'message' => 'No Data Found', 'code' => 404], 200); + return $this->respond(['status' => false, 'message' => 'No Data Found', 'code' => 404, 'received_data' => $received_data], 200); } } diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 3dbf91d5..9d3eeecf 100755 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -1918,7 +1918,7 @@ class EmpDataServiceController extends BaseController $result_for_employees_policy = $this->employeePolicyModel ->select('employee_polices.*') ->join('employees', 'employees.id = employee_polices.employee_id') - ->join('emp_endorsement', 'emp_endorsement.employee_id = employees.id') // assuming this is the correct join + ->join('emp_endorsement', 'emp_endorsement.pk = employees.id') // assuming this is the correct join ->where('employees.emp_code', $emp_code) ->where('employees.name', $name) ->where('employees.client_id', $client_id) diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 6541e011..28f3a010 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -344,9 +344,11 @@ class EmployeeController extends AdminController $query->where('cr.user_id', $user_id); } // ->where('files.created_by', get_session_userid()) - $data['fileList'] = $query->groupBy("c.id")->orderBy('files.created_at', 'desc') - ->limit(1500) + $data['fileList'] = $query->groupBy("files.id")->orderBy('files.created_at', 'desc') + // $data['fileList'] = $query + ->limit(2000) ->find(); + // dd($this->fileModel->getLastQuery()); // dd($data['fileList']); $query2 = $this->batchFileModel->select(" @@ -395,7 +397,7 @@ class EmployeeController extends AdminController $query2->where('cr.user_id', $user_id); } // ->where('files.created_by', get_session_userid()) - $data['batch_list'] = $query2->groupBy("clients.id")->orderBy('batch_files.id', 'desc') + $data['batch_list'] = $query2->groupBy("batch_files.id")->orderBy('batch_files.id', 'desc') ->limit(1500) ->find(); diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 0af284e1..8572a87b 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -493,7 +493,7 @@ class LeadsController extends BaseController { if ($this->leadsModel->where('id', $id)->set($data[0])->update()) { - $this->insertMultiFilesData($data[0]['multi_file_data'], $id); + $this->insertMultiFilesData($data[0]['multi_file_data'], $id, $data[0]['lead_form_type']); $this->insertLeadStatus($id, $data[0]['status'], 3); return $this->respond(['status' => true, 'lead_id' => $id, 'message' => "Lead updated successfully", 'data' => $data], 200); } @@ -591,14 +591,18 @@ class LeadsController extends BaseController return $multi_file_data; } - public function insertMultiFilesData($data, $lead_id) + public function insertMultiFilesData($data, $lead_id, $lead_form_type = null) { - // print_r($data); die; + log_message('info', 'insertMultiFilesData() called with lead_id: ' . $lead_id); if (!empty($data)) { + log_message('info', 'Data is not empty. Total items: ' . count($data)); + foreach ($data as $key => $value) { + log_message('info', "Processing item at index {$key}: " . json_encode($value)); if (!empty($value['id'])) { + log_message('info', "Record with ID {$value['id']} exists. Preparing to update."); $lead_file_data = [ 'lead_id' => $lead_id, @@ -607,10 +611,22 @@ class LeadsController extends BaseController if (!empty($value['file_name'])) { $lead_file_data['file_name'] = $value['file_name']; + log_message('info', "file_name found: {$value['file_name']}"); + + if (!empty($lead_form_type) && $lead_form_type == 1 && $key == 0) { + //for this push the job to the calculateMembersDemography() function + $job_details = new Jobs(); + $r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => [ + 'lead_id' => $lead_id, + ]]); + log_message('info', "calculateMembersDemography JOB PUSHED"); + } } + log_message('info', "Updating leadFilesModel where id = {$value['id']} with data: " . json_encode($lead_file_data)); $this->leadFilesModel->where('id', $value['id'])->set($lead_file_data)->update(); } else { + log_message('info', "No ID found. Preparing to insert new record."); if (!empty($value['file_name'])) { $lead_file_data = [ @@ -618,16 +634,24 @@ class LeadsController extends BaseController 'docs_name' => $value['docs_name'], 'file_name' => $value['file_name'], ]; + + log_message('info', "Inserting into leadFilesModel: " . json_encode($lead_file_data)); $this->leadFilesModel->insert($lead_file_data); + } else { + log_message('warning', "Skipped insert: file_name missing in data at index {$key}"); } } if ($key == 0 && !empty($value['file_name'])) { + log_message('info', "Setting first file_name '{$value['file_name']}' to leadsModel for lead_id: {$lead_id}"); $this->leadsModel->where('id', $lead_id)->set('file_name', $value['file_name'])->update(); } } + } else { + log_message('warning', 'insertMultiFilesData() received empty data array.'); } + log_message('info', 'insertMultiFilesData() completed successfully.'); return true; } @@ -1286,9 +1310,9 @@ class LeadsController extends BaseController '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']), - 'Earned Premium' => $rfq_data['earned_premium'], + 'Earned Premium' => formatIndianCurrency(intval($rfq_data['earned_premium'])), 'Incurred Claims as on (' . date('d-m-Y', strtotime($rfq_data['incurred_claims_date'])) . ')' => formatIndianCurrency($rfq_data['incurred_claims']), - 'Annualised Claims' => formatIndianCurrency($rfq_data['annualised_claims']), + 'Annualised Claims' => formatIndianCurrency(intval($rfq_data['annualised_claims'])), 'Incurred Claims Ratio' => $rfq_data['incurred_claims_ratio'] . " %", 'Earned Claims Ratio' => $rfq_data['earned_claims_ratio'] . " %", ]; diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 6622d0fa..0cb10174 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -2037,8 +2037,8 @@ class PolicyTransactionController extends BaseController //insurer statement list page public function statementList() { - // dd($this->validateInsurerStatement(['file_id' => 30])); - // $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll(); + // dd($this->validateInsurerStatement(['file_id' => 49])); + $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll(); $today = date('Y-m-d'); $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today))); // echo $fromday;die(); @@ -2261,13 +2261,13 @@ class PolicyTransactionController extends BaseController // dd($highestRowAndColumn); $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); unset($excel_data[0]); - // Kint::dump($excel_data); + // Kint::dump($excel_data);die(); //get no of line items and update in DB $line_items = 0; // get uploaded month transactions data $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']); // var_dump($source_data);die(); - // Kint::dump($source_data);//die(); + // Kint::dump($source_data);die(); // check policy no,insurer and etc in DB for this month @@ -2277,17 +2277,24 @@ class PolicyTransactionController extends BaseController if (!$is_row_empty) { // $excel_row = ExcelSanitizeHelper::sanitizeArrayData($excel_row); $is_source_found = 0; + // Kint::dump($excel_key,$excel_row[1],$excel_row[2]); $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel + $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel - $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]); //policy_end_date from excel + $policy_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[1]); //policy_end_date from excel + $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel + $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel - // Kint::dump($policy_no); + $endorsement_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[2]); //policy_end_date from excel + + // Kint::dump($excel_key,$policy_no,$endorsement_no,$policy_start_date,$policy_end_date);//die(); foreach ($source_data as $source_key => $source_row) { $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null; // Kint::dump($source_endorsement_no); - if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) { + if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) + { $is_source_found = 1; $line_items = $line_items + 1; unset($source_data[$source_key]); diff --git a/app/Models/HRAccessControlModel.php b/app/Models/HRAccessControlModel.php new file mode 100644 index 00000000..81f16f0e --- /dev/null +++ b/app/Models/HRAccessControlModel.php @@ -0,0 +1,59 @@ +join('user_teams', 'user_profiles.id = user_teams.user_id') ->where('user_profiles.id', $user_id) ->where('user_teams.is_active', 1) + ->where("user_profiles.is_active", 1) ->get() ->getResultArray(); diff --git a/app/Views/leads_form.php b/app/Views/leads_form.php index 390fa7ee..01586d13 100644 --- a/app/Views/leads_form.php +++ b/app/Views/leads_form.php @@ -1423,7 +1423,9 @@ console.log('Policy Run Days (Final):', policy_run_days); let annualised_claims = policy_run_days > 0 ? (incurred_claims / policy_run_days) * 365 : 0; - let annualised_claims_roundoff = Math.round(annualised_claims); + // let annualised_claims_roundoff = annualised_claims.toFixed(2); + let annualised_claims_roundoff = Math.trunc(annualised_claims); + console.log('Annualised Claims:', annualised_claims); console.log('Annualised Claims (Rounded):', annualised_claims_roundoff); $('#annualised_claims').val(annualised_claims_roundoff); @@ -1431,22 +1433,24 @@ let premium_as_on_date = Number($('#premium_date').val()) || 0; console.log('Premium as on Date:', premium_as_on_date); - let incurred_claim_ratio = (annualised_claims > 0 && premium_as_on_date > 0) - ? (annualised_claims / premium_as_on_date) + let incurred_claim_ratio = (incurred_claims > 0 && premium_as_on_date > 0) + ? (incurred_claims / premium_as_on_date) * 100 : 0; - let incurred_claim_ratio_roundoff = isFinite(incurred_claim_ratio) ? Math.round(incurred_claim_ratio) : 0; + let incurred_claim_ratio_roundoff = isFinite(incurred_claim_ratio) ? incurred_claim_ratio.toFixed(2) : 0; console.log('Incurred Claim Ratio:', incurred_claim_ratio); console.log('Incurred Claim Ratio (Rounded):', incurred_claim_ratio_roundoff); $('#incurred_claims_ratio').val(incurred_claim_ratio_roundoff); - let earned_premium = premium_as_on_date > 0 ? (premium_as_on_date / 365) * 364 : 0; - let earned_premium_roundoff = Math.round(earned_premium); + let earned_premium = premium_as_on_date > 0 ? (premium_as_on_date / 365) * policy_run_days : 0; + // let earned_premium_roundoff = earned_premium.toFixed(2); + let earned_premium_roundoff = Math.trunc(earned_premium); + console.log('Earned Premium:', earned_premium); console.log('Earned Premium (Rounded):', earned_premium_roundoff); $('#earned_premium').val(earned_premium_roundoff); - let earnedClaimsRatio = earned_premium > 0 ? annualised_claims / earned_premium : 0; - let earnedClaimsRatioRounded = Math.round(earnedClaimsRatio); + let earnedClaimsRatio = premium_as_on_date > 0 ? (annualised_claims / premium_as_on_date) * 100 : 0; + let earnedClaimsRatioRounded = earnedClaimsRatio.toFixed(2); console.log('Earned Claims Ratio:', earnedClaimsRatio); console.log('Earned Claims Ratio (Rounded):', earnedClaimsRatioRounded); $('#earned_claims_ratio').val(earnedClaimsRatioRounded); diff --git a/app/Views/policy_grid.php b/app/Views/policy_grid.php index 06c945c6..d0e825f6 100755 --- a/app/Views/policy_grid.php +++ b/app/Views/policy_grid.php @@ -1391,6 +1391,8 @@ function appendGridtHtml(ui_type = false, secondary = false, data = false) console.log('appendGridtHtml function ui_type', ui_type); console.log('appendGridtHtml function secondary', secondary); console.log('appendGridtHtml function typeof secondary', typeof secondary); + var default_unit = $('#hidden_unit').val(); + // alert(default_unit); // console.log('appendGridtHtml function data.unit', data.unit); // console.log('appendGridtHtml function data.unit type',typeof data.unit); diff --git a/app/Views/policy_transaction_inception_form.php b/app/Views/policy_transaction_inception_form.php index cc6415c1..b378d5cb 100644 --- a/app/Views/policy_transaction_inception_form.php +++ b/app/Views/policy_transaction_inception_form.php @@ -3838,6 +3838,15 @@ $('#policy_no').change(function(){ var policy_no = $(this).val(); policy_no = policy_no.trim(); + let client_id = $('#client_id').val()?.trim(); + let client_branch_id = $('#client_branch_id').val()?.trim(); + let policy_type_id = $('#policy_type_id').val()?.trim(); + + if (!client_id || !client_branch_id || !policy_type_id) { + toastr.warning('Please select the policy type, client and branch', "WARNING"); + $('#policy_no').val(''); + return; + } $pt_id = $('#policy_tranction_policy_number').val(); console.log('$pt_id', $pt_id); @@ -3846,13 +3855,19 @@ $('#policy_no').change(function(){ $.ajax({ url: '', type: "GET", - data : { policy_no : policy_no }, + data : { policy_no : policy_no, client_id : client_id, client_branch_id : client_branch_id, policy_type_id : policy_type_id}, dataType: 'json', success: function (res) { console.log('get_client_policy_data_using_policy_no response', res) - if(res.status == true){ + if(res.status == true && res.code == 409){ + toastr.warning(res.message,'WARNING'); + $('#policy_no').val(""); + return; + } + + if(res.status == true){ $('#ct_type').val(1); $('#client_policy_id').val(res.data.id); $('#policy_start_date').val(res.data.policy_start_date); diff --git a/app/Views/report_bds.php b/app/Views/report_bds.php index 815eecb5..d8c1145a 100644 --- a/app/Views/report_bds.php +++ b/app/Views/report_bds.php @@ -212,8 +212,8 @@ $(document).ready(function() { customizeData: function (data) { for (var i = 0; i < data.body.length; i++) { for (var j = 0; j < data.body[i].length; j++) { - // Check if the column is the 9th index (10th column) - if (j === 9) { + // Check if the column is the 9th index (10th column) and 10th index (11th column) + if (j === 9 || j === 10) { data.body[i][j] = '\u200C' + data.body[i][j]; } } diff --git a/app/Views/rfq/gmc.php b/app/Views/rfq/gmc.php index f8982fce..fe9b7c2d 100644 --- a/app/Views/rfq/gmc.php +++ b/app/Views/rfq/gmc.php @@ -78,12 +78,12 @@
Formulas:
- 1. Incurred Claims = Paid Claims + Outstanding Claims
- 2. Policy Run Days = Incurred Claim Date - Policy Start Date + 1
- 3. Earned Premium = (Premium as on Date / 365) × 364
- 4. Annualised Claims = (Incurred Claims / Policy Run Days) × 365
- 5. Incurred Claim Ratio = Annualised Claims / Premium as on Date
- 6. Earned Claims Ratio = Annualised Claims / Earned Premium + 1. Incurred Claims = Paid Claims + Outstanding Claims
+ 2. Policy Run Days = Incurred Claim Date - Policy Start Date + 1
+ 3. Earned Premium = (Premium as on Date / 365) × Policy Run Days
+ 4. Annualised Claims = (Incurred Claims / Policy Run Days) × 365
+ 5. Incurred Claim Ratio = Incurred Claims / Premium as on Date
+ 6. Earned Claims Ratio = Annualised Claims / Premium as on Date
diff --git a/app/Views/view_rfq.php b/app/Views/view_rfq.php index 51c7bf17..845d7229 100644 --- a/app/Views/view_rfq.php +++ b/app/Views/view_rfq.php @@ -230,7 +230,7 @@       Export Excel - + @@ -2560,6 +2560,15 @@ function popInsurerInArray(proposal_name, insurerName) { function changeInsurer(event) { + console.log('change insure event', event); + + let proposal_name = getParentHeaderTh(event); + console.log('proposel Name', proposal_name) + + if(proposal_name == null || proposal_name == ""){ + toastr.warning("Could not change the insurer", "WARNING") + return; + } // let newInsurerName = prompt("Enter New insurer name:"); const insurers = ; @@ -2577,77 +2586,164 @@ function changeInsurer(event) { console.log('newInsurerName', newInsurerName) console.log('newversion', newversion) - if (newInsurerName) { + const closestTh = event.target.closest('th'); + let oldInsurerName = closestTh.innerText.split('⋮')[0].trim(); + console.log(oldInsurerName + ' - ' + newInsurerName); - const closestTh = event.target.closest('th'); - let oldInsurerName = closestTh.innerText.split('⋮')[0].trim(); - let subThIndex = closestTh.cellIndex; - console.log(oldInsurerName + ' - ' + newInsurerName); - // Iterate over child nodes to find the text node containing "Myname" - closestTh.childNodes.forEach(node => { - if (node.nodeType === Node.TEXT_NODE && node.textContent.includes(oldInsurerName)) { - // Replace the old name with the new name - node.textContent = node.textContent.replace(oldInsurerName, newInsurerName); + + if (!checkExistingInsurer(proposal_name, newInsurerName) && oldInsurerName != newInsurerName) { + + Swal.fire({ + title: "Insurer Dublicate Found?", + text: "Do you want version control!", + icon: "warning", + showCancelButton: true, + confirmButtonColor: "#3085d6", + cancelButtonColor: "#d33", + confirmButtonText: "Yes, Procced!" + }).then((result) => { + if (result.isConfirmed) { + + let modifiedInsurerName = constructInsurerNameWithVersion(proposal_name, newInsurerName); + console.log('modifiedInsurerName', modifiedInsurerName); + changeInsurerData(event, modifiedInsurerName, dataId) + + }else{ + return false; } }); - //find parent th index then it's text content - - - // Get the sub TH from the second header row - const table = document.getElementById('rfqTable'); - const headerRows = table.querySelectorAll('thead tr'); - const subTh = headerRows[1].children[subThIndex]; - - let accumulatedColspan = 0; - let parentTh = null; - const firstHeaderRow = headerRows[0]; - // Find the parent TH for the specified sub TH index - for (let i = 0; i < firstHeaderRow.children.length; i++) { - const currentParentTh = firstHeaderRow.children[i]; - const currentColspan = parseInt(currentParentTh.getAttribute('colspan')) || 1; - - accumulatedColspan += currentColspan; - - if (subThIndex < accumulatedColspan) { - parentTh = currentParentTh; - break; - } - } - - changeInsurerForPremiumTable(event, newInsurerName, subThIndex) - - let proposal_name = parentTh.innerText.split('⋮')[0].trim(); - - if (over_all_column_data[proposal_name]) { - // let tempInsurerList = over_all_column_data[proposal_name].insurers; - // console.log(tempInsurerList); - // if(!tempInsurerList.length) { return true; } - //replace the old insurer with the new insuren in global array - over_all_column_data[proposal_name].insurers.forEach(item => { - if (item.display_name === oldInsurerName) { - item.display_name = newInsurerName; // Replace with new name - item.ins_name = newInsurerName.split('-')[0].trim(); // Replace with new name - item.id = dataId - } - }); - // console.log(tempInsurerList); - // over_all_column_data[proposal_name].insurers = tempInsurerList; - console.log('insurer name replaced in golbal variable'); - console.log(over_all_column_data[proposal_name].insurers); - // over_all_column_data[proposal_name].insurers = tempInsurerList - - isFormDataModified = true; // if any value changeing in the table to set true - - return; - } - - console.log('insurer name not replaced in golbal variable'); - + }else{ + changeInsurerData(event, newInsurerName) } + + }); } +function changeInsurerData(event, newInsurerName, dataId){ + + if (newInsurerName) { + + const closestTh = event.target.closest('th'); + let oldInsurerName = closestTh.innerText.split('⋮')[0].trim(); + let subThIndex = closestTh.cellIndex; + console.log(oldInsurerName + ' - ' + newInsurerName); + // Iterate over child nodes to find the text node containing "Myname" + closestTh.childNodes.forEach(node => { + if (node.nodeType === Node.TEXT_NODE && node.textContent.includes(oldInsurerName)) { + // Replace the old name with the new name + node.textContent = node.textContent.replace(oldInsurerName, newInsurerName); + } + }); + //find parent th index then it's text content + + + // Get the sub TH from the second header row + const table = document.getElementById('rfqTable'); + const headerRows = table.querySelectorAll('thead tr'); + const subTh = headerRows[1].children[subThIndex]; + + let accumulatedColspan = 0; + let parentTh = null; + const firstHeaderRow = headerRows[0]; + // Find the parent TH for the specified sub TH index + for (let i = 0; i < firstHeaderRow.children.length; i++) { + const currentParentTh = firstHeaderRow.children[i]; + const currentColspan = parseInt(currentParentTh.getAttribute('colspan')) || 1; + + accumulatedColspan += currentColspan; + + if (subThIndex < accumulatedColspan) { + parentTh = currentParentTh; + break; + } + } + + changeInsurerForPremiumTable(event, newInsurerName, subThIndex) + + let proposal_name = parentTh.innerText.split('⋮')[0].trim(); + + if (over_all_column_data[proposal_name]) { + // let tempInsurerList = over_all_column_data[proposal_name].insurers; + // console.log(tempInsurerList); + // if(!tempInsurerList.length) { return true; } + //replace the old insurer with the new insuren in global array + over_all_column_data[proposal_name].insurers.forEach(item => { + if (item.display_name === oldInsurerName) { + item.display_name = newInsurerName; // Replace with new name + item.ins_name = newInsurerName.split('-')[0].trim(); // Replace with new name + item.id = dataId + } + }); + // console.log(tempInsurerList); + // over_all_column_data[proposal_name].insurers = tempInsurerList; + console.log('insurer name replaced in golbal variable'); + console.log(over_all_column_data[proposal_name].insurers); + // over_all_column_data[proposal_name].insurers = tempInsurerList + + isFormDataModified = true; // if any value changeing in the table to set true + + return; + } + + console.log('insurer name not replaced in golbal variable'); + + + }else{ + toastr.warning("Could not change the insurer", "WARNING") + return; + } +} + +function getParentHeaderTh(event) { + + const currentTh = event.target.closest('th'); + if (!currentTh) return; + + const colIndex = currentTh.cellIndex; + + // Get all header rows + const thead = currentTh.closest('thead'); + const headerRows = thead.querySelectorAll('tr'); + + if (headerRows.length < 2) return; // need at least 2 header rows + + const secondRowThs = headerRows[1].querySelectorAll('th'); + const firstRowThs = headerRows[0].querySelectorAll('th'); + + // Step 1: Find actual column span index of clicked th in 2nd row + let actualColIndex = 0; + for (let i = 0; i < secondRowThs.length; i++) { + const th = secondRowThs[i]; + const colspan = parseInt(th.getAttribute('colspan')) || 1; + + if (th === currentTh) break; + + actualColIndex += colspan; + } + + // Step 2: Match it with first row s + let colSpanCounter = 0; + for (let i = 0; i < firstRowThs.length; i++) { + const th = firstRowThs[i]; + const colspan = parseInt(th.getAttribute('colspan')) || 1; + + if (actualColIndex >= colSpanCounter && actualColIndex < colSpanCounter + colspan) { + let proposelName = th.innerText.split('⋮')[0].trim(); + console.log("Parent TH Proposel innerText:", proposelName); + console.log("Parent TH Proposel textContent:", th.textContent.trim()); + return proposelName; + } + + colSpanCounter += colspan; + } + + console.log("Parent header not found"); + return null; +} + + function changeState(event) { console.log('changeState Function called')