Phasenbasierte Lieferübersicht + Beladen-Flow, plus Migrationsplan für Rust-Backend

UI-Restructuring:
- TabBar in scan_page durch dedizierte Phasen ersetzt: Sortieren / Beladen / Ausliefern
- PhaseBloc + PhaseService leiten Phase aus Tour-/Item-States ab
- DeliverySelectionPage (ab 2 Autos) und DeliverySortPage als eigene Flows
- LoadingOverviewPage / LoadingCustomerPage für die Beladephase
- PhaseStepper-Widget im Home für Phasen-Anzeige
- Lager-Differenzierung (Standardlager 0 vs. Außenlager) via WarehouseBadge

Process-Stubs:
- ProcessRepository für Hold/Cancel/Sort/Assign-Flows (stub, bereit für Backend-Anbindung)

Doku:
- docs/BACKEND_MIGRATION.md: Phasenplan für Umstellung auf das neue
  Rust-Backend (OpenAPI-Generator, Keycloak OIDC, Clean-Arch-Layering)
This commit is contained in:
Dennis Nemec
2026-05-14 22:27:56 +02:00
parent ac6b03227d
commit 456fb59668
29 changed files with 5425 additions and 1015 deletions

View File

@ -19,12 +19,23 @@ class TourLoaded extends TourState {
/// rapid-fire scans coexist without one prematurely clearing the indicator.
int pendingScanRequests;
/// True während der Backend-Call zur Persistierung der Sortier-Reihenfolge
/// läuft. Wird vom Bestätigungs-Button in der Sortier-Page für Spinner
/// und Button-Disabled-State ausgewertet.
bool isPersistingSorting;
/// Letzte Fehlermeldung des Sortier-Persist-Calls. Wird nach Anzeige
/// durch das UI ge-leert (z. B. nach SnackBar).
String? sortingPersistError;
TourLoaded({
required this.tour,
this.distances,
required this.paymentOptions,
required this.sortingInformation,
this.pendingScanRequests = 0,
this.isPersistingSorting = false,
this.sortingPersistError,
});
TourLoaded copyWith({
@ -33,6 +44,9 @@ class TourLoaded extends TourState {
List<Payment>? paymentOptions,
Map<String, List<String>>? sortingInformation,
int? pendingScanRequests,
bool? isPersistingSorting,
String? sortingPersistError,
bool clearSortingPersistError = false,
}) {
return TourLoaded(
tour: tour ?? this.tour,
@ -40,6 +54,10 @@ class TourLoaded extends TourState {
paymentOptions: paymentOptions ?? this.paymentOptions,
sortingInformation: sortingInformation ?? this.sortingInformation,
pendingScanRequests: pendingScanRequests ?? this.pendingScanRequests,
isPersistingSorting: isPersistingSorting ?? this.isPersistingSorting,
sortingPersistError: clearSortingPersistError
? null
: (sortingPersistError ?? this.sortingPersistError),
);
}
}