Vodafone: Zuordnung über Kundennamen in GROSSBUCHSTABEN, feste Händler-Zuweisung, nur erste Seite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
da2e3c9ba1
commit
a837ddc4d4
6 files changed
+235
-27
No files matched your search
+55
-9
@@ -5,9 +5,14 @@ import tkinter as tk
|
||||
from tkinter import filedialog, ttk
|
||||
|
||||
from provtool import APP_NAME, APP_ORG, __version__
|
||||
from provtool.db import Datenbank, Haendler
|
||||
from provtool.db import CAPS_ANBIETER, CAPS_WERT, Datenbank, Haendler
|
||||
from provtool.gui import win95 as w
|
||||
from provtool.importer import ANBIETER
|
||||
|
||||
# Auswahl im Händler-Dialog: Schlüssel → Anzeige
|
||||
KENNUNG_ARTEN = {"freenet": "freenet (Unterhändler-Nr.)", "vodafone": "Vodafone (VO-Nr.)",
|
||||
CAPS_ANBIETER: "Vodafone (Name in GROSSBUCHSTABEN)"}
|
||||
CAPS_TEXT = "Kunden-Nachname komplett in GROSSBUCHSTABEN"
|
||||
from provtool.money import fmt, fmt_percent, parse_percent
|
||||
|
||||
|
||||
@@ -68,15 +73,18 @@ class HaendlerDialog(w.Dialog):
|
||||
self.kliste.heading("anbieter", text="Anbieter")
|
||||
self.kliste.heading("wert", text="Unterhändler-Nr. / VO-Nr.")
|
||||
self.kliste.column("anbieter", width=90)
|
||||
self.kliste.column("wert", width=200)
|
||||
self.kliste.column("wert", width=260)
|
||||
r2.pack(fill="both", expand=True)
|
||||
kf = tk.Frame(g2, bg=w.FACE)
|
||||
kf.pack(fill="x", pady=(4, 0))
|
||||
self.v_kanb = tk.StringVar(value="freenet")
|
||||
cb = ttk.Combobox(kf, textvariable=self.v_kanb, values=list(ANBIETER.values()), width=10, state="readonly")
|
||||
self.v_kanb = tk.StringVar(value=KENNUNG_ARTEN["freenet"])
|
||||
cb = ttk.Combobox(kf, textvariable=self.v_kanb, values=list(KENNUNG_ARTEN.values()), width=34,
|
||||
state="readonly")
|
||||
cb.pack(side="left")
|
||||
cb.bind("<<ComboboxSelected>>", lambda e: self._art_gewaehlt())
|
||||
self.v_kwert = tk.StringVar()
|
||||
ke = tk.Entry(kf, textvariable=self.v_kwert, width=18)
|
||||
ke = tk.Entry(kf, textvariable=self.v_kwert, width=14)
|
||||
self._ke = ke
|
||||
ke.pack(side="left", padx=4)
|
||||
ke.bind("<Return>", lambda e: self._kennung_dazu())
|
||||
w.knopf(kf, "Hinzufügen", self._kennung_dazu).pack(side="left")
|
||||
@@ -111,7 +119,12 @@ class HaendlerDialog(w.Dialog):
|
||||
# ---- intern
|
||||
@staticmethod
|
||||
def _anbieter_key(anzeige: str) -> str:
|
||||
return next((k for k, v in ANBIETER.items() if v == anzeige), anzeige)
|
||||
return next((k for k, v in KENNUNG_ARTEN.items() if v == anzeige), anzeige)
|
||||
|
||||
def _art_gewaehlt(self):
|
||||
caps = self._anbieter_key(self.v_kanb.get()) == CAPS_ANBIETER
|
||||
self.v_kwert.set("")
|
||||
self._ke.configure(state="disabled" if caps else "normal")
|
||||
|
||||
def _liste_laden(self, auswahl_id=None):
|
||||
self.liste.delete(*self.liste.get_children())
|
||||
@@ -147,7 +160,10 @@ class HaendlerDialog(w.Dialog):
|
||||
def _kennungen_zeigen(self):
|
||||
self.kliste.delete(*self.kliste.get_children())
|
||||
for i, (a, v) in enumerate(self._kennungen):
|
||||
self.kliste.insert("", "end", iid=str(i), values=(ANBIETER.get(a, a), v))
|
||||
if a == CAPS_ANBIETER:
|
||||
self.kliste.insert("", "end", iid=str(i), values=("Vodafone", CAPS_TEXT))
|
||||
else:
|
||||
self.kliste.insert("", "end", iid=str(i), values=(ANBIETER.get(a, a), v))
|
||||
|
||||
def _regeln_zeigen(self):
|
||||
self.rliste.delete(*self.rliste.get_children())
|
||||
@@ -168,10 +184,10 @@ class HaendlerDialog(w.Dialog):
|
||||
self._regeln_zeigen()
|
||||
|
||||
def _kennung_dazu(self):
|
||||
wert = self.v_kwert.get().strip()
|
||||
anb = self._anbieter_key(self.v_kanb.get())
|
||||
wert = CAPS_WERT if anb == CAPS_ANBIETER else self.v_kwert.get().strip()
|
||||
if not wert:
|
||||
return
|
||||
anb = self._anbieter_key(self.v_kanb.get())
|
||||
if (anb, wert) not in self._kennungen:
|
||||
self._kennungen.append((anb, wert))
|
||||
self.v_kwert.set("")
|
||||
@@ -486,6 +502,36 @@ class KennungZuordnen(w.Dialog):
|
||||
self.destroy()
|
||||
|
||||
|
||||
class HaendlerWaehlen(w.Dialog):
|
||||
"""Feste Zuweisung ausgewählter Positionen zu einem Händler."""
|
||||
|
||||
KEINER = "(keinem Händler – nicht auszahlen)"
|
||||
|
||||
def __init__(self, master, db: Datenbank, anzahl: int):
|
||||
super().__init__(master, "Händler zuweisen")
|
||||
self._hmap = {h.name: h.id for h in db.haendler_liste(nur_aktive=True)}
|
||||
tk.Label(self, text=f"{anzahl} Position(en) fest zuweisen an:", anchor="w").pack(fill="x", padx=12,
|
||||
pady=(12, 4))
|
||||
self.cb = ttk.Combobox(self, values=list(self._hmap) + [self.KEINER], state="readonly", width=40)
|
||||
self.cb.pack(padx=12, pady=4)
|
||||
tk.Label(self, text="Die feste Zuweisung hat Vorrang vor Kennungen und der GROSSBUCHSTABEN-Regel.\n"
|
||||
"Rückgängig: Rechtsklick ▸ „Automatisch zuordnen“.", justify="left",
|
||||
fg=w.SHADOW).pack(fill="x", padx=12)
|
||||
self.bind("<Return>", lambda e: self._ok())
|
||||
self.knopfleiste([("OK", self._ok), ("Abbrechen", self.abbrechen)]).pack(pady=12)
|
||||
|
||||
def _ok(self):
|
||||
name = self.cb.get()
|
||||
if not name:
|
||||
w.warnung(self, "Händler zuweisen", "Bitte einen Händler auswählen.")
|
||||
return
|
||||
self.result = 0 if name == self.KEINER else self._hmap[name]
|
||||
self.destroy()
|
||||
|
||||
def zeigen(self, fokus=None):
|
||||
return super().zeigen(self.cb)
|
||||
|
||||
|
||||
# =========================================================================== Export
|
||||
|
||||
class ExportDialog(w.Dialog):
|
||||
|
||||
Reference in new issue
Block a user