From fd28d6a01e6a8aeeb3ed3bf760ec47aaf9f078da Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Fri, 3 Apr 2026 14:13:05 +0530 Subject: [PATCH] IPD cash balance: fix date range picker submission and parser --- app/Controllers/Billing/Ipd.php | 32 ++++++++++++++++++++++---- app/Views/billing/ipd/cash_balance.php | 21 +++++++++++++++-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/Controllers/Billing/Ipd.php b/app/Controllers/Billing/Ipd.php index c484c85..db61547 100644 --- a/app/Controllers/Billing/Ipd.php +++ b/app/Controllers/Billing/Ipd.php @@ -2165,14 +2165,36 @@ class Ipd extends BaseController $start = date('Y-m-d'); $end = $start; - if ($range !== '') { - $parts = explode('S', $range); - if (count($parts) === 2) { - $start = $parts[0]; - $end = $parts[1]; + $range = trim(urldecode($range)); + if ($range === '') { + return [$start, $end]; + } + + // Preferred format from UI: YYYY-MM-DDSYYYY-MM-DD + if (strpos($range, 'S') !== false) { + $parts = explode('S', $range, 2); + $startCandidate = trim((string) ($parts[0] ?? '')); + $endCandidate = trim((string) ($parts[1] ?? '')); + if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $startCandidate) === 1 + && preg_match('/^\d{4}-\d{2}-\d{2}$/', $endCandidate) === 1 + ) { + return [$startCandidate, $endCandidate]; } } + // Fallback: extract first two ISO dates from any incoming range string. + $dates = []; + if (preg_match_all('/\d{4}-\d{2}-\d{2}/', $range, $matches) > 0) { + $dates = $matches[0] ?? []; + } + + if (count($dates) >= 2) { + return [(string) $dates[0], (string) $dates[1]]; + } + if (count($dates) === 1) { + return [(string) $dates[0], (string) $dates[0]]; + } + return [$start, $end]; } diff --git a/app/Views/billing/ipd/cash_balance.php b/app/Views/billing/ipd/cash_balance.php index a242572..963513f 100644 --- a/app/Views/billing/ipd/cash_balance.php +++ b/app/Views/billing/ipd/cash_balance.php @@ -116,14 +116,31 @@ fallbackRangeToday(); } + function getSelectedRangeValue() { + var picker = $('#reportrange').data('daterangepicker'); + if (picker && picker.startDate && picker.endDate) { + var value = picker.startDate.format('YYYY-MM-DD') + 'S' + picker.endDate.format('YYYY-MM-DD'); + $('#ipd_date_range').val(value); + return value; + } + + var fallback = ($('#ipd_date_range').val() || '').toString().trim(); + if (fallback === '') { + fallbackRangeToday(); + fallback = ($('#ipd_date_range').val() || '').toString().trim(); + } + + return fallback; + } + $('#showreport1').click(function() { - var range = $('#ipd_date_range').val(); + var range = getSelectedRangeValue(); var url = '?range=' + encodeURIComponent(range); load_form_div(url, 'show_report'); }); $('#showreportexport').click(function() { - var range = $('#ipd_date_range').val(); + var range = getSelectedRangeValue(); var url = '?range=' + encodeURIComponent(range); window.open(url, '_blank'); });