From d49e178554e1e1f9899eced4ed322158aabe621f Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Thu, 14 May 2026 10:39:23 +0200 Subject: [PATCH] fix(mahnung): Button per JS ans Ende der Aktionsleiste schieben statt Flex-Spacer [deploy] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorher: Flex-Spacer-Trick (flex-basis:100%) sollte den Button in zweite Zeile zwingen — funktioniert aber nur wenn .tabsAction ein Flexbox-Container mit flex-wrap ist. Im AwlDark-Theme ist das nicht der Fall → Button landete einfach am Anfang der Aktionsleiste. Jetzt: kurzes JS-Snippet verschiebt #btn-mahnung-create per insertBefore vor den ersten .butActionRefused (= disabled "Löschen" / "Auf anderen Kunden übertragen" — typisch sichtbar bei freigegebener Rechnung). Fallback: appendTo ans Ende der .tabsAction. So landet "Mahnung erstellen" optisch direkt bei den Verwaltungs-Buttons am rechten/unteren Ende, wie Eddy es wollte. Co-Authored-By: Claude Opus 4.7 (1M context) --- class/actions_mahnung.class.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/class/actions_mahnung.class.php b/class/actions_mahnung.class.php index 755723c..935eae2 100644 --- a/class/actions_mahnung.class.php +++ b/class/actions_mahnung.class.php @@ -77,18 +77,24 @@ class ActionsMahnung $btn = dolGetButtonAction($label, '', 'default', '#', 'btn-mahnung-create', 0, array('attr' => $attr)); } - // In die zweite Zeile zwingen: Flex-Spacer mit voller Breite und 0 Höhe DIREKT - // vor dem Button. Wirkt nur bei flex-wrap-Layouts (Standard in .tabsAction) — - // sonst harmlos. So landet "Mahnung" optisch unter den Standard-Aktionen, neben - // Import Zeilen / Löschen / Auf anderen Kunden übertragen. - $spacer = '
'; + // Der Hook läuft VOR den Standard-Buttons → der Mahnung-Button würde sonst ganz + // am Anfang der .tabsAction-Div stehen. Eddy will ihn aber bei den letzten + // "Verwaltungs"-Buttons (Löschen / Auf anderen Kunden übertragen — typisch + // butActionRefused weil disabled bei freigegebener Rechnung). + // JS verschiebt den Button per insertBefore VOR den ersten .butActionRefused — + // fällt zurück auf appendTo wenn keiner existiert. + $js = ""; // WICHTIG: addMoreActionsButtons braucht direkten print, nicht $this->resprints. // card.php wertet zwar $reshook aus, druckt aber $hookmanager->resPrint an dieser - // Stelle NICHT — anders als bei formObjectOptions. Output direkt in die tabsAction-Div - // ist hier sicher, weil der Hook bereits innerhalb des dafür vorgesehenen - // Container-Divs aufgerufen wird. - print $spacer.$btn; + // Stelle NICHT — anders als bei formObjectOptions. + print $btn.$js; return 0; }