diff --git a/server.js b/server.js index 08238f4..6b014e7 100644 --- a/server.js +++ b/server.js @@ -268,6 +268,15 @@ function layout(title, body, { authenticated = false, activePath = "/", subtitle injectOrderDraftPayload(form); }); document.addEventListener('click', function (event) { + var printTrigger = event.target.closest && event.target.closest('[data-action="print-order"]'); + if (printTrigger) { + event.preventDefault(); + document.body.classList.add('print-order'); + window.setTimeout(function () { + window.print(); + }, 50); + return; + } var close = event.target.closest && event.target.closest('[data-modal-close]'); if (!close) return; event.preventDefault(); @@ -276,6 +285,9 @@ function layout(title, body, { authenticated = false, activePath = "/", subtitle document.addEventListener('keydown', function (event) { if (event.key === 'Escape') closeModal(); }); + window.addEventListener('afterprint', function () { + document.body.classList.remove('print-order'); + }); document.addEventListener('htmx:afterSwap', function (event) { if (event.detail && event.detail.target && event.detail.target.id === 'modal-root') { var root = document.getElementById('modal-root'); @@ -645,15 +657,24 @@ function qrImageUrl(value, size = 240) { return `https://api.qrserver.com/v1/create-qr-code/?size=${size}x${size}&data=${data}`; } +function formatOrderDisplayDate(value) { + const text = String(value || "").trim(); + const match = text.match(/^(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}:\d{2}:\d{2}))?$/); + if (!match) return text; + return `${match[3]}-${match[2]}-${match[1]}${match[4] ? ` ${match[4]}` : ""}`; +} + function renderOrderSaved(order) { const details = Array.isArray(order.details) ? order.details : []; const qrText = order.orderCode || order.id || ""; + const printableDate = formatOrderDisplayDate(order.orderDate || ""); + const printableDoctor = order.doctorName || order.doctor || sampleLogin.username; return `
${escapeHtml(qrText || "-")}
-