54 lines
1.4 KiB
Dart
54 lines
1.4 KiB
Dart
/// Aggregat-Wurzel eines Tour-Tages.
|
|
///
|
|
/// Die `Tour` selbst ist minimal — sie hält nur Identität und Eckdaten;
|
|
/// die fachlich interessanten Daten (Lieferungen + Stammdaten-Lookups)
|
|
/// sitzen in `TourDetails`. Diese Trennung erlaubt es, Touren-Listen
|
|
/// (z. B. `/me/tours/today`) zu rendern, ohne das gesamte Aggregat
|
|
/// laden zu müssen.
|
|
class Tour {
|
|
const Tour({
|
|
required this.id,
|
|
required this.accountId,
|
|
required this.date,
|
|
required this.syncedAt,
|
|
});
|
|
|
|
final String id;
|
|
final int accountId;
|
|
final DateTime date;
|
|
|
|
/// Zeitpunkt des letzten ERP-Sync. Wird in der Header-Zeile als
|
|
/// „Stand: …"-Hinweis angezeigt — wenn das ungewöhnlich alt ist, sieht
|
|
/// der Fahrer das.
|
|
final DateTime syncedAt;
|
|
|
|
Tour copyWith({
|
|
String? id,
|
|
int? accountId,
|
|
DateTime? date,
|
|
DateTime? syncedAt,
|
|
}) {
|
|
return Tour(
|
|
id: id ?? this.id,
|
|
accountId: accountId ?? this.accountId,
|
|
date: date ?? this.date,
|
|
syncedAt: syncedAt ?? this.syncedAt,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Tagestour-Übersicht, wie sie `/me/tours/today` liefert. Schlankes Objekt
|
|
/// für die Initialphase (Tour-Auswahl), ohne das volle Aggregat zu
|
|
/// transportieren.
|
|
class TourSummary {
|
|
const TourSummary({
|
|
required this.tourId,
|
|
required this.tourDate,
|
|
required this.deliveryCount,
|
|
});
|
|
|
|
final String tourId;
|
|
final DateTime tourDate;
|
|
final int deliveryCount;
|
|
}
|