closeMyShift method

Future<ShiftCloseResult> closeMyShift({
  1. required String idempotencyKey,
  2. required String shiftId,
  3. required int countedCents,
  4. Map<String, int>? denominations,
  5. int? attempt,
  6. String? comment,
  7. List<TipPayout>? tipPayouts,
  8. AfterCount? afterCount,
  9. bool checkOnly = false,
})

Schicht schliessen (closeMyShift, Recht shift). ShiftCloseResult.recount heisst: bitte noch einmal zaehlen und erneut senden (kein Fehler); nach dem zweiten Zaehlen schliesst der Server, bei grosser Abweichung nur mit comment (comment_required). attempt wird angenommen, wirkt aber nicht: den Versuch zaehlt der Server (hoechstens zwei). tipPayouts: hoechstens der offene Anspruch (DrawerState.tipClaims). afterCount: nach dem Zaehlen Geld entnehmen (cash_drop) oder einlegen (change_in), Betrag positiv; entnehmen hoechstens den gezaehlten Betrag (cash_movement_exceeds_balance), ein Betrag ueber 0 braucht das Recht cashMove (after_count_not_permitted). Gebucht wird nur beim tatsaechlichen Schliessen; die Antwort traegt dann ShiftCloseResult.afterCountReceipt („Bon fürs Kuvert“). Die Art prueft der Server. checkOnly: nur pruefen, nicht schliessen – dieselbe Pruefung wie beim Schliessen, damit die Kasse vor „Geld entnehmen“ weiss, ob nachgezaehlt (recount) oder begruendet (comment_required) werden muss; ShiftCloseResult.ready, wenn das Schliessen mit diesem Betrag ginge. Gebucht wird nichts (auch kein afterCount). Die Zaehlung zaehlt als einer der zwei Versuche; schliesst danach derselbe Betrag, gilt er als dieselbe Zaehlung. Nur true geht hinaus.

Implementation

Future<ShiftCloseResult> closeMyShift({
  required String idempotencyKey,
  required String shiftId,
  required int countedCents,
  Map<String, int>? denominations,
  int? attempt,
  String? comment,
  List<TipPayout>? tipPayouts,
  AfterCount? afterCount,
  bool checkOnly = false,
}) async {
  const name = Aufrufe.closeMyShift;
  final p = <String, dynamic>{
    'idempotencyKey': idempotencyKey,
    'shiftId': shiftId,
    'countedCents': countedCents,
    'denominations': ?denominations,
    'attempt': ?attempt,
    'comment': ?comment,
    if (tipPayouts != null) 'tipPayouts': [for (final a in tipPayouts) a.toJson()],
    if (afterCount != null) 'afterCount': afterCount.toJson(),
    if (checkOnly) 'checkOnly': true,
  };
  kennung(name, 'shiftId', shiftId);
  pruefeSchluessel(name, p);
  pruefeGanzzahlen(name, p);
  return abschlussLesen(name, await transport.call(name, params: p));
}