fix(mahnung): Button per JS ans Ende der Aktionsleiste schieben statt Flex-Spacer [deploy]
All checks were successful
Deploy mahnung / deploy (push) Successful in 13s

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) <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-05-14 10:39:23 +02:00
parent 7031bea118
commit d49e178554

View file

@ -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 = '<div class="mahnung-row-break" style="flex-basis:100%;height:0;width:0;"></div>';
// 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 = "<script>jQuery(function(\$){";
$js .= "var \$btn=\$('#btn-mahnung-create');";
$js .= "if(!\$btn.length)return;";
$js .= "var \$ref=\$('.tabsAction .butActionRefused').first();";
$js .= "if(\$ref.length){\$btn.insertBefore(\$ref);}";
$js .= "else{\$btn.appendTo('.tabsAction');}";
$js .= "});</script>";
// 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;
}