dont write to immutable-dict

This commit is contained in:
Frederik Jaeckel 2025-01-22 14:38:07 +01:00
parent 0d31e60772
commit 6b32c610f5
2 changed files with 46 additions and 27 deletions

View file

@ -429,10 +429,10 @@ class Incoming(metaclass=PoolMeta):
config = Configuration.get_singleton()
if not hasattr(self, 'parsed_data'):
self.parsed_data = {}
if not isinstance(self.parsed_data, dict):
self.parsed_data = {}
p_data = {}
if hasattr(self, 'parsed_data'):
if isinstance(self.parsed_data, dict):
p_data.update(self.parsed_data)
# rsm:CrossIndustryInvoice
xpath_cross_ind = ['rsm:CrossIndustryInvoice']
@ -449,7 +449,7 @@ class Incoming(metaclass=PoolMeta):
msg='invalid type-code: %(code)s (expect: 380, 381)' % {
'code': str(inv_code)}))
self.parsed_data['invoice_number'] = self._readxml_getvalue(
p_data['invoice_number'] = self._readxml_getvalue(
xmltree, xpath_exchg_doc + ['ram:ID'])
# invoice-date
@ -461,7 +461,7 @@ class Incoming(metaclass=PoolMeta):
'document_incoming_invoice_xml.msg_convert_error',
msg='invalid date-format: %(code)s (expect: 102)' % {
'code': str(date_format)}))
self.parsed_data['invoice_date'] = self._readxml_convertdate(
p_data['invoice_date'] = self._readxml_convertdate(
self._readxml_getvalue(xmltree, date_path))
# IncludedNote, 1st line --> 'description', 2nd ff. --> 'comment'
@ -479,7 +479,7 @@ class Incoming(metaclass=PoolMeta):
for y in ['Content', 'ContentCode', 'SubjectCode']
})
if note_list:
self.parsed_data['note_list'] = note_list
p_data['note_list'] = note_list
# rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction
xpath_suppl_chain = xpath_cross_ind + [
@ -496,14 +496,14 @@ class Incoming(metaclass=PoolMeta):
xmltree, xpath_appl_head_agree + ['ram:SellerTradeParty'],
create_party=add_party)
if seller_party:
self.parsed_data['seller_party'] = seller_party
p_data['seller_party'] = seller_party
# company party
buyer_party = self._readxml_party_data(
xmltree, xpath_appl_head_agree + ['ram:BuyerTradeParty'],
create_party=False)
if buyer_party:
self.parsed_data['buyer_party'] = buyer_party
p_data['buyer_party'] = buyer_party
# invoice - lines
# rsm:CrossIndustryInvoice/
@ -519,15 +519,15 @@ class Incoming(metaclass=PoolMeta):
lines_data.append(
self._readxml_invoice_line(xmltree, xpath_line_item, x))
if lines_data:
self.parsed_data['lines_data'] = lines_data
p_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(
p_data['payment'] = {}
p_data['payment']['reference'] = self._readxml_getvalue(
xmltree, xpath_payment + ['ram:PaymentReference'])
self.parsed_data['payment']['currency'] = self._readxml_getvalue(
p_data['payment']['currency'] = self._readxml_getvalue(
xmltree, xpath_payment + ['ram:InvoiceCurrencyCode'])
# num bank accounts
@ -578,7 +578,7 @@ class Incoming(metaclass=PoolMeta):
for x in bank_account.keys()
if bank_account[x]})
if bank_accounts:
self.parsed_data['payment']['bank'] = bank_accounts
p_data['payment']['bank'] = bank_accounts
# invoice-taxes
xpath_invoice_taxes = xpath_payment + ['ram:ApplicableTradeTax']
@ -595,7 +595,7 @@ class Incoming(metaclass=PoolMeta):
('ram:DueDateTypeCode', 'duecode'),
('ram:RateApplicablePercent', 'percent', Decimal)])
if taxes:
self.parsed_data['payment']['taxes'] = taxes
p_data['payment']['taxes'] = taxes
xpath_payterms = xpath_payment + ['ram:SpecifiedTradePaymentTerms']
xpath_discount = ['ram:ApplicableTradePaymentDiscountTerms']
@ -617,7 +617,7 @@ class Incoming(metaclass=PoolMeta):
'discount_amount', Decimal)
])
if pay_terms:
self.parsed_data['payment']['terms'] = pay_terms
p_data['payment']['terms'] = pay_terms
# total
xpath_total = xpath_payment + [
@ -634,7 +634,8 @@ class Incoming(metaclass=PoolMeta):
('ram:DuePayableAmount', 'duepayable', Decimal),
])
if total:
self.parsed_data['total'] = total[0]
p_data['total'] = total[0]
self.parsed_data = p_data
def _readxml_getinvoiceline(self, invoice, line_data):
""" create invoice line in memory