Knopf "Neues Projekt" zum Leeren des Arbeitsstands

Bisher liess sich ein neuer Auftrag nur von Hand beginnen: Namen
ueberschreiben, jede Position neu ausfuellen und auf der Rechnungsseite
Kundendaten und Rechnungsnummer leeren. Wurde der letzte Schritt
vergessen, stand der alte Kunde auf der neuen Rechnung.

- POST /projekte/neu setzt nur PROJEKT_FELDER zurueck (Name, Positionen,
  Kundendaten, Rechnungsnummer, Datum auf heute). Betriebswerte wie
  Marge, Stundenlohn, Drucker, Steuer und Firmendaten bleiben.
- GET /projekte liefert zusaetzlich 'ungespeichert'. Der Knopf fragt nur
  nach, wenn der offene Stand wirklich nicht als Projekt gesichert ist.
- Der Vergleich ignoriert 'datum' und 'geaendert', sonst waere ein
  gespeichertes Projekt am naechsten Tag faelschlich "ungespeichert".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik Thiele
2026-08-22 11:59:20 +02:00
parent ce3ba9df7e
commit 1b3ef82db4
5 changed files with 106 additions and 1 deletions

View File

@@ -345,6 +345,37 @@ async function projektLaden() {
}
}
/** Beginnt einen leeren Auftrag. Betriebswerte bleiben erhalten. */
async function projektNeu() {
// Offenen Autosave durchdruecken, damit der Server den wirklich
// aktuellen Stand kennt, bevor wir nach Ungespeichertem fragen.
await sofortSpeichern();
let offen = false;
try {
const daten = await (await fetch('/projekte')).json();
offen = !!daten.ungespeichert;
} catch (e) {
offen = true; // Im Zweifel lieber nachfragen.
}
if (offen && !confirm(
'Der aktuelle Stand ist nicht als Projekt gespeichert.\n\n' +
'Projektname, Positionen, Kundendaten und Rechnungsnummer werden ' +
'geleert. Betriebswerte (Marge, Drucker, Steuer) bleiben erhalten.\n\n' +
'Trotzdem neu anfangen?')) {
return;
}
try {
const res = await fetch('/projekte/neu', { method: 'POST' });
if (!res.ok) {
showNotification('Zuruecksetzen fehlgeschlagen');
return;
}
location.reload();
} catch (e) {
showNotification('Zuruecksetzen fehlgeschlagen');
}
}
/** Loescht das ausgewaehlte Projekt (der Arbeitsstand bleibt bestehen). */
async function projektLoeschen() {
const auswahl = document.getElementById('projekt-auswahl');