Files
Holzleitner-Lieferservice-App/lib/domain/entity/scan_progress.dart
Dennis Nemec a9bf8ecdd1 Final commit.
2026-06-01 17:12:28 +02:00

49 lines
1.7 KiB
Dart

/// Status der Scan-Pipeline eines einzelnen `DeliveryItem`.
///
/// - `inProgress`: Soll-Menge noch nicht erreicht, Scanner darf weiterzählen.
/// - `done`: Soll-Menge erreicht; weitere Scans werden serverseitig abgewiesen.
/// - `held`: Pausiert (z. B. „Ware beschädigt, klärt der Fahrer mit dem Lager") —
/// `ScanProgress.heldReason` trägt die Begründung.
/// - `removed`: Item wurde nach dem Laden wieder abgebucht (Retoure, Falschladung).
enum ScanStatus { inProgress, done, held, removed }
/// Embedded Value-Object am `DeliveryItem`. Beschreibt, wie weit der Fahrer
/// mit dem Scannen dieses Items ist — *nicht*, wo das Item logistisch steht.
class ScanProgress {
const ScanProgress({
required this.status,
required this.scannedQuantity,
required this.lastUpdatedAt,
this.creditedQuantity = 0,
this.heldReason,
});
final ScanStatus status;
final int scannedQuantity;
/// Als Gutschrift entfernte Menge (0..=requiredQuantity). Eigene Dimension
/// neben [scannedQuantity]: „wie viele Stück dieser Zeile hat der Kunde
/// nicht angenommen". `status == removed` entspricht voller Gutschrift
/// (creditedQuantity == requiredQuantity).
final int creditedQuantity;
final DateTime lastUpdatedAt;
final String? heldReason;
ScanProgress copyWith({
ScanStatus? status,
int? scannedQuantity,
int? creditedQuantity,
DateTime? lastUpdatedAt,
String? heldReason,
}) {
return ScanProgress(
status: status ?? this.status,
scannedQuantity: scannedQuantity ?? this.scannedQuantity,
creditedQuantity: creditedQuantity ?? this.creditedQuantity,
lastUpdatedAt: lastUpdatedAt ?? this.lastUpdatedAt,
heldReason: heldReason ?? this.heldReason,
);
}
}