restmengen function
Restmenge je Position: Belegmenge minus alles, was storniert oder frisch reserviert ist; nie unter null.
Implementation
List<int> restmengen(KasseneckReceipt beleg, {int? jetzt}) {
final rest = [for (final p in beleg.items) p.quantity];
final zeit = jetzt ?? DateTime.now().millisecondsSinceEpoch;
for (final eintrag in beleg.cancellations) {
final at = eintrag['at'];
// Eine Reservierung zählt nur, solange sie frisch ist.
if (eintrag['pending'] == true && (at is! num || at < zeit - stornoReservierungMs)) 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;
}