kassierrechnung function

Kassierrechnung kassierrechnung(
  1. Warenkorb warenkorb,
  2. KasseSettingsBetrieb betrieb,
  3. Kassierstand stand
)

Die ganze Rechnung des Kassierens — Zwilling von kassierenRechnung der Browser-Kasse.

Trinkgeld erhöht, was der Gast gibt, nicht den Belegbetrag. Der Beleg trägt den Warenwert; das Trinkgeld bucht das Backend als eigene Positionen. Für das Rückgeld zählt trotzdem beides zusammen — sonst bekäme der Gast sein Trinkgeld als Wechselgeld zurück.

Implementation

Kassierrechnung kassierrechnung(Warenkorb warenkorb, KasseSettingsBetrieb betrieb, Kassierstand stand) {
  final summe = warenkorb.summeCents;
  final rabatt = stand.rabattCents > summe ? summe : (stand.rabattCents < 0 ? 0 : stand.rabattCents);
  final zahlen = zuZahlen(warenkorb, rabatt);
  final trinkgeld = betrieb.trinkgeld && stand.trinkgeldCents > 0 ? stand.trinkgeldCents : 0;
  final gesamt = zahlen + trinkgeld;
  final bar = stand.zahlungsart == KeckPaymentMethod.cash && betrieb.rueckgeld;
  final gegeben = bar ? stand.gegebenCents : null;
  final pruefung = abschlussPruefung(
    zahlungsart: stand.zahlungsart,
    zuZahlen: gesamt,
    gegeben: stand.gegebenCents,
    rueckgeldAn: betrieb.rueckgeld,
    leer: warenkorb.istLeer,
  );
  return Kassierrechnung(
    summeCents: summe,
    rabattCents: rabatt,
    zuZahlenCents: zahlen,
    trinkgeldCents: trinkgeld,
    gesamtCents: gesamt,
    bar: bar,
    gegebenCents: gegeben,
    // Nichts getippt heißt nicht „zu wenig": der Kassier ist schlicht noch
    // nicht fertig, und dafür gibt es keine rote Meldung.
    fehltCents: bar && gegeben != null && gegeben > 0 && gegeben < gesamt ? gesamt - gegeben : 0,
    rueckgeldCents: bar && gegeben != null ? rueckgeld(gesamt, gegeben) : 0,
    bereit: pruefung.bereit,
    grund: pruefung.grund,
  );
}