diff --git a/document.py b/document.py index 2b4dd4b..28431db 100644 --- a/document.py +++ b/document.py @@ -466,6 +466,64 @@ class Incoming(metaclass=PoolMeta): if lines_data: self.parsed_data['lines_data'] = lines_data + # payment data + xpath_payment = xpath_suppl_chain + [ + 'ram:ApplicableHeaderTradeSettlement'] + self.parsed_data['payment'] = {} + self.parsed_data['payment']['reference'] = self._readxml_getvalue( + xmltree, xpath_payment + ['ram:PaymentReference']) + self.parsed_data['payment']['currency'] = self._readxml_getvalue( + xmltree, xpath_payment + ['ram:InvoiceCurrencyCode']) + + # num bank accounts + xpath_bankaccounts = xpath_payment + [ + 'ram:SpecifiedTradeSettlementPaymentMeans'] + num_bank = len(xmltree.xpath( + self._readxml_xpath(xpath_bankaccounts), namespaces=xmltree.nsmap)) + bank_accounts = [] + for x in range(num_bank): + bank_account = { + 'info': self._readxml_getvalue( + xmltree, xpath_bankaccounts + [x + 1, 'ram:Information']), + 'type': self._readxml_getvalue( + xmltree, xpath_bankaccounts + [x + 1, 'ram:TypeCode']), + # debitor + 'debitor_iban': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:PayerPartyDebtorFinancialAccount', + 'ram:IBANID']), + # creditor + 'creditor_iban': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:PayeePartyCreditorFinancialAccount', + 'ram:IBANID']), + 'creditor_name': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:PayeePartyCreditorFinancialAccount', + 'ram:AccountName']), + # financial card + 'card_id': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:ApplicableTradeSettlementFinancialCard', + 'ram:ID']), + 'card_holder_name': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:ApplicableTradeSettlementFinancialCard', + 'ram:CardholderName']), + # bank name + 'institution': self._readxml_getvalue( + xmltree, xpath_bankaccounts + + [x + 1, 'ram:PayeeSpecifiedCreditorFinancialInstitution', + 'ram:BICID']), + } + + # add to list of bank accounts, skip empty values + bank_accounts.append({ + x: bank_account[x] + for x in bank_account.keys() + if bank_account[x]}) + if bank_accounts: + self.parsed_data['payment']['bank'] = bank_accounts def _readxml_getinvoiceline(self, invoice, line_data): """ create invoice line in memory diff --git a/tests/facturx-extended.xml b/tests/facturx-extended.xml index d808306..6b964a8 100644 --- a/tests/facturx-extended.xml +++ b/tests/facturx-extended.xml @@ -194,6 +194,13 @@ DE02300209000106531065 mbs + + DE02300209000106531065 + + + DE02300209000106531065 + Card Holder + WELADED1PMB