invoiceSerialize function

String invoiceSerialize(
  1. InvoiceDataModel data
)

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');
}