diff --git a/admin/setup.php b/admin/setup.php index ffcb676..041163b 100644 --- a/admin/setup.php +++ b/admin/setup.php @@ -93,12 +93,15 @@ if ($action === 'save_consts' && $user->hasRight('mahnung', 'setup')) { $b2b = str_replace(',', '.', GETPOST('MAHNUNG_AUFSCHLAG_B2B', 'alphanohtml')); $pau = str_replace(',', '.', GETPOST('MAHNUNG_PAUSCHALE_B2B', 'alphanohtml')); $topic = GETPOST('MAHNUNG_NTFY_TOPIC', 'alphanohtml'); + $boxmax = (int) GETPOST('MAHNUNG_BOX_MAXLINES', 'int'); dolibarr_set_const($db, 'MAHNUNG_BASISZINS', (string) (float) $basis, 'chaine', 0, '', 0); dolibarr_set_const($db, 'MAHNUNG_AUFSCHLAG_B2C', (string) (float) $b2c, 'chaine', 0, '', 0); dolibarr_set_const($db, 'MAHNUNG_AUFSCHLAG_B2B', (string) (float) $b2b, 'chaine', 0, '', 0); dolibarr_set_const($db, 'MAHNUNG_PAUSCHALE_B2B', (string) (float) $pau, 'chaine', 0, '', 0); dolibarr_set_const($db, 'MAHNUNG_NTFY_TOPIC', (string) $topic, 'chaine', 0, '', $conf->entity); + // Widget-Anzeige: max. Zeilen offener Rechnungen (0 = alle) + dolibarr_set_const($db, 'MAHNUNG_BOX_MAXLINES', (string) $boxmax, 'chaine', 0, '', 0); setEventMessages($langs->trans('MahnungSettingsSaved'), null, 'mesgs'); header('Location: '.$_SERVER['PHP_SELF']); @@ -265,6 +268,17 @@ print ''.$langs->trans('MahnungNtfyTopic').''; print ''; print ' '.$langs->trans('MahnungNtfyTopicHelp').''; +// Widget: max. Anzahl angezeigter offener Rechnungen (0 = alle) +$curBoxMax = getDolGlobalInt('MAHNUNG_BOX_MAXLINES', 0); +print ''.$langs->trans('MahnungBoxMaxLines').''; +print ''; +print ' '.$langs->trans('MahnungBoxMaxLinesHelp').''; + print ''; print '
'; print ''; diff --git a/core/boxes/box_mahnung_offen.php b/core/boxes/box_mahnung_offen.php index 595b98d..a67032d 100644 --- a/core/boxes/box_mahnung_offen.php +++ b/core/boxes/box_mahnung_offen.php @@ -52,9 +52,12 @@ class box_mahnung_offen extends ModeleBoxes $facturestatic = new Facture($this->db); $societestatic = new Societe($this->db); - $textHead = $langs->trans("MahnungBoxOffeneRechnungen", $this->max); + // Kopf mit Titel; die echte Anzahl offener Rechnungen wird nach der Query + // als Badge ergaenzt (siehe unten). Fuer die fruehen Return-Pfade + // (fehlende Rechte / SQL-Fehler) bleibt es beim reinen Titel. + $textHead = $langs->trans("MahnungBoxOffeneRechnungen"); $this->info_box_head = array( - 'text' => $textHead.'...', + 'text' => $textHead, 'limit' => dol_strlen($textHead), ); @@ -100,7 +103,8 @@ class box_mahnung_offen extends ModeleBoxes $sql .= " f.rowid, f.ref, f.type, f.datef, f.date_lim_reglement,"; $sql .= " f.total_ht, f.total_tva, f.total_ttc, f.paye, f.fk_statut"; $sql .= " ORDER BY f.date_lim_reglement ASC, f.ref ASC"; - $sql .= $this->db->plimit($this->max + 1, 0); + // Kein plimit: alle offenen Rechnungen laden, damit der Zaehler im Kopf + // stimmt. Die Anzeige wird bei Bedarf ueber MAHNUNG_BOX_MAXLINES begrenzt. $result = $this->db->query($sql); if (!$result) { @@ -115,6 +119,12 @@ class box_mahnung_offen extends ModeleBoxes $line = 0; $l_due_date = $langs->trans('Late').' ('.strtolower($langs->trans('DateDue')).': %s)'; + // Echte Anzahl offener Rechnungen als Badge im Kopf (verlinkt auf die Liste). + // $num entspricht dank GROUP BY genau einer Zeile je offener Rechnung. + $this->info_box_head['text'] = $textHead + .''.((int) $num).''; + // Damit das Widget auch ohne offene Rechnungen sichtbar bleibt: // leeres info_box_contents würde ModeleBoxes::showBox nichts rendern lassen. if ($num == 0) { @@ -124,7 +134,13 @@ class box_mahnung_offen extends ModeleBoxes ); } - while ($line < min($num, $this->max)) { + // Anzeige-Limit aus dem Setup (0 = alle offenen Rechnungen anzeigen). + // Es werden immer alle geladen (fuer den korrekten Zaehler im Kopf), + // aber nur $renderLimit Zeilen gerendert. + $boxmax = getDolGlobalInt('MAHNUNG_BOX_MAXLINES', 0); + $renderLimit = ($boxmax > 0) ? min($num, $boxmax) : $num; + + while ($line < $renderLimit) { $objp = $this->db->fetch_object($result); $datelimit = $this->db->jdate($objp->datelimit); @@ -217,7 +233,8 @@ class box_mahnung_offen extends ModeleBoxes $line++; } - if ($this->max < $num) { + // Mehr offene Rechnungen vorhanden als angezeigt: "..."-Zeile als Verweis + if ($boxmax > 0 && $num > $boxmax) { $this->info_box_contents[$line][] = array('td' => 'colspan="6"', 'text' => '...'); $line++; } diff --git a/langs/de_DE/mahnung.lang b/langs/de_DE/mahnung.lang index ea54296..8fe2c96 100644 --- a/langs/de_DE/mahnung.lang +++ b/langs/de_DE/mahnung.lang @@ -204,8 +204,11 @@ MahnungCronBuildVorschlagDesc = Sucht täglich überfällige Rechnungen und send # # Widget # -MahnungBoxOffeneRechnungen = Überfällige Rechnungen mit Mahnstufe (%s) +MahnungBoxOffeneRechnungen = Überfällige Rechnungen mit Mahnstufe MahnungBoxKeineOffenenRechnungen = Keine offenen Kundenrechnungen +MahnungBoxMaxLines = Widget: angezeigte offene Rechnungen +MahnungBoxMaxLinesAll = Alle +MahnungBoxMaxLinesHelp = Wie viele offene Rechnungen das Home-Widget maximal anzeigt. „Alle" = ohne Begrenzung. Der Zähler im Widget-Kopf zeigt immer die tatsächliche Gesamtzahl. # # Dokumentenmodelle diff --git a/langs/en_US/mahnung.lang b/langs/en_US/mahnung.lang index 1463a50..30cb842 100644 --- a/langs/en_US/mahnung.lang +++ b/langs/en_US/mahnung.lang @@ -329,8 +329,11 @@ MahnungSetupTemplateVars = Available template variables MahnungTriggerBeschreibung = Dunning trigger: marks open dunnings as closed on payment receipt. MahnungBoxStufe = Stage %s MahnungBoxStufeVom = Stage %s from %s -MahnungBoxOffeneRechnungen = Overdue customer invoices with dunning stage (%s) +MahnungBoxOffeneRechnungen = Overdue customer invoices with dunning stage MahnungBoxKeineOffenenRechnungen = No open customer invoices +MahnungBoxMaxLines = Widget: displayed open invoices +MahnungBoxMaxLinesAll = All +MahnungBoxMaxLinesHelp = How many open invoices the home widget shows at most. "All" = no limit. The counter in the widget header always shows the real total. MahnungVorschlagStufeNichtKonfiguriert = Stage 1 not configured MahnungVorschlagFristNichtErreicht = Stage 1 deadline (%s days) not yet reached (overdue %s days) MahnungVorschlagAlleStufenAusgeschoepft = All dunning stages exhausted (last stage %s)