(function (A, D, I) { var CAMERA_SVG = ''; A.switchTab = function (tabId) { document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.toggle('active', btn.dataset.tab === tabId)); document.querySelectorAll('.tab-panel').forEach(panel => panel.classList.toggle('active', panel.id === 'panel-' + tabId)); }; A.applyFormType = function (type) { A.state.formData.type = type; var body = document.body; body.classList.remove('type-wissel', 'type-overweg', 'type-spoor', 'type-engelsman', 'type-kruising'); body.classList.add('type-' + type); var thead = document.getElementById('assessmentHead'); var titles = {}; titles[D.TYPE_WISSEL] = 'Duimstokformulier Gewoon of Symmetrisch wissel'; titles[D.TYPE_ENGELSMAN] = 'Duimstokformulier Half of Heel Engelsman'; titles[D.TYPE_KRUISING] = 'Duimstokformulier Kruising'; titles[D.TYPE_OVERWEG] = 'Duimstokformulier Overwegbevloering'; titles[D.TYPE_SPOOR] = 'Duimstokformulier Spoor'; if (D.usesDwlBal(type)) { thead.innerHTML = 'NrLocatieDWL ScoreBAL ScoreFoto\'sOpmerkingen'; } else if (type === D.TYPE_OVERWEG) { thead.innerHTML = 'LocatieScoreFoto\'sOpmerkingen'; } else if (type === D.TYPE_SPOOR) { thead.innerHTML = 'NrKM vanKM totLengteScoreFoto\'sOpmerkingen'; } document.getElementById('formTitle').textContent = titles[type] || 'Duimstokformulier'; }; A.resetForm = function () { A.state.formData = A.emptyFormData(); document.body.classList.remove('type-wissel', 'type-overweg', 'type-spoor', 'type-engelsman', 'type-kruising'); document.querySelectorAll('.header-grid .value').forEach(el => el.textContent = ''); document.querySelectorAll('#hdr_taakomschrijving, #hdr_aanleiding').forEach(el => el.textContent = ''); document.getElementById('inp_inspecteur').value = ''; document.getElementById('inp_inspectiedatum').value = ''; document.getElementById('inp_techjaar').value = ''; document.getElementById('inp_inspjaar').value = ''; document.getElementById('inp_opmerkingen').value = ''; document.getElementById('assessmentBody').innerHTML = ''; var totaal = document.getElementById('totaalscore'); totaal.textContent = '-'; totaal.className = 'cell score-cell'; document.getElementById('totaal_fotonummers').textContent = ''; document.getElementById('statusFotos').textContent = "Foto's: 0"; document.getElementById('statusSaved').textContent = ''; document.getElementById('statusOrder').textContent = ''; A.updateOverviewBadges(); A.renderOverviewThumbs(); A.switchTab('inspectie'); }; A.prefillFromOrder = function (order) { var type = D.typeFromObjectsoort(order.objectsoort); A.applyFormType(type); A.state.formData.orderNr = order.orderKey; document.getElementById('hdr_omschrijving').textContent = order.omschrijving; document.getElementById('hdr_eqart').textContent = order.objectsoort; document.getElementById('hdr_startpoint').textContent = order.startpunt; document.getElementById('hdr_endpoint').textContent = order.eindpunt; document.getElementById('hdr_orderoperatie').textContent = order.orderKey; document.getElementById('inp_inspecteur').value = order.inspecteur || ''; document.getElementById('statusOrder').textContent = 'Order: ' + order.orderKey + ' | ' + order.omschrijving; document.getElementById('formToolbarTitle').textContent = order.omschrijving; }; function buildScoreOptions(selected) { return '' + D.SCORE_VALUES.map(v => ``).join(''); } function photoButton(nr, locatie) { return ``; } function wireAssessmentEvents() { var tbody = document.getElementById('assessmentBody'); tbody.querySelectorAll('select[data-nr]').forEach(sel => sel.addEventListener('change', () => onScoreChange(sel))); tbody.querySelectorAll('input[data-field="opm"]').forEach(inp => inp.addEventListener('input', () => onOpmChange(inp))); tbody.querySelectorAll('input[data-field="techJaar"], input[data-field="inspJaar"]').forEach(inp => inp.addEventListener('input', () => onSpoorFieldChange(inp))); tbody.querySelectorAll('button[data-action="open-photo"]').forEach(btn => btn.addEventListener('click', () => A.openPhotoModal(+btn.dataset.nr, btn.dataset.loc))); } A.buildWisselAssessment = function (scoreElements, type) { var tbody = document.getElementById('assessmentBody'); tbody.innerHTML = ''; var currentSection = ''; var assessType = type || A.state.formData.type; scoreElements.forEach(el => { var nr = parseInt(el.querySelector('NR').textContent.trim()); var locatie = el.querySelector('LOCATIE').textContent.trim(); var dwlScore = el.querySelector('DWL_SCORE').textContent.trim(); var balScore = el.querySelector('BAL_SCORE').textContent.trim(); var section = D.getSectionForNr(nr, assessType); if (section && section !== currentSection) { currentSection = section; var sr = document.createElement('tr'); sr.className = 'section-row'; sr.innerHTML = '' + section + ''; tbody.appendChild(sr); } var tr = document.createElement('tr'); tr.dataset.nr = nr; tr.innerHTML = '' + nr + '' + '' + locatie + '' + '' + '' + '' + photoButton(nr, locatie) + '' + ''; tbody.appendChild(tr); if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = { dwl: dwlScore, bal: balScore, opm: '' }; if (!A.state.formData.photos[nr]) A.state.formData.photos[nr] = []; var dwlSel = tr.querySelector('select[data-type="dwl"]'); if (dwlScore) dwlSel.className = D.scoreClass(dwlScore); var balSel = tr.querySelector('select[data-type="bal"]'); if (balScore) balSel.className = D.scoreClass(balScore); }); wireAssessmentEvents(); }; A.buildOverwegAssessment = function (scoreElements) { var tbody = document.getElementById('assessmentBody'); tbody.innerHTML = ''; scoreElements.forEach((el, idx) => { var nr = idx + 1; var locatie = el.querySelector('LOCATIE').textContent.trim(); var score = el.querySelector('SCORE').textContent.trim(); var tr = document.createElement('tr'); tr.dataset.nr = nr; tr.innerHTML = '' + locatie + '' + '' + '' + photoButton(nr, locatie) + '' + ''; tbody.appendChild(tr); if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = { score: score, opm: '' }; if (!A.state.formData.photos[nr]) A.state.formData.photos[nr] = []; var sel = tr.querySelector('select[data-type="score"]'); if (score) sel.className = D.scoreClass(score); }); wireAssessmentEvents(); }; A.buildSpoorAssessment = function (scoreElements) { var tbody = document.getElementById('assessmentBody'); tbody.innerHTML = ''; scoreElements.forEach(el => { var nr = parseInt(el.querySelector('NR').textContent.trim()); var kmVan = el.querySelector('KM_VAN').textContent.trim(); var kmTot = el.querySelector('KM_TOT').textContent.trim(); var lengte = el.querySelector('LENGTE').textContent.trim(); var score = el.querySelector('SCORE').textContent.trim(); var techJaar = el.querySelector('TECH_JAAR') ? el.querySelector('TECH_JAAR').textContent.trim() : ''; var inspJaar = el.querySelector('INSP_JAAR') ? el.querySelector('INSP_JAAR').textContent.trim() : ''; var tr = document.createElement('tr'); tr.dataset.nr = nr; tr.innerHTML = '' + nr + '' + '' + kmVan + '' + '' + kmTot + '' + '' + lengte + ' m' + '' + '' + photoButton(nr, 'Segment ' + nr) + '' + ''; tbody.appendChild(tr); if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = { score: score, kmVan: kmVan, kmTot: kmTot, lengte: lengte, techJaar: techJaar, inspJaar: inspJaar, opm: '' }; if (!A.state.formData.photos[nr]) A.state.formData.photos[nr] = []; var sel = tr.querySelector('select[data-type="score"]'); if (score) sel.className = D.scoreClass(score); }); wireAssessmentEvents(); }; A.buildAssessmentForType = function (type, scoreElements) { if (D.usesDwlBal(type)) A.buildWisselAssessment(scoreElements, type); else if (type === D.TYPE_OVERWEG) A.buildOverwegAssessment(scoreElements); else if (type === D.TYPE_SPOOR) A.buildSpoorAssessment(scoreElements); }; function onScoreChange(sel) { var nr = parseInt(sel.dataset.nr); var field = sel.dataset.type; var val = sel.value; if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = {}; A.state.formData.scores[nr][field] = val; sel.className = D.scoreClass(val); A.updateTotaalscore(); A.autoSave(); } function onOpmChange(inp) { var nr = parseInt(inp.dataset.nr); if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = {}; A.state.formData.scores[nr].opm = inp.value; A.autoSave(); } function onSpoorFieldChange(inp) { var nr = parseInt(inp.dataset.nr); var field = inp.dataset.field; if (!A.state.formData.scores[nr]) A.state.formData.scores[nr] = {}; A.state.formData.scores[nr][field] = inp.value; A.autoSave(); } A.updateTotaalscore = function () { var type = A.state.formData.type; var worst; if (D.usesDwlBal(type)) { worst = D.computeWorstScore(A.state.formData.scores); } else { var order = ['', ...D.SCORE_VALUES]; var wIdx = 0; var wScore = ''; for (var data of Object.values(A.state.formData.scores)) { var s = data.score || ''; var m = order.indexOf(s); if (m > wIdx) { wIdx = m; wScore = order[m]; } } worst = wScore; } var el = document.getElementById('totaalscore'); el.textContent = worst || '-'; el.className = 'cell score-cell'; if (worst) el.classList.add(D.scoreClass(worst)); }; A.loadSavedData = async function (orderNr) { var saved = await I.loadInspection(orderNr); if (!saved) return; if (saved.type) A.applyFormType(saved.type); if (saved.inspecteur) document.getElementById('inp_inspecteur').value = saved.inspecteur; if (saved.inspectiedatum) document.getElementById('inp_inspectiedatum').value = saved.inspectiedatum; if (saved.techJaar) document.getElementById('inp_techjaar').value = saved.techJaar; if (saved.inspJaar) document.getElementById('inp_inspjaar').value = saved.inspJaar; if (saved.opmerkingen) document.getElementById('inp_opmerkingen').value = saved.opmerkingen; if (saved.scores) { A.state.formData.scores = saved.scores; for (var [nr, data] of Object.entries(saved.scores)) { var dS = document.querySelector('select[data-nr="' + nr + '"][data-type="dwl"]'); var bS = document.querySelector('select[data-nr="' + nr + '"][data-type="bal"]'); var sS = document.querySelector('select[data-nr="' + nr + '"][data-type="score"]'); var oI = document.querySelector('input[data-nr="' + nr + '"][data-field="opm"]'); if (dS && data.dwl) { dS.value = data.dwl; dS.className = D.scoreClass(data.dwl); } if (bS && data.bal) { bS.value = data.bal; bS.className = D.scoreClass(data.bal); } if (sS && data.score) { sS.value = data.score; sS.className = D.scoreClass(data.score); } if (oI && data.opm) oI.value = data.opm; } A.updateTotaalscore(); } if (saved.photos) { A.state.formData.photos = saved.photos; A.updatePhotoBadges(); } if (saved.overviewPhotos) { A.state.formData.overviewPhotos = saved.overviewPhotos; A.updateOverviewBadges(); A.renderOverviewThumbs(); } document.getElementById('statusSaved').textContent = 'Eerder opgeslagen data hersteld'; }; })(window.App.Application, window.App.Domain, window.App.Infrastructure);