subtracted method
Zieht die verkauften Positionen ab.
Gebraucht, weil der Abschluss dauert (Signatur, DEP) und die Erfassung dabei offen bleibt: der naechste Gast steht schon da. Im Augenblick der Antwort kann der Korb deshalb mehr enthalten, als der Beleg ausweist — ihn dann pauschal zu leeren hiesse, diese Position spurlos zu verlieren: nicht berechnet, auf keinem Beleg, nicht mehr auffindbar.
Abgezogen wird nach Kennung und Menge: wurden zwei von drei Kaffee verkauft, bleibt einer stehen.
Implementation
Cart subtracted(Cart sold) {
final mengen = <String, int>{};
for (final p in sold.items) {
mengen[p.id] = (mengen[p.id] ?? 0) + p.quantity;
}
final rest = <Position>[];
for (final p in items) {
final bleibt = p.quantity - (mengen[p.id] ?? 0);
if (bleibt <= 0) continue;
rest.add(bleibt == p.quantity ? p : p.withQuantity(bleibt));
}
return Cart(items: rest);
}