Browse Source

correção do envio assíncrono

pull/79/head
Leonardo Gregianin 6 years ago
parent
commit
f8e84e51de
  1. 23
      pynfe/processamento/mdfe.py
  2. 13
      pynfe/processamento/serializacao.py
  3. 4
      pynfe/utils/webservices.py

23
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]
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 = '<?xml version="1.0" encoding="UTF-8"?>'
# limpa xml com caracteres bugados para infNFeSupl em NFC-e
# limpa xml com caracteres bugados para infMDFeSupl em NFC-e
xml = re.sub(
'<qrCode>(.*?)</qrCode>',
lambda x: x.group(0).replace('&lt;', '<').replace('&gt;', '>').replace('&amp;', ''),
'<qrCodMDFe>(.*?)</qrCodMDFe>',
lambda x: x.group(0).replace('&lt;', '<').replace('&gt;', '>').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(

13
pynfe/processamento/serializacao.py

@ -938,10 +938,9 @@ class SerializacaoQrcodeMDFe(object):
# adiciona tag infMDFeSupl com qrcode
infMDFeSupl = etree.Element('infMDFeSupl')
etree.SubElement(infMDFeSupl, 'qrCodMDFe').text = f'<![CDATA[{qrcode.strip()}]]>'
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('&lt;', '<').replace('&gt;', '>').replace('amp;', '')
@ -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

4
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',

Loading…
Cancel
Save