From e4f2dd6fb24a22cdef7a27f7ab4426e168d795f3 Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Mon, 11 May 2026 11:26:24 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Tab=20"Mahnwesen"=20auf=20Kundenkarte=20?= =?UTF-8?q?doppelt=20=E2=80=94=20completeTabsHead-Hook=20auf=20add/externa?= =?UTF-8?q?l=20filtern=20[deploy]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dolibarr ruft complete_head_from_modules() pro societe_prepare_head() mehrmals auf (core/lib/company.lib.php:365 fuer 'core', 487 fuer 'external', 489 fuer 'remove'). Jeder Aufruf feuert completeTabsHead — der Hook haengte den Tab entsprechend mehrfach an. Fix: im Hook auf $parameters['mode']='add' UND filterorigmodule='external' filtern, damit der Tab genau einmal pro Karte erscheint. Co-Authored-By: Claude Opus 4.7 (1M context) --- CHANGELOG.md | 5 +++++ class/actions_mahnung.class.php | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54f6757..e90a7e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [Unreleased] + +### Fixes +- Kundenkarte: Tab "Mahnwesen" erschien doppelt, weil `complete_head_from_modules()` pro Karte mehrfach (core + external + remove) feuert. Hook filtert jetzt auf `mode=add` + `filterorigmodule=external`. + ## [0.2.0] — 2026-05-10 — ODT-Template-System, Widget, Dokumentenmodelle ### ODT-Template-System diff --git a/class/actions_mahnung.class.php b/class/actions_mahnung.class.php index 0c42150..295ae7b 100644 --- a/class/actions_mahnung.class.php +++ b/class/actions_mahnung.class.php @@ -100,6 +100,16 @@ class ActionsMahnung return 0; } + // complete_head_from_modules() wird pro Karte mehrfach aufgerufen + // (mode='add' fuer 'core' UND 'external', plus mode='remove'). + // Genau einmal feuern: nur add/external. + if (($parameters['mode'] ?? '') !== 'add') { + return 0; + } + if (($parameters['filterorigmodule'] ?? '') !== 'external') { + return 0; + } + $langs->load('mahnung@mahnung'); if ($onInvoice) {