From ad8779ce757b1b280370d973f2bab1b7b5c671a7 Mon Sep 17 00:00:00 2001 From: Eddy Date: Sat, 18 Jul 2026 13:35:41 +0200 Subject: [PATCH] =?UTF-8?q?Feature:=20Neuer-Auftrag-Formular=20=E2=80=94?= =?UTF-8?q?=20Ihr=20Zeichen=20Pflicht,=20Liefertermin,=20Freigabe=20[deplo?= =?UTF-8?q?y]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Feldreihenfolge getauscht: "Ihr Zeichen" (ref_client) jetzt an erster Stelle und Pflicht; "Auftragsbeschreibung" (Titel) an zweiter Stelle und optional (vorher genau umgekehrt) - Neues Feld "Geplanter Liefertermin" (datetime-local -> date_livraison) - Neue Checkbox "Auftrag direkt freigeben" (validate-Flag ans Backend) - Erfolgsmeldung zeigt Freigabe-Status bzw. Warnung aus dem Backend --- app.js | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/app.js b/app.js index 004be16..584289e 100644 --- a/app.js +++ b/app.js @@ -1579,11 +1579,19 @@ async function openNewOrderModal() {
- + + + + - - + + + + `; @@ -1601,6 +1609,8 @@ async function openNewOrderModal() { const defaultsEl = modal.querySelector('#no-defaults'); const titleIn = modal.querySelector('#no-title'); const refIn = modal.querySelector('#no-refclient'); + const deliveryIn = modal.querySelector('#no-delivery'); + const validateCb = modal.querySelector('#no-validate'); const changeBtn = modal.querySelector('#no-change-customer'); let selectedCustomer = null; @@ -1675,7 +1685,7 @@ async function openNewOrderModal() { stepCust.hidden = true; stepDet.hidden = false; saveBtn.disabled = false; - titleIn.focus(); + refIn.focus(); } catch (err) { showToast('Fehler: ' + err.message, 'error'); } @@ -1692,16 +1702,26 @@ async function openNewOrderModal() { /* ---- Anlegen ---- */ saveBtn.onclick = async () => { if (!selectedCustomer) { showToast('Bitte zuerst Kunde wählen', 'error'); return; } + const refClient = refIn.value.trim(); + if (!refClient) { showToast('Ihr Zeichen ist Pflicht', 'error'); refIn.focus(); return; } const title = titleIn.value.trim(); - if (!title) { showToast('Titel ist Pflicht', 'error'); titleIn.focus(); return; } + const doValidate = validateCb.checked; + // datetime-local liefert lokale Zeit -> Unix-Timestamp (Sekunden); leer = 0 + let deliveryTs = 0; + if (deliveryIn.value) { + const d = new Date(deliveryIn.value); + if (!isNaN(d.getTime())) deliveryTs = Math.floor(d.getTime() / 1000); + } saveBtn.disabled = true; - showToast('Lege Auftrag an…'); + showToast(doValidate ? 'Lege Auftrag an & gebe frei…' : 'Lege Auftrag an…'); try { const res = await api.createOrder({ socid: selectedCustomer.id, + ref_client: refClient, title: title, - ref_client: refIn.value.trim(), + date_livraison: deliveryTs, + validate: doValidate, }); // Recent-Liste in IDB aktualisieren (letzte 5) try { @@ -1716,7 +1736,9 @@ async function openNewOrderModal() { await idb.set('recent_customers', filtered.slice(0, 5)); } catch (e) {} - showToast('✓ Auftrag ' + (res.order.ref || '') + ' angelegt'); + const ref = res.order.ref || ''; + showToast('✓ Auftrag ' + ref + (res.order.validated ? ' angelegt & freigegeben' : ' angelegt')); + if (res.validate_warning) showToast(res.validate_warning, 'error'); closeModal(modal); router.go('#/orders/' + res.order.id); } catch (e) {