assertCardRefunds function

void assertCardRefunds(
  1. List<KeckPaymentInput> payments,
  2. KasseneckReceipt? original
)

Karten-Rueckbuchung am Storno, geprueft bevor etwas hinausgeht (Zwilling von assertCardRefunds im npm-Paket):

  • Sie nennt ihren Anbieter (provider; custom fuer eine Erstattung ohne angebundenes Terminal). Ganz ohne Anbieterfelder faellt sie.
  • Ueber einen Anbieter (nicht custom) braucht sie einen Bezug: ihre eigene Terminal-Kennung (providerPaymentId der Erstattung) oder, liegt das original vor, 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',
    );
  }
}