You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

65 lines
2.7 KiB

# -*- coding: utf-8 -*-
# © 2017 Compassion CH <http://www.compassion.ch>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models
from odoo.tools import OrderedDict
class CamtDetailsParser(models.AbstractModel):
"""Parser for camt bank statement import files."""
_inherit = 'account.bank.statement.import.camt.parser'
def parse_transaction_details(self, ns, node, transaction):
"""Parse transaction details (message, party, account...)."""
super(CamtDetailsParser, self).parse_transaction_details(
ns, node, transaction)
# remote party values
party_type = 'Dbtr'
party_type_node = node.xpath(
'../../ns:CdtDbtInd', namespaces={'ns': ns})
if party_type_node and party_type_node[0].text != 'CRDT':
party_type = 'Cdtr'
address_node = node.xpath(
'./ns:RltdPties/ns:%s/ns:PstlAdr' % party_type,
namespaces={'ns': ns})
if address_node and not transaction.get('partner_address'):
address_values = OrderedDict()
street_node = address_node[0].xpath(
'./ns:StrtNm', namespaces={'ns': ns})
if street_node:
address_values['street'] = street_node[0].text
building_node = address_node[0].xpath(
'./ns:BldgNb', namespaces={'ns': ns})
if building_node:
address_values['building'] = building_node[0].text
zip_node = address_node[0].xpath(
'./ns:PstCd', namespaces={'ns': ns})
if zip_node:
address_values['zip'] = zip_node[0].text
city_node = address_node[0].xpath(
'./ns:TwnNm', namespaces={'ns': ns})
if city_node:
address_values['city'] = city_node[0].text
transaction['partner_address'] = self._format_partner_address(
address_values)
# BIC node
bic_node = node.xpath(
'./ns:RltdAgts/ns:%sAgt/ns:FinInstnId/ns:BIC' % party_type,
namespaces={'ns': ns})
if bic_node:
transaction['partner_bic'] = bic_node[0].text
# Transfer account info in fields
transaction['partner_account'] = transaction.get('account_number')
def _format_partner_address(self, address_values):
"""
Hook for formatting the partner address read in CAMT bank statement.
:param address_values: dict: all address values found in statement
Possible keys are ['street', 'building', 'zip', 'city']
Not all keys may be present.
:return: str: formatted address
"""
return ', '.join(address_values.values())