Zum Inhalt

Statistik-Aktualisierung System

Übersicht

Das Dashboard-Statistik-System wurde optimiert und verwendet jetzt folgende Strategie:

Automatische Aktualisierung

  • Stündlich: Cloud Function läuft automatisch jede volle Stunde (z.B. 10:00, 11:00, 12:00...)
  • Täglich um Mitternacht: Zusätzliche Aktualisierung für Datumswechsel

Manuelle Aktualisierung

  • Aktualisieren-Button im Dashboard: Triggert sofort eine komplette Neuberechnung aller Statistiken
  • Wartezeit: Nach dem Klick dauert es 2-3 Sekunden bis die aktualisierten Daten geladen werden

Cloud Functions

1. scheduledHourlyStatisticsUpdate

  • Schedule: Jede volle Stunde (0 * * * *)
  • Funktion: Berechnet alle Statistiken für alle Zeiträume neu
  • Memory: 512MB
  • Timeout: 540 Sekunden

2. triggerStatisticsUpdate (Callable)

  • Trigger: Wird vom Dashboard-Aktualisieren-Button aufgerufen
  • Funktion: Identisch mit der stündlichen Berechnung
  • Memory: 512MB
  • Timeout: 540 Sekunden

3. scheduledDailyStatisticsUpdate

  • Schedule: Täglich um Mitternacht (0 0 * * *)
  • Funktion: Backup-Berechnung für Datumswechsel

Zeiträume

Das System berechnet Statistiken für folgende Zeiträume:

Zeitraum Key Beschreibung
Heute today Aktueller Tag (00:00 - jetzt)
Gestern yesterday Vorheriger Tag
Diese Woche thisWeek Montag - jetzt
Letzte 30 Tage last30Days Rollierendes 30-Tage-Fenster
Letzte 60 Tage last60Days Rollierendes 60-Tage-Fenster
Dieser Monat thisMonth 1. des Monats - jetzt
Letzter Monat lastMonth Vorheriger Monat komplett
Dieses Jahr thisYear 1. Januar - jetzt
Letztes Jahr lastYear Vorheriges Jahr komplett

Die Zeitraumauswahl im Dashboard wurde korrigiert: - Initialer Wert: "Heute" ist vorausgewählt - Automatisches Laden: Beim ersten Öffnen des Dashboards werden automatisch die Statistiken für "Heute" geladen - Wechsel: Bei Auswahl eines anderen Zeitraums werden die entsprechenden Statistiken sofort geladen

Deployment

Cloud Functions deployen

# Im Projekt-Root
cd /Users/andreasschmid/development/easy_sale_erp

# Firebase Projekt auswählen (falls noch nicht geschehen)
firebase use --add

# Functions deployen
cd functions
npm install
cd ..
firebase deploy --only functions

Nur spezifische Functions deployen

# Nur die neuen Statistik-Functions
firebase deploy --only functions:scheduledHourlyStatisticsUpdate,functions:triggerStatisticsUpdate

Firestore Collections

Das System schreibt in folgende Collections:

statisticsPeriodSummary

  • Dokument-ID: Zeitraum-Key (z.B. today, thisWeek)
  • Felder:
  • timePeriod: String-Key
  • orderCount: Anzahl Orders
  • customerCount: Anzahl unique Kunden
  • salesVolume: Gesamtumsatz
  • activeSessionsAndroid: Anzahl aktiver Android-Sessions
  • activeSessionsIos: Anzahl aktiver iOS-Sessions
  • Subcollection: articlesByRevenue (Top-Artikel nach Umsatz)

statisticsCustomerSales

  • Dokument-ID: {timePeriod}_{customerId}
  • Felder: Kunden-Umsatz-Statistiken

statisticsCountries

  • Dokument-ID: {timePeriod}_{country}
  • Felder: Länder-Umsatz-Statistiken

statisticsSalesVolume

  • Dokument-ID: Zeitraum-Key
  • Felder:
  • hourly: Array mit stündlichen Werten (für today/yesterday)
  • daily: Array mit täglichen Werten (für Wochen/Monate)
  • monthly: Array mit monatlichen Werten (für Jahre)

Fehlerbehandlung

Problem: Statistiken werden nicht aktualisiert

  1. Prüfe ob die Cloud Function erfolgreich läuft:

    firebase functions:log --only scheduledHourlyStatisticsUpdate
    

  2. Prüfe ob Orders in Firestore vorhanden sind:

  3. Firebase Console → Firestore → orders Collection

  4. Manuelle Neuberechnung triggern:

  5. Dashboard öffnen
  6. "Aktualisieren" Button klicken
  7. Oder manuell via Node-Script:
    cd functions
    node manual_trigger_statistics.js
    

Problem: Dropdown zeigt keine Daten

  1. Prüfe Browser-Console auf Fehler
  2. Prüfe ob StatisticBloc korrekt initialisiert ist
  3. Prüfe ob Firestore-Daten für den gewählten Zeitraum existieren

Testing

Manuelle Statistik-Berechnung (lokal)

cd functions
node manual_trigger_statistics.js

Statistiken in Firestore prüfen

cd functions
node debug_check_statistics.js

Migration von alter Version

Die alte Version verwendete einen onDocumentWritten Trigger bei jeder Order-Änderung. Dies wurde entfernt wegen: - Performance: Bei vielen Orders führte dies zu sehr häufigen Berechnungen - Kosten: Jede Order-Änderung triggerte eine teure Cloud Function - Latenz: Berechnungen dauerten lange und blockierten Order-Updates

Die neue Version ist effizienter und kostengünstiger.