(function () { const A = window.App.Application; const D = window.App.Domain; const I = window.App.Infrastructure; function openOrder(orderKey) { A.state.currentOrderKey = orderKey; const order = A.state.orders.find(o => o.orderKey === orderKey); if (!order) return; A.resetForm(); A.prefillFromOrder(order); A.showScreen('screen-form'); A.loadSavedData(orderKey); } function goBackToOverview() { A.saveCurrentForm(); A.state.currentOrderKey = null; A.resetForm(); A.renderOverviewScreen(openOrder); A.showScreen('screen-overview'); } async function markOpnameGereed() { if (!A.state.currentOrderKey) { alert('Geen order geselecteerd.'); return; } await A.saveCurrentForm(); A.state.orderStatuses[A.state.currentOrderKey] = 'Opname gereed'; await I.saveOrderStatus(A.state.currentOrderKey, 'Opname gereed'); goBackToOverview(); } function wireOverviewToolbar() { document.getElementById('csvFileInput').addEventListener('change', async (e) => { const file = e.target.files[0]; if (!file) return; const { text, orders } = await I.loadOrdersFromUpload(file); await I.saveOrdersCsv(text); A.state.orders = orders; A.renderOverviewScreen(openOrder); e.target.value = ''; }); document.getElementById('btnOpenInstall').addEventListener('click', () => A.openInstallScreen()); document.querySelectorAll('.filter-btn').forEach(btn => { btn.addEventListener('click', () => A.setFilter(btn.dataset.filter, openOrder)); }); document.querySelectorAll('.col-filter').forEach(inp => { inp.addEventListener('input', () => { inp.classList.toggle('has-value', inp.value.length > 0); A.setColumnFilter(inp.dataset.col, inp.value, openOrder); }); }); } function wireInstallScreen() { document.getElementById('btnInstallBack').addEventListener('click', () => { A.showScreen('screen-overview'); }); } function wireFormToolbar() { document.getElementById('btnBack').addEventListener('click', goBackToOverview); document.getElementById('btnOpnameGereed').addEventListener('click', markOpnameGereed); document.getElementById('btnExport').addEventListener('click', () => A.exportFormData()); document.getElementById('btnPrint').addEventListener('click', () => window.print()); document.getElementById('xmlFileInput').addEventListener('change', async (e) => { const file = e.target.files[0]; if (!file) return; A.parseAndLoadXML(await file.text()); }); document.querySelectorAll('.tab-btn').forEach(btn => { btn.addEventListener('click', () => A.switchTab(btn.dataset.tab)); }); document.getElementById('cameraInput').addEventListener('change', A.handlePhotoCapture); document.getElementById('galleryInput').addEventListener('change', A.handlePhotoCapture); document.getElementById('photoModalClose').addEventListener('click', A.closePhotoModal); document.getElementById('lightbox').addEventListener('click', A.closeLightbox); document.getElementById('btnOpenSvg').addEventListener('click', () => { window.open('../PDF/Plaatje wissel_GW.svg', '_blank'); }); } function wireKeyboard() { document.addEventListener('keydown', e => { if (e.key === 'Escape') { A.closePhotoModal(); A.closeLightbox(); } }); } async function init() { await I.openDB(); const stored = await I.loadOrdersCsv(); A.state.orders = D.parseCSV(stored ? stored.csv : I.SEED_ORDERS_CSV); A.state.orderStatuses = await I.loadAllOrderStatuses(); wireOverviewToolbar(); wireFormToolbar(); wireInstallScreen(); wireKeyboard(); A.renderOverviewScreen(openOrder); A.initColumnResize(); A.initOverviewCapture(); A.pwa.register(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();