assertCardRefunds function
Karten-Rueckbuchung am Storno, geprueft bevor etwas hinausgeht
(Zwilling von assertCardRefunds im npm-Paket):
- Sie nennt ihren Anbieter (
provider;customfuer eine Erstattung ohne angebundenes Terminal). Ganz ohne Anbieterfelder faellt sie. - Ueber einen Anbieter (nicht
custom) braucht sie einen Bezug: ihre eigene Terminal-Kennung (providerPaymentIdder Erstattung) oder, liegt dasoriginalvor, die Kennung der erstatteten Kartenzahlung dort. Erst wenn beides fehlt, wirft sie.
Implementation
void assertCardRefunds(List<KeckPaymentInput> payments, KasseneckReceipt? original) {
for (final (i, z) in payments.indexed) {
if (!z.method.needsCreditCard) continue;
if (z.provider == null && z.providerPaymentId == null) {
throw KasseneckValidationError(
Aufrufe.cancelReceipt,
'Zahlung ${i + 1}: Karten-Rueckbuchung ohne Anbieter und ohne Kennung '
'(provider angeben, custom fuer eine Erstattung ohne angebundenes Terminal)',
'request',
);
}
if (z.provider == CreditCardProvider.custom || z.providerPaymentId != null) continue;
final bezug = z.refundOf;
final orig = original != null && bezug != null
? (original.payments ?? const <KeckPayment>[]).where((o) => o.id == bezug).firstOrNull
: null;
final kennung = orig?.providerPaymentId;
if (kennung != null && kennung.isNotEmpty) continue;
throw KasseneckValidationError(
Aufrufe.cancelReceipt,
'Zahlung ${i + 1}: Karten-Rueckbuchung ohne Bezug: providerPaymentId der Erstattung am Terminal angeben '
'(oder das Original ueber den Kassenweg lesen, dort traegt es die Kennung der Kartenzahlung)',
'request',
);
}
}