All checks were successful
Deploy mahnung / deploy (push) Successful in 14s
Vollstaendiges 3-stufiges Mahnwesen nach BGB §288: - SQL-Schema (llx_mahnung_mahnung, llx_mahnung_stufe) - CRUD-Klassen (Mahnung, MahnungStufe, MahnungVorschlag) - TCPDF DIN-5008 PDF-Generierung - Verzugszinsberechnung B2C/B2B + §288 Abs.5 Pauschale - Trigger: offene Mahnungen bei Zahlungseingang schliessen - Hook: Tab + Button auf Rechnungs-/Kundenkarte - Cron: taegl. Vorschlagsliste + Ntfy-Push - Deploy-Pipeline (.forgejo/workflows/deploy.yml) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
4.2 KiB
Markdown
62 lines
4.2 KiB
Markdown
# Changelog
|
||
|
||
## [0.1.0] — 2026-05-07 — Erstveröffentlichung (Phase 1–10)
|
||
|
||
### DB-Schema (Phase 1)
|
||
- `llx_mahnung_mahnung` — Mahnvorgänge mit Stufe, Beträgen, Zinsen, Status, Snapshot des Basiszinses für Reproduzierbarkeit
|
||
- `llx_mahnung_stufe` — pro Stufe konfigurierbar: Frist, neue Frist, Gebühren B2C/B2B, optional Zinssatz-Override, Versandart, E-Mail-/PDF-Templates
|
||
- 3 Default-Stufen werden bei Aktivierung idempotent eingefügt
|
||
|
||
### Modul-Descriptor (Phase 1)
|
||
- numero `500037` (500033–500036 sind durch Bericht belegt), family `financial`, FA-Picto `fa-envelope-open-o`
|
||
- Modul-Konstanten: `MAHNUNG_BASISZINS`, `MAHNUNG_AUFSCHLAG_B2C`, `MAHNUNG_AUFSCHLAG_B2B`, `MAHNUNG_PAUSCHALE_B2B`, `MAHNUNG_NTFY_TOPIC`
|
||
- Rechte: `read`, `write`, `send`, `delete`, `setup`
|
||
- Cron-Job `MahnungCronBuildVorschlag` (täglich, default deaktiviert)
|
||
- Linkes Menü unter „Rechnungen" (mainmenu=billing) mit Vorschlagsliste / Archiv
|
||
|
||
### CRUD + Setup (Phase 2)
|
||
- `class/mahnung.class.php` — CRUD, Status-Konstanten, Verzugszinsen-Berechnung nach BGB §288
|
||
- `class/mahnungstufe.class.php` — Stufen-Konfiguration, Override-Helfer für Zinsen/Gebühren
|
||
- `admin/setup.php` — Stufen-Tabelle vollständig pflegbar, Konstanten persistent
|
||
|
||
### Vorschlagsliste + Cron (Phase 3)
|
||
- `class/mahnungvorschlag.class.php` — gemeinsamer Service: ermittelt pro überfälliger Rechnung die nächste vorgeschlagene Stufe, B2C/B2B-Erkennung via `tva_intra`, offener Betrag aus `paiement_facture`
|
||
- `class/mahnungcron.class.php` — Cron sammelt Vorschläge, sendet Ntfy-Push (Topic aus Setup), schreibt zusätzlich GlobalNotify-Action wenn aktiv
|
||
- `class/mahnungntfy.class.php` — schmaler Ntfy-Push-Wrapper
|
||
- `list.php` — Vorschlagsliste-UI mit Multi-Select, Filter nach Stufe / Verzugstagen / Kunde, Buttons „Mahnungen erzeugen" und „Sammelbrief"
|
||
|
||
### PDF-Generator + Erstellen (Phase 4)
|
||
- `class/mahnungpdf.class.php` — TCPDF-basierter Generator (DIN-5008 Form A): Adressfenster, Bezugszeichenzeile, Tabelle, Gebührenblock, Verzugszinsen mit Snapshot-Zinssatz, neue Frist, Bankverbindungs-Footer
|
||
- PDFs landen in `documents/facture/{ref}/mahnung-{stufe}-{ref-mahn}.pdf` und erscheinen automatisch im Dokumente-Tab der Rechnung
|
||
- `ajax/createmahnung.php` — Bulk-Endpoint mit CSRF + Permission-Check, erzeugt Mahnung + PDF, behandelt §288 Abs. 5 Pauschale einmalig pro Rechnung
|
||
|
||
### Hooks + Trigger (Phase 5)
|
||
- `core/triggers/interface_99_modMahnung_MahnungTriggers.class.php` — `BILL_PAYED` und `PAYMENT_CUSTOMER_CREATE` setzen offene Mahnungen auf erledigt
|
||
- `class/actions_mahnung.class.php` — Hook auf Rechnungs- und Kundenkarte: Tab „Mahnungen (n)" mit Badge, Button „Mahnung erstellen" wenn überfällig
|
||
- `card.php` — Detailansicht eines Mahnvorgangs mit Storno-Aktion (`formconfirm`-Modal, kein `confirm()`-Dialog)
|
||
|
||
### E-Mail + Sammelbrief (Phase 6)
|
||
- `ajax/sendmail.php` — sendet Mahnung-PDF via `CMailFile` an die Kunden-Mail; Subject/Body mit Platzhaltern aus Stufen-Konfig
|
||
- `ajax/sammelbrief.php` — erzeugt Mahnungen für Auswahl, konkateniert ihre PDFs via TCPDI in eine Datei, liefert Download
|
||
|
||
### Integrationen (Phase 7 + 8)
|
||
- GlobalNotify: Cron sendet zusätzlich `actionRequired`-Notification ins Dolibarr-UI (wenn Modul aktiv)
|
||
- Tab „Mahnungen" auf Kundenkarte (`thirdpartycard`) zusätzlich zur Rechnungskarte
|
||
|
||
### Audit + Doku (Phase 9)
|
||
- Alle in PHP referenzierten Sprach-Keys in de_DE und en_US vorhanden
|
||
- Alle SQL-Statements parametrisiert über `(int)`-Cast oder `db->escape()`
|
||
- Alle AJAX-Endpoints mit CSRF + Permission-Check
|
||
- README + CHANGELOG vollständig
|
||
|
||
### Pipeline (Phase 10)
|
||
- `.forgejo/workflows/deploy.yml` — Deploy auf `/mnt/appdata/firma/dolibarr-202509/modules/mahnung` bei Push auf `main` mit `[deploy]` oder Tag `v*`, Ntfy-Notify auf Topic `vk-builds`
|
||
|
||
### Verifizierte Fundamente
|
||
- DB-Schema in `dolibarr_test` (192.168.155.11) angelegt, Indizes + Seed-Daten korrekt
|
||
- PHP-Lint sauber für alle 16 PHP-Dateien
|
||
|
||
### Bekannte Lücken / Folge-Tasks
|
||
- ODT-Vorlagen (Pfad in Setup hinterlegbar) für späteren Ausbau — nicht im Erst-Release
|
||
- B2C/B2B-Erkennung pragmatisch via `tva_intra` — Setup-Toggle für andere Erkennungsregeln folgt
|
||
- Halbjährliche Basiszins-Erinnerung (1.1./1.7.) per Cron-Reminder noch offen
|