diff --git a/CHANGELOG.md b/CHANGELOG.md index d70c9f8..b7d0beb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ ## [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. +- 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). Filter nutzt Dolibarrs **Universal-Search-Criteria-Syntax** `(feld:operator:wert)` — plain SQL wuerde durch `forgeSQLFromUniversalSearchCriteria` fehlschlagen. +- Auto-Submit beim Wechsel des Kundentyps + automatisches Reset von `search_socid`, damit das Dropdown ohne extra "Suche"-Klick aktualisiert wird und keine ungueltige (im neuen Filter nicht enthaltene) Kunden-ID stehen bleibt. +- `search_socid=-1` (von `select_company` als "nichts ausgewaehlt" geliefert) wird jetzt korrekt ignoriert statt als Filter auf `fk_soc=-1` zu wirken. - 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) diff --git a/list.php b/list.php index 24b473d..e4d96ea 100644 --- a/list.php +++ b/list.php @@ -67,7 +67,8 @@ if ($filter_minverzug !== '' && $filter_minverzug !== null) { $filter['min_tage_verzug'] = (int) $filter_minverzug; } $filter_socid = GETPOST('search_socid', 'int'); -if (!empty($filter_socid)) { +// select_company liefert -1 fuer "nichts ausgewaehlt" — nur positive IDs als Filter werten +if ((int) $filter_socid > 0) { $filter['soc_id'] = (int) $filter_socid; } $filter_minbetrag = GETPOST('filter_minbetrag', 'alpha'); // Komma/Punkt zugelassen @@ -116,8 +117,12 @@ print ' €'; -// Kundentyp — Auto-Submit beim Wechsel, damit das Kunden-Dropdown direkt gefiltert wird -print ''; print ''; print ''; print ''; @@ -126,13 +131,16 @@ 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. 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. +// gesetzt ist, schraenken wir die Dropdown-Liste passend ein. +// +// WICHTIG: select_thirdparty_list erwartet $filter im Universal-Search-Criteria-Format +// (siehe forgeSQLFromUniversalSearchCriteria), NICHT plain SQL. +// Syntax: (feld:operator:wert) mit AND/OR; Operatoren: =, !=, <, >, like, is, isnot, in, notin. $socFilter = ''; if ($filter_kundentyp === 'B2B') { - $socFilter = "s.tva_intra IS NOT NULL AND s.tva_intra <> ''"; + $socFilter = "(s.tva_intra:isnot:NULL) AND (s.tva_intra:!=:'')"; } elseif ($filter_kundentyp === 'B2C') { - $socFilter = "(s.tva_intra IS NULL OR s.tva_intra = '')"; + $socFilter = "(s.tva_intra:is:NULL) OR (s.tva_intra:=:'')"; } print ''; print $form->select_company(