feat: global dashboard filter bar (date range, region) (#24) #36
Reference in New Issue
Block a user
Delete Branch "ai/issue-24-dashboard-filter-bar"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #24
Was
Der Berichtszeitraum steckte fest im Datenservice (
months()= Jan–Jun), es gab keine Möglichkeit, den Inhalt des Dashboards ohne Codeänderung zu wechseln.Änderungen
data/DashboardFilter— Record aus Zeitraum (MONTH/QUARTER/HALF_YEAR/YEAR) und optionaler Region.ALL_REGIONSist ein Übersetzungs-Key statt einesnull-Sonderfalls.ChartDataService— jede Abfrage nimmt einen Filter; die parameterlosen Overloads sind dieselbe Abfrage unterDashboardFilter.defaults(), damit bestehende Aufrufer unverändert bleiben.InMemoryChartDataService— Basis-Jahr aus 12 Monaten; der Filter schneidet eine Scheibe heraus (ein Monat = vier Wochen) und skaliert sie. Skalierung relativ zum Default-Halbjahr, das ungefilterte Dashboard zeigt also exakt die alten Zahlen. Kumulative Größen wachsen mit dem Zeitraum, ein Bestand (offene Vorgänge) und ein Durchschnitt (Ø Bestellwert) nicht.widgets/DashboardContext— der kleine Event-Bus: Filterleiste setzt, Widgets abonnieren. View-State, keine Spring-Bean.views/DashboardFilterBar— zwei Selects über dem Grid; kennt kein einziges Widget.updateDatanachgefüttert (aus #23), nicht neu gebaut;SparklineCharthat denselben Pfad bekommen, damit auch KPI-Tiles nicht blitzen. Charts hängen ihr Abo an den Detach, ein geschlossenes Widget wird nicht mehr gefüttert.KpiDataträgt jetzt die Zahl, das Bundle das Einheiten- und Zahlenformat (MessageFormat), weil der KPI-Wert vom Filter abhängt und trotzdem locale-formatiert bleiben muss.de/en/es): Filter-Captions, Monate Jul–Dez, Wochen 1–4, KPI-Wertmuster.Akzeptanzkriterien
ApexChartUpdateTest#filterChange_patchesEveryChartInPlaceprüft, dass ein Filterwechsel 7updateData-Calls und keinrenderCharterzeugt.DashboardContext(Grid-Layout bleibt wie gehabt imlocalStorage).translations.properties,_en,_es.Tests
./mvnw test— 46 Tests grün (inkl. Playwright-E2E). Neu:DashboardContextTest, Filter-Tests inInMemoryChartDataServiceTestundDashboardViewTest.🤖 Generated with Claude Code
https://claude.ai/code/session_0124BiJikbhbiEsNfJxdWM69