Commit Graph

26 Commits

Author SHA1 Message Date
335cf02a9f feat: Adresszusatz (Ortsteil/Etage/Hinweis) anzeigen, Land nur im Ausland
- Address.addition aus dem Backend (ERP-Freitext, praktisch Ortsteil,
  Etage oder Hinweis); API-Client neu generiert.
- Listen (Sortieren, Beladen, Liefer-Übersicht): Adresse mit Zusatz in
  Klammern, z. B. „… 41472 Neuss (Holzheim)".
- Lieferdetails: „Zusatz: …" unter der Anschrift von Empfänger und
  Besteller; Land nur außerhalb Deutschlands.
- Maps-Suche weiter ohne Zusatz (sonst stört „3 Etage" die Suche).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:13:28 +02:00
d650c735f8 fix: Empfänger statt Besteller in Umlade-Dialogen und Filial-Abholung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 15:57:12 +02:00
857c92031a feat: abweichende Lieferadresse und Empfänger vor Ort anzeigen
Belege können im ERP eine eigene Lieferadresse (LieferAdressId) mit
anderer Person tragen als der Besteller. Die App zeigt jetzt überall den
Empfänger vor Ort:

- TourDetails.recipientOf liefert Empfänger (Name aus der Lieferadresse,
  sonst Besteller), Lieferanschrift und differsFromOrderer.
- Sortieren, Auswählen, Beladen und Liefer-Übersicht: Empfängername +
  Lieferadresse, bei Abweichung „Bestellt von: <Kunde>".
- Lieferdetails: hervorgehobene Karte „Abweichende Lieferadresse" mit
  Empfänger, Anschrift und Kontakt; Kunden-Block als „Besteller (Kunde)"
  mit Adresse, Kundennummer und Kontaktdaten.
- Maps navigiert zur Lieferadresse statt zur Kundenadresse; AppBar,
  Unterschrift und Beladen-Avatar nutzen den Empfänger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 15:51:31 +02:00
99247b4b67 fix(pickup): nach vollständiger Filial-Abholung direkt die Lieferung öffnen
Der Fertig-Button der Filial-Abholung ersetzt die Scan-Page jetzt durch
DeliveryDetail (pushReplacement) statt zur Übersicht zurückzukehren.
Zurück aus der Lieferung führt weiterhin zur Übersicht.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 15:31:09 +02:00
c239cdfd3e feat(retry): jeder dynamisch geladene Request hat im Fehlerfall einen Retry
Inventur aller Lese-Requests (Tour, Fahrzeuge, Zahlungsmethoden,
Foto-Vorschauen) und aller Stellen, an denen ihr Fehlerzustand gerendert wird.
Geschlossene Luecken:

- Sortieren-Seite: TourLoadFailed fiel in den Lade-Zweig -> Endlos-Spinner
  ohne Ausweg. Jetzt Fehlerseite mit 'Erneut versuchen' im Header-Rahmen
- Home: scheiterte beim Start CarLoad oder LoadTour, wurde die Phase nie
  geladen -> Endlos-Spinner. Jetzt Fehlerseite mit Retry (+ Drawer)
- Beladen-/Auswaehlen-Seite: Fehlerseite stand ohne Scaffold/Header/Drawer
  da; jetzt im selben Rahmen wie die uebrigen Zustaende
- Hintergrund-Reload (refreshError): Snackbar jetzt MIT Retry-Aktion und
  zentral im PhaseStepper-Header -> gilt in allen Phasen (vorher nur
  Ausliefern, ohne Retry; auf Sortieren/Beladen blieb der Fehler stumm)
- AttachmentImage: Fehleranzeige ist antippbar ('Erneut laden')

Zahlungsmethoden haben den Retry bereits aus dem vorigen Commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 12:15:19 +03:00
553d3ef354 fix(delivery): unbeladene Lieferungen nicht in Auslieferung zeigen
Nach dem Anzeige-/Zuordnungs-Fix erschien eine neu gesyncte, noch NICHT
beladene Lieferung sofort in der Auslieferung — obwohl im Standardlager
nichts geladen wurde. Sie gehört aber noch in die Beladen-Phase.

Auslieferung zeigt aktive Lieferungen jetzt nur, wenn ihre Standardlager-
Beladung fertig ist (standardWarehouseLoadingDone). Pausiert/fertig/
abgebrochen (post-Beladung) bleiben unverändert sichtbar; unbeladene
erscheinen weiter in Beladen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 23:15:42 +02:00
30fdde1109 fix(delivery): Auslieferung zeigt Single-Car-Lieferungen wie Beladen
Die Auslieferungs-Übersicht filterte immer nach assignedCarId==selectedCarId,
während die Beladen-Übersicht bei Single-Car-Teams ALLE Lieferungen zeigt.
Folge: eine neu importierte, noch nicht zugeordnete Lieferung
(assignedCarId == null) erschien in Beladen (und ließ sich scannen), aber
nach dem Scannen NICHT in der Auslieferung.

Auslieferung nutzt jetzt dieselbe multiCarTeam-Logik (CarsBloc,
cars.length >= 2): Single-Car → alle Lieferungen, Multi-Car → nach
assignedCarId filtern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 22:49:23 +02:00
9ec3bba047 feat(tour): Sortieren-Lade-Branch nutzt ebenfalls PhaseStepper (kein Bar-Flackern)
Auch der Lade-Zwischenzustand (state is! TourLoaded, u.a. waehrend 'Neu laden')
zeigt jetzt die PhaseStepper-AppBar statt der schlichten AppBar -> die Leiste
springt beim Reload nicht mehr kurz auf den Theme-Default zurueck.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 15:35:00 +02:00
178edfdeed feat(tour): Sortieren-Leerzustand zeigt PhaseStepper (primary) statt schlichter AppBar
Der TourEmpty-Zweig der Sortieren-Seite rendert jetzt den PhaseStepper
(Steps, theme.primaryColor) als AppBar — die Phasen-Navigation bleibt sichtbar
und die Optik ist primary statt der Theme-Default-AppBar. Die mittige
'Keine Lieferungen heute'-Nachricht (inkl. 'Neu laden') bleibt unveraendert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 15:34:05 +02:00
16648240cd feat(tour): 'Neu laden'-Button im Sortieren-Leerzustand
TourEmpty-Leerzustand der Sortieren-Seite ('Keine Lieferungen heute') bekommt
einen 'Neu laden'-Button (LoadTour) — analog zum Beladen-Empty-State.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 15:29:49 +02:00
a206636ed0 feat(tour): Tour-Neuladen ueberall + Drawer in Leer-/Ladezustaenden
- PhaseStepper: Reload-Button (RefreshTour, Spinner waehrend Refresh)
- Beladen-Empty-State: 'Neu laden'-Button (LoadTour) + Hinweis 'keine Tour verfuegbar'
- Drawer + AppBar in TourEmpty/Lade-Branches (Beladen-Uebersicht, Lieferungen auswaehlen, Sortieren) -> kein Festsitzen ohne Logout

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:08:18 +02:00
a9bf8ecdd1 Final commit. 2026-06-01 17:12:28 +02:00
3ecbc82885 Phase C+D-1: Cars-Domain auf Rust-Backend umgestellt
Clean-Arch-Schichten für Cars:
- lib/domain/entity/car.dart: UUID-id, accountId (Personalnummer),
  plate, active. Pendant zum Backend-Schema.
- lib/domain/repository/cars_repository.dart: Port — listMine,
  create, update. Keine teamId/personalnummer-Parameter, der
  Account fließt serverseitig aus dem JWT.
- lib/data/mapper/car_mapper.dart: API-DTO (built_value) → Domain.
- lib/data/repository/cars_repository_impl.dart: konkrete Impl via
  generierter CarsApi (dio), mit DioException → CarsRepositoryException-
  Übersetzung.

Feature-Cars-Refactoring:
- CarsBloc nimmt jetzt die Domain-Repository-Schnittstelle. Events:
  CarLoad/CarAdd/CarEdit/CarDeactivate (statt CarDelete). Keine
  teamId-Parameter mehr. Kein authBloc-Bezug, Session-Expiry läuft
  über den globalen Provider-Stream.
- CarsState sealed mit CarsInitial/Loading/LoadingFailed/Loaded.
- Pages: car_management_page, car_management, car_card, car_fail_page,
  car_selection_page komplett auf die neue Entity und Event-Signaturen.
- Alte lib/feature/cars/service/cars_service.dart und
  lib/feature/cars/repository/cars_repository.dart gelöscht.

CarSelectBloc + Storage:
- CarSelection.selectedCarId von int? auf String? umgestellt.
- CarSelectionRepository persistiert die UUID jetzt als String;
  defensive Migration für noch vorhandene int-Werte (alte
  Pre-Migration-Installations) verwirft den Wert leise und
  erzwingt Neuauswahl.

Konsequenz-Cleanup im Tour-Code (Phase-D-Vorbereitung):
- Delivery.carId String? statt int?.
- Tour.hasUndeliveredLoadedArticles / getFinishedDeliveries auf
  String carId.
- _selectedCarId / int? carId / int selectedCarId in DeliveryOverview,
  LoadingCustomerPage/OverviewPage, Home, DeliverySelection/SortPage,
  DeliveryInfo/List, CustomSortDialog, SortableDeliveryList auf
  String umgestellt.
- TourRepository ersetzt int.parse(carId)/int.tryParse-Zuweisungen
  direkt durch String.
- lib/model/car.dart wird zum Re-Export der neuen Domain-Entity,
  damit Legacy-Imports während Phase-D-Übergang weiter compilieren.

DI:
- app.dart: CarsBloc bekommt CarsRepositoryImpl(locator<HolzleitnerApi>())
  statt der alten CarsRepository(service: CarService()).

Build (flutter build apk --debug) durch, flutter analyze ohne
errors.
2026-05-15 11:55:24 +02:00
456fb59668 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)
2026-05-14 22:27:56 +02:00
ac6b03227d Added components to article 2026-05-11 17:12:05 +02:00
2470299a10 BIG FAT 2026-04-28 13:03:09 +02:00
8cf0ea4e9a Added fail pages to retry the failed operation to delivery overview, notes and cars. Furthermore, I added better handling if the user is finished scanning articles. 2026-01-29 16:45:29 +01:00
366a3560dc Implemented new custom sort and separated the sorted view for each car 2026-01-27 00:21:23 +01:00
2436177c95 Implemented new set article mechanism for unscannable articles 2026-01-10 20:20:28 +01:00
1d6c62a392 Removed unused imports and moved tour bloc to delivery to be shared by overview and detailed view 2026-01-09 12:24:31 +01:00
ecf8745762 Finalized sorting in delivery overview 2026-01-09 12:16:52 +01:00
622967e5c1 Finished custom sorting of deliveries 2026-01-07 15:19:34 +01:00
9111dc92db Added Streams to TourRepository 2026-01-03 01:29:21 +01:00
edb8676f5a Added custom tour ordering 2025-12-20 21:00:33 +01:00
7ea9108f62 Implemented settings, new scan, enhanced UI/UX 2025-11-04 16:52:39 +01:00
b19a6e1cd4 Initial draft 2025-09-20 16:14:06 +02:00