From f8e84e51dedc6ef1cff4afe80f4e0e82ebb0d89f Mon Sep 17 00:00:00 2001 From: Leonardo Gregianin Date: Thu, 9 Jul 2020 16:27:47 -0400 Subject: [PATCH] =?UTF-8?q?corre=C3=A7=C3=A3o=20do=20envio=20ass=C3=ADncro?= =?UTF-8?q?no?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/mdfe.py | 25 +++++++++---------------- pynfe/processamento/serializacao.py | 15 +++++++-------- pynfe/utils/webservices.py | 4 ++-- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/pynfe/processamento/mdfe.py b/pynfe/processamento/mdfe.py index 7e2a87c..b5449d0 100644 --- a/pynfe/processamento/mdfe.py +++ b/pynfe/processamento/mdfe.py @@ -69,7 +69,6 @@ class ComunicacaoMDFe(Comunicacao): # Monta XML do corpo da requisição raiz = etree.Element('enviMDFe', xmlns=NAMESPACE_MDFE, versao=VERSAO_MDFE) etree.SubElement(raiz, 'idLote').text = str(id_lote) # numero autoincremental gerado pelo sistema - etree.SubElement(raiz, 'indSinc').text = str(ind_sinc) # 0 para assincrono, 1 para sincrono raiz.append(manifesto) # Monta XML para envio da requisição @@ -96,13 +95,9 @@ class ComunicacaoMDFe(Comunicacao): if ind_sinc == 1: try: # Protocolo com envio OK - try: - inf_prot = prot[0][0] # root protMDFe - except IndexError: - # Estados como GO vem com a tag header - inf_prot = prot[1][0] - + inf_prot = prot[1][0] lote_status = inf_prot.xpath("ns:retEnviMDFe/ns:cStat", namespaces=ns)[0].text + # Lote processado if lote_status == self._edoc_situacao_lote_processado: prot_mdfe = inf_prot.xpath("ns:retEnviMDFe/ns:protMDFe", namespaces=ns)[0] @@ -120,7 +115,7 @@ class ComunicacaoMDFe(Comunicacao): return 1, retorno, manifesto else: # Retorna id do protocolo para posterior consulta em caso de sucesso. - rec = prot[0][0] + rec = prot[1][0] status = rec.xpath("ns:retEnviMDFe/ns:cStat", namespaces=ns)[0].text # Lote Recebido com Sucesso! if status == self._edoc_situacao_arquivo_recebido_com_sucesso: @@ -195,9 +190,9 @@ class ComunicacaoMDFe(Comunicacao): raiz = etree.Element( '{%s}Envelope' % NAMESPACE_SOAP, nsmap={ - 'xsi': NAMESPACE_XSI, - 'xsd': NAMESPACE_XSD, - 'soap': NAMESPACE_SOAP + 'xsi': self._namespace_xsi, + 'xsd': self._namespace_xsd, + self._soap_version: self._namespace_soap } ) @@ -244,16 +239,14 @@ class ComunicacaoMDFe(Comunicacao): try: xml_declaration = '' - # limpa xml com caracteres bugados para infNFeSupl em NFC-e + # limpa xml com caracteres bugados para infMDFeSupl em NFC-e xml = re.sub( - '(.*?)', - lambda x: x.group(0).replace('<', '<').replace('>', '>').replace('&', ''), + '(.*?)', + lambda x: x.group(0).replace('<', '<').replace('>', '>').replace('amp;', ''), etree.tostring(xml, encoding='unicode').replace('\n', '') ) xml = xml_declaration + xml xml = xml.encode('utf8') # necessário para o evento "CONSULTAR NÃO ENCERRADOS" - # print(xml) - # print('-' * 20) # Faz o request com o servidor result = requests.post( diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 575b5fe..b7ddc98 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -938,13 +938,12 @@ class SerializacaoQrcodeMDFe(object): # adiciona tag infMDFeSupl com qrcode infMDFeSupl = etree.Element('infMDFeSupl') etree.SubElement(infMDFeSupl, 'qrCodMDFe').text = f'' - mdfe.insert(1, infMDFeSupl) - # correção da tag qrCodMDFe + # correção da tag qrCode, retira caracteres pois e CDATA tmdfe = etree.tostring(mdfe, encoding='unicode') etree.tostring(mdfe.find('.//qrCodMDFe'), encoding='unicode') \ - .replace('\n','').replace('<','<').replace('>','>').replace('amp;','') + .replace('\n', '').replace('<', '<').replace('>', '>').replace('amp;', '') mdfe = etree.fromstring(tmdfe) if return_qr: @@ -1126,7 +1125,7 @@ class SerializacaoMDFe(Serializacao): etree.SubElement(infANTT, 'RNTRC').text = modal_rodoviario.rntrc # CIOT - if len(modal_rodoviario.ciot) > 0: + if modal_rodoviario.ciot != None: for num, item in enumerate(modal_rodoviario.ciot): infCIOT = etree.SubElement(infANTT, 'infCIOT') etree.SubElement(infCIOT, 'CIOT').text = item.numero_ciot @@ -1136,7 +1135,7 @@ class SerializacaoMDFe(Serializacao): etree.SubElement(infCIOT, 'CNPJ').text = item.cpfcnpj # Vale Pedágio - if len(modal_rodoviario.pedagio) > 0: + if modal_rodoviario.pedagio != None: valePed = etree.SubElement(infANTT, 'valePed') for num, item in enumerate(modal_rodoviario.pedagio): disp = etree.SubElement(valePed, 'disp') @@ -1149,7 +1148,7 @@ class SerializacaoMDFe(Serializacao): etree.SubElement(disp, 'vValePed').text = '{:.2f}'.format(item.valor_pedagio or 0) # Valor do ICMS # Contratantes - if len(modal_rodoviario.contratante) > 0: + if modal_rodoviario.contratante != None: for num, item in enumerate(modal_rodoviario.contratante): infContratante = etree.SubElement(infANTT, 'infContratante') etree.SubElement(infContratante, 'xNome').text = item.nome @@ -1185,7 +1184,7 @@ class SerializacaoMDFe(Serializacao): etree.SubElement(prop, 'tpProp').text = modal_rodoviario.veiculo_tracao.proprietario.tipo # condutor 1-n - if len(modal_rodoviario.veiculo_tracao.condutor) > 0: + if modal_rodoviario.veiculo_tracao.condutor != None: for num, item_condutor in enumerate(modal_rodoviario.veiculo_tracao.condutor): condutor = etree.SubElement(veicTracao, 'condutor') etree.SubElement(condutor, 'xNome').text = item_condutor.nome_motorista @@ -1198,7 +1197,7 @@ class SerializacaoMDFe(Serializacao): # fim-veicTracao # Veículos reboque 1-n - if len(modal_rodoviario.veiculo_reboque) > 0: + if modal_rodoviario.veiculo_reboque != None: for num, item_reboque in enumerate(modal_rodoviario.veiculo_reboque): veicReboque = etree.SubElement(rodo, 'veicReboque') etree.SubElement(veicReboque, 'cInt').text = item_reboque.cInt diff --git a/pynfe/utils/webservices.py b/pynfe/utils/webservices.py index 31f87ae..9e45e80 100644 --- a/pynfe/utils/webservices.py +++ b/pynfe/utils/webservices.py @@ -503,8 +503,8 @@ NFSE = { MDFE = { # unico autorizador de MDF-e 'SVRS': { - 'RECEPCAO': 'mdferecepcao/MDFeRecepcao.asmx', - 'RECEPCAO_SINC': 'mdferecepcao/MDFeRecepcaoSinc.asmx', + 'RECEPCAO': 'MDFeRecepcao/MDFeRecepcao.asmx', + 'RECEPCAO_SINC': 'MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx', 'RET_RECEPCAO': 'mdferetrecepcao/MDFeRetRecepcao.asmx', 'EVENTOS': 'mdferecepcaoevento/MDFeRecepcaoEvento.asmx', 'CONSULTA': 'mdfeconsulta/MDFeConsulta.asmx',