remainingQuantities function
Restmenge je Position: Belegmenge minus alles, was storniert oder frisch reserviert ist; nie unter null.
Implementation
List<int> remainingQuantities(KasseneckReceipt receipt, {int? nowMs}) {
final rest = [for (final p in receipt.items) p.quantity];
final zeit = nowMs ?? DateTime.now().millisecondsSinceEpoch;
for (final eintrag in receipt.cancellations) {
final at = eintrag['at'];
// Eine Reservierung zählt nur, solange sie frisch ist.
if (eintrag['pending'] == true && (at is! num || at < zeit - cancellationReservationMs)) continue;
for (final pos in (eintrag['items'] as List?) ?? const []) {
if (pos is! Map) continue;
final index = pos['index'];
final menge = pos['quantity'];
if (index is! int || index < 0 || index >= rest.length) continue;
if (menge is! int) continue;
rest[index] = rest[index] - menge < 0 ? 0 : rest[index] - menge;
}
}
return rest;
}