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 persistDeliveryOrder({ required String carId, required List 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 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 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 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", ); } }