115 lines
3.8 KiB
JavaScript
115 lines
3.8 KiB
JavaScript
(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;
|
|
A.state.orders = await I.loadOrdersFromUpload(file);
|
|
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();
|
|
A.state.orders = D.parseCSV(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();
|
|
}
|
|
})();
|