Abrechnungen links im Hauptfenster (Klick öffnet), Import fragt nach der Ziel-Abrechnung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
057cca6378
commit
2600eea574
3 files changed
+101
-11
No files matched your search
+52
-5
@@ -195,8 +195,23 @@ class App:
|
||||
bd=0, opaqueresize=False, sashcursor="sb_h_double_arrow")
|
||||
pw.pack(fill="both", expand=True, padx=6, pady=6)
|
||||
|
||||
links = tk.Frame(pw, bg=w.FACE)
|
||||
# --- Abrechnungen (ein Klick öffnet)
|
||||
self.f_a = w.Fenster(links, "Abrechnungen", self.icons("oeffnen"))
|
||||
self.f_a.pack(fill="x", pady=(0, 6))
|
||||
r, self.atree = w.scroll_tree(self.f_a.inhalt, columns=("status",), show="tree headings", height=5,
|
||||
selectmode="browse")
|
||||
self.atree.heading("#0", text="Abrechnung", anchor="w")
|
||||
self.atree.heading("status", text="Status")
|
||||
self.atree.column("#0", width=170, minwidth=80, stretch=False)
|
||||
self.atree.column("status", width=90, anchor="w", stretch=False)
|
||||
w.auto_breite(self.atree, {"#0": 1})
|
||||
r.pack(fill="both", expand=True)
|
||||
self.atree.bind("<<TreeviewSelect>>", self._abrechnung_gewaehlt)
|
||||
|
||||
# --- Händler-Fenster
|
||||
self.f_h = w.Fenster(pw, "Händler", self.icons("haendler"))
|
||||
self.f_h = w.Fenster(links, "Händler", self.icons("haendler"))
|
||||
self.f_h.pack(fill="both", expand=True)
|
||||
r, self.htree = w.scroll_tree(self.f_h.inhalt, columns=("anzahl", "summe"), show="tree headings",
|
||||
selectmode="browse")
|
||||
self.htree.heading("#0", text="Händler", anchor="w")
|
||||
@@ -211,7 +226,7 @@ class App:
|
||||
r.pack(fill="both", expand=True)
|
||||
self.htree.bind("<<TreeviewSelect>>", self._haendler_gewaehlt)
|
||||
self.htree.bind("<Double-1>", lambda e: self._haendler_doppelklick())
|
||||
pw.add(self.f_h, minsize=240, width=310)
|
||||
pw.add(links, minsize=240, width=310)
|
||||
|
||||
# --- Positionen-Fenster
|
||||
self.f_p = w.Fenster(pw, "Positionen", self.icons("neu"))
|
||||
@@ -284,9 +299,26 @@ class App:
|
||||
self.positionen = []
|
||||
self.rahmen.set_titel(w.APP_NAME)
|
||||
self.status.set("info", " Keine Abrechnung geöffnet – Datei > Neue Abrechnung oder Import")
|
||||
self._abrechnungsliste()
|
||||
self._haendlerliste(behalte_auswahl)
|
||||
self._tabelle()
|
||||
|
||||
def _abrechnungsliste(self):
|
||||
t = self.atree
|
||||
t.delete(*t.get_children())
|
||||
for a in self.db.abrechnungen():
|
||||
status = "erledigt" if a["erledigt"] else (f"{a['abgerechnet']} abgerechnet" if a["abgerechnet"] else "offen")
|
||||
t.insert("", "end", iid=str(a["id"]), text=a["titel"], values=(status,))
|
||||
if self.aid and t.exists(str(self.aid)):
|
||||
t.selection_set(str(self.aid))
|
||||
t.see(str(self.aid))
|
||||
|
||||
def _abrechnung_gewaehlt(self, _e=None):
|
||||
sel = self.atree.selection()
|
||||
if sel and int(sel[0]) != self.aid:
|
||||
self.ansicht = ALLE
|
||||
self.oeffnen(int(sel[0]))
|
||||
|
||||
def _suche_planen(self):
|
||||
"""Suche erst kurz nach dem letzten Tastendruck ausführen (flüssiges Tippen)."""
|
||||
if self._suche_geplant is not None:
|
||||
@@ -466,7 +498,7 @@ class App:
|
||||
else:
|
||||
self._aktualisieren()
|
||||
|
||||
def importieren(self, dateien: list[str] | None = None):
|
||||
def importieren(self, dateien: list[str] | None = None, ziel: int | None = None):
|
||||
if not dateien:
|
||||
dateien = list(filedialog.askopenfilenames(
|
||||
parent=self.root, title="Provisionsabrechnungen importieren",
|
||||
@@ -477,7 +509,22 @@ class App:
|
||||
if not dateien:
|
||||
return
|
||||
self.settings["import_ordner"] = str(Path(dateien[0]).parent)
|
||||
if not self._brauche_abrechnung() or self._gesperrt():
|
||||
if ziel is None: # jedes Mal fragen, in welche Abrechnung
|
||||
if not self.db.abrechnungen():
|
||||
if not self.neu():
|
||||
return
|
||||
else:
|
||||
res = dlg.AbrechnungenDialog(self.root, self.db, self.aid, fuer_import=True).zeigen()
|
||||
if not res:
|
||||
return
|
||||
if res[0] == "neu":
|
||||
if not self.neu():
|
||||
return
|
||||
else:
|
||||
self.aid, self.ansicht = res[1], ALLE
|
||||
else:
|
||||
self.aid = ziel
|
||||
if self._gesperrt():
|
||||
return
|
||||
bericht = []
|
||||
self.root.configure(cursor="watch")
|
||||
@@ -1018,7 +1065,7 @@ class App:
|
||||
self.ansicht = ALLE
|
||||
self._aktualisieren()
|
||||
if res["dateien"]:
|
||||
self.importieren(res["dateien"])
|
||||
self.importieren(res["dateien"], ziel=self.aid)
|
||||
if res["rundgang"]:
|
||||
self.root.after(200, self.rundgang)
|
||||
|
||||
|
||||
Reference in new issue
Block a user