Vor- und Nachname getrennt + Kenndaten in die PDF-Metadaten

Bisher gab es nur ein Feld "Name / Firma". Stand in der Anrede etwas,
war die Anrede die erste Zeile des Adressblocks - das Steuerjournal hat
sie als Namen gelesen.

- Kundenblock hat jetzt "Vorname (optional)" und "Nachname / Firma".
  Auf der Rechnung stehen beide wie gewohnt in einer Zeile.
- Die Kenndaten der Rechnung (Nummer, Datum, Nachname, Naechte,
  Zwischensumme, Steuersatz und -betrag) stehen zusaetzlich als JSON in
  den PDF-Metadaten. Das Steuerjournal liest sie von dort und muss
  nichts mehr aus dem Fliesstext raten. Der Ausdruck aendert sich nicht.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
TheMockTv 2026-07-12 19:45:53 +02:00
parent dc170a9d9c
commit 0c83f9d821
2 changed files with 42 additions and 5 deletions

20
app.py
View file

@ -265,13 +265,15 @@ class RechnungsApp(tk.Tk):
kunde = ttk.LabelFrame(top, text="Rechnung an (Kunde)", padding=8)
kunde.grid(row=0, column=0, sticky="nsew", padx=(0, 10))
self.k_anrede = tk.StringVar()
self.k_name = tk.StringVar()
self.k_vorname = tk.StringVar()
self.k_name = tk.StringVar() # Nachname oder Firma die Zuordnung im Steuerjournal
self.k_zusatz = tk.StringVar()
self.k_strasse = tk.StringVar()
self.k_plzort = tk.StringVar()
felder = [
("Anrede (optional)", self.k_anrede),
("Name / Firma", self.k_name),
("Vorname (optional)", self.k_vorname),
("Nachname / Firma", self.k_name),
("Zusatz (optional)", self.k_zusatz),
("Straße / Nr.", self.k_strasse),
("PLZ / Ort", self.k_plzort),
@ -503,7 +505,13 @@ class RechnungsApp(tk.Tk):
"Es ist kein Kundenname eingetragen. Trotzdem PDF erstellen?"):
return
kunde_zeilen = [self.k_anrede.get(), self.k_name.get(), self.k_zusatz.get(),
# Auf der Rechnung stehen Vor- und Nachname wie gewohnt in einer Zeile;
# der Nachname geht zusätzlich getrennt mit, damit das Steuerjournal ihn
# nicht aus dem Adressblock raten muss.
nachname = self.k_name.get().strip()
vorname = self.k_vorname.get().strip()
namenszeile = " ".join(t for t in (vorname, nachname) if t)
kunde_zeilen = [self.k_anrede.get(), namenszeile, self.k_zusatz.get(),
self.k_strasse.get(), self.k_plzort.get()]
kopf = {
"rechnungsnummer": nummer,
@ -512,6 +520,8 @@ class RechnungsApp(tk.Tk):
"abreise": self.r_abreise.get().strip(),
"naechte": self.r_naechte.get() if self.r_naechte.get() != "" else "",
"kunde_zeilen": kunde_zeilen,
"nachname": nachname,
"vorname": vorname,
}
out_dir = config.ensure_output_dir(self.cfg)
fname = f"Rechnung_{safe_filename(nummer)}"
@ -547,8 +557,8 @@ class RechnungsApp(tk.Tk):
self._neue_nummer_vorschlagen()
def reset_formular(self):
for v in (self.k_anrede, self.k_name, self.k_zusatz, self.k_strasse, self.k_plzort,
self.r_anreise, self.r_abreise):
for v in (self.k_anrede, self.k_vorname, self.k_name, self.k_zusatz,
self.k_strasse, self.k_plzort, self.r_anreise, self.r_abreise):
v.set("")
self.r_datum.set(datetime.date.today().strftime("%d.%m.%Y"))
for av in self.anzahl_vars.values():