feat(laufzeiten): anlegen, bearbeiten und zusammenfuehren (#043)
Laufzeiten entstanden bisher nur als Vorschlag aus dem Agenten-Report; bestaetigen oder verwerfen war alles. Anlegen von Hand gab es als Aktion ohne Oberflaeche, Aendern und Zusammenfuehren gar nicht - obwohl der Doppelfall zwangslaeufig auftritt, sobald das gemeldete Ablaufdatum von der Bestellung abweicht. Jetzt: Formular zum Anlegen auf der Rechnungsseite (Key vorgeschlagen, Ende aus dem Beginn vorbelegt), Bearbeiten von Key, Zeitraum und Notiz im Laufzeit-Detail, und Zusammenfuehren zweier Laufzeiten desselben Hosts. Die aufgeloeste gibt ihre Rechnungen ab, sofern das Ziel dort nichts hat; sonst bricht der Vorgang mit Erklaerung ab - zwei Einkaufsrechnungen auf einem Lizenzjahr waeren nicht mehr zuzuordnen. Dazu die Kundenansicht: Laufzeit und Host verlinkt, Marge und Rabatt je Zeile. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,8 @@ import {
|
||||
einkaufBezahltSetzen,
|
||||
kundenrechnungErfassen,
|
||||
laufzeitAnlegen,
|
||||
laufzeitBearbeiten,
|
||||
laufzeitenZusammenfuehren,
|
||||
laufzeitBestaetigen,
|
||||
laufzeitVerwerfen,
|
||||
proxmoxRechnungErfassen,
|
||||
@@ -173,3 +175,46 @@ export async function laufzeitAnlegenAktion(
|
||||
return "Laufzeit angelegt.";
|
||||
});
|
||||
}
|
||||
|
||||
export async function laufzeitBearbeitenAktion(
|
||||
_vorher: AktionsErgebnis,
|
||||
formular: FormData,
|
||||
): Promise<AktionsErgebnis> {
|
||||
await sitzungErforderlich("fachlichSchreiben");
|
||||
|
||||
const id = formular.get("laufzeitId")?.toString();
|
||||
const hostId = formular.get("hostId")?.toString();
|
||||
const key = formular.get("key")?.toString().trim();
|
||||
const start = datum(formular.get("start"));
|
||||
const ende = datum(formular.get("ende"));
|
||||
const notizen = formular.get("notizen")?.toString().trim() || null;
|
||||
|
||||
if (!id || !hostId || !key || !start || !ende) {
|
||||
return { fehler: "Bitte Key, Beginn und Ende angeben." };
|
||||
}
|
||||
|
||||
return ausfuehren(async () => {
|
||||
await laufzeitBearbeiten(id, { key, start, ende, notizen });
|
||||
seitenNeuLaden(hostId);
|
||||
return "Laufzeit geändert.";
|
||||
});
|
||||
}
|
||||
|
||||
export async function laufzeitenZusammenfuehrenAktion(
|
||||
_vorher: AktionsErgebnis,
|
||||
formular: FormData,
|
||||
): Promise<AktionsErgebnis> {
|
||||
await sitzungErforderlich("fachlichSchreiben");
|
||||
|
||||
const zielId = formular.get("zielId")?.toString();
|
||||
const quelleId = formular.get("quelleId")?.toString();
|
||||
const hostId = formular.get("hostId")?.toString();
|
||||
|
||||
if (!zielId || !quelleId || !hostId) return { fehler: "Bitte eine Laufzeit zum Zusammenführen wählen." };
|
||||
|
||||
return ausfuehren(async () => {
|
||||
await laufzeitenZusammenfuehren(zielId, quelleId);
|
||||
seitenNeuLaden(hostId);
|
||||
return "Laufzeiten zusammengeführt.";
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user