restmengen function

List<int> restmengen(
  1. KasseneckReceipt beleg, {
  2. int? jetzt,
})

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;
}