paymentsError function

String? paymentsError(
  1. List<KeckPaymentInput> payments, {
  2. required bool cancellation,
})

Was an der Zahlungsliste nicht stimmt -- null, wenn die Form passt.

Zwilling von gepruefteZahlungen im Client des npm-Pakets, Wortlaut inklusive; cancellation kehrt das Vorzeichen um und erlaubt refundOf, verbietet tenderedCents.

Implementation

String? paymentsError(List<KeckPaymentInput> payments, {required bool cancellation}) {
  if (payments.length > maxPayments) {
    return 'payments: es sind hoechstens $maxPayments Eintraege erlaubt.';
  }
  for (final (i, z) in payments.indexed) {
    final nr = i + 1;
    if (z.method == KeckPaymentMethod.mixed) {
      return 'Zahlung $nr: $mixedNotSentReason';
    }
    if (cancellation ? z.amountCents >= 0 : z.amountCents <= 0) {
      return 'Zahlung $nr: amountCents muss eine ganze Zahl ${cancellation ? 'kleiner' : 'groesser'} als 0 sein.';
    }
    final gegeben = z.tenderedCents;
    if (gegeben != null && (cancellation || gegeben < z.amountCents)) {
      return 'Zahlung $nr: tenderedCents muss eine ganze Zahl von mindestens amountCents sein (nur am Verkauf).';
    }
    final trinkgeld = z.tipCents;
    if (trinkgeld != null && trinkgeld <= 0) {
      return 'Zahlung $nr: tipCents muss eine ganze Zahl groesser als 0 sein.';
    }
    if (z.providerPaymentId != null && z.providerPaymentId!.isEmpty) {
      return 'Zahlung $nr: providerPaymentId muss ein nicht-leerer Text sein.';
    }
    if (z.refundOf != null && (!cancellation || z.refundOf!.isEmpty)) {
      return 'Zahlung $nr: refundOf gibt es nur am Storno, als id der Originalzahlung.';
    }
  }
  return null;
}