Feature: Neuer-Auftrag-Formular — Ihr Zeichen Pflicht, Liefertermin, Freigabe [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 13s
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 13s
- 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
This commit is contained in:
parent
125e2fd196
commit
ad8779ce75
1 changed files with 30 additions and 8 deletions
38
app.js
38
app.js
|
|
@ -1579,11 +1579,19 @@ async function openNewOrderModal() {
|
||||||
</div>
|
</div>
|
||||||
<div class="new-order-defaults" id="no-defaults"></div>
|
<div class="new-order-defaults" id="no-defaults"></div>
|
||||||
|
|
||||||
<label class="label">Titel / Kurzbeschreibung</label>
|
<label class="label">Ihr Zeichen <span style="color:#e66">*</span></label>
|
||||||
|
<input type="text" id="no-refclient" placeholder="z. B. Angebot Nr. 123" style="padding:12px;background:#2a2a30;color:#fff;border:1px solid #444;border-radius:6px;">
|
||||||
|
|
||||||
|
<label class="label">Auftragsbeschreibung</label>
|
||||||
<input type="text" id="no-title" placeholder="z. B. Wallbox-Installation" style="padding:12px;background:#2a2a30;color:#fff;border:1px solid #444;border-radius:6px;">
|
<input type="text" id="no-title" placeholder="z. B. Wallbox-Installation" style="padding:12px;background:#2a2a30;color:#fff;border:1px solid #444;border-radius:6px;">
|
||||||
|
|
||||||
<label class="label">Kunden-Referenz (optional)</label>
|
<label class="label">Geplanter Liefertermin</label>
|
||||||
<input type="text" id="no-refclient" placeholder="z. B. Angebot Nr. 123" style="padding:12px;background:#2a2a30;color:#fff;border:1px solid #444;border-radius:6px;">
|
<input type="datetime-local" id="no-delivery" style="padding:12px;background:#2a2a30;color:#fff;border:1px solid #444;border-radius:6px;color-scheme:dark;">
|
||||||
|
|
||||||
|
<label class="no-check" style="display:flex;align-items:center;gap:10px;margin-top:12px;font-size:15px;color:#eee;cursor:pointer;">
|
||||||
|
<input type="checkbox" id="no-validate" style="width:20px;height:20px;">
|
||||||
|
Auftrag direkt freigeben
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
@ -1601,6 +1609,8 @@ async function openNewOrderModal() {
|
||||||
const defaultsEl = modal.querySelector('#no-defaults');
|
const defaultsEl = modal.querySelector('#no-defaults');
|
||||||
const titleIn = modal.querySelector('#no-title');
|
const titleIn = modal.querySelector('#no-title');
|
||||||
const refIn = modal.querySelector('#no-refclient');
|
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');
|
const changeBtn = modal.querySelector('#no-change-customer');
|
||||||
|
|
||||||
let selectedCustomer = null;
|
let selectedCustomer = null;
|
||||||
|
|
@ -1675,7 +1685,7 @@ async function openNewOrderModal() {
|
||||||
stepCust.hidden = true;
|
stepCust.hidden = true;
|
||||||
stepDet.hidden = false;
|
stepDet.hidden = false;
|
||||||
saveBtn.disabled = false;
|
saveBtn.disabled = false;
|
||||||
titleIn.focus();
|
refIn.focus();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
showToast('Fehler: ' + err.message, 'error');
|
showToast('Fehler: ' + err.message, 'error');
|
||||||
}
|
}
|
||||||
|
|
@ -1692,16 +1702,26 @@ async function openNewOrderModal() {
|
||||||
/* ---- Anlegen ---- */
|
/* ---- Anlegen ---- */
|
||||||
saveBtn.onclick = async () => {
|
saveBtn.onclick = async () => {
|
||||||
if (!selectedCustomer) { showToast('Bitte zuerst Kunde wählen', 'error'); return; }
|
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();
|
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;
|
saveBtn.disabled = true;
|
||||||
showToast('Lege Auftrag an…');
|
showToast(doValidate ? 'Lege Auftrag an & gebe frei…' : 'Lege Auftrag an…');
|
||||||
try {
|
try {
|
||||||
const res = await api.createOrder({
|
const res = await api.createOrder({
|
||||||
socid: selectedCustomer.id,
|
socid: selectedCustomer.id,
|
||||||
|
ref_client: refClient,
|
||||||
title: title,
|
title: title,
|
||||||
ref_client: refIn.value.trim(),
|
date_livraison: deliveryTs,
|
||||||
|
validate: doValidate,
|
||||||
});
|
});
|
||||||
// Recent-Liste in IDB aktualisieren (letzte 5)
|
// Recent-Liste in IDB aktualisieren (letzte 5)
|
||||||
try {
|
try {
|
||||||
|
|
@ -1716,7 +1736,9 @@ async function openNewOrderModal() {
|
||||||
await idb.set('recent_customers', filtered.slice(0, 5));
|
await idb.set('recent_customers', filtered.slice(0, 5));
|
||||||
} catch (e) {}
|
} 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);
|
closeModal(modal);
|
||||||
router.go('#/orders/' + res.order.id);
|
router.go('#/orders/' + res.order.id);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue