Skip to content

Mahnwesen: fehlende Platzhalter {FRIST}, {DATUMRECHNUNG}, {MAHNDATUM}, {TAGE} #270

Description

@Avatarsia

Problem

In www/pages/mahnwesen.php (Funktion MahnwesenMessage) wurde die Platzhalter-Logik teilweise umgebaut: Der historische Block, der {DATUM*}, {TAGE}, {MAHNDATUM} etc. via str_replace setzte (Zeilen 633–723), ist auskommentiert. Aktiv ist nur noch das $mapping-Array (Zeile 725) mit:

  • {RECHNUNG}, {BELEGNR}, {DATUM}, {OFFEN}, {MAHNGEBUEHR}, {HEUTE}

Symptome

  1. {DATUMRECHNUNGZAHLUNGSZIEL} und ähnliche Platzhalter werden nicht ersetzt — sie erscheinen als Literaltext in versendeten Mahnungen, sobald ein Briefpapier-Template sie verwendet.
  2. Keine Möglichkeit, ein berechnetes Frist-Datum auszugeben (z.B. „letztmalig zur Zahlung bis zum 15.05.2026"), obwohl die Mahnstufen-Tage in den System-Einstellungen → Mahnwesen konfiguriert sind und auch via mahnwesen.tage aus der DB gejointt werden (m.tage as mahn_tage im SELECT bei Zeile 570).
  3. Use-before-define: Zeile 678 if(\$tage <=0) \$tage = 0; referenziert \$tage bevor es im aktiven Codepfad definiert wird (die Zuweisungen \$tage = \$this->GetKonfiguration(...) stehen im auskommentierten Block).

Reproduktion

  1. Briefpapier-Vorlage (MahnwesenMahnung1/MahnwesenInkasso etc.) editieren und einen Platzhalter wie {FRIST} oder {DATUMRECHNUNGZAHLUNGSZIEL} einfügen.
  2. Mahnung auslösen.
  3. Im versendeten Brief / im CRM-Dokument bleibt der Platzhalter als Literal stehen.

Bonus-Bug (separat, nicht Bestandteil dieses PRs): Wenn die Vorlage HTML mit doppelten Anführungszeichen enthält (z.B. von ChatGPT-Copy-Paste mit <p data-start=\"...\" data-end=\"...\">), crasht die ganze Mahnung mit mysqli_sql_exception in class.erpapi.php:DokumentCreate — der Content wird ohne Escape in den INSERT-String konkateniert.

Fix

Mapping um folgende Platzhalter erweitern (aus bereits im Scope verfügbaren Variablen):

Platzhalter Quelle
{FRIST} mahnwesen_datum + mahn_tage (deutsches Format)
{DATUMRECHNUNG} Alias auf Rechnungsdatum (deutsches Format)
{MAHNDATUM} Datum der aktuellen Mahnung (deutsches Format)
{TAGE} konfigurierte Mahnstufen-Tage

Außerdem \$tage korrekt aus \$rechnungarr['mahn_tage'] setzen und 0000-00-00 für \$mahnwesen_datum abfangen.

PR folgt.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions