From 53b79b529760a233b70dac8d7569a35934bb9197 Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Tue, 18 Aug 2026 16:33:24 +0530 Subject: [PATCH] Add raw mPDF input debugger --- app/Config/Routes.php | 1 + app/Controllers/Ipd_discharge.php | 26 +++++++++++++++++++ .../ipd_discharge/discharge_template_edit.php | 7 +++++ app/Views/ipd_discharge/mpdf_raw_html.php | 17 ++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 app/Views/ipd_discharge/mpdf_raw_html.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index d507b9b..96947e7 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -417,6 +417,7 @@ $routes->get('Ipd_discharge/search_patient', 'Ipd_discharge::search_patient', [' $routes->get('Ipd_discharge/search_patient_ajax', 'Ipd_discharge::search_patient_ajax', ['filter' => 'permission:ipd_discharge.view,ipd_discharge.manage']); $routes->get('Ipd_discharge/debug_ipd_fields/(:num)', 'Ipd_discharge::debug_ipd_fields/$1', ['filter' => 'permission:admin.access,admin.settings']); $routes->get('Ipd_discharge/debug_discharge_html/(:num)', 'Ipd_discharge::debug_discharge_html/$1', ['filter' => 'permission:admin.access,admin.settings']); +$routes->get('Ipd_discharge/debug_mpdf_input/(:num)/(:num)', 'Ipd_discharge::debug_mpdf_input/$1/$2', ['filter' => 'permission:template.discharge,ipd_discharge.view,billing.access']); $routes->get('Ipd_discharge/placeholder_preview', 'Ipd_discharge::placeholder_preview', ['filter' => 'permission:ipd_discharge.view,ipd_discharge.manage']); $routes->get('Ipd_discharge/placeholder_preview/(:num)', 'Ipd_discharge::placeholder_preview/$1', ['filter' => 'permission:ipd_discharge.view,ipd_discharge.manage']); $routes->match(['GET', 'POST'], 'Ipd_discharge/ipd_select/(:num)', 'Ipd_discharge::ipd_select/$1', ['filter' => 'permission:ipd_discharge.manage']); diff --git a/app/Controllers/Ipd_discharge.php b/app/Controllers/Ipd_discharge.php index 330a0b3..35c7a0f 100644 --- a/app/Controllers/Ipd_discharge.php +++ b/app/Controllers/Ipd_discharge.php @@ -5555,6 +5555,24 @@ class Ipd_discharge extends BaseController ); } + public function debug_mpdf_input(int $ipdId, int $templateId = 0) + { + if ($resp = $this->requireAnyPermission(['template.discharge', 'ipd_discharge.view', 'billing.access'])) { + return $resp; + } + + $file = WRITEPATH . 'debug' . DIRECTORY_SEPARATOR . 'discharge_mpdf_input_' . $ipdId . '_' . $templateId . '.html'; + if (! is_file($file)) { + return $this->response->setStatusCode(404)->setBody('Generate the PDF first, then reopen this debug view.'); + } + + return view('ipd_discharge/mpdf_raw_html', [ + 'ipd_id' => $ipdId, + 'template_id' => $templateId, + 'html' => (string) file_get_contents($file), + ]); + } + /** * Placeholder preview page: shows each placeholder and resolved content for an IPD. * Access via: /Ipd_discharge/placeholder_preview/{ipdId}?tpl={templateId} @@ -7398,6 +7416,14 @@ class Ipd_discharge extends BaseController $pdfHtml .= $renderedHtml; $pdfHtml = mpdf_normalize_font_weight_css($pdfHtml); + + $debugDirectory = WRITEPATH . 'debug'; + if (! is_dir($debugDirectory)) { + mkdir($debugDirectory, 0755, true); + } + $debugTemplateId = (int) ($templatePack['selected_template_id'] ?? 0); + file_put_contents($debugDirectory . DIRECTORY_SEPARATOR . 'discharge_mpdf_input_' . $ipdId . '_' . $debugTemplateId . '.html', $pdfHtml, LOCK_EX); + $pdfBinary = $this->runMpdfWithTolerantWarnings(static function () use ($mpdf, $pdfHtml, $fileName): string { $mpdf->WriteHTML($pdfHtml); diff --git a/app/Views/ipd_discharge/discharge_template_edit.php b/app/Views/ipd_discharge/discharge_template_edit.php index 6e49742..230aa32 100644 --- a/app/Views/ipd_discharge/discharge_template_edit.php +++ b/app/Views/ipd_discharge/discharge_template_edit.php @@ -157,6 +157,7 @@ $placeholders = [ + @@ -267,6 +268,12 @@ $placeholders = [ window.open('/' + ipdId + '/1?html=1' + (editId > 0 ? '&tpl=' + editId : ''), '_blank'); }); + document.getElementById('btn_mpdf_input').addEventListener('click', function () { + var ipdId = parseInt(val('preview_ipd_id'), 10); + if (!ipdId || !editId) { alert('Save the template and enter IPD ID first.'); return; } + window.open('/' + ipdId + '/' + editId, '_blank'); + }); + /* Placeholder click-to-copy */ document.querySelectorAll('.ph-chip').forEach(function (chip) { chip.addEventListener('click', function () { diff --git a/app/Views/ipd_discharge/mpdf_raw_html.php b/app/Views/ipd_discharge/mpdf_raw_html.php new file mode 100644 index 0000000..f828326 --- /dev/null +++ b/app/Views/ipd_discharge/mpdf_raw_html.php @@ -0,0 +1,17 @@ + +
+
+
+ Exact HTML passed to mPDF WriteHTML() + IPD | Template : +
+
+
+
+
+