EasySale
Teil I – ERP-System (Verwaltung)¶
1. Einführung¶
EasySale ist ein cloudbasiertes Warenwirtschafts- und Shop-System bestehend aus drei Kernkomponenten:
- ERP-System (Web-App): Die Verwaltungsoberfläche für Administratoren – beschrieben in Teil I dieses Handbuchs
- Shop-System Mobile-App: Die native Bestell-App für Endkunden – beschrieben in Teil II
- Shop-System Web-App: Der Web-basierte Online-Shop für Endkunden – beschrieben in Teil III
Systemarchitektur¶
| Komponente | Beschreibung |
|---|---|
| ERP-System | Flutter Web-App für Administratoren – Verwaltung von Kunden, Artikeln, Bestellungen, Lager, Benachrichtigungen und Systemeinstellungen |
| Shop Mobile-App | Native Flutter-App (iOS & Android) für Endkunden – Artikelsuche, Bestellungen, Feed, Einkaufslisten |
| Shop Web-App | Flutter Web-App für Endkunden – identische Funktionen wie die Mobile-App, optimiert für Desktop-Browser |
| Cloud Functions | Serverlose Hintergrunddienste (Node.js) für Automatisierungen, Trigger, Jobs und Connectoren |
| Firebase | Firestore-Datenbank, Firebase Authentication, Cloud Storage, Cloud Messaging und Hosting |
Anmeldung (ERP)¶
Nach Eingabe Ihrer E-Mail-Adresse und Ihres Passworts gelangen Sie zum Dashboard. Beim ersten Login wird automatisch ein Tutorial gestartet, das die wichtigsten Funktionen erklärt.
Auto-Logout bei Inaktivität¶
Der InactivityService überwacht Benutzerinteraktionen (Mausbewegung, Tastatureingabe, Touch). Nach einer konfigurierbaren Zeitspanne ohne Aktivität wird der Benutzer automatisch abgemeldet und zur Anmeldeseite weitergeleitet. Dies erhöht die Sicherheit bei unbeaufsichtigten Arbeitsplätzen.
2. Rollen & Berechtigungen¶
EasySale unterscheidet zwischen ERP-Benutzern (Verwaltung) und Shop-Benutzern (Endkunden). Jede Gruppe hat eigene Rollen mit unterschiedlichen Rechten.
2.1 ERP-Benutzerrollen¶
Im ERP-System gibt es drei Rollen, die hierarchisch aufeinander aufbauen:
| Rolle | Icon | Beschreibung |
|---|---|---|
| Benutzer | 👤 | Eingeschränkter Zugriff – kann nur lesen, es sei denn, granulare Berechtigungen wurden explizit vergeben |
| Administrator | 🛡️ | Vollzugriff auf alle operativen ERP-Funktionen (Kunden, Artikel, Bestellungen, Einstellungen) |
| Superadministrator | 🔒 | Wie Administrator, zusätzlich: Benutzerverwaltung, Connector-Zugangsdaten, Audit-Logs |
Berechtigungsmatrix ERP¶
| Funktion | Benutzer | Administrator | Superadministrator |
|---|---|---|---|
| Kunden anzeigen | ✅ | ✅ | ✅ |
| Kunden erstellen/bearbeiten/löschen | ⚙️ Nur mit Berechtigung | ✅ | ✅ |
| Artikel anzeigen | ✅ | ✅ | ✅ |
| Artikel erstellen/bearbeiten/löschen | ⚙️ Nur mit Berechtigung | ✅ | ✅ |
| Bestellungen anzeigen | ✅ | ✅ | ✅ |
| Bestellungen erstellen/bearbeiten/löschen | ⚙️ Nur mit Berechtigung | ✅ | ✅ |
| Bestellungen stornieren | ⚙️ Nur mit Berechtigung | ✅ | ✅ |
| Systemeinstellungen verwalten | ❌ | ✅ | ✅ |
| ERP-Benutzer erstellen/bearbeiten/löschen | ❌ | ❌ | ✅ Exklusiv |
| Benutzerrollen ändern | ❌ | ❌ | ✅ Exklusiv |
| Benutzerberechtigungen konfigurieren | ❌ | ❌ | ✅ Exklusiv |
| Connector-Zugangsdaten verwalten | ❌ | ❌ | ✅ Exklusiv |
| Audit-Logs einsehen | ❌ | ❌ | ✅ Exklusiv |
| Wartungsaufgaben verwalten | ❌ | 👁️ Nur lesen | ✅ |
⚙️ Granulare Berechtigungen: Benutzer mit der Rolle „Benutzer" können vom Superadministrator einzelne Berechtigungen erhalten (z. B.
canCreateCustomers,canEditArticles,canCancelOrders). Diese Berechtigungen werden pro Benutzer in einem Berechtigungsprofil gespeichert.
Besonderheiten der Rollen¶
Was ein Administrator NICHT kann: - Keine ERP-Benutzer erstellen, bearbeiten oder löschen - Keine Benutzerrollen oder -berechtigungen ändern - Keinen Zugriff auf Connector-Zugangsdaten oder Audit-Logs - Kann einen Superadministrator nicht herabstufen
Was ein Superadministrator exklusiv kann: - Alle ERP-Benutzer verwalten (erstellen, bearbeiten, löschen) - Rollen für andere Benutzer ändern (außer andere Superadmins) - Granulare Berechtigungen konfigurieren - Connector-Zugangsdaten einsehen und ändern - Audit-Log-Protokolle lesen - Wartungsaufgaben erstellen und verwalten
Connector-Sperre¶
Wenn ein Connector als Quellsystem für eine Ressource aktiv ist (z. B. Business Central für Kunden), werden die entsprechenden Erstellungs-Berechtigungen automatisch gesperrt – auch für Administratoren. In diesem Fall können nur über den Connector neue Datensätze angelegt werden.
2.2 Shop-Benutzerrollen (Kundenbenutzer)¶
Im Shop-System (Mobile & Web) gibt es zwei Rollen pro Kundenkonto:
| Rolle | Icon | Beschreibung |
|---|---|---|
| Benutzer | 👤 | Standard-Rolle – kann bestellen und den eigenen Kunden-Bereich einsehen |
| Administrator | ⚙️ | Erweiterte Rechte – kann zusätzlich Benutzer, Adressen, Lieferpausen und Einstellungen verwalten |
Berechtigungsmatrix Shop¶
| Funktion | Benutzer | Administrator |
|---|---|---|
| Artikel ansehen & durchsuchen | ✅ | ✅ |
| Bestellungen aufgeben | ✅ | ✅ |
| Eigene Bestellhistorie einsehen | ✅ | ✅ |
| Feed / Benachrichtigungen lesen | ✅ | ✅ |
| Einkaufslisten verwalten | ❌ | ✅ |
| Lieferadressen erstellen/bearbeiten/löschen | ❌ | ✅ |
| Lieferpausen verwalten | ❌ | ✅ |
| Kundeneinstellungen ändern | ❌ | ✅ |
| Neue Benutzer genehmigen/ablehnen | ❌ | ✅ |
| Benutzer verwalten (für eigenen Kunden) | ❌ | ✅ |
Hinweis: Ein Shop-Benutzer mit der Rolle „Benutzer" kann Lieferadressen sehen, die vom ERP erstellt wurden, aber keine eigenen anlegen, bearbeiten oder löschen.
Automatische Administrator-Vergabe¶
Der erste Benutzer, der sich für ein Kundenkonto registriert, wird automatisch zum Administrator dieses Kunden. Alle weiteren Benutzer, die sich für dasselbe Kundenkonto registrieren, erhalten die Rolle „Benutzer".
Ein ERP-Administrator kann die Rolle jederzeit über die Registrierungsseite oder den Benutzer-Tab im Kunden ändern (Benutzer ↔ Administrator).
Multi-Kunden-Zugriff¶
Ein Shop-Benutzer kann mehreren Kundenkonten zugeordnet sein. Dabei können die Rollen pro Kunde unterschiedlich sein:
- Benutzer kann z. B. für Kunde A „Administrator" und für Kunde B „Benutzer" sein
- Das aktive Kundenkonto wird über die Kunden-Auswahl im Profil gewechselt
- Die Rolle wird über den JWT-Claim adminCustomerIds gesteuert
2.3 JWT-Claims & Autorisierung¶
Die Zugriffskontrolle wird über Firebase Custom Claims im JWT-Token gesteuert:
ERP-Benutzer¶
| Claim | Wert | Beschreibung |
|---|---|---|
appType |
"erp" |
Kennzeichnet den Benutzer als ERP-Benutzer |
Die konkreten Berechtigungen (Rolle + granulare Rechte) werden aus dem Firestore-Dokument users/{uid} gelesen.
Shop-Benutzer¶
| Claim | Wert | Beschreibung |
|---|---|---|
appType |
"shop" |
Kennzeichnet den Benutzer als Shop-Benutzer |
customerIds |
["CUST001", "CUST002"] |
Array aller genehmigten Kundenkonten |
adminCustomerIds |
["CUST001"] |
Teilmenge von customerIds – Kundenkonten, für die der Benutzer Administrator ist |
Automatische Claim-Aktualisierung¶
Die JWT-Claims werden durch einen Cloud Function Trigger (onShopUserPermissionChanged) automatisch aktualisiert, wenn:
- Ein Benutzer genehmigt wird → customerIds wird erweitert
- Ein Benutzer abgelehnt oder gelöscht wird → customerIds wird bereinigt
- Die Rolle geändert wird (Benutzer ↔ Administrator) → adminCustomerIds wird aktualisiert
- Der Token wird beim nächsten Login oder Token-Refresh wirksam
3. Dashboard¶
Das Dashboard ist die Startseite des ERP-Systems und bietet einen umfassenden Überblick über die aktuellen Geschäftskennzahlen.
Zeitraum-Filter¶
Über den Dropdown-Filter oben rechts können folgende Zeiträume ausgewählt werden:
| Zeitraum | Beschreibung |
|---|---|
| Heute | Daten des aktuellen Tages (stündliche Auflösung) |
| Gestern | Daten des Vortages (stündliche Auflösung) |
| Diese Woche | Aktuelle Kalenderwoche (tägliche Auflösung mit Wochentagen) |
| Letzte 30 Tage | Rollierender 30-Tage-Zeitraum (tägliche Auflösung) |
| Letzte 60 Tage | Rollierender 60-Tage-Zeitraum (tägliche Auflösung) |
| Dieser Monat | Aktueller Kalendermonat (tägliche Auflösung) |
| Letzter Monat | Vormonat (tägliche Auflösung) |
| Dieses Jahr | Aktuelles Kalenderjahr (monatliche Auflösung) |
| Letztes Jahr | Vorjahr (monatliche Auflösung) |
Über den Aktualisieren-Button können die Daten manuell neu geladen werden. Das System prüft automatisch, ob zwischenzeitlich neue Bestellungen eingegangen sind, und zeigt ggf. eine Benachrichtigung an.
KPI-Leiste (Kurz-Informationen)¶
Am oberen Rand werden vier farblich kodierte Kennzahlenkarten angezeigt:
| KPI | Icon | Farbe | Beschreibung |
|---|---|---|---|
| Aktive Nutzer-Sessions | 👤 Personen-Icon | Blau | Summe der aktuellen Android- und iOS-Sessions im gewählten Zeitraum |
| Anzahl Kunden | 👥 Gruppen-Icon | Grün | Gesamtzahl der einzigartigen Kunden im Zeitraum |
| Anzahl Bestellungen | 🛒 Warenkorb-Icon | Orange | Gesamtzahl aller Bestellungen im Zeitraum |
| Umsatz | 💶 Euro-Icon | Lila | Gesamtumsatz in EUR, formatiert mit Tausendertrennzeichen (z. B. „12.345,67 €") |
Während die Daten geladen werden, wird ein Bindestrich „–" als Platzhalter angezeigt. Sobald die Daten verfügbar sind, erscheinen die formatierten Zahlen.
Statistik-Karten (2×2 Layout)¶
Unterhalb der KPI-Leiste werden vier Statistik-Karten in einem 2×2-Raster dargestellt:
Karte 1: Umsatzentwicklung (links oben)¶
Ein Liniendiagramm zeigt die Umsatzentwicklung im gewählten Zeitraum. Die Granularität passt sich automatisch an:
| Zeitraum | Auflösung | X-Achsen-Beschriftung |
|---|---|---|
| Heute / Gestern | 24 Stunden-Slots | 00:00, 01:00, ... 23:00 |
| Diese Woche | 7 Tage | Mo, Di, Mi, Do, Fr, Sa, So |
| Letzte 30/60 Tage, Dieser/Letzter Monat | Wochen-Aggregation | W1, W2, W3, W4 |
| Dieses/Letztes Jahr | 12 Monate | Jan, Feb, Mär, ... Dez |
Fehlende Zeitfenster werden automatisch mit 0 aufgefüllt, sodass das Diagramm immer ein vollständiges Bild zeigt. Die Y-Achse zeigt den Umsatz in Euro. Beim Hovern über einen Datenpunkt erscheint ein Tooltip mit dem exakten Wert.
Karte 2: Top 5 Artikel (rechts oben)¶
Eine Rangliste der fünf umsatzstärksten Artikel im gewählten Zeitraum:
| Spalte | Beschreibung |
|---|---|
| Rang | Platzierung 1–5 |
| Artikelname | Name des Artikels |
| Artikelnummer | Eindeutige Artikelnummer |
| Umsatz | Umsatzvolumen in EUR (grüner, fetter Text) |
Jede Zeile ist anklickbar und navigiert direkt zur Artikeldetailseite. Über den Button „Alle anzeigen" kann eine vollständige, paginierte Liste aller Artikel nach Umsatz geöffnet werden.
Karte 3: Top Länder nach Umsatz (links unten)¶
Zeigt eine tabellarische Übersicht der umsatzstärksten Länder:
| Spalte | Beschreibung |
|---|---|
| Flagge + Ländername | Länderflagge als Bild und lokalisierter Ländername |
| Bestellungen | Anzahl der Bestellungen (oranges Warenkorb-Icon) |
| Umsatz | Umsatzvolumen in EUR (lila Euro-Icon) |
Die Zahlen werden im deutschen Format dargestellt (Punkt als Tausendertrenner, Komma als Dezimaltrenner). Die Liste ist scrollbar, falls mehr als 10 Länder vorhanden sind.
Karte 4: Top 5 Kunden (rechts unten)¶
Analog zur Top-5-Artikel-Karte, aber für Kunden:
| Spalte | Beschreibung |
|---|---|
| Rang | Platzierung 1–5 |
| Firmenname | Name des Kundenunternehmens |
| Kundennummer | Eindeutige Kundennummer |
| Umsatz | Umsatzvolumen in EUR (grüner, fetter Text) |
Jede Zeile ist anklickbar und navigiert direkt zur Kundendetailseite. „Alle anzeigen" öffnet die vollständige Kundenliste nach Umsatz.
Statistik-Berechnung und Caching¶
Die Statistiken werden über Cloud Functions berechnet und serverseitig gecacht, um die Ladezeit zu minimieren:
- „Heute" und „Diese Woche": Über den Aktualisieren-Button wird eine Live-Neuberechnung direkt als Cloud Function angestoßen. Die Ergebnisse werden sofort angezeigt.
- Alle anderen Zeiträume: Werden aus dem Firebase-Cache geladen, der regelmäßig über geplante Jobs (siehe Kapitel 11) aktualisiert wird.
- Automatische Erkennung: Das System prüft beim Zeitraumwechsel automatisch, ob neue Bestellungen eingegangen sind. Falls ja, wird eine Snackbar-Benachrichtigung eingeblendet: „Neue Bestellungen vorhanden – jetzt aktualisieren!"
Die Statistik-Berechnung ist hochoptimiert: - Feld-Selektion: Nur benötigte Felder werden geladen (~70 % Kostenreduktion) - Smart Caching: Abgeschlossene Zeiträume (z. B. „Letztes Jahr") werden übersprungen (~80 % Arbeitsersparnis) - Inkrementelle Updates: Nur Kunden mit neuen Bestellungen werden neu berechnet
Statistik-Drilldown¶
Jede Statistik-Karte bietet über den „Alle anzeigen"-Button einen Drilldown-Dialog mit paginierter Detailansicht:
- Vollständige Liste: Zeigt nicht nur die Top-5, sondern alle Datensätze nach Umsatz sortiert
- Such- und Filterfunktion: Suche nach Name, Nummer oder Kategorie
- Paginierung: Seitenweise Navigation durch große Datenmengen
- Navigation: Klick auf einen Eintrag navigiert direkt zur Kunden- oder Artikeldetailseite
4. Kunden¶
Die Kundenverwaltung ist der zentrale Bereich für alle kundenbezogenen Informationen und Aktionen.
Kundenübersicht¶
- Suche: Volltextsuche nach Firmenname, Kundennummer oder weiteren Feldern (N-Gram-basiert für schnelle Ergebnisse)
- Filter: Filterung nach Kundenkategorie über Dropdown
- Sortierung: Sortierbare Spalten in der Tabellenansicht
- Kundenliste: Tabellarische Ansicht mit Firmenname, Kundennummer, Kategorie und Status
Kunden erstellen (Editor)¶
Über den „Neuer Kunde"-Button öffnet sich der Kunden-Editor als Ganzseitenansicht mit folgenden Formularabschnitten:
Allgemeine Daten¶
| Feld | Beschreibung | Pflicht |
|---|---|---|
| Firmenname | Name des Kundenunternehmens | ✅ |
| Kundennummer | Eindeutige Kennung (wird gegen Validierungsregeln geprüft, siehe Kapitel 11.1) | ✅ |
| Kategorie | Kundenkategorie (Dropdown) | ❌ |
| Sprache | Bevorzugte Sprache | ✅ |
| Land | Zugehöriges Land | ✅ |
Kontaktdaten¶
| Feld | Beschreibung |
|---|---|
| E-Mail-Adresse | |
| Telefon | Festnetznummer |
| Mobil | Mobilnummer |
| Fax | Faxnummer |
| Website | Firmen-Website (URL) |
Adressdaten¶
| Feld | Beschreibung |
|---|---|
| Straße | Straße und Hausnummer |
| PLZ | Postleitzahl |
| Ort | Stadt |
| Land | Land (Dropdown) |
Liefertage¶
- Auswahl der Wochentage, an denen der Kunde beliefert wird
- Standard: Systemweite Liefertage werden vorausgewählt
Erweiterte Einstellungen¶
| Feld | Beschreibung |
|---|---|
| Mindestbestellmenge | Minimale Bestellmenge pro Auftrag |
| Mindestbestellwert | Minimaler Bestellwert in EUR |
| Preisanzeige im Shop | Ob Preise im Shop sichtbar sind |
| Benachrichtigungsgruppen | Zuordnung zu Benachrichtigungsgruppen |
| Kundenlisten | Zuordnung zu Kundenlisten |
Nach dem Speichern wird der Kunde in Firestore angelegt und die automatische Artikelzuweisung basierend auf Kategorien ausgelöst (Trigger: onCustomerCreated).
Kundensperre¶
Kunden können über den Sperren-Button (🔒) in der Kundendetailseite gesperrt werden:
| Zustand | Beschreibung |
|---|---|
| Entsperrt | Normaler Betrieb – Kunde kann Bestellungen aufgeben |
| Gesperrt | Kunde kann sich nicht im Shop anmelden und keine Bestellungen aufgeben |
Beim Sperren wird ein Bestätigungsdialog angezeigt. Der Sperr-Status wird in den Kundenstammdaten gespeichert und über die JWT-Claims an die Shop-Apps propagiert.
Jahreskalender-Ansicht¶
Im Kunden-Stammdaten-Tab kann über einen Button die Jahreskalender-Ansicht (YearDaysOverviewWidget) aufgerufen werden. Diese zeigt eine kompakte Jahresübersicht aller Liefertage:
- Grüne Tage: Reguläre Liefertage
- Rote Tage: Lieferpausen des Kunden
- Graue Tage: Feiertage und Betriebsferien
- Wochenenden: Abgedunkelt dargestellt
- Hilft bei der visuellen Planung von Lieferpausen und Betriebsferien
Kundenspezifische Liefermuster¶
Neben der einfachen Wochentag-Auswahl können für Kunden auch benutzerdefinierte Liefermuster konfiguriert werden:
| Lieferzyklus | Beschreibung | Beispiel |
|---|---|---|
| Täglich | Lieferung an jedem Werktag | Mo–Fr |
| Wöchentlich | Lieferung an festen Wochentagen | Jeden Di und Do |
| 14-tägig | Lieferung alle zwei Wochen | Alle 2 Wochen Mittwoch |
| Monatlich | Lieferung an einem festen Tag im Monat | Am 1. und 15. jeden Monats |
| Benutzerdefiniert | Individuelles Muster über CustomPatternEditorDialog |
Freie Konfiguration |
Das System berechnet anhand des Liefermusters und der globalen Liefertage-Einstellungen automatisch den nächsten Liefertermin.
Kundendetailseite (9 Tabs)¶
Tab 1: Stammdaten¶
Die Stammdaten-Seite ist in mehrere Blöcke unterteilt, die jeweils über einen Bearbeitungs-Button einzeln editiert werden können.
4-Wochen-Lieferkalender¶
Am oberen Rand wird ein horizontaler 4-Wochen-Kalender angezeigt, der die Liefertage des Kunden visuell darstellt: - Liefertage sind farblich hervorgehoben - Lieferpausen und Feiertage werden markiert - Der Kalender ist anklickbar und kann erweitert werden - Daten werden aus dem Lieferpausen-System geladen
Einstellungen-Block¶
Über den Bearbeiten-Button (✏️) öffnet sich der Kunden-Einstellungen-Dialog:
| Feld | Beschreibung |
|---|---|
| Firmenname | Name des Unternehmens |
| Kundennummer | Eindeutige Kennung (wird bei der Registrierung und im Shop verwendet) |
| Kategorie | Kundenkategorie (farblich markiert, über Dropdown wählbar) |
| Sprache | Bevorzugte Sprache des Kunden (bestimmt die Sprache der Shop-Oberfläche) |
| Land | Zugehöriges Land (beeinflusst Artikelverfügbarkeit und Lieferbedingungen) |
| Mindestbestellmenge | Minimale Bestellmenge pro Auftrag (wird im Shop erzwungen) |
| Mindestbestellwert | Minimaler Bestellwert in EUR (wird im Shop erzwungen) |
| Preisanzeige | Ob Preise im Shop angezeigt werden (Ein/Aus) |
| Telefonliste | Ob der Kunde auf der Telefonliste erscheint (Ein/Aus) |
| Kein Bedarf bis | Datum, bis zu dem der Kunde nicht bestellt – der Kunde wird im angegebenen Zeitraum als „inaktiv" markiert |
| Profilbild | Upload eines Kunden-Logos oder -Fotos |
| Gesperrt | Ob der Kunde gesperrt ist (keine Bestellungen möglich) |
| Benutzerdefinierte Felder | Konfigurierbare Zusatzfelder je nach Client-Konfiguration |
Kontakt-Block¶
Über den Bearbeiten-Button öffnet sich der Kunden-Kontakt-Dialog:
| Feld | Beschreibung |
|---|---|
| E-Mail-Adresse des Ansprechpartners | |
| Telefon | Festnetznummer |
| Mobil | Mobilnummer |
| Fax | Faxnummer (falls vorhanden) |
| Website | Firmen-Website (URL) |
Adress-Block¶
Über den Bearbeiten-Button öffnet sich der Kunden-Adress-Dialog:
| Feld | Beschreibung |
|---|---|
| Straße | Straße und Hausnummer |
| PLZ | Postleitzahl |
| Ort | Stadt |
| Land | Land (Dropdown-Auswahl) |
Die hier eingegebene Adresse dient als Rechnungsadresse und als Standard-Lieferadresse, sofern keine separate Lieferadresse hinterlegt ist.
Liefertage-Block¶
Über den Bearbeiten-Button öffnet sich der Liefertage-Dialog: - Auswahl, an welchen Wochentagen der Kunde beliefert werden kann - Individuelle Abweichung von den systemweiten Liefertagen möglich
Tab 2: Artikel¶
Zeigt alle dem Kunden zugewiesenen Artikel an. Die Zuordnung erfolgt über die Artikelzuweisung (siehe Artikeldetail, Tab 4).
Suche & Filter¶
- Volltextsuche: N-Gram-basierte Suche nach Artikelname und -nummer (min. 3 Zeichen)
- Kategoriefilter: Dropdown-Auswahl einer Artikelkategorie zur Einschränkung der Ergebnisse
- Kombination: Suche und Kategorie können gleichzeitig verwendet werden
Pagination¶
- Lazy Loading: Artikel werden in Blöcken von 30 Stück nachgeladen
- Unendliches Scrollen: Beim Erreichen des Listenendes werden automatisch weitere Artikel geladen
- Lade-Indikator: Spinner am Ende der Liste zeigt laufendes Nachladen an
Artikelkarten-Anzeige¶
Jeder Artikel wird als Karte dargestellt mit:
| Element | Beschreibung |
|---|---|
| Artikelbild | Vorschaubild (erstes Bild aus der Bildergalerie) oder Platzhalter-Icon |
| Artikelname | Hauptbezeichnung des Artikels |
| Artikelnummer | Eindeutige Kennung |
| Preis | Standardpreis der Standard-Variante (falls Preisanzeige aktiviert) |
| Kategorie-Badge | Farbiger Chip mit Kategoriename |
Klick auf eine Artikelkarte navigiert direkt zur Artikeldetailseite.
Tab 3: Benutzer¶
Tabellarische Übersicht aller Benutzerkonten, die dem Kunden zugeordnet sind.
Tabellenspalten¶
| Spalte | Beschreibung |
|---|---|
| E-Mail-Adresse des Benutzers (aus Firebase Authentication) | |
| Sprache | Bevorzugte Sprache des Benutzers (z. B. DE, EN) |
| Benutzertyp | Benutzer oder Administrator – Administratoren können weitere Benutzer verwalten |
| Registrierungsstatus | Ausstehend (🟠), Genehmigt (🟢) oder Abgelehnt (🔴) – mit farbigem Badge |
| AGB akzeptiert | Ob und welche AGB-Version der Benutzer akzeptiert hat |
| Statusdatum | Datum der letzten Statusänderung (z. B. Genehmigungsdatum) |
Aktionen pro Benutzer¶
| Aktion | Beschreibung |
|---|---|
| ✅ Genehmigen | Setzt den Status auf „Genehmigt" – Benutzer erhält Zugang zum Shop. JWT-Claims werden automatisch aktualisiert. |
| ❌ Ablehnen | Setzt den Status auf „Abgelehnt" – Zugang wird verweigert |
| ✏️ Bearbeiten | Öffnet Dialog zur Bearbeitung von Name, Sprache und Benutzertyp |
| 🗑️ Löschen | Entfernt den Benutzer vollständig (Firebase Auth + Firestore). Bestätigungsdialog erforderlich. |
Hinweis: Der erste Benutzer, der sich für einen Kunden registriert, wird automatisch zum Administrator dieses Kunden. Weitere Benutzer erhalten standardmäßig den Typ „Benutzer".
Tab 4: Bestellungen¶
Paginierte Tabelle aller Bestellungen dieses Kunden.
Tabellenspalten¶
| Spalte | Beschreibung |
|---|---|
| Bestellnummer | z. B. „ORD-2025-001" – klickbar, öffnet die Bestelldetailseite |
| Betrag | Gesamtbetrag der Bestellung in der hinterlegten Währung |
| Status | Farbkodiertes Badge: Ausstehend (🟠), Bestätigt (🔵), In Bearbeitung (🔵), Versendet (🟢), Geliefert (🟢 dunkel), Storniert (🔴) |
| Bestelldatum | Formatiert als „dd.MM.yyyy HH:mm" |
Sortierung & Navigation¶
- Sortierbar nach jeder Spalte (Klick auf Spaltenüberschrift)
- Standard-Sortierung: Neueste Bestellungen zuerst
- Direkter Klick auf eine Bestellzeile öffnet die Bestelldetailseite
- Server-seitige Paginierung mit „Mehr laden"-Button
Tab 5: Statistiken¶
Kundenspezifische Umsatz- und Bestellstatistiken mit interaktiven Diagrammen.
KPI-Karten (4 Karten)¶
| KPI | Format | Beispiel |
|---|---|---|
| Gesamtbestellungen | Anzahl | „42 Bestellungen" |
| Gesamtumsatz | Währung | „€ 12.345,67" |
| Durchschnittlicher Bestellwert | Währung | „€ 294,20" |
| Bestellte Artikel (Unique) | Anzahl | „18 Artikel" |
Umsatzdiagramm¶
Ein Linien-/Balkendiagramm zeigt den Umsatzverlauf über die gewählte Zeitperiode:
| Zeitraum | Granularität |
|---|---|
| Heute | Stündlich (0–23 Uhr) |
| Gestern | Stündlich (0–23 Uhr) |
| Letzte 7 Tage | Täglich |
| Letzte 30 Tage | Täglich |
| Dieser Monat | Täglich |
| Letzter Monat | Täglich |
| Dieses Jahr | Wöchentlich |
| Letztes Jahr | Wöchentlich |
- X-Achse: Zeitperiode
- Y-Achse: Umsatz in EUR
Top-Artikel-Karte¶
Zeigt die Top 5 der meistbestellten Artikel dieses Kunden:
| Spalte | Beschreibung |
|---|---|
| Artikelnummer | Eindeutige Kennung |
| Artikelname | Bezeichnung |
| Menge | Gesamtmenge aller Bestellungen |
| Umsatz | Gesamtumsatz für diesen Artikel |
Klick auf einen Artikel navigiert zur Artikeldetailseite.
Datenladung¶
- Statistiken werden aus Firebase-Cache geladen (vorberechnet)
- Aktualisierungsbutton (↻) oben rechts zum Neuladen
- Leerer Zustand: Zeigt Nullwerte, wenn keine Bestelldaten vorhanden
Tab 6: Feed¶
Der Feed ist ein leistungsfähiges Kommunikationswerkzeug, über das Inhalte direkt an den Kunden gesendet werden können. Der Feed unterstützt vier verschiedene Eintragstypen und bietet einen vollständigen Editor.
Eintragstypen¶
| Typ | Darstellung | Beschreibung |
|---|---|---|
| Push-Benachrichtigung | iOS-Benachrichtigungs-Banner-Stil | Kurze Nachricht, die als Push-Notification auf dem Gerät des Kunden erscheint |
| In-App-Nachricht | Instagram-Post-ähnliches Layout | Rich-Text-Nachricht mit Bildern und Formatierung, sichtbar im Feed der Shop-App |
| Dokument | Dokumentenliste | Anhänge (PDF, Dateien) die dem Kunden zur Verfügung gestellt werden |
| Systemnachricht | Minimalistischer Stil | Automatisch generierte Systemmeldungen (z. B. Statusänderungen) |
Felder pro Feed-Eintrag¶
| Feld | Beschreibung |
|---|---|
| Titel | Überschrift des Eintrags (max. 2 Zeilen, danach ausklappbar) |
| Inhalt | Rich-Text-Body mit Formatierungsunterstützung (Fett, Kursiv, Links) |
| Typ | Einer der 4 Eintragstypen (siehe oben) |
| Status | Zustellstatus: Ausstehend, Gesendet, Zugestellt, Fehlgeschlagen |
| Erstellt am | Zeitstempel (wird als relative Zeit angezeigt, z. B. „vor 5 Minuten") |
| Sprache | Sprache des Inhalts (Deutsch, Englisch usw.) |
| Bilder | Bildkarussell (bis zu 500px Höhe) |
| Dokumente | Angehängte Dateien |
| Zustellinfo | Metadaten zur Zustellung (bei Push- und Systemnachrichten) |
Suche & Filter¶
- Textsuche: Volltextsuche über Titel und Inhalt
- Typfilter: Dropdown zur Einschränkung auf einen Eintragstyp (Push, InApp, Dokument, System)
- Sprachfilter: Dynamisch basierend auf den Sprachen der Kundenbenutzer
- Pagination: 20 Einträge pro Seite mit Nachladen
Feed-Editor (4-Tab-Dialog)¶
Zum Erstellen neuer Feed-Einträge öffnet sich ein Dialog mit 4 Tabs:
Tab 1: Kundenauswahl - Einzelkunden- oder Mehrfachauswahl über Picker-Dialog - Vorselektiert mit dem aktuell geöffneten Kunden
Tab 2: Inhalt - Titel-Feld: Pflichtfeld für die Überschrift - Rich-Text-Editor (Quill): Formatierungsmöglichkeiten für Fett, Kursiv, Unterstrichen, Links, Listen - Sprachauswahl: Inhalte können pro Sprache separat erfasst werden
Tab 3: Dokumente - Datei-Upload per Drag & Drop oder Dateiauswahl - PDF- und andere Dateiformate unterstützt - Upload nach Firebase Storage mit Fortschrittsanzeige
Tab 4: Sendeoptionen - Push/In-App-Toggle: Ob als Push-Benachrichtigung und/oder In-App-Nachricht gesendet wird - Zeitplanung: Sofort senden oder für späteren Zeitpunkt planen
Aktionen auf Feed-Einträgen¶
| Aktion | Beschreibung |
|---|---|
| Aufklappen | Inline-Ansicht des vollständigen Inhalts mit Bildern |
| Zustelldetails | Klick auf Zustell-Badge zeigt detaillierte Zustellprotokolle |
| Bearbeiten | Editor erneut öffnen (nur für Entwürfe) |
| Löschen | Eintrag entfernen (Bestätigungsdialog erforderlich) |
Tab 7: Einkaufslisten¶
Einkaufslisten ermöglichen es Kunden, in der Shop-App Artikelsammlungen zusammenzustellen. Im ERP können Administratoren diese Listen einsehen und verwalten.
Einkaufslisten-Felder¶
| Feld | Beschreibung |
|---|---|
| Titel | Name der Einkaufsliste (Pflichtfeld) |
| Beschreibung | Optionale Notizen zur Liste |
| Kunden-ID | Zugehöriger Kunde |
| Artikelpositionen | Array mit einzelnen Listenpositionen |
Felder pro Listenposition¶
| Feld | Beschreibung |
|---|---|
| Artikelnummer | Referenz auf den Artikel |
| Artikelname | Anzeigename |
| Menge | Gewünschte Bestellmenge |
| Kommentar | Benutzernotiz zur Position (im ERP editierbar) |
| Status | Erledigungsstatus der Position |
Darstellung¶
- Listenansicht mit Einkaufslistennamen als Überschriften
- Pro Liste wird ein Artikel-Zähler-Badge angezeigt
- Leerer Zustand: Hinweismeldung mit Erstellen-Aktion
Aktionen¶
| Aktion | Beschreibung |
|---|---|
| Erstellen | Neue Einkaufsliste über den „+"-Button anlegen |
| Bearbeiten | Titel und Beschreibung im Editor-Dialog ändern |
| Löschen | Liste entfernen (Bestätigungsdialog erforderlich) |
| Positionen hinzufügen | Über Inline-UI oder Artikelpicker |
| Position entfernen | Einzelne Position aus der Liste löschen |
Hinweis: Einkaufslisten werden über Mobile-App UND ERP gleichzeitig verwaltet. Änderungen werden in Echtzeit synchronisiert.
Tab 8: Lieferadressen¶
Verwaltung aller Lieferadressen des Kunden. Jeder Kunde kann mehrere Lieferadressen hinterlegen, die bei der Bestellung im Shop zur Auswahl stehen.
Adressfelder¶
| Feld | Beschreibung |
|---|---|
| Firma | Firmenname an der Lieferadresse (optional) |
| Kurzname | Spitzname für die Adresse (z. B. „Hauptlager", „Filiale Süd") |
| Straße | Straßenname |
| Hausnummer | Hausnummer |
| PLZ | Postleitzahl |
| Ort | Stadt |
| Bundesland | Bundesland/Provinz (optional) |
| Land | Land (Dropdown-Auswahl, erbt den Standard vom Kunden) |
| Standard | Boolean-Flag: Markiert die Adresse als Standard-Lieferadresse |
Darstellung¶
- Jede Adresse wird als Karte dargestellt mit farbigem Akzentstrich (3px, links)
- Vollständigkeits-Indikator: Badge zeigt an, ob alle Pflichtfelder ausgefüllt sind
- Standard-Badge: Die als Standard markierte Adresse erhält ein visuelles Kennzeichen
- Responsives Layout mit kompakten Labels
- Leerer Zustand: Hinweismeldung mit Erstellen-Button
Aktionen¶
| Aktion | Beschreibung |
|---|---|
| Erstellen | Neue Lieferadresse über den „+"-Button anlegen (erfordert Bearbeitungsberechtigung) |
| Bearbeiten | Adressdaten im Editor-Dialog ändern (Stift-Icon pro Karte) |
| Löschen | Adresse entfernen (Papierkorb-Icon pro Karte, erfordert Bearbeitungsberechtigung) |
| Als Standard setzen | „Als Standard markieren"-Button – setzt das isDefault-Flag und entfernt es von der bisherigen Standardadresse |
Tab 9: Einstellungen¶
Kundenspezifische Konfigurationen, unterteilt in zwei aufklappbare Sektionen.
Sektion 1: Benachrichtigungsgruppen¶
Zeigt alle verfügbaren Benachrichtigungsgruppen an, denen der Kunde zugeordnet werden kann:
- Aufklappbare Sektion mit Icon, Titel und Pfeil-Symbol (dreht sich beim Aufklappen)
- Pro Gruppe wird ein Toggle-Schalter angezeigt (Ein/Aus)
- Der Toggle bestimmt, ob der Kunde Benachrichtigungen dieser Gruppe erhält
- Badge-Zähler in der Sektionsüberschrift zeigt die Anzahl aktiver Gruppen
- Änderungen werden sofort in Firebase gespeichert
Beispiel-Gruppen: „Angebote & Aktionen", „Neue Artikel", „Bestellstatus-Updates", „Newsletter"
Sektion 2: Kundenlisten¶
Verwaltung der Kundenlistenzugehörigkeit:
- Aufklappbare Sektion analog zu den Benachrichtigungsgruppen
- Zwei-Spalten-Layout: Verfügbare Listen (links) | Ausgewählte Listen (rechts)
- Checkbox-Toggles für jede Liste
- Pro Liste wird der Listenname und die aktuelle Artikelanzahl angezeigt
- Optimistische UI-Updates: Toggle wird sofort visuell umgeschaltet, Speicherung erfolgt asynchron
- Änderungen werden in Firebase persistiert
Layout beider Sektionen¶
- Icon + Titel + Untertitel pro Sektion
- Trennlinie zwischen den Sektionen
- Scrollbereich für lange Inhalte
Aktionen auf der Kundenseite¶
Tab-Badges¶
Jeder Kunden-Tab zeigt ein Zähler-Badge an, das die Anzahl der Einträge darstellt: - Artikel-Tab: Anzahl zugewiesener Artikel - Benutzer-Tab: Anzahl registrierter Benutzer - Bestellungen-Tab: Anzahl der Bestellungen - Feed-Tab: Anzahl der Feed-Einträge - Einkaufslisten-Tab: Anzahl der Listen - Lieferadressen-Tab: Anzahl der Adressen
Verfügbare Aktionen¶
| Aktion | Beschreibung |
|---|---|
| Bearbeiten | Stammdaten ändern über den Bearbeitungs-Dialog (Stift-Icon in jedem Block) |
| Löschen | Kunde löschen – mit Validierung: Löschung wird verhindert, wenn aktive Bestellungen oder zugeordnete Benutzer existieren. Bestätigungsdialog erforderlich. |
| Telefonliste generieren | Export der Telefonliste als PDF oder Excel |
| Kunde sperren / entsperren | Blockiert den Shop-Zugang des Kunden – gesperrte Kunden können keine Bestellungen aufgeben |
Client-Konfigurationsüberschreibungen¶
Über die Client-Konfiguration (ClientConfig) können bestimmte Tabs für einzelne Mandanten deaktiviert oder umbenannt werden. Tabs, die in der Konfiguration als „deaktiviert" markiert sind, werden in der Kunden-Detailseite nicht angezeigt.
5. Artikel¶
Die Artikelverwaltung ermöglicht die vollständige Pflege des Sortiments.
Artikelübersicht¶
- Suche: Volltextsuche nach Artikelname, Artikelnummer, Beschreibung
- Filter: Filterung nach Artikelkategorien und -gruppen
- Unterseiten: Artikelliste, Artikelgruppen, Kategorien-Verwaltung
Artikeldetailseite (6 Tabs)¶
Tab 1: Stammdaten¶
| Feld | Beschreibung |
|---|---|
| Artikelname | Bezeichnung des Artikels |
| Artikelnummer | Eindeutige Nummer |
| Preis | Standardpreis (wird auf Variantenebene definiert) |
| Mengeneinheit | z. B. Stück, kg, Liter |
| Steuer | Steuersatz |
| EAN-Code | Barcode / GTIN |
| Verfügbarkeit | Aktiviert/Deaktiviert |
| Im Shop anzeigen | Sichtbarkeit im Online-Shop |
| Lagerverfolgung | Ob Bestand verfolgt wird |
| Kategorien | Zugeordnete Artikelkategorien |
| Länderverfügbarkeit | In welchen Ländern verfügbar |
| Benutzerdefinierte Felder | Konfigurierbare Zusatzfelder |
Tab 2: Beschreibungen¶
- Mehrsprachige Beschreibungen (Deutsch, Englisch und weitere)
- Separate Felder pro Sprache
- Badge zeigt die Anzahl der ausgefüllten Sprachen an
- KI-Übersetzung (falls aktiviert): Button zur automatischen Übersetzung der Beschreibung in alle aktiven Sprachen – bestehende Texte werden nicht überschrieben, nur leere Felder befüllt
Tab 3: Artikelvarianten¶
Varianten definieren verschiedene Ausführungen eines Artikels (z. B. Größen, Farben):
| Feld | Beschreibung |
|---|---|
| Variantenname | z. B. „Rot Groß" |
| Variantennummer | Eigene SKU/Nummer |
| Preis | Variantenspezifischer Preis |
| Menge | Menge pro Einheit |
| Verfügbarkeit | Aktiviert/Deaktiviert |
| Im Shop anzeigen | Sichtbarkeit im Shop |
| Bestand | Aktueller Lagerbestand (bei aktiver Lagerverfolgung) |
| Soll-Bestand | Gewünschter Bestandslevel |
| Meldebestand | Mindestbestand, ab dem gewarnt wird |
| Anzeigelimit | Maximale Bestandsanzeige im Shop (für Künstliche Knappheit) |
| Knappheit bis | Ablaufdatum der Knappheitsanzeige |
| Standard-Variante | Markierung als Standardvariante (⭐) |
| Bilder | Variantenspezifische Bilder mit Sortierung |
Varianten können per Drag & Drop sortiert, bearbeitet und gelöscht werden.
Tab 4: Artikelzuweisung¶
Steuerung der Sichtbarkeit eines Artikels für bestimmte Kunden:
- Automatische Zuweisung: Über Kundenkategorien – alle Kunden einer Kategorie sehen den Artikel
- Manuelle Zuweisung: Einzelne Kunden können direkt zugeordnet oder ausgeschlossen werden
- Varianten-Level: Zuweisung kann auf Artikelebene oder pro Variante erfolgen
Tab 5: Bilder¶
- Upload von Artikelbildern (Drag & Drop)
- Sortierung per Drag & Drop (Index-basiert)
- Erstes Bild = Hauptbild in der Artikelliste
- Bildvorschau und Löschen
Tab 6: Dokumente¶
- Anhängen von Dokumenten (PDF, Spezifikationen, Datenblätter)
- Dokumenttypen werden in den Einstellungen definiert
- Such- und Filterfunktion
- Upload und Download
Banner-System¶
Artikel können mit Werbe-Bannern versehen werden:
| Feld | Beschreibung |
|---|---|
| Bannertitel | Mehrsprachiger Titel (z. B. „Sonderangebot") |
| Gültig von / bis | Zeitraum, in dem das Banner angezeigt wird |
| Hintergrundfarbe | Individuelle Farbe des Banners |
| Schriftfarbe | Farbe des Bannertexts |
Banner werden automatisch über einen Job aktiviert/deaktiviert (siehe Job: Dokumenten-Gültigkeit prüfen).
Artikel-Aktionen¶
- Duplizieren: Erstellt eine Kopie des Artikels mit nächster freier Artikelnummer
- Löschen: Mit Validierung – Artikel, die in aktiven Bestellungen referenziert werden, können nicht gelöscht werden
6. Bestellungen¶
Die Bestellverwaltung bietet eine vollständige Übersicht und Steuerung aller eingehenden Bestellungen. Bestellungen können sowohl von Kunden über die Shop-App aufgegeben als auch direkt im ERP manuell erstellt werden.
Bestellung erstellen / bearbeiten (Editor)¶
Über den „Neue Bestellung"-Button oder das Bearbeitungs-Icon einer bestehenden Bestellung öffnet sich der Bestell-Editor-Dialog:
Schritt 1: Kundenauswahl¶
| Element | Beschreibung |
|---|---|
| Kundensuche | Suche nach Kundenname oder -nummer |
| Kundenkarte | Zeigt den ausgewählten Kunden mit Name, Nummer und Kategorie |
| Lieferadresse | Dropdown-Auswahl der hinterlegten Lieferadressen des Kunden |
Schritt 2: Artikelauswahl¶
| Element | Beschreibung |
|---|---|
| Artikelsuche | Volltextsuche über alle dem Kunden zugewiesenen Artikel |
| Variantenauswahl | Dialog zur Auswahl der gewünschten Variante (mit Bild, Preis, Verfügbarkeit) |
| Mengensteuerung | Increment/Decrement-Buttons sowie direktes Eingabefeld |
| Positionsliste | Live-Übersicht aller hinzugefügten Positionen mit Einzelpreis und Summe |
Schritt 3: Bestelldetails¶
| Feld | Beschreibung |
|---|---|
| Lieferdatum | Datumspicker – berechnet automatisch den nächsten verfügbaren Liefertag |
| Bestellnotizen | Freitext-Kommentarfeld |
| Rabatt | Optionaler Rabatt in % oder absolut |
Schritt 4: Bestätigung¶
- Zusammenfassung aller Positionen mit Preisberechnung
- Gesamtbetrag wird angezeigt
- „Bestellung aufgeben"-Button erstellt die Bestellung in Firestore
Hinweis: Bei der ERP-seitigen Bestellerstellung gelten dieselben Server-seitigen Validierungen wie bei Shop-Bestellungen (Preisvalidierung, Verfügbarkeitsprüfung, Mindestbestellwert).
Bestellübersicht¶
Die Bestellübersicht zeigt alle Bestellungen in einer paginierten Tabelle.
Tabellenspalten¶
| Spalte | Beschreibung |
|---|---|
| ☐ Auswahl | Checkbox für Massenaktionen (links) |
| Bestellnummer | z. B. „ORD-2025-001" – klickbar, öffnet die Detailseite |
| Kunde | Kundenname + Kundennummer |
| Betrag | Gesamtbestellwert in Währung |
| Status | Farbkodiertes Status-Badge |
| Bestelldatum | Formatiert als „dd.MM.yyyy HH:mm" |
| Aktionen | Icon-Buttons: Anzeigen, Bearbeiten, Löschen |
Suche¶
Die Suche unterstützt drei Suchfelder mit einheitlichen Validierungsregeln:
| Suchfeld | Beschreibung |
|---|---|
| Kundennummer | Prefix-basierte Suche, min. 3 / max. 7 Zeichen (automatisch abgeschnitten) |
| Kundenname | Partielle Namenssuche, min. 3 / max. 7 Zeichen |
| Bestellnummer | Prefix-basierte Suche, min. 3 / max. 7 Zeichen |
Hinweis: Bei weniger als 3 eingegebenen Zeichen wird keine serverseitige Suche ausgelöst, um die Datenbankbelastung gering zu halten.
Dynamische Filter¶
| Filter | Beschreibung |
|---|---|
| Status | Dropdown: Ausstehend, Bestätigt, In Bearbeitung, Versendet, Geliefert, Storniert, Abgelehnt |
| Zeitraum | Datumsbereichs-Auswahl (von–bis) |
| Betrag | Betragsbereichs-Filter |
Massenaktionen¶
Über die Checkboxen links können mehrere Bestellungen ausgewählt werden:
| Massenaktion | Beschreibung |
|---|---|
| PDF-Export | Alle ausgewählten Bestellungen als einzelne PDFs oder Sammel-PDF exportieren |
| Excel-Export | Alle ausgewählten Bestellungen in eine Excel-Datei exportieren |
| Massenstatus-Änderung | Status aller ausgewählten Bestellungen gleichzeitig ändern |
| Massenlöschung | Alle ausgewählten Bestellungen löschen (Bestätigungsdialog) |
Aktionen pro Zeile¶
| Aktion | Beschreibung |
|---|---|
| 👁️ Anzeigen | Öffnet Seitenpanel mit vollständigen Bestelldetails |
| ✏️ Bearbeiten | Öffnet den Bestellungs-Editor-Dialog |
| 📋 Duplizieren | Erstellt eine Kopie der Bestellung |
| 🗑️ Löschen | Einzelne Bestellung löschen (Bestätigungsdialog) |
Pagination¶
- Server-seitige Paginierung: 100 Einträge pro Seite
- „Mehr laden"-Button am Ende der Liste
- Filter und Suchbegriffe bleiben beim Nachladen erhalten
Bestellstatus-Workflow¶
Jede Bestellung durchläuft folgende Status:
Ausstehend (0) → Bestätigt (1) → In Bearbeitung (2) → Versendet (3) → Geliefert (4)
↓
Storniert (5)
Server-Ablehnung: Abgelehnt (6)
| Status | Farbe | Beschreibung |
|---|---|---|
| Ausstehend | Orange | Bestellung eingegangen, noch nicht bestätigt |
| Bestätigt | Grün | Bestellung bestätigt – Bestand wird reduziert, Export-Queue wird aktiv |
| In Bearbeitung | Blau | Bestellung wird kommissioniert/produziert |
| Versendet | Lila | Bestellung ist auf dem Versandweg |
| Geliefert | Grün (dunkel) | Bestellung wurde zugestellt |
| Storniert | Rot | Bestellung wurde storniert – Bestand wird wiederhergestellt |
| Abgelehnt | Rot (dunkel) | Server hat die Bestellung abgelehnt (z. B. Preismanipulation) |
Automatische Aktionen bei Statuswechsel¶
| Statuswechsel | Automatische Aktion |
|---|---|
| → Bestätigt | Lagerbestand wird um Bestellmenge reduziert; Bestellhistorie-Eintrag wird erstellt; Bestellung wird in die Export-Queue eingereiht |
| → Storniert (wenn vorher bestätigt) | Lagerbestand wird wiederhergestellt; Export-Queue-Eintrag wird entfernt; Bestandshistorie wird aktualisiert |
| → Storniert (wenn ausstehend) | Keine Auswirkung auf den Bestand |
Bestelldetailseite¶
Die Detailseite einer Bestellung ist in 8 klar getrennte Bereiche unterteilt:
1. Export-Sync-Banner¶
Wenn ein Connector für den Bestell-Export konfiguriert ist, wird oben ein Sync-Status-Banner angezeigt: - Zeigt den aktuellen Synchronisierungsstatus mit dem externen System - Farbkodiert je nach Status (Grün = Synchronisiert, Orange = Ausstehend, Rot = Fehlgeschlagen) - Letzte Sync-Zeitstempel wird angezeigt - Bei Fehlern: Fehlermeldung und „Erneut versuchen"-Option
2. Kopfbereich¶
| Element | Beschreibung |
|---|---|
| Bestellnummer | Groß und fett mit „#"-Prefix (z. B. „#12345") |
| Status-Badge | Farbiger Punkt + lokalisierter Statustext |
| Berechnetes Lieferdatum | Automatisch berechnet aus Bestelldatum + Liefertage-Konfiguration |
| Tatsächliches Lieferdatum | Manuell gesetzt, wenn die Bestellung als „Versendet" markiert wird |
| Bestelldatum | Vollständige Datums- und Zeitangabe |
| Kundeninformation | Kundenname und -nummer (klickbar → navigiert zum Kunden) |
3. Bestelldetails¶
| Feld | Beschreibung |
|---|---|
| Bestell-ID | Interne Firestore-Dokument-ID |
| Rabatt | Rabattanteil in % und absoluter Betrag |
| Versandkosten | Falls konfiguriert |
| Bestellnotizen | Freitext-Kommentar des Kunden (großes Textfeld) |
4. Positionsliste¶
Tabelle aller Bestellpositionen mit folgenden Spalten:
| Spalte | Beschreibung |
|---|---|
| Artikelnummer | SKU/Variantennummer |
| Artikelname | Bezeichnung inkl. Varianteninformation (z. B. „Shirt – Rot, Größe L") |
| Einzelpreis | Preis pro Einheit in Währung |
| Menge | Bestellmenge mit Einheit (z. B. „5 Stück", „2,5 kg") |
| Positionssumme | Einzelpreis × Menge |
5. Lieferadresse¶
| Feld | Beschreibung |
|---|---|
| Ansprechpartner | Name der Kontaktperson |
| Telefon | Telefonnummer für Rückfragen |
| Straße + Hausnummer | Vollständige Straßenadresse |
| PLZ / Ort | Postleitzahl und Stadt |
| Land | Lieferland |
| Lieferhinweise | Zusätzliche Anweisungen (z. B. „Hintereingang benutzen") |
6. Bestellsumme¶
| Position | Beschreibung |
|---|---|
| Zwischensumme | Summe aller Positionsbeträge |
| Rabatt | Abzug (falls Rabatt konfiguriert) |
| Versandkosten | Aufschlag (falls konfiguriert) |
| Steuer | Berechneter Steuerbetrag |
| Gesamtbetrag | Fett hervorgehoben – Endsumme inkl. aller Zu- und Abzüge |
7. Bestellzeitlinie¶
Chronologische Darstellung aller Statusänderungen der Bestellung: - Zeitstempel pro Änderung - Alter und neuer Status - Benutzer, der die Änderung durchgeführt hat (oder „System" bei automatischen Änderungen)
8. Aktions-Buttons¶
| Aktion | Beschreibung |
|---|---|
| 📄 PDF-Export | Generiert ein druckbares Bestelldokument |
| 📋 Duplizieren | Erstellt eine Kopie der Bestellung als neue Bestellung |
| ✏️ Bearbeiten | Öffnet den Bestellungs-Editor-Dialog |
| 🗑️ Löschen | Bestellung löschen (Bestätigungsdialog erforderlich) |
| 📦 Status ändern | Dropdown zum Wechsel des Bestellstatus (gemäß erlaubtem Workflow) |
| 🚚 Als versendet markieren | Setzt Status auf „Versendet" + setzt das tatsächliche Lieferdatum |
Export-Synchronisierung¶
Wenn ein Connector für den Bestell-Export konfiguriert ist, durchläuft jede bestätigte Bestellung folgenden Prozess:
| Sync-Status | Beschreibung |
|---|---|
| Wartezeit | Storno-Frist läuft (Standard: 15 Min.) |
| Ausstehend | In der Export-Queue, bereit zum Senden |
| Synchronisiert | Erfolgreich exportiert, gesperrt |
| Fehlgeschlagen | Export fehlgeschlagen, Wiederholung geplant |
| Dead Letter | Alle Wiederholungsversuche erschöpft, manuelle Intervention nötig |
| Vor Export storniert | Storniert bevor der Export abgeschlossen wurde |
Server-seitige Preisvalidierung¶
Zur Sicherheit werden alle Preise beim Erstellen einer Bestellung serverseitig neu berechnet. Das System verhindert Preismanipulationen vom Client. Sollte eine Abweichung erkannt werden, wird die Bestellung mit Status „Abgelehnt" verworfen.
7. Registrierung & Benutzerverwaltung¶
Das Registrierungssystem ermöglicht es Kunden, sich für den Online-Shop anzumelden, wobei der Zugang erst nach Freigabe durch einen ERP-Administrator gewährt wird.
Registrierungsprozess¶
Schritt 1: Kundenregistrierung (Shop-App)¶
- Neuer Benutzer füllt das Registrierungsformular aus:
- Kundennummer (Pflichtfeld – wird gegen die Kundenstammdaten validiert)
- Vorname
- Nachname
- Sprache
-
E-Mail (aus Firebase-Authentifizierung)
-
Das System erstellt einen Benutzerantrag mit Status „Ausstehend"
- Der Benutzer sieht eine Warteseite mit pulsierender Animation
Schritt 2: Freigabe im ERP¶
Auf der Registrierungsseite sehen Administratoren alle ausstehenden Benutzeranträge:
| Aktion | Beschreibung |
|---|---|
| ✅ Genehmigen | Benutzer erhält Zugang zum Kunden-Bereich des Shops |
| ❌ Ablehnen | Zugang wird verweigert |
| ✏️ Bearbeiten | Name, Sprache oder Benutzertyp ändern |
| 🗑️ Löschen | Antrag vollständig entfernen |
| 📧 Einladung erneut senden | Benachrichtigungs-E-Mail erneut versenden |
Schritt 3: Automatische Rechte-Synchronisierung¶
Nach der Genehmigung werden automatisch die JWT-Claims (Zugriffsrechte) des Benutzers aktualisiert:
- customerIds: Zugeordnete Kunden-IDs
- adminCustomerIds: Kunden, für die der Benutzer Administratorrechte hat
Benutzertypen¶
| Typ | Rechte |
|---|---|
| Benutzer | Kann Bestellungen aufgeben und den eigenen Kunden-Bereich einsehen |
| Administrator | Wie Benutzer, kann zusätzlich Benutzer verwalten und Einstellungen ändern |
Hinweis: Der erste Benutzer, der sich für einen Kunden registriert, wird automatisch zum Administrator dieses Kunden.
AGB-Zustimmung¶
- Das System verfolgt die AGB-Zustimmung pro Benutzer und Version
- Bei einer neuen AGB-Version müssen Benutzer erneut zustimmen
- Im ERP ist ersichtlich, welcher Benutzer welche Version akzeptiert hat
Statusübersicht¶
| Status | Badge | Beschreibung |
|---|---|---|
| Ausstehend | 🟠 Orange | Wartet auf Genehmigung |
| Genehmigt | 🟢 Grün | Zugang gewährt |
| Abgelehnt | 🔴 Rot | Zugang verweigert |
8. Kundenlisten¶
Kundenlisten ermöglichen die Segmentierung von Kunden in benutzerdefinierte Gruppen. Die Kundenlisten-Seite verwendet ein Zwei-Panel-Layout.
Layout¶
Linkes Panel: Navigationsleiste¶
- Suchfeld: Filtert Listen nach Name (Echtzeit-Suche)
- „Neu erstellen"-Button: Öffnet den Erstellen-Dialog
- Vertikale Liste aller Kundenlisten:
- Listenname (fett)
- Artikel-Zähler-Badge (Anzahl der Kunden in der Liste)
- Auswahl-Hervorhebung: Die aktuell ausgewählte Liste wird farblich markiert
- Klick auf eine Liste aktualisiert das rechte Panel
Rechtes Panel: Detailansicht¶
Zeigt den Inhalt der aktuell ausgewählten Kundenliste.
Kopfbereich¶
- Listentitel (groß)
- Bearbeiten-Button (Stift-Icon): Öffnet Dialog zur Bearbeitung von Name und Beschreibung
- Löschen-Button (Papierkorb-Icon): Entfernt die gesamte Liste (Bestätigungsdialog)
Such- und Filterleiste¶
- Suchfeld: „Einträge durchsuchen..." – sucht nach Kundenname, Kundennummer oder Kommentar
- Debounced: 300ms Verzögerung, um die Anzahl der Suchanfragen zu begrenzen
Einträge der Liste¶
Für jeden Kunden in der Liste werden folgende Informationen angezeigt:
| Element | Beschreibung |
|---|---|
| Kundennummer + Name | Klickbar – navigiert zur Kundendetailseite |
| Status-Indikator | Checkbox-Status (erledigt/ausstehend) |
| Kommentarfeld | Freitextfeld, inline editierbar mit Auto-Speicherung |
| Aktions-Buttons | Bearbeiten, Entfernen, Zum Kunden navigieren |
Felder pro Listeneintrag¶
| Feld | Beschreibung |
|---|---|
| Kunden-ID | Referenz auf den Kunden |
| Kundenname | Anzeigename |
| Kundennummer | Referenznummer |
| Kommentar | Benutzernotiz (im ERP inline editierbar) |
| Erledigt | Boolean-Checkbox-Status |
| Status | Position-Status innerhalb der Liste |
Aktionen¶
| Aktion | Beschreibung |
|---|---|
| Liste erstellen | „+"-Button im linken Panel → Modal-Dialog (Name, Beschreibung) |
| Liste bearbeiten | Stift-Icon im rechten Panel → Modal-Dialog |
| Liste löschen | Papierkorb-Icon → Bestätigungsdialog erforderlich |
| Kunden hinzufügen | Kundenpicker-Dialog zur Auswahl einzelner oder mehrerer Kunden |
| Kommentar aktualisieren | Inline-Bearbeitung – wird automatisch gespeichert |
| Eintrag entfernen | Papierkorb-Icon pro Eintrag |
| Zum Kunden navigieren | Klick auf Kundenname öffnet die Kundendetailseite |
| Als erledigt markieren | Checkbox-Toggle pro Eintrag |
Leere Zustände¶
| Zustand | Anzeige |
|---|---|
| Keine Listen vorhanden | „Erstellen Sie Ihre erste Kundenliste" + Erstellen-Button |
| Liste ist leer | „Noch keine Einträge in dieser Liste" + Kunden hinzufügen-Button |
| Keine Suchergebnisse | „Keine Einträge gefunden" |
Synchronisierung¶
- Kundenänderungen werden automatisch in zugehörige Listen übernommen (Trigger:
onCustomerUpdatedSyncToLists) - Wird ein Kunde gelöscht, werden alle Listeneinträge automatisch bereinigt (Trigger:
onCustomerDeleted)
9. Benachrichtigungen¶
Das Benachrichtigungssystem ermöglicht es, Push-Notifications und In-App-Nachrichten an Kundengruppen zu senden.
Benachrichtigungsübersicht¶
Die Übersicht zeigt alle erstellten Benachrichtigungen als Kartenliste.
Darstellung pro Benachrichtigungskarte¶
Jede Karte enthält folgende Elemente:
Kopfbereich: - Icon: Kanalspezifisches Symbol (Glocke für Push, Sprechblase für In-App) - Titel: Benachrichtigungstitel (Pflichtfeld) - Zeitstempel-Badge: Erstellungsdatum
Vorschaubereich: - Nachrichtenvorschau: Erste 100 Zeichen des Nachrichtentexts (mit Auslassungspunkten) - Kanal-Badges: Unterhalb der Nachricht werden aktive Kanäle als farbige Chips angezeigt: - „Push" – wenn Push-Kanal aktiviert - „In-App" – wenn In-App-Kanal aktiviert - „Kein Kanal konfiguriert" – wenn beide deaktiviert sind
Info-Chips: - Sendestatus: „Geplant", „Gesendet" oder „Entwurf" - Status: Aktueller Verarbeitungsstatus - Datums-Badge: Erstellungsdatum
Status-Lebenszyklus¶
| Status | Beschreibung | Verfügbare Aktionen |
|---|---|---|
| Entwurf | Nicht gesendet, editierbar | Bearbeiten, Planen, Senden, Löschen |
| Geplant | Für zukünftigen Zeitpunkt eingeplant | Abbrechen, Löschen |
| Wird gesendet | Zustellung läuft | Nur Ansehen (schreibgeschützt) |
| Gesendet | Erfolgreich versendet | Löschen |
| Fehlgeschlagen | Zustellung fehlgeschlagen | Erneut versuchen, Löschen |
| Abgebrochen | Vom Benutzer abgebrochen | Erneut senden, Löschen |
Aktionen pro Karte¶
| Aktion | Symbol | Bedingung | Beschreibung |
|---|---|---|---|
| Abbrechen | 🟠 (Orange) | Nur bei Status „Geplant" | Zeigt den geplanten Sendezeitpunkt an, Bestätigung erforderlich |
| Löschen | 🔴 (Rot) | Immer verfügbar | Unterschiedliche Bestätigungsmeldung je nach Status (geplant vs. gesendet). Bestätigungsdialog erforderlich. |
Suche & Filter¶
- Textsuche: Nach Titel oder Nachrichteninhalt suchen
- Kanalfilter: Push, In-App oder beide
- Statusfilter: Entwurf, Geplant, Gesendet
- Sortierung: Nach Datum (neueste zuerst)
Leerer Zustand¶
- Icon + Hinweismeldung
- „Erste Benachrichtigung erstellen"-Button als Handlungsaufforderung
Benachrichtigung erstellen (4-Tab-Editor)¶
Tab 1: Kundenauswahl¶
Flexible Empfängerauswahl über Filterregeln:
| Filter | Beschreibung |
|---|---|
| Kundenkategorien | Alle Kunden einer oder mehrerer Kategorien (AND/OR-Verknüpfung) |
| Artikelkategorien | Kunden, die Artikel bestimmter Kategorien bestellt haben |
| Benachrichtigungsgruppen | Vordefinierte Empfängergruppen |
| Zielgruppenmodus | Einschließen oder Ausschließen |
| Manuelle Auswahl | Einzelne Kunden hinzufügen/entfernen |
- Vorschau: Zeigt die Gesamtzahl der Empfänger an, bevor gesendet wird
- Gespeicherte Filter: Häufig verwendete Filtersets speichern und wiederverwenden
- Excel-Export: Empfängerliste als Excel exportieren
Tab 2: Sendeoptionen¶
| Option | Beschreibung |
|---|---|
| Sofort senden | Benachrichtigung wird unmittelbar versendet |
| Planen | Datum und Uhrzeit für den Versand festlegen |
| Wiederkehrend | Regelmäßiger Versand (z. B. wöchentlich) |
Tab 3: Push-Nachricht¶
- Titel: Mehrsprachig (je nach konfigurierten Sprachen)
- Nachrichtentext: Mehrsprachig
- KI-Übersetzung: Optionale automatische Übersetzung über KI
- Zeichenzähler: Anzeige der aktuellen Textlänge
Tab 4: In-App-Nachricht¶
- Rich-Text-Editor: Formatierungsmöglichkeiten über Quill-Editor
- Mehrsprachig: Separate Inhalte pro Sprache
- Bilder & Dokumente: Anhänge mit Ordnerstruktur hochladen
- Anzeigemodus: Popup, Banner oder andere Darstellungsform
Zustellstatus¶
| Status | Beschreibung |
|---|---|
| Zugestellt | Erfolgreich an das Gerät übermittelt |
| Ausstehend | Wird noch verarbeitet |
| Fehlgeschlagen | Zustellung fehlgeschlagen |
| Gelesen | Vom Empfänger geöffnet |
SAM KI (Chatbot-Integration)¶
Das System beinhaltet einen KI-Chatbot-Assistenten namens „SAM KI", der bei der täglichen Arbeit im ERP unterstützt.
Aufruf¶
SAM KI kann auf zwei Wegen gestartet werden: 1. Navigationsleiste: Klick auf den „SAM KI"-Button in der seitlichen Navigation 2. Overlay-Icon: Ein verschiebbares (drag-and-drop) Overlay-Symbol, das dauerhaft auf dem Bildschirm sichtbar ist
Funktionsweise (NLP-Matching)¶
SAM KI verwendet ein Knowledge-Graph-basiertes System mit folgenden Verarbeitungsschritten:
- Synonymersetzung: Ähnliche Formulierungen werden auf kanonische Begriffe reduziert (z. B. „zeig mir" → „wo finde ich")
- Höflichkeitsbereinigung: Höflichkeitsphrasen wie „bitte", „könntest du" werden entfernt
- Fragenkonvertierung: Indirekte Formulierungen werden in direkte Fragen umgewandelt (z. B. „ich möchte wissen wie" → „wie")
- Fuzzy-String-Matching: Abgleich mit gespeicherten Fragen bei einer Ähnlichkeitsschwelle von 75%
- Mehrdeutigkeitsauflösung: Bei Überlappungen werden mehrere Antworten kombiniert
Entitäten (Wissensbereiche)¶
| Entität | Themenbereich |
|---|---|
| customer | Kundenverwaltung – Erstellen, Bearbeiten, Löschen, Import |
| article | Artikelverwaltung – Kategorien, Varianten, Preise |
| order | Bestellverwaltung – Erstellung, Statusverfolgung, Export |
| category | Kategorien – Artikel- und Kundenkategorien |
| stock | Lagerverwaltung – Bestand, Nachbestellung, Warnsystem |
| user | Benutzerverwaltung – Registrierung, Rechte, Genehmigung |
Beispiel-Fragen¶
- „Wie erstelle ich einen neuen Kunden?" → Mehrstufige Anleitung
- „Wie erstelle ich einen Artikel?" → Mehrstufige Anleitung
- „Wie funktioniert die Bestellverwaltung?" → Workflow-Erklärung
- „Wie richte ich die Lagerverwaltung ein?" → Konfigurationsanleitung
- „Wie lade ich Daten per Excel hoch?" → Import-Anleitung
Besondere Funktionen¶
- Schnellvorschläge: Nach der Begrüßung werden vordefinierte, klickbare Vorschläge angezeigt
- Kontext-Awareness: SAM verfolgt den Gesprächsverlauf und bietet kontextbezogene Nachfragen
- „Mehr erfahren"-Button: Vertiefende Informationen zu jedem Thema
- Tipp-Animation: Bot-Antworten werden mit einer Tipp-Animation angezeigt
- Sprachbewusste Begrüßung: Begrüßung auf Deutsch oder Englisch je nach Systemsprache
- Easter Egg: Eingabe von „do a barrel roll!" löst eine Bildschirm-Animation aus 🎉
10. Lagerverwaltung¶
Die Lagerverwaltung ermöglicht die Echtzeitverfolgung von Beständen pro Artikelvariante.
Voraussetzungen¶
Die Lagerverwaltung muss auf zwei Ebenen aktiviert sein:
- Systemweit: In den Lagerverwaltungseinstellungen (
Einstellungen > Lagerverwaltung) - Pro Artikel: Im Artikel-Stammdaten-Tab (Feld „Lagerverfolgung" aktivieren)
Bestandsübersicht¶
Die Lager-Übersichtsseite (erreichbar über die Navigation) zeigt alle Artikel mit aktiver Lagerverfolgung:
- Suche: Nach Artikelname oder -nummer
- Filterung nach Status:
- ⚠️ Warnung: Bestand ≤ Schwellwert des Meldebestands
- 📉 Unter Soll: Bestand unter dem Soll-Bestand
- ❌ Nicht vorrätig: Bestand = 0
- Badge-Zähler: In der Navigation zeigt ein Badge die Anzahl kritischer Bestände an
Bestandsfelder pro Variante¶
| Feld | Beschreibung |
|---|---|
| Bestand | Aktueller Lagerbestand (wird nie negativ) |
| Meldebestand | Bei Unterschreitung wird eine Warnung ausgelöst |
| Soll-Bestand | Gewünschter Bestandslevel für Nachbestellungen |
| Anzeigelimit | Maximale im Shop angezeigte Menge (für künstliche Knappheit) |
| Knappheit bis | Ablaufdatum der Knappheitsanzeige |
Bestandsanpassung¶
Bestandsänderungen erfolgen über einen Dialog:
- Variante auswählen
- Neuen absoluten Bestandswert eingeben
- Grund für die Änderung angeben
| Grund | Beschreibung |
|---|---|
| Bestellung aufgegeben | Automatisch bei Auftragsbestätigung |
| Bestellung storniert | Automatisch bei Stornierung |
| Manuelle Anpassung | Handkorrektur durch Administrator |
| Inventur | Physische Bestandsaufnahme |
| Import | Über Datenimport oder Connector |
| Sonstiges | Freie Texteingabe |
Alle Änderungen werden transaktionssicher durchgeführt – gleichzeitige Änderungen durch mehrere Benutzer sind vor Race-Conditions geschützt.
Bestandshistorie¶
Jede Bestandsänderung wird protokolliert:
- Delta: Signed-Änderung (negativ = Abgang, positiv = Zugang)
- Bestand danach: Bestandsniveau nach der Änderung
- Grund: Kategorie der Änderung
- Referenz: Verknüpfte Bestellung (falls vorhanden)
- Zeitstempel: Wann die Änderung erfolgte
- Geändert von: Benutzer oder System-Funktion
Hinweis: Bestandshistorie-Einträge werden nach 14 Monaten automatisch gelöscht (TTL-basiert).
Künstliche Knappheit¶
Für Marketingzwecke kann die Bestandsanzeige im Shop begrenzt werden:
- Anzeigelimit setzen (z. B. 10): Im Shop wird „Nur noch 10 verfügbar!" angezeigt, auch wenn tatsächlich 50 Stück vorhanden sind
- Knappheit bis setzen: Nach dem Ablaufdatum zeigt der Shop wieder den echten Bestand
Nachbestellungs-Modus (Backorder)¶
Wenn aktiviert:
- Kunden können bestellen, auch wenn der Bestand = 0 ist
- Im Shop wird ein konfigurierbarer Hinweis angezeigt (z. B. „Artikel wird nachbestellt")
- Bestandsanzeige im Shop: min(Anzeigelimit, Bestand) oder der tatsächliche Bestand
Warnsystem¶
| Warnung | Auslöser |
|---|---|
| Kritischer Bestand | Bestand ≤ Meldebestand |
| Prozent-Schwelle | Bestand ≤ X% des Meldebestands (Standard: 80%) |
| Nicht vorrätig | Bestand = 0 |
Warnungen werden als Badge in der Navigation und als visuelle Markierung in der Bestandsübersicht angezeigt.
11. Einstellungen¶
Die Einstellungen sind in über 20 Unterbereiche gegliedert und steuern sämtliche Aspekte des Systems.
11.1 Allgemeine Einstellungen¶
Systemweite Grundkonfiguration des ERP-Systems. Hier werden globale Parameter festgelegt, die das Gesamtverhalten der Anwendung beeinflussen.
Validierungsregel: Kundennummer¶
Eine Regelkarte zur Definition des erlaubten Formats für Kundennummern:
| Feld | Beschreibung |
|---|---|
| Aktiv | Toggle zum Aktivieren/Deaktivieren der Validierung |
| Muster (Regex) | Regulärer Ausdruck zur Formatprüfung |
| Prefix | Pflicht-Prefix (z. B. „CUST") |
| Min. Länge | Mindestlänge der Kundennummer |
| Max. Länge | Maximale Länge der Kundennummer |
| Benutzerdefiniert erlauben | Ob beim Bearbeiten eine Abweichung vom Muster erlaubt ist |
Beispiel-Muster:
- ^[A-Z]{2,3}\d{2,5}$ – 2-3 Großbuchstaben gefolgt von 2-5 Ziffern (z. B. „AB12345")
- ^[A-Z0-9\-]{3,20}$ – Alphanumerisch + Bindestrich, 3-20 Zeichen
Validierungsregel: Artikelnummer¶
Identisch aufgebaut wie die Kundennummer-Validierung, aber für Artikelnummern:
Beispiel-Muster:
- ^\d{4,8}$ – 4-8 Ziffern (z. B. „123456")
- ^[A-Z]{2}\d{4}$ – 2 Buchstaben + 4 Ziffern (z. B. „AB1234")
Regel-Editor-Dialog¶
Beim Bearbeiten einer Validierungsregel öffnet sich ein Dialog mit: - Aktuelles Muster im Regex-Format angezeigt - Live-Validierungsvorschau: „Gültig" / „Ungültig"-Indikator in Echtzeit - Beispiel-Eingabefeld: Testfeld, um Nummern gegen das Muster zu prüfen - Auto-Synchronisierung: Bei Speicherung wird der Counter-Prefix automatisch aktualisiert - Toast-Benachrichtigung: Erfolgs- oder Fehlermeldung nach dem Speichern
11.2 Benutzerverwaltung¶
Verwaltung der ERP-Benutzer (Administratoren und Superadmins):
| Benutzertyp | Beschreibung |
|---|---|
| Administrator | Vollzugriff auf alle ERP-Funktionen |
| Superadmin | Erweiterte Rechte inkl. Systemkonfiguration |
11.3 Artikelkategorien¶
Verwaltung der Artikelkategorien zur Sortimentsstrukturierung:
- Erstellen: Name (mehrsprachig), Farbe (Hex-Code), Icon
- Bearbeiten: Alle Felder sind editierbar
- Sortieren: Reihenfolge der Kategorien per Drag & Drop
- Löschen: Nur wenn keine Artikel mehr zugeordnet sind
- Verwendung: Filter in der Artikelübersicht, Artikelzuweisung, Benachrichtigungsfilter
11.4 Artikeldokumenttypen¶
Definition von Dokumenttypen, die Artikeln zugeordnet werden können:
- z. B. „Datenblatt", „Bedienungsanleitung", „Sicherheitshinweise"
- Name und Beschreibung pro Typ
- Wird beim Artikel-Upload als Kategorisierung verwendet
11.5 Kundenkategorien¶
Analog zu Artikelkategorien, aber für Kunden:
- Erstellen: Name (mehrsprachig), Farbe (Hex-Code), Icon
- Bearbeiten: Alle Felder editierbar
- Verwendung: Kundenfilter, Artikelzuweisung, Benachrichtigungs-Empfängergruppen
11.6 Kundenlisten-Einstellungen¶
Detaillierte Konfiguration der Kundenlisten (Besuchslisten, Aufgabenlisten):
Allgemeine Listeneinstellungen¶
| Feld | Beschreibung |
|---|---|
| Listenname | Name der Kundenliste (Pflichtfeld) |
| Beschreibung | Optionale Beschreibung des Listenzwecks |
| Befüllungsmodus | Wie Kunden in die Liste aufgenommen werden: Manuell, Automatisch (nach Kategorie) oder Gemischt |
| Aktualisierungsmodus | Ob und wie die Liste periodisch aktualisiert wird |
Aktionselemente¶
Pro Kundenliste können benutzerdefinierte Aktionen definiert werden, die bei jedem Listeneintrag verfügbar sind:
| Feld | Beschreibung |
|---|---|
| Aktionsname | z. B. „Rückruf", „Besuch geplant", „Angebot gesendet" |
| Icon | Visuelles Symbol für die Aktion |
| Farbe | Farbkodierung der Aktion |
Statuselemente¶
Benutzerdefinierte Status-Stufen pro Listeneintrag:
| Feld | Beschreibung |
|---|---|
| Statusname | z. B. „Offen", „In Bearbeitung", „Erledigt", „Zurückgestellt" |
| Farbe | Farbkodierung des Status |
| Reihenfolge | Sortierung der Statuswerte (Drag & Drop) |
Erstellen und Bearbeiten¶
Der Kundenlisten-Editor ist als mehrteilige Seite aufgebaut: 1. Allgemein: Name, Beschreibung und Befüllungsmodus 2. Aktionen: Definieren und Sortieren der verfügbaren Aktionen 3. Status: Definieren und Sortieren der Status-Elemente
11.7 Bestelleinstellungen¶
Konfiguration des Bestellverhaltens:
| Einstellung | Beschreibung |
|---|---|
| Standard-Bestellstatus | Initialstatus neuer Bestellungen |
| Storno-Frist | Zeitraum, in dem eine Bestellung storniert werden kann (in Minuten) |
| Mindestbestellwert | Globaler Mindestbestellwert |
| Mindestbestellmenge | Globale Mindestbestellmenge |
| Nummerierung | Auto-Inkrement oder manuell |
| Status-Workflow | Welche Statusübergänge erlaubt sind |
Bestell-Push-Benachrichtigungsvorlage¶
Innerhalb der Bestelleinstellungen kann eine Push-Benachrichtigungsvorlage konfiguriert werden, die automatisch bei Statusänderungen an den Kunden gesendet wird:
| Feld | Beschreibung |
|---|---|
| Aktiviert | Ob automatische Benachrichtigungen bei Statuswechsel gesendet werden |
| Titel | Mehrsprachiger Titel der Benachrichtigung (mit Platzhaltern wie {orderNumber}) |
| Nachricht | Mehrsprachiger Nachrichtentext (mit Platzhaltern wie {status}, {customerName}) |
| KI-Übersetzung | Automatische Übersetzung in alle aktiven Sprachen (falls aktiviert) |
11.8 Bestell-Export-Einstellungen¶
Konfiguration des Exports von Bestellungen:
| Einstellung | Beschreibung |
|---|---|
| Export aktiviert | Ob der automatische Bestell-Export aktiv ist |
| Export-Connector | Auswahl des Connectors, über den Bestellungen exportiert werden |
| PDF-Vorlage | Layout und Inhalt des PDF-Exports |
| Excel-Vorlage | Spaltenauswahl und Format |
| Massenexport | Konfiguration für den Batch-Export mehrerer Bestellungen |
11.9 Lagerverwaltungseinstellungen¶
Globale Lagerkonfiguration:
| Einstellung | Beschreibung |
|---|---|
| Aktiviert/Deaktiviert | Lagerverwaltung ein- oder ausschalten |
| Nachbestellung erlauben | Kunden können bestellen, auch wenn Bestand = 0 |
| Nachbestellungshinweis | Mehrsprachiger Hinweistext (DE, EN usw.) |
| Künstliche Knappheit | Ermöglicht Anzeige-Limits im Shop |
| Bestandswarnung | Warnung bei Unterschreitung des Meldebestands |
| Warnschwelle (%) | Prozentsatz des Meldebestands, ab dem gewarnt wird (Standard: 80%) |
11.10 Liefertagseinstellungen¶
Konfiguration der Liefertage und -ausnahmen:
Reguläre Liefertage¶
- Auswahl der Wochentage (Mo–So), an denen geliefert wird
- Standard: Montag bis Freitag
Feiertage¶
- Individuelle Daten hinzufügen, an denen nicht geliefert wird
- Lokalisierte Datumsanzeige
Betriebsferien¶
- Zeiträume definieren (Von–Bis-Datum)
- Optionale Beschreibung (z. B. „Weihnachtsferien")
Ausnahmetage¶
- Einzelne Tage als Nicht-Liefertage markieren
- Optionale Beschreibung
Die Liefertage fließen in die automatische Berechnung des „Berechneten Lieferdatums" bei Bestellungen ein.
11.11 Connector-Einstellungen¶
Konfiguration von Schnittstellen zu externen Systemen (siehe Kapitel 14: Connectoren).
11.12 Ländereinstellungen¶
- Definition der unterstützten Länder
- Länderspezifische Konfigurationen (Sprache, Währung)
- Zuordnung zu Kunden und Artikeln
11.13 Spracheinstellungen¶
- Aktivierung/Deaktivierung von Sprachen (Deutsch, Englisch und 30+ weitere)
- Bestimmt, welche Sprachen in Beschreibungen, Benachrichtigungen und UI verfügbar sind
11.14 Job-Einstellungen¶
Verwaltung automatisierter Aufgaben (siehe Kapitel 12: Jobs).
11.15 Trigger-Einstellungen¶
Monitoring und Verwaltung automatischer Auslöser (siehe Kapitel 13: Trigger).
11.16 Push-Benachrichtigungseinstellungen¶
- Firebase Cloud Messaging (FCM) Konfiguration
- Standard-Benachrichtigungsvorlagen
- Benachrichtigungsgruppen definieren
11.17 Mobile-App-Theme¶
Anpassung des Erscheinungsbilds der Mobile-App:
| Kategorie | Einstellungen |
|---|---|
| Primärfarbe | Hauptfarbe der App |
| Hintergrundfarbe | Scaffold- und Inhalts-Hintergrund |
| Schriftfarbe | Standard-Textfarbe |
| Navigation | Hintergrund, ausgewählte/nicht ausgewählte Icon-Farben |
| Kategorieleiste | Ausgewählt/nicht ausgewählt Hintergrund und Schriftfarbe |
| Buttons | Hintergrund- und Schriftfarbe |
| Badges | Hintergrund- und Textfarbe |
| Artikelbilder | Hintergrundfarbe für Bildplatzhalter |
| App-Logo | Header-Logo und Login-Logo hochladen |
| Schriftart | Schriftfamilie auswählen (z. B. „Inter") |
Workflow: Änderungen werden als Entwurf gespeichert → Veröffentlichen übernimmt die Änderungen für alle App-Nutzer. „Zurücksetzen" stellt die Standardwerte wieder her.
11.18 Web-App-Theme¶
Anpassung des Erscheinungsbilds der Web-Shop-Oberfläche:
| Kategorie | Einstellungen |
|---|---|
| Primärfarbe | Hauptfarbe des Web-Shops |
| Badges | Hintergrund- und Textfarbe |
| Obere Leiste | Schriftfarbe, Navigationsfarben, aktive Indikatoren, Hover-Effekte |
| Kategorieleiste | Aktiv/inaktiv Hintergrund, Schrift, Hover |
| Inhaltsbereich | Hintergrundfarbe |
| Artikelbilder | Hintergrundfarbe |
| Buttons | Hintergrund- und Schriftfarbe |
| Logos | Login-Header, App-Header, Leerer-Warenkorb-Platzhalter |
| Schriftart | Schriftfamilie auswählen |
11.19 Rechtliche Informationen¶
Verwaltung der rechtlichen Seiten des Shops:
Impressum¶
- Mehrsprachiger Rich-Text-Editor (Quill)
- Vorschaufunktion
Allgemeine Geschäftsbedingungen (AGB)¶
- Mehrsprachiger Rich-Text-Editor
- Automatische Versionierung: Jede Änderung erhöht die Versionsnummer
- Benutzer werden bei neuer Version zur erneuten Zustimmung aufgefordert
- Vorschau mit Versionsanzeige
Datenschutzerklärung¶
- Mehrsprachiger Rich-Text-Editor
- Vorschaufunktion
Hinweis: Wenn kein Inhalt in der Sprache des Benutzers vorhanden ist, wird automatisch die deutsche Version angezeigt (Fallback).
11.20 Datenimport¶
Der Datenimport ermöglicht das Massenimportieren von Daten aus Excel-Dateien.
Import-Assistent (4 Schritte)¶
Schritt 1: Datei hochladen - Drag & Drop oder Dateiauswahl - Format: XLSX (Excel) - Automatische Erkennung des Datentyps - Download einer Vorlage möglich
Schritt 2: Feldzuordnung - Automatische Zuordnung von Spalten zu Systemfeldern (~80% Trefferquote) - Manuelle Nachkorrektur möglich - Automatische Auflösung von Fremdschlüsseln (z. B. Kategorie-Bezeichner → Kategorie-ID)
Schritt 3: Validierung & Vorschau - Überprüfung aller Daten gegen das Schema - Fehler- und Warnungsbericht mit Zeilennummern - Zusammenfassung: Gültige / Warnungen / Fehler
Schritt 4: Ausführung - Batch-Import für Stabilität - Fortschrittsanzeige - Ergebnisbericht (Erfolge / Fehler)
Importierbare Datentypen¶
| Typ | Wichtige Felder |
|---|---|
| Artikelkategorien | Bezeichner, Name (DE/EN), Farbe, Icon |
| Kundenkategorien | Bezeichner, Name (DE/EN), Farbe, Icon |
| Artikel | Nummer, Name, Beschreibung, Verfügbarkeit, Shop-Anzeige, Kategorien (Semikolon-getrennt), Bildbei-URLs, Banner-Daten |
| Kunden | Firmenname, Kundennummer, Kategorie, Sprache, Land, Adresse, Kontaktdaten, Mindestbestellmenge, Benachrichtigungsgruppen |
Import-Modi¶
| Modus | Beschreibung |
|---|---|
| Nur erstellen | Nur neue Datensätze werden importiert, bestehende bleiben unverändert |
| Aktualisieren & erstellen | Bestehende Datensätze werden aktualisiert, neue werden angelegt |
| Alles ersetzen | Alle vorhandenen Datensätze werden gelöscht und durch den Import ersetzt |
11.21 Datenexport¶
Export von Daten im XLSX- oder CSV-Format:
- Artikel: Alle Artikeldaten inkl. Varianten und Kategorien
- Artikelkategorien: Alle Kategorie-Metadaten
- Kunden: Alle Kundendaten inkl. zugeordneter Kategorien
- Kundenkategorien: Alle Kategorie-Metadaten
Funktionen:
- Spaltenauswahl vor dem Export
- Round-Trip-Kompatibilität: Exportierte Dateien können direkt wieder importiert werden
- Mehrsprachige Felder im Format de:Text;en:Text
11.22 Wartung¶
Systemwartung und -optimierung für die administrative Pflege des ERP-Systems. Die Wartungsseite ist ausschließlich für Super-Admins zugänglich – reguläre Administratoren sehen die Seite im Nur-Lese-Modus.
Wartungsaufgaben-Felder¶
Jede Wartungsaufgabe hat folgende Eigenschaften:
| Feld | Beschreibung |
|---|---|
| Titel | Name der Wartungsaufgabe (Pflichtfeld) |
| Beschreibung | Detailbeschreibung der Aufgabe |
| Kategorie | Einordnung in eine der 6 Kategorien (siehe unten) |
| Fälligkeitsdatum | Wann die Aufgabe erledigt/erneuert werden muss |
| Letztes Erneuerungsdatum | Wann die Aufgabe zuletzt durchgeführt wurde |
| Kritikalität | Dringlichkeitsstufe (siehe unten) |
| Zugewiesen an | Verantwortlicher Benutzer |
| Status | Ausstehend, In Bearbeitung, Abgeschlossen |
| Priorität | Niedrig, Mittel, Hoch, Kritisch |
Aufgaben-Kategorien¶
Aufgaben werden nach Kategorie gruppiert und in aufklappbaren Sektionen angezeigt:
| Kategorie | Beschreibung | Beispiele |
|---|---|---|
| Zertifikate | SSL-Zertifikate, API-Schlüssel | SSL erneuern, FCM-Zertifikat prüfen |
| Schlüssel | Verschlüsselungsschlüssel, Tokens | API-Keys rotieren, OAuth-Secrets erneuern |
| Versionen | Software- und Bibliotheksversionen | Flutter-Version prüfen, Node.js-Update |
| Abhängigkeiten | Drittanbieter-Pakete | npm audit, pub outdated prüfen |
| Backups | Datenbank- und Datei-Backups | Firestore-Export, Storage-Backup |
| Patches | Sicherheits- und System-Patches | Sicherheitsupdate einspielen |
Kritikalitätsstufen¶
| Stufe | Farbe | Beschreibung |
|---|---|---|
| Niedrig | Grau | Kann warten, nur informativ |
| Mittel | Gelb | Sollte zeitnah erledigt werden |
| Hoch | Orange | Dringend, beeinträchtigt den Betrieb |
| Kritisch | Rot | Sofortige Maßnahme erforderlich |
Visuelle Indikatoren¶
- Aufgaben sind farbkodiert nach Kritikalität
- Überfällig (Fälligkeitsdatum überschritten) = Roter Hintergrund
- Bald fällig = Oranger Hintergrund
- Gruppenansicht nach Kategorie mit aufklappbaren Sektionen
Verfügbare Aktionen¶
| Aktion | Berechtigung | Beschreibung |
|---|---|---|
| Aufgabe hinzufügen | Super-Admin | Öffnet den Editor-Dialog für eine neue Aufgabe |
| Aufgabe bearbeiten | Super-Admin | Stift-Icon pro Aufgabe – Editor-Dialog öffnet sich |
| Als erneuert markieren | Super-Admin | Setzt das „Letztes Erneuerungsdatum" auf heute |
| Aufgabe löschen | Super-Admin | Entfernt die Aufgabe (Bestätigungsdialog) |
| Standardaufgaben laden | Super-Admin | Befüllt die Liste mit vordefinierten Template-Aufgaben |
12. Jobs (Automatisierte Aufgaben)¶
Jobs sind geplante, automatisch ausgeführte Aufgaben, die das System im Hintergrund erledigt.
Job-Verwaltung¶
Über Einstellungen > Job-Einstellungen können Jobs konfiguriert werden. Ein Assistent (Wizard) führt durch die Einrichtung.
Verfügbare System-Jobs¶
12.1 DSGVO: Inaktive Kunden löschen¶
- Kennung:
dsgvoDeleteCustomers - Zweck: Automatische Löschung von Kunden, die seit X Tagen keine Bestellung aufgegeben haben
- Parameter:
Tage ohne Bestellung(Standard: 365, Bereich: 1–3.650) - Verhalten: Prüft
letztes BestelldatumundErstelldatum– löscht bis zu 500 Datensätze pro Durchlauf
12.2 DSGVO: Inaktive Benutzer löschen¶
- Kennung:
dsgvoDeleteUsers - Zweck: Automatische Löschung von Benutzern, die sich seit X Tagen nicht angemeldet haben
- Parameter:
Tage ohne Login(Standard: 365, Bereich: 1–3.650)
12.3 DSGVO: Alte Bestellungen löschen¶
- Kennung:
dsgvoDeleteOrders - Zweck: Löschung von Bestellungen, die älter als X Tage sind
- Parameter:
Alter in Tagen(Standard: 1.095 = 3 Jahre, Bereich: 365–3.650)
12.4 DSGVO: Alte Benachrichtigungen löschen¶
- Kennung:
dsgvoDeleteNotifications - Zweck: Löschung von Push-Benachrichtigungen, die älter als X Tage sind
- Parameter:
Alter in Tagen(Standard: 90, Bereich: 1–365)
12.5 DSGVO: Ungenutzte Artikel löschen¶
- Kennung:
dsgvoDeleteArticles - Zweck: Löschung von Artikeln, die seit X Tagen nicht bestellt wurden
- Parameter:
Tage ohne Bestellung(Standard: 365)
12.6 Dokumenten-Gültigkeit prüfen¶
- Kennung:
documentValidityCheck - Zweck: Automatisches Aktivieren/Deaktivieren von Dokumenten basierend auf Gültigkeitsdatum
- Verhalten: Prüft
Gültig abundGültig bis– aktiviert oder deaktiviert Dokumente und Banner entsprechend
12.7 Job-Logs bereinigen¶
- Kennung:
cleanupJobLogs - Zweck: Aufbewahrung von Job-Ausführungsprotokollen für X Tage
- Parameter:
Aufbewahrungstage(Standard: 30)
12.8 Benutzerdefinierter Job¶
- Kennung:
custom - Zweck: Individuelle, kundenspezifische Automatisierung
- Handler: Wird als Cloud Function
job_<ID>.jsimplementiert - Parameter: Frei definierbares Schema
Hintergrund-System-Jobs (automatisch)¶
Neben den konfigurierbaren Jobs gibt es System-Jobs, die automatisch im Hintergrund laufen:
Bestellerinnerungen¶
- Kennung:
orderReminderNotifications - Zweck: Erinnert Kunden an bevorstehende Liefertage, für die noch keine Bestellung eingegangen ist
- Verhalten: Das System berechnet den nächsten Liefertag jedes Kunden und prüft, ob eine aktive Bestellung vorliegt
- Vorausschau-Logik: Wenn der Kunde bereits für den nächsten Liefertag bestellt hat, prüft das System zusätzlich, ob darauffolgende Liefertage ggf. übersprungen werden (z. B. durch Feiertage oder Lieferpausen). Falls ja, wird eine Warnung als Feed-Eintrag erstellt, damit der Kunde rechtzeitig vorbestellen kann.
- Erinnerungs-Typ:
order_reminderals Feed-Eintrag mit Push-Benachrichtigung - Timing: Parametrisiert über
leadDays(Vorlaufzeit in Tagen, Standard: 1)
Statistiken berechnen¶
- Kennung:
calculateStatistics - Zweck: Vorberechnung der Dashboard- und Kundenstatistiken
- Verhalten: Berechnet Umsatz, Top-Artikel, Top-Kunden und Top-Länder für alle Zeiträume
- Optimierung: Inkrementelle Berechnung – nur Kunden mit neuen Bestellungen werden neu berechnet
Benachrichtigungen erstellen¶
- Kennung:
createNotificationEntries - Zweck: Erstellt die einzelnen Feed- und Zustelleinträge für geplante Benachrichtigungen
- Verhalten: Löst geplante Benachrichtigungen zum konfigurierten Zeitpunkt aus und erstellt individuelle Einträge pro Empfänger
Push-Benachrichtigungen senden¶
- Kennung:
sendPushNotification - Zweck: Tatsächlicher Versand der Push-Benachrichtigungen über Firebase Cloud Messaging (FCM)
- Verhalten: Verarbeitet die Warteschlange der zu sendenden Nachrichten und aktualisiert den Zustellstatus
Bestell-Export-Wiederholung¶
- Kennung:
orderExportRetry - Zweck: Wiederholt fehlgeschlagene Bestell-Exports mit exponentiellem Backoff
- Verhalten: Prüft die Export-Queue auf fehlgeschlagene Einträge und versucht den Export erneut
Zeitplan-Konfiguration¶
Jeder Job kann mit einem der folgenden Zeitpläne versehen werden:
| Typ | Konfiguration | Beispiel |
|---|---|---|
| Minütlich | Intervall in Minuten | Alle 15 Minuten |
| Stündlich | Intervall ++ Minute der Stunde | Jede Stunde um :30 |
| Täglich | Zeitzone + Uhrzeit | Täglich um 02:00 (Europe/Berlin) |
| Wöchentlich | Zeitzone + Wochentage + Uhrzeit | Mo, Mi, Fr um 06:00 |
| Monatlich | Zeitzone + Tag des Monats + Uhrzeit | Am 1. jeden Monats um 00:00 |
| Benutzerdefiniert (Cron) | Cron-Ausdruck + Zeitzone | 0 2 * * * (täglich 02:00) |
Ausführungshistorie¶
Jeder Job-Lauf wird protokolliert:
| Feld | Beschreibung |
|---|---|
| Status | Erfolgreich, Laufend, Fehler |
| Dauer | Ausführungszeit |
| Bearbeitete Datensätze | Anzahl der betroffenen Einträge |
| Fehlermeldung | Details bei Fehlern |
| Zeitstempel | Ausführungszeitpunkt |
13. Trigger (Automatisierungen)¶
Trigger sind automatische Auslöser, die bei bestimmten Datenbankereignissen (Erstellen, Aktualisieren, Löschen) ausgeführt werden. Sie sind systemseitig definiert und können nicht vom Benutzer erstellt werden – lediglich die Ausführung wird überwacht.
Trigger-Überwachung¶
Über Einstellungen > Trigger-Einstellungen können alle Trigger eingesehen werden:
- Status anzeigen: Letzte Ausführung und Ergebnis
- Historie anzeigen: Klick auf „Historie anzeigen" zeigt die letzten Ausführungen
- Details prüfen: Ausführungszeit, Fehlermeldungen, Metadaten
Alle Trigger im Überblick (19 Trigger)¶
Kunden-Trigger¶
| Trigger | Ereignis | Beschreibung |
|---|---|---|
| onCustomerCreated | Erstellt | Automatische Zuweisung neuer Kunden zu Artikeln basierend auf Kategorie |
| onCustomerUpdated | Aktualisiert | Aktualisierung der Artikelzuweisungen bei Kundenänderungen |
| onCustomerUpdatedSyncToLists | Aktualisiert | Synchronisierung von Kundendaten in Besuchslisten |
| onCustomerDeleted | Gelöscht | Bereinigung aller verknüpften Daten (Benutzer, Listen, Benachrichtigungen) |
Artikel-Trigger¶
| Trigger | Ereignis | Beschreibung |
|---|---|---|
| onArticleCreated | Erstellt | Automatische Zuweisung neuer Artikel an relevante Kunden |
| onArticleUpdated | Aktualisiert | Aktualisierung der Kundenzuweisungen bei Artikeländerungen |
| onArticleDeleted | Gelöscht | Entfernung des Artikels aus allen Kundenzuweisungen |
| onOrderWrittenUpdateArticleDeletionFlags | Schreiben | Setzt canDelete-Flag basierend auf aktiven Bestellreferenzen |
Bestellungen-Trigger¶
| Trigger | Ereignis | Beschreibung |
|---|---|---|
| onOrderCreatedQueueExport | Erstellt | Reiht neue Bestellung in die Export-Queue ein (mit Storno-Wartefrist) |
| onOrderCancelledRemoveFromExportQueue | Schreiben | Entfernt stornierte Bestellungen aus der Export-Queue |
| onOrderWrittenReduceStock | Schreiben (→ Status 1) | Reduziert Lagerbestand bei Auftragsbestätigung |
| onOrderWrittenRestoreStock | Schreiben (→ Status 5) | Stellt Lagerbestand bei Stornierung wieder her |
Authentifizierung-Trigger¶
| Trigger | Ereignis | Beschreibung |
|---|---|---|
| onShopUserPermissionChanged | Schreiben | Aktualisiert JWT-Claims bei Berechtigungsänderungen |
| onErpUserDocumentCreated | Erstellt | Setzt appType-Claim für neue ERP-Benutzer |
Such-Index-Trigger (N-Gram)¶
| Trigger | Ereignis | Beschreibung |
|---|---|---|
| onArticleCreatedBuildNgrams | Erstellt | Baut Suchindex für neuen Artikel |
| onArticleUpdatedBuildNgrams | Aktualisiert | Aktualisiert Suchindex bei Artikeländerung |
| onCustomerCreatedBuildNgrams | Erstellt | Baut Suchindex für neuen Kunden |
| onCustomerUpdatedBuildNgrams | Aktualisiert | Aktualisiert Suchindex bei Kundenänderung |
| onOrderCreatedBuildNgrams | Erstellt | Baut Suchindex für neue Bestellung |
| onOrderUpdatedBuildNgrams | Aktualisiert | Aktualisiert Suchindex bei Bestellungsänderung |
Trigger-Protokolleintrag¶
Jede Ausführung wird mit folgenden Details protokolliert:
| Feld | Beschreibung |
|---|---|
| Trigger-ID | Interner Bezeichner |
| Ereignis | create, update, delete, write |
| Sammlung | Firestore-Collection (z. B. customers) |
| Dokument-ID | Betroffenes Dokument |
| Status | Erfolgreich oder Fehlgeschlagen |
| Dauer (ms) | Ausführungszeit in Millisekunden |
| Fehler | Fehlermeldung bei Misserfolg |
| Metadaten | Zusätzliche Details (z. B. Anzahl bereinigter Datensätze) |
14. Connectoren (Externe Systeme)¶
Connectoren ermöglichen die bidirektionale Integration mit externen Systemen für Datenimport und -export.
Verfügbare Connector-Typen¶
14.1 Microsoft Business Central¶
- Import: Kunden, Artikel, Bestellungen
- Export: Bestellungen
- Authentifizierung: OAuth2 (Azure Active Directory)
- Konfiguration:
- Tenant-ID (GUID)
- Application-ID (Client-ID)
- Application-Secret (Client-Secret)
- Zielumgebung (z. B. „Production")
- Unternehmens-ID (Company GUID)
14.2 Shopify¶
- Import: Produkte, Bestellungen
- Export: Bestellungen
- Authentifizierung: API-Schlüssel / Bearer Token
- Konfiguration:
- Shopify-Shop-Name (z. B. „meinshop.myshopify.com")
- API Access Token
14.3 WooCommerce¶
- Import: Produkte, Bestellungen
- Export: Bestellungen
- Authentifizierung: Basic Auth oder API-Schlüssel
- Konfiguration:
- WooCommerce Store-URL
- Consumer Key
- Consumer Secret
14.4 REST API (Generisch)¶
- Import: Benutzerdefiniert über Endpunkte
- Export: Benutzerdefiniert über Endpunkte
- Authentifizierung: OAuth2, API-Schlüssel, Bearer Token oder Basic Auth
- Konfiguration: Individuell definierte Endpunkte pro Ressource
14.5 FTP/Excel-Import¶
- Import: CSV/Excel-Dateien über FTP/SFTP
- Export: Nicht unterstützt
- Konfiguration:
- FTP/SFTP-Server (Host, Port)
- Benutzername und Passwort
- Remote-Pfad zu den Dateien
14.6 Datenbank¶
- Import: Direkte Datenbankabfragen
- Unterstützte Datenbanken: MySQL, PostgreSQL, MSSQL
- Konfiguration:
- Datenbank-Host und Port
- Benutzername und Passwort
- Datenbankname
- SQL-Abfrage
Connector-Konfiguration¶
Jeder Connector wird über einen Assistenten (Wizard) eingerichtet:
- Typ auswählen: Connector-Typ aus der Liste wählen
- Zugangsdaten: Authentifizierungsinformationen eingeben
- Import/Export konfigurieren: Aktivieren welche Daten importiert/exportiert werden
- Zeitplan festlegen: Synchronisierungsintervall einstellen
- Feldzuordnung: Mapping zwischen externem und EasySale-Datenmodell
Synchronisierungsmodi¶
| Modus | Beschreibung |
|---|---|
| Inkrementell | Nur geänderte Datensätze werden synchronisiert |
| Nur erstellen | Nur neue Datensätze importieren |
| Aktualisieren & erstellen | Bestehende aktualisieren, neue anlegen |
| Komplett ersetzen | Alle Daten löschen und neu importieren |
Bestell-Export-Ablauf¶
Wenn der Bestell-Export über einen Connector aktiviert ist:
- Bestellung erstellt → Trigger
onOrderCreatedQueueExportwird ausgelöst - Export-Queue → Bestellung wird mit Zeitstempel in die Queue eingereiht
- Storno-Wartezeit → System wartet die konfigurierte Storno-Frist ab (Standard: 15 Min.)
- Fälligkeitsprüfung → Wenn das Lieferdatum näher ist, wird früher exportiert
- Cloud Task → Geplanter Task wird zum Ausführungszeitpunkt gestartet
- Export → Connector-spezifische Export-Funktion überträgt die Bestellung
- Sync-Status → Bestellstatus wird aktualisiert (inkl. externe ID und Fehlerinformationen)
Bei Fehlern wird automatisch mit exponentiellem Backoff wiederholt. Nach Erschöpfung aller Versuche wird die Bestellung in den „Dead Letter"-Status versetzt.
15. Tutorial-System¶
Das ERP-System beinhaltet ein interaktives Tutorial, das neue Benutzer Schritt für Schritt durch alle Funktionen führt.
Funktionsweise¶
- Automatischer Start: Das Tutorial startet automatisch beim ersten Login
- Lottie-Animationen: Ein animierter Helfer begleitet durch die Schritte
- Interaktiv: Manche Schritte warten auf eine Benutzerinteraktion (Klick auf markiertes Element)
- Feature-gesteuert: Schritte werden nur angezeigt, wenn das entsprechende Feature aktiv ist
Tutorial-Bereiche (24+ Schritte)¶
| Bereich | Beschreibung |
|---|---|
| Navigation | Erklärung des Logos, Dashboards und aller Menüpunkte (Kunden, Artikel, Bestellungen, Registrierung, Kundenlisten, Benachrichtigungen, SAM KI, Einstellungen) |
| Dashboard | Überblick über KPIs und Statistiken |
| Kunden | Suche, Kategoriefilter, Listeninteraktion |
| Artikel | Suche, Kategoriefilter, Listeninteraktion |
| Bestellungen | Suche, Listenfunktionen, Massenexport (PDF/Excel) |
| Registrierung | Benutzerfreigabe-Workflow |
| Kundenlisten | Listenverwaltung und Kundenzuordnung |
| Benachrichtigungen | Erstellen und Versenden von Push-Nachrichten |
| SAM KI | Einführung in den KI-Assistenten |
| Einstellungen | Benutzerverwaltung, Theme-Anpassung, Integrationen |
Zieltypen¶
| Typ | Beschreibung |
|---|---|
| navbar | Navigationsleisten-Buttons werden hervorgehoben |
| page | Ganze Seiten werden erklärt |
| header | Kopfbereich-Elemente (Suche, Filter) |
| listView | Listen-Interaktionen werden demonstriert |
| settings | Einstellungsdialog-Elemente |
| custom | Benutzerdefinierte Positionierung |
15.1 N-Gram-Suchindex¶
EasySale verwendet ein N-Gram-basiertes Suchsystem für die Volltextsuche in Kunden, Artikeln und Bestellungen:
- Automatische Indexierung: Bei jedem Erstellen oder Aktualisieren eines Datensatzes werden N-Gramme generiert (Trigger:
onArticleCreatedBuildNgrams,onCustomerCreatedBuildNgrams,onOrderCreatedBuildNgrams) - Partielle Suche: Ermöglicht Suche nach Wortteilen (z. B. „Schokolade" findet auch bei Eingabe von „Schoko")
- Mehrsprachig: Indiziert alle sprachlichen Varianten eines Datensatzes
- Firestore-optimiert: N-Gramme werden als Array-Feld gespeichert und über
array-contains-Abfragen durchsucht – deutlich schneller als Client-seitige Filterung
15.2 Plugin-System (Erweiterbarkeit)¶
EasySale unterstützt ein Plugin-System, das es ermöglicht, mandantenspezifische Erweiterungen ins System einzubinden, ohne den Kerncode zu ändern.
ERP-Plugins¶
| Plugin-Typ | Position | Beschreibung |
|---|---|---|
| Navigationsleisten-Plugin | Nach Dashboard / Nach Kunden / Nach Artikeln / Nach Bestellungen / Am Ende | Fügt eigene Seiten in die ERP-Navigation ein |
| Einstellungs-Plugin | In den Einstellungen | Eigene Konfigurationsseiten im Einstellungsbereich |
| Tab-Plugin | Kunden- oder Artikel-Detailseite | Benutzerdefinierte Tabs in der Detail-Ansicht |
| Artikel-Erstellungs-Plugin | Im Artikel-Erstellen-Dialog | Zusätzliche Schritte beim Anlegen neuer Artikel |
Shop-Plugins¶
| Plugin-Typ | Beschreibung |
|---|---|
| Bottom-Nav-Bar (Mobile) | Zusätzliche Tabs in der mobilen Navigation |
| Top-Bar (Web) | Zusätzliche Elemente in der Web-Navigationsleiste |
| Artikel-Seiten-Plugin | Erweiterungen auf der Artikelübersichtsseite |
| Artikeldetail-Plugin | Zusatzinhalte auf der Artikeldetailseite |
| Warenkorb-Plugin | Erweiterungen im Warenkorb |
| Profil-Plugin | Zusätzliche Sektionen auf der Profilseite |
| Feed-Plugin | Benutzerdefinierte Feed-Eintragstypen |
Tab-Registry¶
Kunden- und Artikel-Tabs werden über eine Tab-Registry verwaltet:
- Mandanten können über die ClientConfig Tabs umbenennen, umsortieren, ausblenden oder eigene benutzerdefinierte Tabs hinzufügen
- Pro Tab sind konfigurierbar: Name, Icon, Sichtbarkeit, Position
16. Sicherheit & Datenschutz¶
EasySale ERP implementiert umfangreiche Sicherheitsmaßnahmen zum Schutz der Daten.
Authentifizierung & Autorisierung¶
| Maßnahme | Beschreibung |
|---|---|
| Firebase Authentication | Sichere Anmeldung mit E-Mail/Passwort |
| JWT-Claims | Rollenbasierte Zugriffskontrolle über Custom Claims (appType, customerIds, adminCustomerIds) |
| Session-Management | Sichere Session-Verwaltung mit Token-Rotation |
| Rate Limiting | Schutz vor Brute-Force-Angriffen |
Datensicherheit¶
| Maßnahme | Beschreibung |
|---|---|
| SSL Certificate Pinning | Schutz vor Man-in-the-Middle-Angriffen |
| Verschlüsselter Speicher | Sensible Daten werden verschlüsselt gespeichert |
| Server-seitige Preisvalidierung | Verhinderung von Preismanipulationen (CWE-602) |
| Firestore Security Rules | Datenbankregeln erzwingen Zugriffsrechte |
Gerätesicherheit¶
| Maßnahme | Beschreibung |
|---|---|
| Jailbreak-/Root-Erkennung | Warnung bei kompromittierten Geräten |
| Kompromittierte Geräte | Eingeschränkter Zugang bei Sicherheitsrisiko |
| Sicheres Logging | Produktionsumgebung loggt keine sensiblen Daten |
DSGVO-Konformität¶
Die automatisierten Jobs (Kapitel 12) unterstützen die DSGVO-Compliance:
- Inaktive Kunden löschen: Kunden ohne Bestellungen nach konfigurierbarer Frist
- Inaktive Benutzer löschen: Benutzer ohne Login nach konfigurierbarer Frist
- Alte Bestellungen löschen: Bestellungen nach Ablauf der Aufbewahrungsfrist
- Alte Benachrichtigungen löschen: Benachrichtigungen nach konfigurierbarer Frist
- Ungenutzte Artikel löschen: Artikel ohne Bestellungen nach konfigurierbarer Frist
- AGB-Versionierung: Nachvollziehbare Zustimmungshistorie pro Benutzer
Sicherheitsprotokollierung¶
- Alle administrativen Aktionen werden protokolliert
- Trigger-Ausführungen werden mit Zeitstempel und Status gespeichert
- Job-Ausführungshistorie mit Fehlerdetails
---¶
Teil II – Shop-System Mobile-App¶
Die EasySale Mobile-App ist eine native Flutter-Anwendung für iOS und Android, die es Endkunden ermöglicht, Artikel zu durchsuchen, Bestellungen aufzugeben und ihren Kunden-Bereich zu verwalten.
17. Übersicht Mobile-App¶
Navigation¶
Die Mobile-App verwendet eine Bottom-Navigation-Bar mit folgenden Hauptbereichen:
| Position | Bereich | Icon | Beschreibung |
|---|---|---|---|
| 1 | Übersicht | 🏠 | Artikelsuche und Sortiment-Browsing |
| 2 | Warenkorb | 🛒 | Aktueller Warenkorb mit Badge (Artikelanzahl) |
| 3 | Bestellungen | 📋 | Bestellhistorie und -details |
| 4 | Bestelllisten | 📝 | Gespeicherte Einkaufslisten (nur für Administratoren) |
| 5 | Feed | 🔔 | Benachrichtigungen und Systemmeldungen mit Badge (ungelesene Anzahl) |
| 6 | Profil | 👤 | Einstellungen, Adressen, Account |
| 7 | Benutzer | 👥 | Benutzerverwaltung (nur für Administratoren sichtbar) |
Besonderheiten der Navigation¶
- Badges: Warenkorb und Feed zeigen Zähler-Badges an
- Plugin-System: Die Navigation unterstützt Plugins, die an verschiedenen Positionen eingefügt werden können (nach Startseite, nach Warenkorb, nach Bestellungen, nach Feed, am Ende)
- Seitenerhaltung: Beim Tab-Wechsel bleiben Scroll-Position, geladene Bilder und Zustand erhalten (
IndexedStack) - Rollenbasiert: Die Tabs „Bestelllisten" und „Benutzer" sind nur für Shop-Administratoren sichtbar
Allgemeine UI-Konzepte¶
| Konzept | Beschreibung |
|---|---|
| Collapsing Header | Die meisten Seiten haben einen einklappbaren Kopfbereich (218–270px), der beim Scrollen zusammenfällt und die Suchleiste fixiert |
| Pull-to-Refresh | Inhalte können durch Herunterziehen aktualisiert werden |
| Bouncing Scroll | iOS-typisches Scroll-Verhalten mit Federbewegung |
| Touch-Optimiert | Große Tipp-Bereiche, Ripple-Effekte bei Berührung |
| Safe Area | Respektiert Notches, Home-Indikatoren und Displayaussparungen |
18. Anmeldung & Registrierung (Mobile)¶
Anmeldeseite¶
Die Anmeldeseite zeigt das konfigurierte App-Logo und folgende Elemente:
| Element | Beschreibung |
|---|---|
| Logo/Branding | Aus dem Mobile-App-Theme geladen (oder Standard-Logo) |
| Titel | „Anmelden" |
| E-Mail-Feld | E-Mail-Eingabe mit Validierung und Mail-Icon |
| Passwort-Feld | Verdeckte Eingabe mit Sichtbarkeits-Toggle (Augen-Icon) |
| „Passwort vergessen"-Link | Rechtsbündig, öffnet die Passwort-Zurücksetzen-Seite |
| Anmelden-Button | Primäre Aktion mit Ladezustand während der Authentifizierung |
| Registrieren-Link | „Noch kein Konto? Hier registrieren" – navigiert zur Registrierungsseite |
Registrierungsseite¶
Neue Benutzer füllen folgende Felder aus:
| Feld | Beschreibung | Pflicht |
|---|---|---|
| Vorname | Vorname des Benutzers | ✅ |
| Nachname | Nachname des Benutzers | ✅ |
| E-Mail-Adresse (wird als Login verwendet) | ✅ | |
| Passwort | Passwort mit Stärke-Indikator und Sichtbarkeits-Toggle | ✅ |
| Passwort bestätigen | Muss mit dem Passwort übereinstimmen | ✅ |
| Sprache | Dropdown-Auswahl der bevorzugten Sprache (Standard: Deutsch) | ✅ |
Nach der Registrierung wird ein Firebase-Benutzerkonto erstellt.
Kundennummer-Zuordnung¶
Nach erfolgreicher Registrierung muss der Benutzer seine Kundennummer eingeben:
- Kundennummer-Eingabeseite wird angezeigt
- Benutzer gibt die Kundennummer ein (wird gegen die Kundenstammdaten im ERP validiert)
- Bei gültiger Nummer: Zugangsanfrage wird erstellt mit Status „Ausstehend"
- Bei ungültiger Nummer: Fehlermeldung wird angezeigt
Warteseite (Genehmigung ausstehend)¶
Nach dem Absenden der Zugangsanfrage sieht der Benutzer eine Warteseite:
- Hinweistext: „Warten auf Genehmigung durch den Shop-Administrator"
- Pulsierende Animation: Visuelles Feedback, dass die Anfrage bearbeitet wird
- Echtzeit-Status-Listener: Die Seite lauscht auf Statusänderungen in Firebase
- Automatische Weiterleitung: Sobald die Anfrage genehmigt wird, wird die App automatisch neu geladen und der Benutzer erhält Zugang
Passwort zurücksetzen¶
| Element | Beschreibung |
|---|---|
| Titel | „Passwort zurücksetzen" |
| Beschreibung | Erklärt den Ablauf |
| E-Mail-Feld | E-Mail-Eingabe mit Validierung |
| Link-senden-Button | Löst den Passwort-Reset über Firebase aus |
| Bestätigungsmeldung | Snackbar: „Prüfen Sie Ihre E-Mails" |
| Zurück-Link | Zurück zur Anmeldeseite |
19. Artikelsuche & Sortiment (Mobile)¶
Seitenaufbau¶
Die Artikelseite ist die Startseite der App und besteht aus:
- Einklappbarer Header (218–270px Höhe)
- Logo-Bereich (44px, falls konfiguriert)
- Suchleiste (wird beim Scrollen fixiert)
- Kategorie-Leiste (horizontale Scroll-Liste)
- Liefertage-Anzeige (falls aktiviert)
- Artikel-Gitter (Hauptinhalt)
Suche¶
- Echtzeit-Suche: Eingabe wird mit Debounce verarbeitet (max. 100 Zeichen)
- Suchfelder: Titel und Beschreibung der Artikel
- N-Gram-Matching: Serverseitige Suche über den N-Gram-Suchindex
- Ergebnisse: Werden sofort in der Artikelliste aktualisiert
Kategoriefilter¶
- Horizontale, scrollbare Kategorieliste unterhalb der Suchleiste
- Tippen auf eine Kategorie filtert die Artikel
- Farbige Kategorie-Chips (Farbe aus ERP-Einstellungen)
- Automatisches Scrollen zum Seitenanfang bei Kategorie-Wechsel
- „Alle"-Option zum Zurücksetzen des Filters
Artikel-Gitter¶
Artikel werden als Karten im Gitterformat angezeigt (1–2 Spalten):
| Element | Beschreibung |
|---|---|
| Artikelbild | Vorschaubild oder Platzhalter |
| Artikelname | Hauptbezeichnung |
| Kategorie-Chip | Farbiger Chip mit Kategoriename |
| Variantenanzahl | Badge mit Anzahl verfügbarer Varianten |
| Knappheits-Badge | Wird angezeigt, wenn „Künstliche Knappheit" für den Artikel aktiviert ist (z. B. „Nur noch 5 verfügbar!") |
| Preis | Standardpreis (wird nur angezeigt, wenn die Preisanzeige für diesen Kunden aktiviert ist) |
Klick auf eine Artikelkarte öffnet die Artikeldetailseite.
Preisanzeige-Steuerung¶
Die Sichtbarkeit von Preisen wird auf zwei Ebenen gesteuert:
1. Globale Einstellung: showPricesInMobileApp (systemweit)
2. Kundenspezifisch: customer.showPriceInMobileApp (überschreibt die globale Einstellung)
Wenn Preise deaktiviert sind, werden keine Preisangaben in der Artikelübersicht, Artikeldetailseite, im Warenkorb und in der Bestellhistorie angezeigt.
20. Artikeldetailseite (Mobile)¶
Seitenaufbau¶
Die Artikeldetailseite öffnet sich als Vollbildansicht mit folgenden Bereichen:
Bildergalerie (Header)¶
- Erweiterbare Galerie: 320px Höhe im erweiterten Zustand, einklappbar beim Scrollen
- Wisch-Galerie: Mehrere Bilder per Wisch-Geste durchblättern
- Variantenspezifische Bilder: Beim Wechsel der Variante werden die Bilder automatisch aktualisiert
- Bildindikator: Punkte unterhalb der Galerie zeigen die Position an
Inhalt¶
| Bereich | Beschreibung |
|---|---|
| Artikelname | Große Überschrift |
| Artikelbeschreibung | Ausklappbarer Beschreibungstext (in der Sprache des Benutzers) |
| Variantenauswahl | Dropdown oder Button-Leiste zur Auswahl der Variante (Größe, Farbe usw.) – nur sichtbar, wenn der Artikel mehrere Varianten hat |
| Mengenauswahl | Increment/Decrement-Buttons (- / +) sowie direktes Textfeld zur Eingabe der Menge |
| Preis | Variantenspezifischer Preis (falls Preisanzeige aktiviert) |
| Verfügbarkeitsstatus | Lagerbestand-Anzeige oder Nachbestellungshinweis |
| In den Warenkorb | Großer primärfarbiger Button am unteren Rand |
| Dokumente | Liste angehängter Dokumente (PDFs, Datenblätter) mit sprachspezifischen Varianten und Download-Links |
Variantenauswahl im Detail¶
- Standard-Variante wird automatisch vorausgewählt
- Beim Wechsel der Variante werden aktualisiert: Preis, Bilder, Verfügbarkeit, Lagerbestand
- Nicht verfügbare Varianten werden ausgegraut
Plugin-Support¶
Die Artikeldetailseite unterstützt Plugin-Slots für kundenspezifische Zusatzinhalte, die oberhalb oder unterhalb des Standardinhalts eingefügt werden können.
21. Warenkorb & Bestellung (Mobile)¶
Warenkorb-Seite¶
Header¶
- Einklappbarer Header mit Warenkorb-Icon und Artikelanzahl
Leerer Zustand¶
- Icon + Hinweismeldung „Ihr Warenkorb ist leer"
- Handlungsaufforderung zum Artikelstöbern
Warenkorb-Artikel¶
Jeder Artikel im Warenkorb wird als Karte dargestellt:
| Element | Beschreibung |
|---|---|
| Artikelbild | Kleines Vorschaubild |
| Artikelname | Name inkl. Varianteinformation |
| Ausgewählte Variante | z. B. „Rot, Größe L" |
| Mengensteuerung | Minus-Button, Mengenfeld, Plus-Button |
| Einzelpreis | Pro Einheit (falls Preisanzeige aktiv) |
| Entfernen | Wischen oder Löschen-Button |
Lieferadresse¶
- Dropdown-Auswahl aller hinterlegten Lieferadressen
- Standard-Adresse ist vorausgewählt
- Adressen werden aus dem
CustomerDeliveryAddressBlocgeladen - Falls keine Lieferadresse vorhanden: Firmenadresse des Kunden wird verwendet
Sonderwünsche / Bestellnotizen¶
- Ausklappbares Textfeld für Kommentare und spezielle Anweisungen
- Wird als Bestellnotiz zur Bestellung gespeichert
Mindestbestellwert¶
Wenn ein Mindestbestellwert konfiguriert ist: - Fortschrittsanzeige: Zeigt, wie weit der aktuelle Betrag vom Mindestbestellwert entfernt ist - Warnung: Button ist deaktiviert, bis der Mindestbestellwert erreicht ist
Checkout-Ablauf¶
- Validierung: System prüft, ob alle Artikel noch verfügbar sind
- Prüfung nicht verfügbarer Artikel: Bei nicht mehr verfügbaren Artikeln wird eine Warnung angezeigt
- Bestellübermittlung: Bei Erfolg → automatische Weiterleitung zur Bestellhistorie
- Ladeoverlay: Während der Übermittlung wird ein Lade-Bildschirm angezeigt
- Erfolg: Bestätigungsmeldung, Warenkorb wird geleert
- Fehler: Snackbar mit Fehlermeldung wird angezeigt
Server-seitige Validierung¶
Alle Preise werden bei der Bestellerstellung serverseitig neu berechnet. Eine Manipulation der Preise auf Client-Seite wird erkannt und die Bestellung wird abgelehnt.
22. Bestellhistorie (Mobile)¶
Seitenaufbau¶
- Einklappbarer Header mit Bestellungs-Icon und Gesamtanzahl der Bestellungen
- Suchfeld: Echtzeit-Suche nach Bestellnummer
- Pull-to-Refresh: Herunterziehen zum Aktualisieren der Bestellliste
Bestellliste¶
Jede Bestellung wird als Karte dargestellt:
| Element | Beschreibung |
|---|---|
| Bestellnummer | z. B. „#12345" |
| Bestelldatum | Formatiertes Datum |
| Status-Badge | Farbkodiert: Ausstehend (🟠), Bestätigt (🔵), Versendet (🟢), Geliefert (🟢 dunkel), Storniert (🔴) |
| Gesamtbetrag | Bestellsumme (falls Preisanzeige aktiv) |
| Hervorhebung | Gerade aufgegebene Bestellungen werden ~2,5 Sekunden farblich hervorgehoben |
Bestelldetails¶
Beim Tippen auf eine Bestellung öffnet sich die Detailansicht:
| Bereich | Beschreibung |
|---|---|
| Bestellnummer | Große Überschrift |
| Kunde | Kundenname und -nummer |
| Lieferadresse | Vollständig formatierte Adresse |
| Bestellpositionen | Tabelle: Artikelname, Variante, Menge, Einzelpreis, Positionssumme |
| Bestellsumme | Zwischensumme, Rabatt, Versandkosten, Gesamtbetrag |
| Status | Aktueller Bestellstatus |
Nachbestellung¶
- Nachbestellen-Button: Kopiert alle Artikel der Bestellung in den aktuellen Warenkorb
- Mengen und Varianten werden übernommen
- Nicht mehr verfügbare Artikel werden übersprungen
23. Feed & Benachrichtigungen (Mobile)¶
Feed-Seite¶
- Einklappbarer Header mit Feed-Icon
- Badge: Zeigt die Anzahl ungelesener Einträge in der Navigation
Suche & Filter¶
| Filter | Beschreibung |
|---|---|
| Textsuche | Durchsucht Titel und Nachrichteninhalt |
| Typfilter-Chips | Filterung nach Feed-Eintragstyp (Push, In-App, Dokument, System) |
| Archiv-Toggle | Archivierte Einträge ein-/ausblenden |
Feed-Karten¶
Jede Benachrichtigung wird als Karte dargestellt:
| Element | Beschreibung |
|---|---|
| Typ-Icon | Kanalspezifisches Symbol (Glocke, Sprechblase, Dokument, System) |
| Titel | Fettgedruckt |
| Nachrichtentext | Vorschau des Inhalts |
| Zeitstempel | Relative oder absolute Zeitangabe |
| Gelesen/Ungelesen | Visueller Punkt-Indikator für ungelesene Einträge |
Aktionen¶
| Aktion | Beschreibung |
|---|---|
| Tippen | Markiert den Eintrag als gelesen und zeigt den vollständigen Inhalt |
| Wischen (rechts → links) | Archiviert den Eintrag (animierter Hintergrund mit Icon) |
| Automatisches Lesen | Beim Verlassen der Feed-Seite werden alle sichtbaren Einträge als gelesen markiert |
Push-Benachrichtigungen¶
- Vom ERP gesendete Push-Benachrichtigungen erscheinen als native iOS/Android-Benachrichtigungen
- Tippen auf die Benachrichtigung öffnet die App direkt im Feed
24. Einkaufslisten (Mobile)¶
Nur für Shop-Administratoren verfügbar (siehe Kapitel 2: Rollen & Berechtigungen)
Übersicht¶
Die Einkaufslisten-Seite zeigt alle gespeicherten Listen des aktuellen Kunden.
Funktionen¶
| Funktion | Beschreibung |
|---|---|
| Liste erstellen | Neue Einkaufsliste mit Name anlegen |
| Listendetails anzeigen | Tippen auf eine Liste zeigt alle enthaltenen Artikel |
| Aus Liste bestellen | Alle Artikel einer Liste in den Warenkorb laden |
| Artikel zur Liste hinzufügen | Aus dem Artikelkatalog Artikel auswählen |
| Artikel entfernen | Einzelne Positionen aus der Liste löschen |
| Mengen anpassen | Bestellmengen pro Position ändern |
| Liste bearbeiten | Name und Beschreibung ändern |
| Liste löschen | Gesamte Liste entfernen (Bestätigungsdialog) |
Einkaufslisten-Detail¶
Jede Position zeigt: - Artikelname und -nummer - Ausgewählte Variante - Menge - Kommentar (editierbar)
Hinweis: Einkaufslisten werden zwischen Mobile-App und ERP in Echtzeit synchronisiert. Änderungen, die im ERP vorgenommen werden, sind sofort in der App sichtbar und umgekehrt.
25. Profil & Einstellungen (Mobile)¶
Seitenaufbau¶
- Einklappbarer Header mit Profil-Icon und Benutzerinitialen
- Scrollbarer Inhalt mit mehreren Sektionen
Sektion 1: Einstellungen¶
Sprache¶
- Dropdown-Auswahl der Sprache (Deutsch, Englisch und weitere)
- Ändert die gesamte App-Oberfläche und die Artikelbeschreibungen
- Wird im Benutzerprofil gespeichert
Kundennummern (Multi-Kunden-Zugriff)¶
Benutzer, die mehreren Kundenkonten zugeordnet sind, können hier zwischen Konten wechseln:
| Element | Beschreibung |
|---|---|
| Genehmigte Kunden | Liste aller Kundenkonten, zu denen der Benutzer Zugang hat |
| Aktiver Kunde | Hervorgehobener aktueller Kunde |
| Ausstehende Anfragen | Anfragen, die noch auf Genehmigung warten (mit Status-Anzeige) |
| Neuen Zugang anfragen | Button zum Eingeben einer weiteren Kundennummer |
| Anfrage abbrechen | Ausstehende Anfrage zurückziehen |
Lieferadressen (nur für Administratoren)¶
- Liste aller hinterlegten Lieferadressen mit Standard-Markierung
- Neue Adresse anlegen: Formular mit Straße, Hausnummer, PLZ, Ort, Land, Standard-Toggle
- Adresse bearbeiten: Bestehende Adresse ändern
- Adresse löschen: Adresse entfernen (Bestätigung)
- Als Standard setzen: Radio-Button zur Auswahl der primären Lieferadresse
Lieferpausen (nur für Administratoren)¶
- Kalenderansicht: Zeigt Zeiträume, in denen keine Lieferung gewünscht ist
- Lieferpause hinzufügen: Datumsbereichsauswahl (Von–Bis)
- Lieferpause bearbeiten / löschen: Management bestehender Pausen
- Berücksichtigt globale Feiertage aus den Systemeinstellungen
Benutzerverwaltung (nur für Administratoren)¶
- Aktuelle Rolle des angemeldeten Benutzers anzeigen
- Ausstehende Registrierungen genehmigen oder ablehnen
- Benutzer entfernen aus dem Kundenkonto
Sektion 2: Rechtliches¶
Links zu den rechtlichen Seiten (werden aus den Systemeinstellungen geladen und im Browser geöffnet):
| Eintrag | Beschreibung |
|---|---|
| Impressum | Impressumsseite des Betreibers |
| Datenschutzerklärung | Datenschutzrichtlinie |
| AGB | Allgemeine Geschäftsbedingungen |
Sektion 3: Account¶
| Aktion | Beschreibung |
|---|---|
| Passwort ändern | Bottom-Sheet mit: Aktuelles Passwort, Neues Passwort (mit Stärke-Indikator), Passwort bestätigen |
| Konto löschen | Bestätigungsdialog mit Warnhinweis → Löscht das Firebase-Konto und alle zugehörigen Daten |
| Abmelden | Sofortige Abmeldung → Zurück zur Anmeldeseite |
Plugin-Support¶
Die Profilseite unterstützt Plugin-Sektionen, die von kundenspezifischen Erweiterungen eingefügt werden können. Plugins können gruppiert werden (mit eigenen Sektionsüberschriften).
---¶
Teil III – Shop-System Web-App¶
Die EasySale Web-App ist eine Flutter-basierte Web-Anwendung, die es Endkunden ermöglicht, über einen Desktop-Browser Artikel zu durchsuchen und Bestellungen aufzugeben. Die Funktionen sind identisch mit der Mobile-App, jedoch für Desktop-Browser optimiert.
26. Übersicht Web-App¶
Navigation (Top-Bar)¶
Die Web-App verwendet eine fixierte obere Navigationsleiste mit folgender Anordnung (links → rechts):
| Position | Element | Beschreibung |
|---|---|---|
| Links | Kundenkarte (280px) | Zeigt den aktuellen Kunden an – klickbar zum Wechseln zwischen Kundenkonten (bei Multi-Kunden-Zugriff) |
| Mitte | App-Logo | Logo aus dem Web-App-Theme |
| Mitte-rechts | Liefertage-Icon | 📅 Öffnet den Liefertage-Slider |
| Mitte-rechts | Warenkorb-Icon | 🛒 Öffnet das Warenkorb-Seitenpanel (mit Badge für Artikelanzahl) |
| Mitte-rechts | Feed-Icon | 🔔 Öffnet das Feed-Seitenpanel (mit Badge für ungelesene Anzahl) |
| Rechts | Profil-Bereich | Benutzer-Avatar (Initialen) mit Dropdown-Menü |
Profil-Dropdown-Menü¶
Beim Klick auf den Profil-Avatar öffnet sich ein Dropdown mit folgenden Einträgen:
| Eintrag | Verfügbarkeit | Beschreibung |
|---|---|---|
| Profil | Alle | Profilseite öffnen |
| Kundendaten | Alle | Kundenstammdaten einsehen |
| Bestellungen | Alle | Bestellhistorie-Dialog öffnen |
| Benutzer verwalten | Nur Administratoren | Benutzerverwaltung für den aktuellen Kunden |
| Kundennummern / Konten | Alle | Zwischen Kundenkonten wechseln |
| Einkaufslisten | Nur Administratoren | Einkaufslisten verwalten |
| Lieferadressen | Nur Administratoren | Lieferadressen verwalten |
| Impressum | Alle | Rechtliche Informationen |
| Datenschutzerklärung | Alle | Datenschutzrichtlinie |
| AGB | Alle | Allgemeine Geschäftsbedingungen |
| Passwort ändern | Alle | Passwort-Änderungsdialog |
| Konto löschen | Alle | Konto-Löschung (mit Bestätigung) |
| Abmelden | Alle | Ausloggen |
Hinweis: Einträge, die als „Nur Administratoren" markiert sind, werden bei normalen Benutzern mit einem Schloss-Icon versehen und sind nicht klickbar.
Layout-Konzepte¶
| Konzept | Beschreibung |
|---|---|
| Seitenpanels | Warenkorb, Feed und Artikeldetails öffnen sich als von rechts einfliegende Overlay-Panels |
| Dialoge | Bestellungen, Profil und Einstellungen öffnen als modale Dialoge |
| Hover-Effekte | Buttons und Karten reagieren auf Mauszeiger mit Hover-Animationen |
| Responsives Gitter | Artikelgitter passt sich der Fensterbreite an (2–6 Spalten) |
| Maximale Breite | Inhaltsbereich ist auf ~1200px begrenzt für optimale Lesbarkeit |
27. Anmeldung & Registrierung (Web)¶
Anmeldeseite¶
Die Web-Anmeldeseite hat ein zweispaltiges Layout:
| Spalte | Inhalt |
|---|---|
| Links | Branding, Logo, optionaler Willkommenstext |
| Rechts | Anmeldeformular |
Formularfelder¶
Identisch mit der Mobile-App (E-Mail, Passwort mit Sichtbarkeits-Toggle, Passwort-vergessen-Link, Registrieren-Link), aber in einem größeren Layout mit mehr Weißraum dargestellt.
Registrierung & Genehmigung¶
Der Registrierungsprozess ist identisch mit der Mobile-App (siehe Kapitel 18): - Gleiche Formularfelder (Vorname, Nachname, E-Mail, Passwort, Sprache) - Gleiche Kundennummer-Zuordnung - Gleiche Warteseite mit Echtzeit-Status-Update
Passwort zurücksetzen¶
Identische Funktionalität wie in der Mobile-App, im Web-Layout dargestellt.
28. Artikelsuche & Sortiment (Web)¶
Seitenaufbau¶
Die Artikelseite im Web besteht aus:
- Obere Suchleiste (im Header integriert)
- Kategorie-Leiste (volle Breite, horizontal scrollbar)
- Liefertage-Slider (zwischen Kategorie-Leiste und Artikelgitter)
- Artikel-Gitter (Hauptinhalt, responsiv)
Liefertage-Slider¶
Ein interaktiver horizontaler Slider, der die verfügbaren Liefertage anzeigt:
| Element | Farbe | Beschreibung |
|---|---|---|
| Verfügbare Tage | 🟢 Grün | Tage, an denen geliefert wird |
| Feiertage | ⚪ Grau | Globale Feiertage (keine Lieferung) |
| Lieferpausen | 🔴 Rot | Kundenspezifische Lieferpausen (keine Lieferung) |
| Auswählbare Tage | Interaktiv | Klickbar zur Auswahl eines Liefertermins |
Der Slider berücksichtigt: - Globale Liefertage-Einstellungen (aus dem ERP) - Kunden-individuelle Liefertage - Betriebsferien und Feiertage - Kundenspezifische Lieferpausen
Responsive Artikel-Gitter¶
| Fensterbreite | Spaltenanzahl |
|---|---|
| ≥ 2000px | 6 Spalten |
| ≥ 1600px | 5 Spalten |
| ≥ 1200px | 4 Spalten |
| ≥ 900px | 3 Spalten |
| < 900px | 2 Spalten |
Artikel-Karten (Web)¶
Vertikale Karten mit: - Artikelbild (mit Hover-Effekt) - Artikelname - Kategorie-Badge - Variantenanzahl - Knappheits-Badge (falls aktiviert) - Preis (falls aktiviert)
Artikeldetail (Seitenpanel)¶
Beim Klick auf eine Artikelkarte öffnet sich ein Seitenpanel von rechts: - Identischer Inhalt wie auf der mobilen Artikeldetailseite - Bildergalerie, Variantenauswahl, Mengenauswahl, In-den-Warenkorb-Button - Panel kann geschlossen werden (X-Button oder Klick außerhalb)
29. Warenkorb & Bestellung (Web)¶
Warenkorb-Seitenpanel¶
Der Warenkorb öffnet sich als von rechts einfliegendes Seitenpanel beim Klick auf das Warenkorb-Icon.
Warenkorb-Seite (Vollansicht)¶
Die Warenkorb-Seite zeigt von oben nach unten:
1. Seitenkopf¶
| Button | Beschreibung |
|---|---|
| Bestellung laden | Dialog zum Nachbestellen einer früheren Bestellung |
| Einkaufsliste laden | Dialog zum Laden einer gespeicherten Einkaufsliste in den Warenkorb |
2. Mindestbestellwert-Fortschritt¶
- Fortschrittsbalken: Zeigt visuell an, wie weit der aktuelle Betrag vom Mindestbestellwert entfernt ist
- Wird nur angezeigt, wenn ein Mindestbestellwert konfiguriert ist und noch nicht erreicht
3. Lieferadresse¶
- Inline-Dropdown mit allen hinterlegten Lieferadressen
- Detail-Anzeige der ausgewählten Adresse unterhalb des Dropdowns
- Standard-Adresse ist vorausgewählt
4. Sonderwünsche¶
- Ausklappbare Sektion (standardmäßig eingeklappt)
- Großes Textfeld für Bestellnotizen
5. Warenkorb-Artikel¶
Horizontales Layout pro Artikel:
| Element | Beschreibung |
|---|---|
| Artikelbild | Vorschaubild |
| Artikelname | Bezeichnung inkl. Varianteninfo |
| Variante | Ausgewählte Variante |
| Mengensteuerung | Minus-Button, Eingabefeld, Plus-Button |
| Preis | Positionssumme (falls Preisanzeige aktiv) |
| Löschen | Inline-Löschbestätigung |
6. Fixierter Footer¶
| Position | Element | Beschreibung |
|---|---|---|
| Links | „Warenkorb leeren" | Alle Artikel entfernen (Bestätigungsdialog) |
| Mitte | Gesamtpreis | Summe aller Positionen |
| Rechts | „Jetzt bestellen" | Primärer Bestell-Button |
Checkout¶
Der Checkout-Ablauf ist identisch mit der Mobile-App (Validierung → Übermittlung → Bestätigung/Fehler).
30. Bestellhistorie (Web)¶
Bestellungs-Dialog¶
Bestellungen werden in einem modalen Dialog angezeigt (erreichbar über „Bestellungen" im Profil-Dropdown):
| Element | Beschreibung |
|---|---|
| Kopfzeile | „Bestellungen" mit Schließen-Button |
| Suchfeld | Suche nach Bestellnummer |
| Sortierung | Nach Datum (neueste zuerst) |
| Bestellliste | Kartenliste mit den gleichen Informationen wie in der Mobile-App |
Bestelldetails¶
Klick auf eine Bestellung zeigt die Detailansicht innerhalb des Dialogs: - Bestellnummer, Datum, Status-Badge - Positionstabelle (Artikel, Variante, Menge, Preis, Summe) - Lieferadresse - Gesamtsumme
Nachbestellung¶
- Nachbestellen-Button pro Bestellung
- Kopiert alle Artikel in den Warenkorb
- Nicht mehr verfügbare Artikel werden übersprungen
- Auch über den Warenkorb-Button „Bestellung laden" nutzbar
31. Feed & Benachrichtigungen (Web)¶
Feed-Seitenpanel¶
Der Feed öffnet sich als von rechts einfliegendes Overlay-Panel beim Klick auf das Feed-Icon in der Top-Bar.
Inhalt¶
Der Inhalt ist identisch mit der mobilen Feed-Seite: - Textsuche und Typfilter - Kartenliste mit Titel, Nachrichtenvorschau, Zeitstempel - Gelesen/Ungelesen-Indikator - Archiv-Toggle
Unterschied zur Mobile-Version¶
| Aspekt | Mobile | Web |
|---|---|---|
| Darstellung | Vollbildseite | Seitenpanel (Overlay) |
| Archivieren | Wisch-Geste | Klick auf Archiv-Button |
| Schließen | Tab-Wechsel | X-Button oder Klick außerhalb |
Browser-Benachrichtigungen¶
Die Web-App unterstützt Browser-Push-Benachrichtigungen:
- Werden über den WebBrowserNotificationService verwaltet
- Toast-artige Popups auf Desktop-Browsern
- Klick auf die Benachrichtigung öffnet den Feed
32. Profil & Einstellungen (Web)¶
Darstellung¶
Die Profileinstellungen werden im Web als Dialog mit Tabs oder zentrierter Inhaltsbereich dargestellt (erreichbar über das Profil-Dropdown).
Verfügbare Einstellungen¶
Alle Einstellungen sind identisch mit der Mobile-App (siehe Kapitel 25):
| Einstellung | Verfügbarkeit | Web-Darstellung |
|---|---|---|
| Sprache | Alle | Dropdown in Dialog |
| Kundennummern | Alle | Dialog mit Kundenliste |
| Lieferadressen | Nur Administratoren | Dialog mit Adressliste und Editor |
| Lieferpausen | Nur Administratoren | Dialog mit Kalender und Datum-Picker |
| Einkaufslisten | Nur Administratoren | Dialog mit Listenverwaltung |
| Benutzerverwaltung | Nur Administratoren | Dialog mit Benutzertabelle |
| Passwort ändern | Alle | Modal-Dialog |
| Konto löschen | Alle | Bestätigungsdialog |
| Abmelden | Alle | Sofortige Umleitung |
Kundenkarte (Top-Bar)¶
Ein Web-exklusives Feature: Die Kundenkarte in der oberen Navigationsleiste (280px breit, links): - Zeigt den Namen und die Nummer des aktuell ausgewählten Kunden - Bei Klick: Kunden-Wechsel-Dropdown (wenn der Benutzer mehreren Kunden zugeordnet ist) - Visuelles Feedback beim Hovern
33. Unterschiede Mobile vs. Web¶
Übersicht der Plattformunterschiede¶
| Aspekt | Mobile-App | Web-App |
|---|---|---|
| Navigation | Bottom-Navigation-Bar (7 Tabs) | Top-Bar mit Icons + Profil-Dropdown |
| Layout | Vollbild, eine Seite pro Tab | Inhaltsbereich mit fixiertem Header |
| Artikelgitter | 1–2 Spalten | 2–6 Spalten (responsive) |
| Artikeldetail | Vollbildseite mit einklappbarer Galerie | Seitenpanel von rechts |
| Warenkorb | Vollbildseite | Seitenpanel oder Vollseite |
| Bestellungen | Vollbildseite mit Pull-to-Refresh | Modaler Dialog |
| Feed | Vollbildseite mit Wisch-Gesten | Seitenpanel-Overlay |
| Profil | Scrollbare Seite | Dialog mit Tabs |
| Kundenwechsel | Über Profil → Kundennummern | Kundenkarte in Top-Bar (Klick) |
| Liefertage | In der Artikelübersicht integriert | Eigener Slider zwischen Kategorien und Artikeln |
| Scroll-Verhalten | Bouncing Physics (iOS-Stil) | Standard-Scrolling |
| Interaktion | Touch, Wisch-Gesten, Tippen | Maus, Hover, Klick |
| Benachrichtigungen | Native iOS/Android Push | Browser-Benachrichtigungen (Toast) |
| Seitenpanels | Bottom-Sheets (von unten) | Seitenpanels (von rechts) |
| Maximale Breite | Volle Bildschirmbreite | ~1200px begrenzt |
| Safe Area | Notch/Home-Indicator-Respektierung | Nicht erforderlich |
Identische Funktionen¶
Folgende Funktionen sind auf beiden Plattformen identisch implementiert: - Checkout-Ablauf und Server-seitige Preisvalidierung - Registrierungsprozess und Genehmigungsworkflow - Kundennummer-Zuordnung und Multi-Kunden-Management - Einkaufslisten-Verwaltung und Echtzeit-Synchronisierung - AGB-Akzeptanz und Versionierung - Passwort-Änderung und Konto-Löschung - Feed-Inhalte und Lesebestätigungen
Sicherheitsfeatures (beide Plattformen)¶
| Feature | Beschreibung |
|---|---|
| Session-Timeout | Automatische Abmeldung nach Inaktivität – der InactivityService überwacht Pointer-Events (Tippen, Ziehen, Mausbewegung) |
| Geräte-Integritätsprüfung | Prüfung auf kompromittierte/gerootete Geräte (Mobile) – bei Erkennung wird ein Warnbildschirm angezeigt |
| SSL Certificate Pinning | Schutz vor Man-in-the-Middle-Angriffen (Mobile) |
| URL-Validierung | Externe Links werden nur geöffnet, wenn sie HTTPS verwenden |
| Token-Rotation | JWT-Tokens werden automatisch erneuert |
Theme-Anpassung¶
Beide Plattformen laden ihr Theme aus den ERP-Einstellungen:
- Mobile: Über die „Mobile-App-Theme"-Einstellungen (Kapitel 11.17)
- Web: Über die „Web-App-Theme"-Einstellungen (Kapitel 11.18)
- Caching: Themes werden lokal zwischengespeichert (SharedPreferences) für sofortige Anzeige
- Stale-while-revalidate: Gespeichertes Theme wird sofort angezeigt, aktualisiertes Theme wird im Hintergrund nachgeladen
Ende des Benutzerhandbuchs
Bei Fragen oder Problemen wenden Sie sich bitte an den Systemadministrator oder nutzen Sie den SAM KI-Assistenten im ERP-System.