checkVoucher function
Gutschein am Code pruefen (Gutschein-Recht voucherRedeem). Der Code wird
tolerant eingelesen (Gross/klein, Bindestriche, Leerzeichen, O/0,
I/L/1) und vor dem Senden auf sein Pruefzeichen geprueft: ein
Tippfehler geht nie ueber das Netz, sondern endet mit
KasseneckValidationError. Fachliche Fehler kommen als
KasseneckApiError mit dem Code des Servers (voucher_not_found,
too_many_voucher_checks, not_permitted …). Gesendet wird die
Normalform; kein Text dieses Aufrufs nennt den Code.
Implementation
Future<VoucherCheck> checkVoucher(RegisterTransport transport, String code) async {
const name = Aufrufe.checkVoucher;
final geprueft = VoucherCode.validate(code);
// Der Code steht bewusst nicht in der Meldung.
if (geprueft is! Valid) throw const KasseneckValidationError(name, 'code ist kein gueltiger Gutscheincode', 'request');
final normal = geprueft.normalized;
final geheim = [normal, VoucherCode.format(normal)];
final Map<String, dynamic> daten;
try {
daten = await transport.call(name, params: {'code': normal});
} on KasseneckApiError catch (fehler) {
// Ein Servertext, der den Code wiederholt, wird geschwaerzt; Code und
// Daten bleiben, damit die Kasse am Code entscheidet.
if (!geheim.any(fehler.message.contains)) rethrow;
final text = geheim.fold(fehler.message, (t, g) => t.split(g).join('****'));
throw KasseneckApiError(fehler.functionName, text, code: fehler.code, details: fehler.details);
}
return _pruefungLesen(name, daten);
}