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('= base_url('Ipd_discharge/show_discharge') ?>/' + 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('= base_url('Ipd_discharge/debug_mpdf_input') ?>/' + 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 @@
+
+