remainingQuantities function

List<int> remainingQuantities(
  1. KasseneckReceipt receipt, {
  2. int? nowMs,
})

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