From 281accbbd9567816230e1eef89f772d51b1beaf2 Mon Sep 17 00:00:00 2001 From: muamars Date: Mon, 30 Mar 2026 11:24:05 +0700 Subject: [PATCH] update: added selesaikan pengantaran --- wwwroot/driver/js/detail-penjemputan-tps.js | 110 +++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/wwwroot/driver/js/detail-penjemputan-tps.js b/wwwroot/driver/js/detail-penjemputan-tps.js index 7cbfa0b..84ea4f6 100644 --- a/wwwroot/driver/js/detail-penjemputan-tps.js +++ b/wwwroot/driver/js/detail-penjemputan-tps.js @@ -764,7 +764,7 @@ const DetailPenjemputan = (function () { `; elements.tpsContentContainer.innerHTML = ` -
+ @@ -787,6 +787,7 @@ const DetailPenjemputan = (function () { attachTpsFormListeners(); restoreTpsTimbanganItems(); restorePhotoPreview(); + renderFinishTransportButton(); } function renderSection1Kedatangan(tps, showTpsName) { @@ -2340,6 +2341,113 @@ const DetailPenjemputan = (function () { }, 3200); } + function showConfirmModal({ title, body, confirmText = 'Ya, Lanjutkan', cancelText = 'Batal' }) { + return new Promise((resolve) => { + const existing = document.getElementById('espj-confirm-modal'); + if (existing) existing.remove(); + + const overlay = document.createElement('div'); + overlay.id = 'espj-confirm-modal'; + overlay.className = 'fixed inset-0 z-[9998] flex items-end justify-center bg-slate-950/60 p-4 backdrop-blur-sm sm:items-center'; + overlay.innerHTML = ` +
+

${title}

+
${body}
+
+ + +
+
+ `; + + document.body.appendChild(overlay); + document.body.style.overflow = 'hidden'; + + function close(result) { + overlay.remove(); + document.body.style.overflow = ''; + resolve(result); + } + + overlay.querySelector('#espj-confirm-ok').addEventListener('click', () => close(true)); + overlay.querySelector('#espj-confirm-cancel').addEventListener('click', () => close(false)); + overlay.addEventListener('click', (e) => { if (e.target === overlay) close(false); }); + }); + } + + function renderFinishTransportButton() { + if (!elements.tpsTabsContainer) return; + + const hasMultipleTps = state.tpsData.length > 1; + const submittedCount = state.tpsData.filter((t) => t.submitted).length; + const allSubmitted = submittedCount === state.tpsData.length; + + let wrapper = document.getElementById('btn-finish-transport-wrapper'); + + if (!hasMultipleTps || submittedCount === 0 || allSubmitted) { + if (wrapper) wrapper.remove(); + return; + } + + if (!wrapper) { + wrapper = document.createElement('div'); + wrapper.id = 'btn-finish-transport-wrapper'; + elements.tpsTabsContainer.appendChild(wrapper); + } + + const unsubmittedNames = state.tpsData + .filter((t) => !t.submitted) + .map((t) => t.name) + .join(', '); + + wrapper.innerHTML = ` +
+ +
+ `; + + const actionBtn = wrapper.querySelector('#btn-finish-transport-action'); + if (actionBtn) { + actionBtn.addEventListener('click', handleFinishTransport); + } + } + + async function handleFinishTransport() { + const submittedTps = state.tpsData.filter((t) => t.submitted); + const unsubmittedTps = state.tpsData.filter((t) => !t.submitted); + + const submittedListHtml = submittedTps.map((t) => `${t.name}`).join(' '); + const unsubmittedListHtml = unsubmittedTps.map((t) => `${t.name}`).join(' '); + + const confirmed = await showConfirmModal({ + title: 'Selesaikan Pengangkutan?', + body: ` +

TPS yang sudah disubmit (${submittedTps.length}):

+

${submittedListHtml}

+

TPS yang tidak diangkut (${unsubmittedTps.length}):

+

${unsubmittedListHtml}

+

Data TPS yang tidak diangkut tidak akan dikirim.

+ `, + confirmText: 'Ya, Selesaikan', + cancelText: 'Batal', + }); + + if (!confirmed) return; + + const btn = document.getElementById('btn-finish-transport-action'); + if (btn) { + btn.disabled = true; + btn.textContent = 'Memproses...'; + } + + clearStateIfAllSubmitted(); + setTimeout(() => { + window.location.href = '/upst/detail-penjemputan/detail-selesai'; + }, 400); + } + return { init: init, hydrateFromApi: applyApiRecordData,