41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import api, models
|
|
|
|
|
|
class L10n_Mx_EdiDocument(models.Model):
|
|
_inherit = 'l10n_mx_edi.document'
|
|
|
|
# -------------------------------------------------------------------------
|
|
# BUSINESS METHODS
|
|
# -------------------------------------------------------------------------
|
|
|
|
@api.model
|
|
def _decode_cfdi_attachment(self, cfdi_data):
|
|
# EXTENDS 'l10n_mx_edi'
|
|
def get_node(node, xpath):
|
|
nodes = node.xpath(xpath)
|
|
return nodes[0] if nodes else None
|
|
|
|
cfdi_infos = super()._decode_cfdi_attachment(cfdi_data)
|
|
if not cfdi_infos:
|
|
return cfdi_infos
|
|
|
|
cfdi_node = cfdi_infos['cfdi_node']
|
|
|
|
external_trade_node = get_node(cfdi_node, "//*[local-name()='ComercioExterior']")
|
|
if external_trade_node is None:
|
|
return cfdi_infos
|
|
|
|
cfdi_infos.update({
|
|
'ext_trade_node': external_trade_node,
|
|
'ext_trade_certificate_key': external_trade_node.get('ClaveDePedimento', ''),
|
|
'ext_trade_certificate_source': external_trade_node.get('CertificadoOrigen', '').replace('0', 'No').replace('1', 'Si'),
|
|
'ext_trade_nb_certificate_origin': external_trade_node.get('CertificadoOrigen', ''),
|
|
'ext_trade_certificate_origin': external_trade_node.get('NumCertificadoOrigen', ''),
|
|
'ext_trade_nb_reliable_exporter': external_trade_node.get('NumeroExportadorConfiable', ''),
|
|
'ext_trade_incoterm': external_trade_node.get('Incoterm', ''),
|
|
'ext_trade_rate_usd': external_trade_node.get('TipoCambioUSD', ''),
|
|
'ext_trade_total_usd': external_trade_node.get('TotalUSD', ''),
|
|
})
|
|
return cfdi_infos
|