diff --git a/server.js b/server.js
index 52b298c..49ac817 100644
--- a/server.js
+++ b/server.js
@@ -244,6 +244,40 @@ function layout(title, body, { authenticated = false, activePath = "/", subtitle
var modalRoot = document.getElementById('modal-root');
if (modalRoot) modalRoot.innerHTML = '';
}
+
+ function normalizeDateForInput(value) {
+ var text = String(value || '').trim();
+ if (!text || text === 'null' || text === 'undefined') return '';
+ var iso = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);
+ if (iso) return iso[0];
+ var slash = text.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);
+ if (slash) return slash[3] + '-' + slash[2] + '-' + slash[1];
+ var dash = text.match(/^(\\d{2})-(\\d{2})-(\\d{4})$/);
+ if (dash) return dash[3] + '-' + dash[2] + '-' + dash[1];
+ return '';
+ }
+
+ function fillPatientFromPick(button) {
+ var form = document.querySelector('[data-order-form]');
+ if (!form || !button) return;
+ var fields = {
+ patient_name: button.getAttribute('data-patient-name') || '',
+ patient_dob: normalizeDateForInput(button.getAttribute('data-patient-dob') || ''),
+ patient_nik: button.getAttribute('data-patient-nik') || '',
+ patient_hp: button.getAttribute('data-patient-hp') || '',
+ patient_address: button.getAttribute('data-patient-address') || '',
+ };
+ Object.keys(fields).forEach(function (name) {
+ var field = form.querySelector('[name="' + name.replace(/"/g, '\\"') + '"]');
+ if (!field) return;
+ field.value = fields[name];
+ field.dispatchEvent(new Event('input', { bubbles: true }));
+ field.dispatchEvent(new Event('change', { bubbles: true }));
+ });
+ syncOrderDraft(form);
+ closeModal();
+ }
+
document.addEventListener('input', function (event) {
var form = isOrderField(event.target);
if (!form) return;
@@ -270,6 +304,12 @@ function layout(title, body, { authenticated = false, activePath = "/", subtitle
injectOrderDraftPayload(form);
});
document.addEventListener('click', function (event) {
+ var patientPick = event.target.closest && event.target.closest('[data-patient-pick]');
+ if (patientPick) {
+ event.preventDefault();
+ fillPatientFromPick(patientPick);
+ return;
+ }
var printTrigger = event.target.closest && event.target.closest('[data-action="print-order"]');
if (printTrigger) {
event.preventDefault();
@@ -793,9 +833,12 @@ function renderOrderForm(step, stepKey = "demografi", fppTests = [], mouId = "")
demografi: `
- ${panelHeader("Mandatory", "These fields are required or expected by the backend before save.")}
+ ${panelHeader("Mandatory", "These fields are required before save.")}
+