paySerialize function
Transforms a PayDataModel into the tab-separated intermediate format.
Implementation
String paySerialize(PayDataModel data) {
final s = <String?>[];
s.add(_sanitize(data.invoiceId?.toString()));
s.add(data.payments.length.toString());
for (final p in data.payments) {
s.add(p.type.toString());
s.add(_formatNumber(p.amount));
s.add(_sanitize(p.currencyCode));
s.add(_sanitize(p.paymentDueDate));
s.add(_sanitize(p.variableSymbol));
s.add(_sanitize(p.constantSymbol));
s.add(_sanitize(p.specificSymbol));
s.add(_sanitize(p.originatorsReferenceInformation));
s.add(_sanitize(p.paymentNote));
// Bank accounts
s.add(p.bankAccounts.length.toString());
for (final ba in p.bankAccounts) {
s.add(_sanitize(ba.iban));
s.add(_sanitize(ba.bic));
}
// Standing order extension
if (p is StandingOrder) {
s.add('1');
s.add(p.day?.toString());
s.add(p.month?.toString());
s.add(_sanitize(p.periodicity));
s.add(_sanitize(p.lastDate));
} else {
s.add('0');
}
// Direct debit extension
if (p is DirectDebit) {
s.add('1');
s.add(p.directDebitScheme?.toString());
s.add(p.directDebitType?.toString());
s.add(_sanitize(p.ddVariableSymbol));
s.add(_sanitize(p.ddSpecificSymbol));
s.add(_sanitize(p.ddOriginatorsReferenceInformation));
s.add(_sanitize(p.mandateId));
s.add(_sanitize(p.creditorId));
s.add(_sanitize(p.contractId));
s.add(_formatNumber(p.maxAmount));
s.add(_sanitize(p.validTillDate));
} else {
s.add('0');
}
}
// Beneficiary block - one entry per payment, appended after all payments
for (final p in data.payments) {
s.add(_sanitize(p.beneficiary.name));
s.add(_sanitize(p.beneficiary.street));
s.add(_sanitize(p.beneficiary.city));
}
return s.map((e) => e ?? '').join('\t');
}