diff --git a/Beherbergungssteuer.exe b/Beherbergungssteuer.exe index e13cedf..18b25bd 100644 Binary files a/Beherbergungssteuer.exe and b/Beherbergungssteuer.exe differ diff --git a/bericht_pdf.py b/bericht_pdf.py index 10cebf4..2ebf3c8 100644 --- a/bericht_pdf.py +++ b/bericht_pdf.py @@ -23,7 +23,7 @@ from reportlab.lib.styles import ParagraphStyle from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer -from modell import MONATE, summiere, eur, eur_kurz +from modell import MONATE, summiere, aufgehobene, eur, eur_kurz log = logging.getLogger("bst.bericht") @@ -198,8 +198,28 @@ def _ort(firma): # ------------------------------------------------------------- Monat -------- +def _art_text(b, weg) -> str: + """Was in der Rechnungsspalte unter der Nummer steht. + + Ohne das steht im Bericht fuers Amt eine Stornonummer neben einer voellig + anderen Rechnungsnummer, und niemand sieht, was zusammengehoert. Sein Wort + dazu am 04.09.2026: *"musst dann rein schreiben storniert oder so was dran + setzen"*. Dieselben Worte wie in der Spalte "Art" im Fenster. + """ + if b.storno_zu: + return f"Storno zu {b.storno_zu}" + if b.id in weg: + return "storniert" + if b.art == "korrektur": + return "Neuausstellung" + return "" + + def render_monat(pfad, firma, jahr: int, monat: int, buchungen): st = _styles() + # Ueber ALLE uebergebenen Buchungen bestimmt (das ganze Jahr): der Storno + # kann in einem anderen Monat liegen als die Rechnung, die er aufhebt. + weg = aufgehobene(buchungen) # Storno und aufgehobene Rechnung stehen BEIDE im Bericht, jede in ihrem # Monat und mit ihrem Vorzeichen - so ist die Meldung aus sich heraus # nachvollziehbar (Entscheidung des Auftraggebers, siehe modell.summiere). @@ -219,7 +239,9 @@ def render_monat(pfad, firma, jahr: int, monat: int, buchungen): for b in liste: daten.append([ Paragraph(b.datum.strftime("%d.%m.%Y"), st["zelle_c"]), - Paragraph(b.voll_nummer, st["zelle_c"]), + Paragraph(b.voll_nummer + (f'
' + f'{_art_text(b, weg)}' + if _art_text(b, weg) else ""), st["zelle_c"]), Paragraph(b.nachname, st["zelle"]), Paragraph(str(b.naechte), st["zelle_c"]), Paragraph(eur_kurz(b.gezahlt), st["zelle_r"]), diff --git a/pruef_storno_verrechnet.py b/pruef_storno_verrechnet.py index 77a0f0d..2d37f1b 100644 --- a/pruef_storno_verrechnet.py +++ b/pruef_storno_verrechnet.py @@ -140,7 +140,12 @@ text = (PdfReader(pfad).pages[0].extract_text() or "").replace("\n", " ") pruefe("2026-900" in text and "2026-901" in text, "Rechnung UND Storno stehen im Bericht - die Meldung erklaert sich selbst") pruefe("-52,00" in text, "der Storno steht mit seinem Minusbetrag drin") -pruefe("117,00" in text, f"und die Monatssumme ist 117,00 Euro") +pruefe("117,00" in text, "und die Monatssumme ist 117,00 Euro") +# Ohne Beschriftung steht im Bericht eine Stornonummer neben einer voellig +# anderen Rechnungsnummer - sein Wort: "musst dann rein schreiben storniert". +pruefe("storniert" in text, "die aufgehobene Rechnung ist im Bericht als 'storniert' beschriftet") +pruefe("Storno zu 2026-900" in text, "und der Storno nennt die Rechnung, die er aufhebt") +pruefe("Neuausstellung" in text, "die neue Rechnung ist als Neuausstellung beschriftet") # --------------------------------------------------------------------------- print("--- Fall 4: das echte Fenster ---")