diff --git a/README.md b/README.md index 01756ba..5cf8066 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Das Hauptfenster ist unter Windows ein echtes Programmfenster mit Win95-Optik: a ziehen (Andocken), `Win`+Pfeiltasten, Doppelklick auf die Titelleiste und Ziehen am Rand funktionieren wie gewohnt. -**Zeitraum abrechnen:** Im Export-Dialog „Nur von … bis …“ eintragen (oder „Vormonat“), wahlweise nach +**Zeitraum abrechnen:** Im Export-Dialog „Nur von … bis …“ eintragen (oder „Vormonat“; „Noch nicht abgerechnet“ = alles Offene), wahlweise nach Aktivierungsdatum oder Abrechnungszeitraum des Anbieters. Exportierte Positionen werden als *abgerechnet* gekennzeichnet (grau) und nie wieder exportiert – auch nicht, wenn dieselbe Position später in einer anderen Datei oder Abrechnung auftaucht. Versehentlich? Rechtsklick ▸ *Kennzeichnung „abgerechnet“ aufheben*. diff --git a/provtool/__init__.py b/provtool/__init__.py index 8493901..0ce4ad4 100644 --- a/provtool/__init__.py +++ b/provtool/__init__.py @@ -1,5 +1,5 @@ """Provisions-Manager 95 – Provisionsabrechnung für Unterhändler der Handy-Insel Miesbach.""" -__version__ = "1.4.1" +__version__ = "1.5.0" APP_NAME = "Provisions-Manager 95" APP_ORG = "Handy-Insel Miesbach" diff --git a/provtool/gui/dialogs.py b/provtool/gui/dialogs.py index a4ae4ff..7b6e158 100644 --- a/provtool/gui/dialogs.py +++ b/provtool/gui/dialogs.py @@ -917,10 +917,13 @@ class ExportDialog(w.Dialog): tk.Label(zf, text="bis:").pack(side="left") tk.Entry(zf, textvariable=self.v_bis, width=11).pack(side="left", padx=4) w.knopf(zf, "Vormonat", self._vormonat).pack(side="left", padx=(4, 0)) + # ohne Zeitraum = alles, was noch nicht abgerechnet ist (abgerechnete Positionen exportiert er nie) + w.knopf(zf, "Noch nicht abgerechnet", lambda: (self.v_von.set(""), self.v_bis.set(""))).pack( + side="left", padx=(4, 0)) self.v_basis = tk.StringVar(value=zr.BASEN[settings.get("export_basis", zr.AKTIVIERUNG)]) ttk.Combobox(z, textvariable=self.v_basis, values=list(zr.BASEN.values()), state="readonly", width=40).pack(anchor="w", pady=(4, 0)) - tk.Label(z, text="(leer = alle offenen Positionen; Datum als TT.MM.JJJJ)", fg=w.SHADOW, anchor="w").pack( + tk.Label(z, text="(leer bzw. „Noch nicht abgerechnet“ = alle offenen Positionen; Datum als TT.MM.JJJJ)", fg=w.SHADOW, anchor="w").pack( fill="x") self.v_kennz = tk.BooleanVar(value=True) tk.Checkbutton(z, text="Exportierte Positionen als abgerechnet kennzeichnen (werden dann nicht noch " diff --git a/tests/test_gui.py b/tests/test_gui.py index 438364b..47c495d 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -1098,11 +1098,18 @@ def test_export_zeitraum_kennzeichnen_und_erledigt(lauf_modern, tmp_path, monkey d.v_auf.set(False) d._ok() + def ok_offen(): + d = lauf.dialog(ExportDialog) + d.v_von.set("01.10.2026") + d.v_bis.set("02.10.2026") + next(k for k in _alle(d) if isinstance(k, tk.Button) and k.cget("text") == "Noch nicht abgerechnet").invoke() + ok(d.v_von.get(), d.v_bis.get()) + lauf.ablauf([ (IMMER, app.exportieren, "Export Oktober 6."), (lambda: lauf.dialog(ExportDialog) is not None, lambda: ok("01.10.2026", "05.10.2026"), "nur bis 5.10."), (lambda: lauf.dialog(ExportDialog) is None, app.exportieren, "Export Rest"), - (lambda: lauf.dialog(ExportDialog) is not None, ok, "alles Offene"), + (lambda: lauf.dialog(ExportDialog) is not None, ok_offen, "Noch nicht abgerechnet"), (lambda: lauf.dialog(ExportDialog) is None, app.exportieren, "nochmal"), ]) assert not lauf.uebrig, lauf.diagnose() @@ -1116,3 +1123,9 @@ def test_export_zeitraum_kennzeichnen_und_erledigt(lauf_modern, tmp_path, monkey app.prozent() assert "erledigt" in meldungen[-1] lauf.pruefen() + + +def _alle(widget): + for kind in widget.winfo_children(): + yield kind + yield from _alle(kind)