Files
provisionsmanager95/README.md
T
adminandClaude Opus 5.5 aae28fa7f2 Absturz beim Schließen mit offenem Dialog behoben; GUI-Tests und Selbsttest der .exe im Build
Fehler: Programm schließen, während der Einrichtungs-Assistent offen war → Zugriff auf
geschlossene Datenbank, danach Absturz des Fehler-Handlers.

- beenden(): schließt zuerst offene Dialoge/Rückfragen/Rundgang, lässt wartende Abläufe zu Ende
  laufen und schließt erst dann Datenbank und Fenster; mehrfacher Aufruf unschädlich
- Fehler-Handler protokolliert immer, zeigt aber keine Meldung mehr ohne Fenster
- Alt+F4 schließt nur das aktive bzw. modale Fenster (nicht mehr das ganze Programm)
- Betrag ändern: Ersatz-Dialog, wenn die Zelle nicht sichtbar ist (vorher passierte still nichts)
- tests/test_gui.py: Oberflächen-Tests inkl. Schließen bei jedem Dialog, Watchdog gegen Hänger
- Build: ein Xvfb für den ganzen Build (Wine bindet sich an das erste DISPLAY), GUI-Tests unter
  Windows-Python, danach Selbsttest der fertigen .exe (--selbsttest)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:55:00 +01:00

118 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Provisions-Manager 95
Windows-Programm der Handy-Insel Miesbach: liest die monatlichen Provisionsabrechnungen
von **freenet** (CSV/Excel) und **Vodafone/Euronics** (Excel) ein, ordnet die Positionen den
Unterhändlern zu, erlaubt freie Anpassung der Auszahlung und exportiert je Händler eine
fertige Excel-Abrechnung. Optik: Windows 95.
## Erster Start
Beim ersten Start führt ein **Einrichtungs-Assistent** durch Speicherort, Unterhändler
(inkl. „Nummern aus Abrechnung vorschlagen“) und die erste Abrechnung. Danach zeigt ein
**Rundgang** mit Hinweis-Sprechblasen die wichtigsten Stellen. Beides sowie den
**Tipp des Tages** gibt es jederzeit im Menü **?**.
Die Windows-95-Titelleiste ist selbst gezeichnet (Windows lässt die echte nicht umfärben).
Falls sie auf einem PC Probleme macht: *Datei ▸ Einstellungen ▸ Darstellung* – dann wird die
normale Windows-Titelleiste verwendet.
## Bedienung in Kürze
1. **Händler anlegen** (`Strg+H`): Name, Standard-Auszahlung in % und die *Kennungen*:
- freenet → Spalte **Unterhaendler** (z. B. `11111102`)
- Vodafone → Spalte **Vo-Nr** (z. B. `80000002`, `EU000001`) **oder**
„Vodafone (Name in GROSSBUCHSTABEN)“: alle Vodafone-Positionen, deren Kundenname komplett
großgeschrieben ist (so erfasst unser Unterhändler seine Kunden). Diese Regel kann nur ein
Händler haben und hat Vorrang vor der Vo-Nr.
Ein Händler kann mehrere Kennungen haben, auch bei beiden Anbietern.
Einzelne Fehltreffer: Positionen markieren → Rechtsklick ▸ **Händler zuweisen…**
(feste Zuweisung, Vorrang vor allem anderen; zurück mit „Automatisch zuordnen“).
2. **Neue Abrechnung** (`Strg+N`), z. B. „Oktober 2026“.
3. **Import** (`Strg+I`): beliebig viele Dateien auf einmal, z. B. alle freenet-Wochenlisten
eines Monats plus die Vodafone-Datei. Das Format wird an der Kopfzeile erkannt.
Doppelt importierte Dateien werden erkannt. Unbekannte Kennungen erscheinen unter
„(Nicht zugeordnet)“ und lassen sich direkt einem Händler zuordnen.
4. **Prüfen und anpassen**: links Händler wählen, rechts sind die Positionen nach
Provisionsart gruppiert.
- Gruppe markieren → **Prozent…** (`F4`): Auszahlung für die ganze Provisionsart; auf Wunsch
als feste Regel für diesen Händler gespeichert (gilt dann für künftige Importe).
- Doppelklick / `F2` auf eine Position: Betrag frei überschreiben
(`Enter` speichern, `↓`/`Tab` nächste Zeile, `Esc` abbrechen). Blau = von Hand geändert.
- Rechtsklick: u. a. „Auszahlung 0 €“.
5. **Export** (`Strg+E`): je Händler (und je Anbieter) eine `.xlsx` im Format der Vorlage:
| A | B | C | D | E | F | G | H | I | J | K | L | M | N |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Zeitraum | Provisionsart | Unterhändler-/VO-Nr | Datum | Rufnummer | IMEI | Gerät | Vorname | Name | Tarif | **Auszahlung** | Netz | Dienst | Aktionscode |
Sortierung: Zeitraum → Provisionsart → Datum, darunter eine Summenzeile.
Kopfzeile optional zuschaltbar.
Alles wird sofort in der Datenbank gespeichert (`%APPDATA%\Provisionsmanager95\provisionen.db`).
Speicherort änderbar unter *Datei ▸ Einstellungen*, Datensicherung über *Datei ▸ Datensicherung*.
### Zuordnung der Vodafone-Spalten
| Export | Vodafone/Euronics |
|---|---|
| Zeitraum | Abrechnungslauf (`VF2609`, `VF2609P8`, …) |
| Provisionsart | Artikelbezeichnung |
| Unterhändler | Vo-Nr |
| Datum | Anschaltdatum |
| Name | Kunde |
| Tarif | Tarif |
| Netz | VF / otelo / Cable (aus der Artikelbezeichnung) |
| Dienst | TarifKey02 |
| Aktionscode | Text |
Bei Vodafone wird nur die **erste Seite** („All“) gelesen – die weiteren Blätter je
Abrechnungslauf würden sonst doppelt zählen.
## Entwicklung
```bash
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements-dev.txt
pytest # Tests (nur erfundene Testdaten)
python -m provtool # Programm starten (benötigt Tkinter)
```
Aufbau:
| Datei | Inhalt |
|---|---|
| `provtool/importer.py` | Formaterkennung und Einlesen (CSV, xlsx, xls) |
| `provtool/db.py` | SQLite: Händler, Kennungen, Regeln, Abrechnungen, Positionen |
| `provtool/export.py` | Excel-Export im Zielformat |
| `provtool/money.py` | Beträge (intern immer in Cent) |
| `provtool/gui/` | Oberfläche (Tkinter im Win95-Stil) |
| `provtool/gui/rahmen.py` | selbst gezeichnete Titelleiste, Menüleiste, Größenänderung |
| `provtool/gui/assistent.py` | Einrichtungs-Assistent, Rundgang, Tipp des Tages |
**Datenschutz:** Echte Abrechnungen enthalten Kundendaten und gehören nicht ins Repository
(`.gitignore` schließt `*.csv`, `*.xlsx` im Hauptordner und `beispieldaten/` aus).
## Windows-Build
Gitea Actions (`.gitea/workflows/windows-build.yml`) baut die `.exe` im Container
`tobix/pywine:3.12` (Windows-Python unter Wine) mit PyInstaller:
- jeder Push: alle Tests unter Windows-Python (Wine) **inklusive Oberflächen-Tests** auf einem
virtuellen Bildschirm, danach `Provisionsmanager95.exe` bauen und mit
`Provisionsmanager95.exe --selbsttest` die **fertige .exe** prüfen; erst dann gibt es das Artefakt
- Tag `vX.Y.Z` (passend zu `provtool/__init__.py`): zusätzlich ein Gitea-Release mit `.exe` und `.zip`
Die Oberflächen-Tests (`tests/test_gui.py`) bedienen die echte Oberfläche: Dialoge öffnen,
Programm schließen, während Assistent/Rückfragen/Rundgang offen sind, Alt+F4, Beträge ändern usw.
Jede Ausnahme in der Oberfläche und jeder Eintrag in `fehler.log` lässt sie fehlschlagen; ein
Watchdog bricht hängende Tests ab, statt den Build zu blockieren. Ohne Bildschirm werden sie lokal
übersprungen, im Build (`PROVTOOL_GUI_TESTS=1`) ist das ein Fehler.
Lokal geht dasselbe mit Docker:
```bash
docker run --rm --entrypoint bash -v "$PWD":/src -w /src tobix/pywine:3.12 ./build/build_windows.sh
```
Neue Version: `__version__` in `provtool/__init__.py` erhöhen, committen, `git tag v1.0.1 && git push --tags`.