Mahnschreiben als „hochgeladen" indexieren — nur im Reiter der Rechnung (0.3.1) [deploy]
All checks were successful
Deploy mahnung / deploy (push) Successful in 13s
All checks were successful
Deploy mahnung / deploy (push) Successful in 13s
Das Schreiben liegt im Rechnungsordner, war aber nicht indexiert (Dolibarr: 'unknown'). Neu: ModelePDFMahnung::alsBeilageIndexieren() — Eintrag mit gen_or_uploaded = 'uploaded' und Rechnungsbezug, vorhandener Eintrag wird aktualisiert. Beide Vorlagen (PDF, ODT inkl. ODT→PDF). Regel KB #1641. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1c666287f5
commit
3bd7cfd0ea
4 changed files with 68 additions and 0 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -1,5 +1,19 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.3.1] — 2026-10-13 — Mahnschreiben nur im Reiter der Rechnung
|
||||||
|
|
||||||
|
Eddys Regel (13.10.2026, KB #1641): Verknüpfungen, angehängte Dateien und Archiv-Dokumente stehen
|
||||||
|
nur im Reiter am Beleg, nie vorne im Kasten der Belegkarte — „außer Dolibarr packt sie darein".
|
||||||
|
Das Mahnschreiben liegt bewusst im Rechnungsordner (damit es im Reiter der Rechnung erscheint),
|
||||||
|
war aber nicht indexiert; Dolibarr führte es als `unknown`.
|
||||||
|
|
||||||
|
- `ModelePDFMahnung::alsBeilageIndexieren()`: Eintrag mit `gen_or_uploaded = 'uploaded'` und Bezug
|
||||||
|
auf die Rechnung; vorhandener Eintrag (Mahnung neu erzeugt) wird aktualisiert, nicht verdoppelt.
|
||||||
|
- Aufgerufen von beiden Vorlagen (`pdf_standard_mahnung`, `doc_generic_mahnung_odt` — dort für die
|
||||||
|
ODT und, mit `MAIN_ODT_AS_PDF`, die PDF gleichen Namens).
|
||||||
|
- Vorne auf der Rechnungskarte blendet FileArchive 4.15.1 das Schreiben bereits über den Namen aus
|
||||||
|
(`MAHN…`/`mahnung-…` ist kein Belegreferenz-Name) — auch für vorhandene Mahnungen.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Reiter am Kunden nur noch, wenn es Mahnungen gibt
|
### Reiter am Kunden nur noch, wenn es Mahnungen gibt
|
||||||
|
|
|
||||||
|
|
@ -384,6 +384,12 @@ class doc_generic_mahnung_odt extends ModelePDFMahnung
|
||||||
$mahnung->pdf_path = $file;
|
$mahnung->pdf_path = $file;
|
||||||
$mahnung->update($user);
|
$mahnung->update($user);
|
||||||
|
|
||||||
|
// Liegt im Rechnungsordner → als Beilage indexieren (nur im Reiter, KB #1641).
|
||||||
|
// Mit MAIN_ODT_AS_PDF entsteht neben/anstelle der ODT eine PDF gleichen Namens.
|
||||||
|
foreach (array_unique(array($file, preg_replace('/\.odt$/i', '.pdf', $file))) as $erzeugt) {
|
||||||
|
$this->alsBeilageIndexieren($erzeugt, $facture);
|
||||||
|
}
|
||||||
|
|
||||||
$this->result = array('fullpath' => $file);
|
$this->result = array('fullpath' => $file);
|
||||||
$outputlangs->charset_output = $sav_charset_output;
|
$outputlangs->charset_output = $sav_charset_output;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,9 @@ class pdf_standard_mahnung extends ModelePDFMahnung
|
||||||
$mahnung->pdf_path = $absPath;
|
$mahnung->pdf_path = $absPath;
|
||||||
$mahnung->update($user);
|
$mahnung->update($user);
|
||||||
|
|
||||||
|
// Liegt im Rechnungsordner → als Beilage indexieren (nur im Reiter, KB #1641)
|
||||||
|
$this->alsBeilageIndexieren($absPath, $facture);
|
||||||
|
|
||||||
$this->result = array('fullpath' => $absPath);
|
$this->result = array('fullpath' => $absPath);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,49 @@ abstract class ModelePDFMahnung extends CommonDocGenerator
|
||||||
*/
|
*/
|
||||||
abstract public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0);
|
abstract public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0);
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mahnschreiben im Rechnungsordner als „hochgeladen" indexieren.
|
||||||
|
*
|
||||||
|
* Die Mahnung liegt bewusst bei der Rechnung, damit sie im Reiter der Rechnung erscheint.
|
||||||
|
* Sie ist aber kein Belegdokument der Rechnung: nach Eddys Regel (13.10.2026, KB #1641)
|
||||||
|
* steht sie nur im Reiter, nie vorne im Kasten der Rechnungskarte. Ohne Indexeintrag
|
||||||
|
* führte Dolibarr sie als „unknown". Vorhandener Eintrag (Mahnung neu erzeugt) wird
|
||||||
|
* aktualisiert, nicht verdoppelt. Fehler nur protokollieren — die Datei liegt bereits.
|
||||||
|
*
|
||||||
|
* @param string $fullpath Absoluter Pfad der erzeugten Datei
|
||||||
|
* @param Facture $facture Gemahnte Rechnung (Belegbezug)
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function alsBeilageIndexieren($fullpath, $facture)
|
||||||
|
{
|
||||||
|
global $user;
|
||||||
|
|
||||||
|
if (empty($fullpath) || !is_file($fullpath) || strpos($fullpath, DOL_DATA_ROOT.'/') !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
|
||||||
|
|
||||||
|
$dir = dirname($fullpath);
|
||||||
|
$name = basename($fullpath);
|
||||||
|
$relDir = ltrim(substr($dir, strlen(DOL_DATA_ROOT)), '/');
|
||||||
|
|
||||||
|
$ecm = new EcmFiles($this->db);
|
||||||
|
if ($ecm->fetch(0, '', $relDir.'/'.$name) > 0) {
|
||||||
|
$ecm->gen_or_uploaded = 'uploaded';
|
||||||
|
$ecm->label = md5_file($fullpath);
|
||||||
|
if (is_object($facture) && !empty($facture->id)) {
|
||||||
|
$ecm->src_object_type = $facture->table_element;
|
||||||
|
$ecm->src_object_id = (int) $facture->id;
|
||||||
|
}
|
||||||
|
if ($ecm->update($user) < 0) {
|
||||||
|
dol_syslog(get_class($this).'::alsBeilageIndexieren Update fehlgeschlagen: '.$relDir.'/'.$name, LOG_WARNING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (addFileIntoDatabaseIndex($dir, $name, '', 'uploaded', 0, is_object($facture) ? $facture : null) < 0) {
|
||||||
|
dol_syslog(get_class($this).'::alsBeilageIndexieren Anlegen fehlgeschlagen: '.$relDir.'/'.$name, LOG_WARNING);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue