Phase 13/14 abgeschlossen. Der Mailversand war zuvor KAPUTT: ajax/sendmail.php
war bereits zur Funktionsbibliothek umgebaut, card.php postete aber weiterhin
per JS dagegen.
Mailformular (FormMail)
- card.php nutzt jetzt Dolibarrs Standard-Mailformular (action=presend/send):
Empfaenger (Firma + alle Ansprechpartner), Betreff, Text und Anhang sichtbar
und aenderbar. Gesendet wird ausschliesslich ueber mahnungSendeErinnerungsMail().
- Anhang = unveraenderte Original-Rechnungs-PDF, wird bei Bedarf nacherzeugt.
Eigener Parameter mailinit statt mode=init, weil get_form() bei mode=init die
Anhangsliste selbst leert.
- HTML-Mails: DolEditor im Setup + withfckeditor=-1 im Formular (folgt
FCKEDITOR_ENABLE_MAIL wie Dolibarrs eigene Mailvorlagen).
- Klartext bleibt Klartext: GETPOST('restricthtml') jagt jeden Nicht-HTML-Text
durch dol_nl2br() — mahnungBodyEntkleiden() nimmt nur dieses Artefakt zurueck
und laesst echte Formatierung unangetastet.
- Platzhalter jetzt auch in Dolibarr-Schreibweise (__REF__, __DATE_YMD__,
__AMOUNT_FORMATED__, __DATE_DUE_YMD__, __FRIST_TAGE__ ...), Liste sichtbar im Setup.
- Absender-Adresse und -Name konfigurierbar (MAHNUNG_EMAIL_SENDER[_NAME]).
- Erneuter Versand moeglich (force aus dem Status abgeleitet, nicht aus dem
Request — Doppelversand-Schutz bleibt wirksam).
Versandprotokoll (neue Tabelle llx_mahnung_mailprotokoll)
- Jede versendete Erinnerung wird mit Empfaenger, Kopie, Betreff, Text und
Anhangsnamen festgehalten, einsehbar unter Versandstatus. Historie statt
Spalten am Vorgang, weil erneut gesendet werden kann.
- Lazy-Migration legt die Tabelle an (DB_VERSION 0.4.0), kein Reaktivieren noetig.
Haertung nach Code-Review (21 bestaetigte Funde)
- Anhang liess sich nicht abwaehlen (wurde sofort wieder eingehaengt)
- Upload/Entfernen ohne Rechtepruefung; Temp-Verzeichnis pro Vorgang getrennt
- Teilzahlung zwischen Oeffnen und Senden fuehrt zurueck ins Formular
- Empfaenger: Semikolon-Trenner, keine stillen Verwerfungen, Dubletten, CR/LF
- CSRF: presend + Core-Dateiaktionen (confirm_deletefile, renamefile, sendit,
linkit) token-pflichtig
- Externe Benutzer sehen nur eigene Vorgaenge; Abschreiben verlangt facture.creer
UI
- Mahnstufe nur noch EINE Darstellung (Badge), Farbskala zentral in
lib/mahnung_ui.lib.php statt doppelt gepflegt
- Zahnrad oben rechts in die Einstellungen (nur mit Recht mahnung.setup)
- Original-Rechnung unter Verknuepfte Dokumente mit Vorschau, Groesse in KB
- PDF-Einleitungstext nur noch, wo ueberhaupt ein PDF entsteht
Sprachdateien de_DE/en_US deckungsgleich, 9 tote Keys entfernt.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.3 KiB
SQL
33 lines
1.3 KiB
SQL
-- Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
|
-- GPL v3 (siehe COPYING).
|
|
--
|
|
-- Protokoll der tatsaechlich versendeten Erinnerungs-Mails.
|
|
--
|
|
-- Bewusst eine eigene Tabelle statt Spalten am Mahnvorgang: eine Erinnerung kann
|
|
-- mehrfach rausgehen (Mail kam nicht an, ging an die falsche Adresse). Spalten am
|
|
-- Vorgang wuerden den vorherigen Versand ueberschreiben — genau den Nachweis, um
|
|
-- den es hier geht.
|
|
--
|
|
-- Festgehalten wird, was WIRKLICH verschickt wurde: Empfaenger, Betreff und Text
|
|
-- zum Sendezeitpunkt. Aendert jemand spaeter die Vorlage in der Stufe, bleibt das
|
|
-- Protokoll davon unberuehrt.
|
|
|
|
CREATE TABLE llx_mahnung_mailprotokoll
|
|
(
|
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
|
entity INTEGER DEFAULT 1 NOT NULL,
|
|
fk_mahnung INTEGER NOT NULL,
|
|
date_versand DATETIME NOT NULL,
|
|
mail_from VARCHAR(255),
|
|
mail_to TEXT NOT NULL,
|
|
mail_cc TEXT,
|
|
mail_bcc TEXT,
|
|
subject VARCHAR(255) NOT NULL,
|
|
body MEDIUMTEXT,
|
|
-- 1 = body ist HTML, 0 = Klartext. Entscheidet ueber die Darstellung auf der Karte.
|
|
ishtml TINYINT DEFAULT 0 NOT NULL,
|
|
-- Dateinamen der Anhaenge, mit "; " getrennt (nicht die Dateien selbst).
|
|
anhaenge TEXT,
|
|
fk_user INTEGER,
|
|
datec DATETIME NOT NULL
|
|
) ENGINE=innodb;
|