feat(header): Datumswahl im Kopf statt Fahrzeug-Pille

Neue Kalender-Pille im Phase-Stepper: zeigt das Tour-Datum und oeffnet einen
Datepicker, um die Tour eines anderen Tages zu laden (z. B. morgen vorab).
Fahrzeugwechsel bleibt ueber den Drawer erreichbar.

- TourDateCubit haelt das gewaehlte Datum (null = heute, Server autoritativ)
- LoadTour({date}) + TourBloc merkt das Datum (RefreshTour laedt denselben Tag)
- Repository getMyTourDetails({date}) -> API listMyTours(date:) -> GET /me/tours?date=

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-09-01 15:42:44 +02:00
parent 7324aa4e7d
commit 7b7cb4eb63
8 changed files with 204 additions and 79 deletions

View File

@ -17,22 +17,26 @@ import 'package:hl_lieferservice/domain/entity/tour_details.dart';
/// Account-Filter sitzt serverseitig im JWT — der Client schickt nie eine
/// `personalnummer`/`accountId` mit.
abstract interface class TourRepository {
/// Die heutige Tour-Übersicht des angemeldeten Fahrers oder `null`,
/// wenn keine Tour für heute angelegt ist (ERP-Sync noch nicht
/// gelaufen, Treiber-Urlaub etc.).
/// Die Tour-Übersicht des angemeldeten Fahrers für [date] (oder „heute",
/// wenn `null`) — bzw. `null`, wenn für den Tag keine Tour angelegt ist
/// (ERP-Sync noch nicht gelaufen, Fahrer-Urlaub etc.).
///
/// Ohne [date] entscheidet der Server über „heute" (autoritativ). Ist
/// [date] gesetzt (Fahrer wählt es im Kopf-Kalender), wird dieses Datum
/// angefragt.
///
/// Liefert nur die schlanke `TourSummary`-Repräsentation;
/// [getTourDetails] zieht dann den vollen Aggregat-Snapshot.
Future<TourSummary?> getMyTourSummaryOfToday();
Future<TourSummary?> getMyTourSummary({DateTime? date});
/// Lädt das volle Tour-Aggregat (Tour + Lieferungen + Items +
/// Stammdaten + Notizen) für die gegebene Tour-Id.
Future<TourDetails> getTourDetails(String tourId);
/// Convenience: kombiniert [getMyTourSummaryOfToday] + [getTourDetails]
/// und gibt `null` zurück, wenn keine Tour existiert. Verwendet die App
/// beim Initial-Load.
Future<TourDetails?> getMyTourDetailsOfToday();
/// Convenience: kombiniert [getMyTourSummary] + [getTourDetails] und gibt
/// `null` zurück, wenn für [date] (Default „heute") keine Tour existiert.
/// Verwendet die App beim Initial-Load und beim Datumswechsel.
Future<TourDetails?> getMyTourDetails({DateTime? date});
/// Schreibt die Sortier-Reihenfolge der Lieferungen einer Tour neu.
///