closeMyShift method
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));
}