diff --git a/app/Views/medical/credit_payout_request.php b/app/Views/medical/credit_payout_request.php index 9c434b1..b58b71b 100644 --- a/app/Views/medical/credit_payout_request.php +++ b/app/Views/medical/credit_payout_request.php @@ -190,6 +190,11 @@ if (t) t.value = total.toFixed(2); } + function getGroupMode() { + var el = document.getElementById('med_pool_group_by'); + return el ? String(el.value || 'none') : 'none'; + } + function updateMasterCheckboxForPage() { var master = document.getElementById('med_pool_master'); if (!master || !poolTable) { @@ -297,6 +302,9 @@ searchable: false, className: 'text-center', render: function (data, type, row) { + if (getGroupMode() === 'ipd') { + return ''; + } var key = getRowKey(row); poolRowCache[key] = row; var checked = selectedMap[key] ? ' checked' : ''; @@ -366,7 +374,21 @@ var val = groupMode === 'ipd' ? String(row.ipd_code || '').trim() : String(row.case_code || '').trim(); var groupValue = val !== '' ? val : 'Unmapped'; if (groupValue !== lastGroup) { - var title = (groupMode === 'ipd' ? 'IPD: ' : 'Case: ') + groupValue; + var groupRows = rows.filter(function (r) { + var rv = groupMode === 'ipd' ? String(r.ipd_code || '').trim() : String(r.case_code || '').trim(); + return (rv !== '' ? rv : 'Unmapped') === groupValue; + }); + var groupTotal = 0; + groupRows.forEach(function (r) { groupTotal += Number(r.line_amount || 0); }); + + var title = (groupMode === 'ipd' ? 'IPD: ' : 'Case: ') + groupValue + ' | Total: ' + groupTotal.toFixed(2); + if (groupMode === 'ipd') { + var allSelected = groupRows.length > 0 && groupRows.every(function (r) { + return !!selectedMap[getRowKey(r)]; + }); + var checked = allSelected ? ' checked' : ''; + title = ' ' + title; + } var header = window.jQuery('' + title + ''); window.jQuery(domRows[i]).before(header); lastGroup = groupValue; @@ -463,7 +485,11 @@ delete selectedMap[key]; } }); - window.jQuery('#med_credit_pool_table tbody .med-pool-check').prop('checked', masterCb.checked); + if (getGroupMode() === 'ipd') { + window.jQuery('#med_credit_pool_table tbody .med-ipd-group-check').prop('checked', masterCb.checked); + } else { + window.jQuery('#med_credit_pool_table tbody .med-pool-check').prop('checked', masterCb.checked); + } refreshSelectionSummary(); }); } @@ -486,12 +512,46 @@ delete selectedMap[key]; } }); - window.jQuery('#med_credit_pool_table tbody .med-pool-check').prop('checked', anyUnchecked); + if (getGroupMode() === 'ipd') { + window.jQuery('#med_credit_pool_table tbody .med-ipd-group-check').prop('checked', anyUnchecked); + } else { + window.jQuery('#med_credit_pool_table tbody .med-pool-check').prop('checked', anyUnchecked); + } if (masterCb) masterCb.checked = anyUnchecked; refreshSelectionSummary(); }); } + if (typeof window.jQuery !== 'undefined') { + window.jQuery('#med_credit_pool_table tbody').on('change', '.med-ipd-group-check', function () { + if (!poolTable) { + return; + } + var ipd = String(this.getAttribute('data-ipd') || '').trim(); + if (!ipd) { + return; + } + + var pageRows = poolTable.rows({ page: 'current' }).data().toArray(); + pageRows.forEach(function (row) { + var rowIpd = String(row.ipd_code || '').trim(); + var rowGroup = rowIpd !== '' ? rowIpd : 'Unmapped'; + if (rowGroup !== ipd) { + return; + } + var key = getRowKey(row); + if (this.checked) { + selectedMap[key] = row; + } else { + delete selectedMap[key]; + } + }, this); + + updateMasterCheckboxForPage(); + refreshSelectionSummary(); + }); + } + var btnApplyFilter = document.getElementById('btn_med_pool_apply_filter'); if (btnApplyFilter) { btnApplyFilter.addEventListener('click', applyPoolFilter);