From 3e67a876c1dcdc9d9dac29efbe71a0065130a4b1 Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Mon, 11 May 2026 12:34:57 +0200 Subject: [PATCH] Vorschlagsliste UX: B2B/B2C-Filter wirkt direkt auf Kunden-Dropdown, Skip-Grund-Zelle harmonisiert [deploy] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kundentyp filtert das Kunden-Dropdown: - select_company bekommt SQL-Filter "s.tva_intra IS NOT NULL AND s.tva_intra <> ''" bzw. "s.tva_intra IS NULL OR s.tva_intra = ''" je nach B2B/B2C-Wahl. - Das Kundentyp-Select hat onchange=this.form.submit, sodass das Dropdown ohne extra Klick auf "Suche" direkt neu geladen wird. Skip-Grund-Zelle: - opacitymedium-Klasse von td auf inneres span verschoben. Manche Themes rendern td.opacitymedium mit eigenem Border-Verhalten — das hatte zu sichtbarem Rahmen-Unterschied in der Uebersprungen-Tabelle gefuehrt. Co-Authored-By: Claude Opus 4.7 (1M context) --- CHANGELOG.md | 5 +++++ list.php | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e4bffe..d70c9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## [Unreleased] +### UX-Fixes (Vorschlagsliste) +- Kundentyp-Filter (B2B/B2C) wird jetzt direkt an `select_company()` durchgereicht — wenn B2C gewaehlt ist, zeigt das Kunden-Dropdown nur noch Drittparteien ohne TVA-Nummer (entsprechend umgekehrt fuer B2B). +- Auto-Submit beim Wechsel des Kundentyps, damit das Dropdown ohne extra "Suche"-Klick aktualisiert wird. +- Skip-Grund-Spalte in der Uebersprungen-Tabelle: `opacitymedium` jetzt am inneren `span` statt am `td`, damit Theme-spezifisches Zellen-Border-Verhalten konsistent bleibt. + ### Versand-Reminder (Cron + Ntfy) - Neuer Cron-Job `MahnungCronVersandReminder` (taeglich): sucht Mahnungen mit Status `ERSTELLT` deren PDF seit > N Tagen erstellt aber noch nicht versendet wurde, schickt Ntfy-Push und (falls aktiv) GlobalNotify-Badge. - Schwellenwert konfigurierbar via Konstante `MAHNUNG_VERSAND_REMINDER_DAYS` (Default 2). diff --git a/list.php b/list.php index 6c3fcd2..24b473d 100644 --- a/list.php +++ b/list.php @@ -116,8 +116,8 @@ print ' €'; -// Kundentyp -print ''; print ''; print ''; print ''; @@ -125,12 +125,20 @@ print ''; // Kunden-Auswahl: Dolibarr-Standard select_company (Ajax wenn COMPANY_USE_SEARCH_TO_SELECT, // sonst klassisches Dropdown). htmlname='search_socid' bleibt = Backward-Kompatibilitaet -// zu Direkt-Links (?search_socid=74) von der Kundenkarte. +// zu Direkt-Links (?search_socid=74) von der Kundenkarte. Wenn Kundentyp-Filter +// gesetzt ist, schraenken wir die Dropdown-Liste passend ein (B2B = TVA gesetzt, +// B2C = TVA leer); der Filter wird im SQL-WHERE als zusaetzliche Condition genutzt. +$socFilter = ''; +if ($filter_kundentyp === 'B2B') { + $socFilter = "s.tva_intra IS NOT NULL AND s.tva_intra <> ''"; +} elseif ($filter_kundentyp === 'B2C') { + $socFilter = "(s.tva_intra IS NULL OR s.tva_intra = '')"; +} print ''; print $form->select_company( $filter_socid, // selected 'search_socid', // htmlname (Hidden-Input-Name) - '', // filter + $socFilter, // filter (SQL-Condition, von Dolibarr in WHERE eingebunden) 'SelectThirdParty', // showempty (Translation-Key) 0, 0, array(), 0, 'minwidth250' ); @@ -268,7 +276,7 @@ function renderUebersprungeneTabelle($skipped) print ''.((int) $r['tage_verzug']).''; print ''.price($r['betrag_offen']).''; print ''.($r['letzte_mahnung_stufe'] ? 'Stufe '.((int) $r['letzte_mahnung_stufe']).' am '.dol_print_date($r['letzte_mahnung_datum'], 'day') : '—').''; - print ''.dol_escape_htmltag((string) $r['skip_reason']).''; + print ''.dol_escape_htmltag((string) $r['skip_reason']).''; print ''; } print '';