diff --git a/source/app/controllers/pacs/comerciodigital/comercio.py b/source/app/controllers/pacs/comerciodigital/comercio.py index 7e195ae..4e08469 100644 --- a/source/app/controllers/pacs/comerciodigital/comercio.py +++ b/source/app/controllers/pacs/comerciodigital/comercio.py @@ -41,6 +41,12 @@ logging.getLogger('requests').setLevel(logging.ERROR) TIMEOUT = 10 +NAMESPACES = { + '3.3': 'http://www.sat.gob.mx/cfd/3', + '4.0': 'http://www.sat.gob.mx/cfd/4', + 'tdf': 'http://www.sat.gob.mx/TimbreFiscalDigital', +} + def pretty_print_POST(req): """ @@ -175,26 +181,29 @@ class PACComercioDigital(object): info['key'] = base64.b64encode(info['key_enc']).decode() info['cer'] = base64.b64encode(info['cer_ori']).decode() - NS_CFDI = { - 'cfdi': 'http://www.sat.gob.mx/cfd/3', - 'tdf': 'http://www.sat.gob.mx/TimbreFiscalDigital', - } tree = ET.fromstring(cfdi.encode()) + version = tree.attrib['Version'] + + namespaces = { + 'cfdi': NAMESPACES[version], + 'tdf': NAMESPACES['tdf'], + } + tipo = tree.xpath( 'string(//cfdi:Comprobante/@TipoDeComprobante)', - namespaces=NS_CFDI) + namespaces=namespaces) total = tree.xpath( 'string(//cfdi:Comprobante/@Total)', - namespaces=NS_CFDI) + namespaces=namespaces) rfc_emisor = tree.xpath( 'string(//cfdi:Comprobante/cfdi:Emisor/@Rfc)', - namespaces=NS_CFDI) + namespaces=namespaces) rfc_receptor = tree.xpath( 'string(//cfdi:Comprobante/cfdi:Receptor/@Rfc)', - namespaces=NS_CFDI) + namespaces=namespaces) uid = tree.xpath( 'string(//cfdi:Complemento/tdf:TimbreFiscalDigital/@UUID)', - namespaces=NS_CFDI) + namespaces=namespaces) data = ( f"USER={auth['user']}", f"PWDW={auth['pass']}", diff --git a/source/app/controllers/utils.py b/source/app/controllers/utils.py index 8970bef..73f2651 100644 --- a/source/app/controllers/utils.py +++ b/source/app/controllers/utils.py @@ -55,7 +55,7 @@ from dateutil import parser from .cfdi_xml import CFDI -from settings import DEBUG, DB_COMPANIES, PATHS, TEMPLATE_CANCEL, RFCS +from settings import DEBUG, DB_COMPANIES, PATHS, TEMPLATE_CANCEL, RFCS, PRE from .pacs.cfdi_cert import SATCertificate from .pacs import PACComercioDigital @@ -88,6 +88,7 @@ PACS = { 'finkok': PACFinkok, 'comercio': PACComercioDigital, } + NS_CFDI = { 'cfdi': 'http://www.sat.gob.mx/cfd/3', 'tdf': 'http://www.sat.gob.mx/TimbreFiscalDigital', @@ -839,8 +840,10 @@ def make_xml(data, certificado): def get_pac_by_rfc(cfdi): tree = ET.fromstring(cfdi.encode()) + version = tree.attrib['Version'] + NAME_SPACES = {'cfdi': PRE[version][1:-1], 'tdf': PRE['TIMBRE'][1:-1]} path = 'string(//cfdi:Complemento/tdf:TimbreFiscalDigital/@RfcProvCertif)' - rfc_pac = tree.xpath(path, namespaces=NS_CFDI) + rfc_pac = tree.xpath(path, namespaces=NAME_SPACES) return RFCS[rfc_pac] diff --git a/source/app/models/main.py b/source/app/models/main.py index 0be55aa..496a847 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -10680,7 +10680,7 @@ def get_cp(cp): cursor = con.cursor() sql = """SELECT estado, municipio, clave, colonia, key_estado FROM codigos, colonias, municipios, estados - WHERE colonias.id_cp=codigos.id + WHERE codigos.id_colonia=colonias.id AND codigos.id_municipio=municipios.id AND municipios.id_estado=estados.id AND cp=? @@ -10703,7 +10703,7 @@ def get_cp(cp): else: data['colonia'] = [r[3] for r in rows] - print('DATA', data) + print('CP', cp, data) return data diff --git a/source/db/cp.db b/source/db/cp.db index 81a993f..924d225 100644 Binary files a/source/db/cp.db and b/source/db/cp.db differ