60 lines
2.3 KiB
JavaScript
60 lines
2.3 KiB
JavaScript
/* Widerrufsseite: Vertragsart „Projektauftrag“ mit freiwilliger Nummer der Auftragsbestätigung (Feld abNummer).
|
|
Rechtsfunktion: dieses Modul darf die anderen Vertragsarten nie stören. Fällt es aus, funktioniert der Widerruf wie bisher.
|
|
Das Feld ist nur bei „Projektauftrag“ sichtbar; eine eingegebene, aber unpassende Nummer wird gemeldet und stoppt das Absenden,
|
|
ein leeres Feld lässt den Widerruf durch (der Widerruf bleibt formfrei). Die Meldung steht in auftrag-ansicht.js. */
|
|
import { ANREDE_DU, abNummerNormalisiert, texte } from './auftrag-ansicht.js'
|
|
|
|
export function initProjektWiderruf(form) {
|
|
const wrap = form?.querySelector('#ab-nummer-wrap')
|
|
const feld = form?.querySelector('#abNummer')
|
|
const fehler = form?.querySelector('#form-error')
|
|
if (!form || !wrap || !feld || !fehler) return
|
|
const gewaehlt = () => form.querySelector('[name="order"]:checked')?.value
|
|
let eigeneMeldung = false
|
|
|
|
const meldungWeg = () => {
|
|
if (!eigeneMeldung) return
|
|
eigeneMeldung = false
|
|
fehler.textContent = ''
|
|
fehler.classList.add('hidden')
|
|
}
|
|
const zeige = () => {
|
|
const projekt = gewaehlt() === 'projekt'
|
|
wrap.classList.toggle('hidden', !projekt)
|
|
if (!projekt) {
|
|
feld.value = ''
|
|
meldungWeg()
|
|
}
|
|
}
|
|
|
|
form.addEventListener('change', zeige)
|
|
form.addEventListener('click', (ev) => {
|
|
if (!ev.target?.closest?.('button[type="submit"], input[type="submit"]') || gewaehlt() !== 'projekt') return
|
|
const eingabe = feld.value.trim()
|
|
if (!eingabe) {
|
|
feld.value = ''
|
|
meldungWeg()
|
|
return
|
|
}
|
|
const nummer = abNummerNormalisiert(eingabe)
|
|
if (!nummer) {
|
|
ev.preventDefault()
|
|
// Neue Seite (data-anrede="du"): die Meldung in du; ohne das Attribut bleibt der Satz aus auftrag-ansicht.js
|
|
fehler.textContent = form.getAttribute('data-anrede') === ANREDE_DU
|
|
? 'Die Nummer sieht anders aus als AB-2026-0001. Bitte prüfe die Nummer oder lass das Feld leer.'
|
|
: texte().abNummerUngueltig
|
|
fehler.classList.remove('hidden')
|
|
eigeneMeldung = true
|
|
feld.focus()
|
|
return
|
|
}
|
|
feld.value = nummer
|
|
meldungWeg()
|
|
})
|
|
zeige()
|
|
}
|
|
|
|
if (typeof document !== 'undefined' && document.getElementById('decl-form') && document.getElementById('ab-nummer-wrap')) {
|
|
initProjektWiderruf(document.getElementById('decl-form'))
|
|
}
|