## 1. Der Darstellungsdialog zerstoerte sich beim ersten Klick selbst
_oberflaeche_neu() loeschte ALLE Kinder des Hauptfensters - und ein
tk.Toplevel IST ein Kind. Der offene Dialog wurde also mitgeloescht, die
Zeile danach fasste eine Leiche an:
_tkinter.TclError: invalid command name ".!toplevel"
Die Farbe wechselte zwar und nichts ging verloren, aber das Fenster
verschwand beim ersten Klick, jede weitere Umstellung brauchte einen neuen
Menueaufruf, und jedes Mal landete ein Traceback im Log. In BEIDEN
Programmen.
Behoben: fremde Toplevels bleiben stehen. Damit ueberlebt auch ein offener
Ordnerwahl- oder Einstellungsdialog den Wechsel.
⚠️ Warum mein Pruefstand es nicht fand: er setzte cfg["darstellung"] von Hand
und rief _oberflaeche_neu() direkt - also alles ausser dem Weg, den ein
Mensch geht. Den Dialog oeffnete er zwar, mass aber nur dessen Position.
pruef_darstellung drueckt jetzt den Radioknopf (.invoke()) und prueft, dass
der Dialog danach noch lebt UND dass ein ZWEITER Klick im selben Dialog
wirkt - das war vorher unmoeglich.
## 2. Unerreichbarer Code nach einem return
_fenstersymbol() hatte zwei Zeilen der alten Inline-Fassung hinter dem
return stehen. Rest meines symbol_setzen-Umbaus; per AST ueber alle Dateien
beider Ordner belegt (genau ein Treffer).
Beides gefunden von der Pruefkette nach R23. Die Aufraeumbefunde derselben
Runde (doppelter Code, tote Variablen, 34x dasselbe pruefe()) kommen
getrennt - eine Fehlerbehebung soll fuer sich pruefbar bleiben.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
|
||
|---|---|---|
| assets | ||
| .gitignore | ||
| api.py | ||
| app.py | ||
| AUFGABE_AUSSENDIENST_ARBEITSPROTOKOLL.md | ||
| AUFGABE_BEWEISKETTE_PRUEFBAR.md | ||
| AUFGABE_KUNDENSTAMM_UND_WEB.md | ||
| AUFGABE_ONLINE_API_MYSQL.md | ||
| AUFGABE_PREISVORSCHLAG.md | ||
| AUFGABE_RECHTSSICHER_BILDER_VORSCHAU.md | ||
| bauen.py | ||
| berechnung.py | ||
| bestand.py | ||
| bilder.py | ||
| config.py | ||
| Diagnose.spec | ||
| einstellungen.py | ||
| einzelinstanz.py | ||
| flaeche.py | ||
| gemeinsam.py | ||
| helfer.py | ||
| hinweis.py | ||
| icons.py | ||
| Installer.iss | ||
| korrektur.py | ||
| menueleiste.py | ||
| ordnerwahl.py | ||
| pdf_renderer.py | ||
| pruef_angebot.py | ||
| pruef_api.py | ||
| pruef_bilder.py | ||
| pruef_darstellung.py | ||
| pruef_dialoge.py | ||
| pruef_doppelte_leistung.py | ||
| pruef_flaeche.py | ||
| pruef_freigabe.py | ||
| pruef_gemeinsam_automatisch.py | ||
| pruef_hinweis.py | ||
| pruef_installation.py | ||
| pruef_kernregeln.py | ||
| pruef_kette.py | ||
| pruef_montage.py | ||
| pruef_nummern.py | ||
| pruef_nummernbuch.py | ||
| pruef_nummernsperre.py | ||
| pruef_nur_storno.py | ||
| pruef_release.py | ||
| pruef_selbstbezug.py | ||
| pruef_spaltenbreiten.py | ||
| pruef_start_exe.py | ||
| pruef_storno.py | ||
| pruef_updater.py | ||
| pruef_vorschau.py | ||
| pruefsteuerung.py | ||
| README.md | ||
| Rechnung starten.bat | ||
| Rechnungstool.spec | ||
| reiter.py | ||
| storno.py | ||
| theme.py | ||
| updater.py | ||
| Updater.spec | ||
| version.py | ||
| wasserzeichen.py | ||
Rechnungstool Campinghof Bartl
Umbenennung, 06.09.2026
Die Repositories heissen jetzt:
bisher jetzt beherbergungssteuerSteuerrechnungstool- https://git.pcore.de/TheMockTv/Steuerrechnungstoolrechnungstoolunveraendert - https://git.pcore.de/TheMockTv/rechnungstool Grund: „Beherbergungssteuer“ beschrieb nur noch einen Teil dessen, was das Programm tut. Alte Links leitet Forgejo weiter, bestehende Klone laufen weiter - das
originsollte trotzdem umgestellt werden:git remote set-url origin https://git.pcore.de/TheMockTv/Steuerrechnungstool.gitFehler und Wünsche bitte als Issue im jeweiligen Repository melden - die Adresse steht auch im Programm unter Hilfe → Info und im Hinweis beim Start.
⚠️ Der lokale Ordner heißt weiterhin
C:\claude\beherbergungssteuer. Der Pfad steht fest verdrahtet in mehreren Prüfständen und in den Spec-Dateien - das Umbenennen ist ein eigener Schritt.
Desktop-Programm (Python/Tkinter), das die alte Excel-Rechnungsvorlage ersetzt: Kundendaten + Anzahl eingeben → druckfertige PDF-Rechnung im Campinghof-Layout.
Starten
- Doppelklick auf
Rechnung starten.bat - oder im Terminal:
python app.py
Bedienung
- Kunde (Name/Anschrift) und An-/Abreise eintragen – die Nächte werden automatisch berechnet.
- Bei den passenden Leistungen die Anzahl (Tage/Menge) eingeben; bei Personengebühren zusätzlich die Personen.
- Summen (inkl. Steuer-Aufschlüsselung) erscheinen live unten.
- PDF erstellen → die Rechnung landet im Ordner
rechnungen/und öffnet sich zum Drucken.
Die Rechnungsnummer (JJJJ-NNN) zählt nach jedem Erstellen automatisch hoch.
Einstellungen (Menü „Einstellungen")
- Steuersätze & Bettensteuer – ermäßigter/regulärer USt-Satz; Beherbergungssteuer per Checkbox an/aus + Prozentsatz. Bei aktiver Bettensteuer wird sie auf das Netto der Beherbergungs-Positionen aufgeschlagen und eigen ausgewiesen.
- Leistungskatalog / Preise – Bezeichnung, USt-Satz und Brutto-Preis je Position.
- Firmendaten & Texte – Kopf, Bankverbindung, Fußzeile, Danktexte.
- Rechnungsnummer – Jahr und Zähler setzen.
Alle Einstellungen werden in config.json gespeichert (neben den Programmdateien).
Berechnung (wie in der Excel-Vorlage)
- Position-Gesamt =
Anzahl × Einzelpreis(Personengebühren zusätzlich× Personen). - Preise sind brutto; die USt wird herausgerechnet
(7 %:
÷107×7, 19 %:÷119×19). - Optionale Beherbergungssteuer = Satz % auf das Netto der Beherbergungs-Positionen.
Dateien
| Datei | Zweck |
|---|---|
app.py |
GUI (Eingabe + Einstellungen) |
berechnung.py |
Rechenkern (eine Quelle für GUI + PDF) |
pdf_renderer.py |
PDF-Erstellung (reportlab) |
config.py |
Standardwerte + Laden/Speichern der config.json |
config.json |
gespeicherte Einstellungen (wird beim 1. Start angelegt) |
rechnungen/ |
Ausgabeordner für die PDFs |
Voraussetzungen
- Python 3.10+
reportlab(pip install reportlab)tkinter(bei Standard-Windows-Python dabei)