Vorgangsnummer: eine Klammer um die ganze Kette
Bisher zeigte jeder Beleg nur auf seinen Vorgaenger (storno_zu, ersetzt, storno_nummer). Ein zweites Programm musste sich die Kette daraus zusammensuchen. Jetzt tragen ALLE Blaetter einer Kette dieselbe Vorgangsnummer - die der ersten Rechnung. Gruppieren heisst dort: nach "vorgang" sortieren, fertig. Eine normale Rechnung ist ihr eigener Vorgang. Wichtig fuer den Fall "schon korrigierte Rechnung wird noch einmal storniert": Storno und Berichtigung uebernehmen den VORGANG der alten Rechnung, nicht deren Nummer - sonst zerfaellt die Kette in zwei. Die Einzelbezuege bleiben zusaetzlich stehen, damit man die Reihenfolge innerhalb der Kette lesen kann. Neu pruef_kette.py (13 Pruefungen): spielt den schlimmsten Fall durch - Rechnung, Storno, berichtigte Rechnung, Berichtigung der Anschrift, zweiter Storno, zweite berichtigte Rechnung. Alle sechs landen unter einem Schluessel, die Summe der Kette ergibt genau die letzte gueltige Rechnung (27,30 €), und der Steuerrechner liest davon 5 Geldbelege - das Berichtigungsblatt zaehlt nicht mit. 148 Pruefungen gruen (100 + 27 + 13 + 8) plus 7 Dialoge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EKvGkdNW1vKdnMPAM9Bp3X
This commit is contained in:
parent
d67448c58f
commit
1060a6421f
4 changed files with 174 additions and 0 deletions
2
app.py
2
app.py
|
|
@ -509,6 +509,7 @@ class RechnungsApp(ThemeMixin, KorrekturMixin, EinstellungenMixin, tk.Tk):
|
|||
}
|
||||
if stand:
|
||||
kopf["art"] = "korrektur"
|
||||
kopf["vorgang"] = stand.get("vorgang") or stand["zu"]
|
||||
kopf["ersetzt"] = stand["zu"]
|
||||
kopf["storno_nummer"] = stand["nummer"]
|
||||
out_dir = config.ensure_output_dir(self.cfg)
|
||||
|
|
@ -517,6 +518,7 @@ class RechnungsApp(ThemeMixin, KorrekturMixin, EinstellungenMixin, tk.Tk):
|
|||
ber = self.berichtigung_stand
|
||||
if ber:
|
||||
kopf["art"] = "berichtigung"
|
||||
kopf["vorgang"] = ber.get("vorgang") or ber["zu"]
|
||||
kopf["berichtigt_zu"] = ber["zu"]
|
||||
kopf["berichtigt_am"] = datetime.date.today().strftime("%d.%m.%Y")
|
||||
if not messagebox.askyesno(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue