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:
95
lib/feature/delivery/repository/process_repository.dart
Normal file
95
lib/feature/delivery/repository/process_repository.dart
Normal file
@ -0,0 +1,95 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
/// Repository für prozess-übergreifende Aktionen entlang des
|
||||
/// Phasen-Workflows (Sortieren → Beladen → Ausliefern).
|
||||
///
|
||||
/// Aktuell nur ein Stub: Sobald der entsprechende Backend-Endpunkt
|
||||
/// von DOCUcontrol/VARIOcontrol bereitsteht, wird hier die echte
|
||||
/// HTTP-Implementierung eingehängt — die Aufrufer (TourBloc) bleiben
|
||||
/// dann unverändert.
|
||||
class ProcessRepository {
|
||||
ProcessRepository();
|
||||
|
||||
/// Persistiert die vom Fahrer bestätigte Lieferreihenfolge für ein
|
||||
/// Fahrzeug am Backend. Wird ausschließlich beim Bestätigen-Button
|
||||
/// in der Sortier-Page aufgerufen, nicht bei jedem Drag&Drop —
|
||||
/// das lokale Reorder läuft weiterhin nur über ReorderService.
|
||||
Future<void> persistDeliveryOrder({
|
||||
required String carId,
|
||||
required List<String> orderedDeliveryIds,
|
||||
}) async {
|
||||
// STUB: Echte HTTP-Implementierung folgt, sobald der Endpoint steht.
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
debugPrint(
|
||||
"ProcessRepository.persistDeliveryOrder (stub) — carId=$carId, "
|
||||
"order=$orderedDeliveryIds",
|
||||
);
|
||||
}
|
||||
|
||||
/// Hebt die Zuordnung einer Lieferung zu einem Fahrzeug auf. Wird im
|
||||
/// Auswahl-Schritt verwendet, wenn der Fahrer eine bereits seinem Auto
|
||||
/// zugeordnete Lieferung wieder "freigibt", damit ein Kollege sie
|
||||
/// übernehmen kann.
|
||||
///
|
||||
/// TODO(backend): Echte HTTP-Implementierung sobald der DOCUcontrol-
|
||||
/// bzw. VARIOcontrol-Endpoint zum Entfernen der Fahrzeug-Zuordnung
|
||||
/// steht. Aktuell nur Stub mit Log, damit der UI-Flow getestet werden
|
||||
/// kann; die Tour wird nach diesem Call NICHT automatisch refresht
|
||||
/// (das übernimmt später der Stream nach dem echten Endpoint).
|
||||
Future<void> unassignDeliveryFromCar({
|
||||
required String deliveryId,
|
||||
}) async {
|
||||
// STUB: Echte HTTP-Implementierung folgt, sobald der Endpoint steht.
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
debugPrint(
|
||||
"ProcessRepository.unassignDeliveryFromCar (stub) — "
|
||||
"deliveryId=$deliveryId",
|
||||
);
|
||||
}
|
||||
|
||||
/// Meldet einen vom Fahrer dokumentierten Lieferungs-Abbruch (komplette
|
||||
/// Lieferung) an das Backend mit Begründung. Wird zusätzlich zum
|
||||
/// bestehenden `cancelDelivery`-Endpoint im [TourRepository] gefeuert,
|
||||
/// damit auf Backend-Seite die Stornogründe getrennt geführt werden
|
||||
/// können (Reporting / Logistik-Audit).
|
||||
///
|
||||
/// TODO(backend): Echte HTTP-Implementierung sobald der DOCUcontrol-
|
||||
/// Endpoint zum Berichten eines Abbruch-Grunds bereitsteht. Bis dahin
|
||||
/// nur Log, damit der UI-Flow geübt werden kann.
|
||||
Future<void> reportDeliveryCancelled({
|
||||
required String deliveryId,
|
||||
required String reason,
|
||||
}) async {
|
||||
// STUB: Echte HTTP-Implementierung folgt, sobald der Endpoint steht.
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
debugPrint(
|
||||
"ProcessRepository.reportDeliveryCancelled (stub) — "
|
||||
"deliveryId=$deliveryId, reason=$reason",
|
||||
);
|
||||
}
|
||||
|
||||
/// Meldet einen einzelnen Artikel oder eine Komponente als "heute nicht
|
||||
/// auszuliefern" (Teilabbruch). Der Eintrag bleibt in der Lieferung
|
||||
/// bestehen, wird aber im UI ausgegraut und vom Beladen-Fortschritt
|
||||
/// ausgeschlossen. [componentId] wird genau dann gesetzt, wenn nur eine
|
||||
/// einzelne Stücklisten-Position betroffen ist.
|
||||
///
|
||||
/// TODO(backend): Echte HTTP-Implementierung sobald der DOCUcontrol-/
|
||||
/// VARIOcontrol-Endpoint für "Position zurückhalten" bereitsteht. Bis
|
||||
/// dahin wird der Hold-State ausschließlich lokal in der jeweiligen
|
||||
/// Beladen-Page gehalten (siehe `LoadingCustomerPage._heldKeys`).
|
||||
Future<void> reportItemHeld({
|
||||
required String deliveryId,
|
||||
required String articleId,
|
||||
String? componentId,
|
||||
required String reason,
|
||||
}) async {
|
||||
// STUB: Echte HTTP-Implementierung folgt, sobald der Endpoint steht.
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
debugPrint(
|
||||
"ProcessRepository.reportItemHeld (stub) — "
|
||||
"deliveryId=$deliveryId, articleId=$articleId, "
|
||||
"componentId=$componentId, reason=$reason",
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user