fix(mahnung): Button "Mahnung erstellen" nur bei freigegebener + offener Rechnung, in zweiter Zeile [deploy]
All checks were successful
Deploy mahnung / deploy (push) Successful in 13s
All checks were successful
Deploy mahnung / deploy (push) Successful in 13s
Vorher: Button wurde immer gezeigt — auch bei Entwurf, bezahlt, storniert (zwar disabled mit Tooltip, aber sichtbar). Jetzt: Hook gibt nichts aus wenn: - Entwurf (statut == 0) - Bezahlt (paye != 0) - Storniert / abandoned (statut == 2 / 3) Nur bei statut >= 1 UND paye === 0 erscheint der Button. Überfällig-Logik entscheidet danach nur noch ob aktiv (mit URL) oder disabled (mit Tooltip). Zusätzlich: Flex-Spacer (flex-basis:100%) wird DIREKT vor den Button gestellt → Button landet in eigener zweiter Zeile unterhalb der primären Aktionen, neben "Import Zeilen / Löschen / Auf anderen Kunden übertragen". Output via \$this->resprints statt direktem print — verhindert HTML-Layoutbruch bei Hook-Aufrufen mitten in Tabellen. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c8c16f1f85
commit
e7375ac559
1 changed files with 22 additions and 6 deletions
|
|
@ -49,27 +49,43 @@ class ActionsMahnung
|
|||
return 0;
|
||||
}
|
||||
|
||||
$paye = (int) ($object->paye ?? 0);
|
||||
$paye = (int) ($object->paye ?? 0);
|
||||
$statut = (int) ($object->statut ?? ($object->status ?? 0));
|
||||
$dateLim = !empty($object->date_lim_reglement) ? (int) $object->date_lim_reglement : 0;
|
||||
$ueberfaellig = ($statut === 1 && $paye === 0 && $dateLim > 0 && $dateLim < dol_now());
|
||||
|
||||
$langs->load('mahnung@mahnung');
|
||||
// Button nur bei FREIGEGEBENER (statut >= 1) und NOCH OFFENER (paye === 0) Rechnung.
|
||||
// Entwurf, bezahlt, storniert, abandoned → gar kein Button.
|
||||
if ($statut < 1 || $paye !== 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!$user->hasRight('mahnung', 'write')) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$langs->load('mahnung@mahnung');
|
||||
|
||||
$dateLim = !empty($object->date_lim_reglement) ? (int) $object->date_lim_reglement : 0;
|
||||
$ueberfaellig = ($dateLim > 0 && $dateLim < dol_now());
|
||||
|
||||
$label = $langs->trans('MahnungErstellen');
|
||||
|
||||
if ($ueberfaellig) {
|
||||
$url = DOL_URL_ROOT.'/custom/mahnung/list.php?mainmenu=billing&leftmenu=mahnung&mode=vorschlag&search_socid='.((int) $object->socid);
|
||||
print dolGetButtonAction($label, '', 'default', $url, 'btn-mahnung-create', 1);
|
||||
$btn = dolGetButtonAction($label, '', 'default', $url, 'btn-mahnung-create', 1);
|
||||
} else {
|
||||
$attr = array('title' => $langs->trans('MahnungKeineUeberfaelligen'));
|
||||
print dolGetButtonAction($label, '', 'default', '#', 'btn-mahnung-create', 0, array('attr' => $attr));
|
||||
$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>';
|
||||
|
||||
// Über $this->resprints zurückgeben statt direktem print — sonst kann der Output
|
||||
// mitten in HTML-Fragmenten landen. Dolibarr printet danach $hookmanager->resPrint.
|
||||
$this->resprints = $spacer.$btn;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue