invoiceSerialize function
Serializes an InvoiceDataModel to the tab-separated wire format.
Implementation
String invoiceSerialize(InvoiceDataModel data) {
final s = <String?>[];
// Core fields
s.add(_sanitize(data.invoiceId));
s.add(_sanitize(data.issueDate));
s.add(_sanitize(data.taxPointDate));
s.add(_sanitize(data.orderId));
s.add(_sanitize(data.deliveryNoteId));
s.add(_sanitize(data.localCurrencyCode));
s.add(_sanitize(data.foreignCurrencyCode));
s.add(_formatNumber(data.currRate));
s.add(_formatNumber(data.referenceCurrRate));
// Supplier party
final sp = data.supplierParty;
s.add(_sanitize(sp.partyName));
s.add(_sanitize(sp.companyTaxId));
s.add(_sanitize(sp.companyVatId));
s.add(_sanitize(sp.companyRegisterId));
final pa = sp.postalAddress;
s.add(_sanitize(pa.streetName));
s.add(_sanitize(pa.buildingNumber));
s.add(_sanitize(pa.cityName));
s.add(_sanitize(pa.postalZone));
s.add(_sanitize(pa.state));
s.add(_sanitize(pa.country));
s.add(_sanitize(sp.contact?.name));
s.add(_sanitize(sp.contact?.telephone));
s.add(_sanitize(sp.contact?.email));
// Customer party
final cp = data.customerParty;
s.add(_sanitize(cp.partyName));
s.add(_sanitize(cp.companyTaxId));
s.add(_sanitize(cp.companyVatId));
s.add(_sanitize(cp.companyRegisterId));
s.add(_sanitize(cp.partyIdentification));
s.add(data.numberOfInvoiceLines?.toString());
s.add(_sanitize(data.invoiceDescription));
// Single invoice line
final line = data.singleInvoiceLine;
s.add(_sanitize(line?.orderLineId));
s.add(_sanitize(line?.deliveryNoteLineId));
s.add(_sanitize(line?.itemName));
s.add(_sanitize(line?.itemEanCode));
s.add(_sanitize(line?.periodFromDate));
s.add(_sanitize(line?.periodToDate));
s.add(_formatNumber(line?.invoicedQuantity));
// Tax category summaries
s.add(data.taxCategorySummaries.length.toString());
for (final tcs in data.taxCategorySummaries) {
s.add(tcs.classifiedTaxCategory.toString());
s.add(tcs.taxExclusiveAmount.toString());
s.add(tcs.taxAmount.toString());
s.add(_formatNumber(tcs.alreadyClaimedTaxExclusiveAmount));
s.add(_formatNumber(tcs.alreadyClaimedTaxAmount));
}
// Monetary summary
s.add(_formatNumber(data.monetarySummary.payableRoundingAmount));
s.add(_formatNumber(data.monetarySummary.paidDepositsAmount));
// Payment means bitmask
s.add(data.paymentMeans?.toString());
return s.map((e) => e ?? '').join('\t');
}