gebucht function

Kachelbuchung gebucht(
  1. Warenkorb korb,
  2. Positionsentwurf entwurf, {
  3. required bool buendeln,
})

Kachel in den Korb.

Mit buendeln wird eine gleiche Zeile (Name, Preis, Satz) hochgezählt, ohne entsteht je Griff eine Zeile. Die Höchstmenge des Artikels hält auch hier — Warenkorb.mengeGesetzt deckelt, egal woher der Griff kommt.

Implementation

Kachelbuchung gebucht(Warenkorb korb, Positionsentwurf entwurf, {required bool buendeln}) {
  if (buendeln) {
    for (final p in korb.positionen) {
      if (p.name != entwurf.bezeichnung.trim()) continue;
      if (p.priceCents != entwurf.betragCents) continue;
      if (p.vat != entwurf.steuersatz) continue;
      final neu = korb.mengeGesetzt(p.id, p.quantity + 1);
      final zeile = neu.positionen.firstWhere((z) => z.id == p.id);
      return Kachelbuchung(korb: neu, zeileId: p.id, menge: zeile.quantity);
    }
  }
  final neu = korb.hinzugefuegt(entwurf);
  // Ohne Bezeichnung bleibt der Korb unverändert; dann gibt es keine Zeile.
  if (identical(neu, korb) || neu.positionen.isEmpty) {
    return Kachelbuchung(korb: korb, zeileId: '', menge: 0);
  }
  return Kachelbuchung(korb: neu, zeileId: neu.positionen.last.id, menge: 1);
}