From 3c5e8cd24c4d07c8983e908be88ad202b98ae280 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 18 Sep 2018 16:20:06 -0300 Subject: [PATCH 01/10] [FIX] Try to fix strange with spaces in some eletronic documents --- pytrustnfe/xml/__init__.py | 7 +++---- setup.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py index fd870a2..853050a 100644 --- a/pytrustnfe/xml/__init__.py +++ b/pytrustnfe/xml/__init__.py @@ -19,7 +19,6 @@ def render_xml(path, template_name, remove_empty, **nfe): nfe = recursively_normalize(nfe) env = Environment( loader=FileSystemLoader(path), extensions=['jinja2.ext.with_']) - env.filters["normalize"] = filters.strip_line_feed env.filters["normalize_str"] = filters.normalize_str env.filters["format_percent"] = filters.format_percent @@ -32,6 +31,9 @@ def render_xml(path, template_name, remove_empty, **nfe): parser = etree.XMLParser(remove_blank_text=True, remove_comments=True, strip_cdata=False) root = etree.fromstring(xml, parser=parser) + for element in root.iter("*"): # remove espaços em branco + if element.text is not None and not element.text.strip(): + element.text = None if remove_empty: context = etree.iterwalk(root) for dummy, elem in context: @@ -39,9 +41,6 @@ def render_xml(path, template_name, remove_empty, **nfe): if recursively_empty(elem): parent.remove(elem) return root - for element in root.iter("*"): # remove espaços em branco - if element.text is not None and not element.text.strip(): - element.text = None return etree.tostring(root, encoding=str) diff --git a/setup.py b/setup.py index 8cceb82..49a7a00 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.5" +VERSION = "1.0.6" setup( From 43289e84c1d6e6473768d8af4fb847d14698efc9 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 18 Sep 2018 18:56:37 -0300 Subject: [PATCH 02/10] =?UTF-8?q?[FIX]=20Percentuais=20de=20tributa=C3=A7?= =?UTF-8?q?=C3=A3o=20para=20nota=20paulistana?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml | 2 ++ pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml | 2 ++ setup.py | 2 +- tests/XMLs/paulistana_signature.xml | 10 +++++----- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml b/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml index 8e9f34d..23eb9e7 100644 --- a/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml +++ b/pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml @@ -55,6 +55,8 @@ {{ rps.tomador.cep }} {{ rps.descricao|normalize|escape }} + {{ rps.valor_carga_tributaria }} + {{ rps.fonte_carga_tributaria }} {% endfor %} diff --git a/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml b/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml index d828534..ae35893 100644 --- a/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml +++ b/pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml @@ -46,6 +46,8 @@ {{ rps.tomador.cep }} {{ rps.descricao }} + {{ rps.valor_carga_tributaria }} + {{ rps.fonte_carga_tributaria }} {% endfor %} diff --git a/setup.py b/setup.py index 49a7a00..457526a 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.6" +VERSION = "1.0.7" setup( diff --git a/tests/XMLs/paulistana_signature.xml b/tests/XMLs/paulistana_signature.xml index c4f8cbc..70d26dc 100644 --- a/tests/XMLs/paulistana_signature.xml +++ b/tests/XMLs/paulistana_signature.xml @@ -1,4 +1,4 @@ -12345678901234false2016-08-292016-08-291E4fpHYkQa7Naxn6IKGb7NwwZu5tPk/KXJ9hCwtZgq0xvKS450aQqqBL+7Iv46lTgqrSMu7+gLrl+LC1qs/8aT2mbHE8uaVFSbzwZ+sF/BkcT6nsFHLMswEiTAEs95Jb7hN1cC91xqQGRH4buw0TzxHKmhuLJ22WwtG/scxyKtjM=12345611RPS2016-08-29NT0.000.000.000.000.00074985.00false123456Trustcode1Vinicius de Moraes, 4242CorregoFloripaSC88037240Venda de servico +12345678901234false2016-08-292016-08-291E4fpHYkQa7Naxn6IKGb7NwwZu5tPk/KXJ9hCwtZgq0xvKS450aQqqBL+7Iv46lTgqrSMu7+gLrl+LC1qs/8aT2mbHE8uaVFSbzwZ+sF/BkcT6nsFHLMswEiTAEs95Jb7hN1cC91xqQGRH4buw0TzxHKmhuLJ22WwtG/scxyKtjM=12345611RPS2016-08-29NT0.000.000.000.000.00074985.00false123456Trustcode1Vinicius de Moraes, 4242CorregoFloripaSC88037240Venda de servico @@ -8,12 +8,12 @@ -ePJnD6hyDvlJo08PFX8h2TXk0ZM= +IAh8GGlbp/Tnqma+2RZ7UrGZhTc= -GbaQaTEtxuKdRRaadginWPFH5K65ywqEikkwChWO3xX5Kglq8RPm4+LjnpJmuTcE -9I2BVon3GJFh+c/6RKzJPose6FXog2xnCpTOgwA/rks/gKsUAaRlXCPsLcKMKaOj -3eH21RHEyrxBAbdpEUdlEgQWaWzmGq009EiQ544sD6c= +gjkMTCq0uuaX8tkRBlLjgybn8a2O4Axl6HHq1MN8nnEMliERcziU3pa3r1jbghlE +EUyIO8bTZ0V7c05pQvHQgVUHcSo6vHld4ZQNk7JfMfmpez4uxrUeuSrSqSLCwT9W +NmTY9EJ16GyrQNELw+SkYuEFOvqZTU3qjDZkLddQ8bc= MIICMTCCAZqgAwIBAgIQfYOsIEVuAJ1FwwcTrY0t1DANBgkqhkiG9w0BAQUFADBX From 21994c73e8be6cdd69991892cddd68a0f517748b Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 24 Sep 2018 19:31:51 -0300 Subject: [PATCH 03/10] =?UTF-8?q?[FIX]=20Removendo=20previamente=20os=20es?= =?UTF-8?q?pa=C3=A7os=20resolve=20o=20problema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/xml/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py index 853050a..6f60020 100644 --- a/pytrustnfe/xml/__init__.py +++ b/pytrustnfe/xml/__init__.py @@ -27,7 +27,7 @@ def render_xml(path, template_name, remove_empty, **nfe): env.filters["comma"] = filters.format_with_comma template = env.get_template(template_name) - xml = template.render(**nfe) + xml = template.render(**nfe).replace('\n', '') parser = etree.XMLParser(remove_blank_text=True, remove_comments=True, strip_cdata=False) root = etree.fromstring(xml, parser=parser) diff --git a/setup.py b/setup.py index 457526a..cf26c27 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.7" +VERSION = "1.0.8" setup( From 7f5fe48999e5e7944a4d8c4dec3c8c9b6ca34f0b Mon Sep 17 00:00:00 2001 From: carcaroff Date: Tue, 25 Sep 2018 15:43:43 -0300 Subject: [PATCH 04/10] thousandseparator added to monetary fields --- pytrustnfe/nfe/danfe.py | 6 ++++-- setup.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pytrustnfe/nfe/danfe.py b/pytrustnfe/nfe/danfe.py index 96b6b0d..99059b6 100644 --- a/pytrustnfe/nfe/danfe.py +++ b/pytrustnfe/nfe/danfe.py @@ -80,6 +80,8 @@ def getdateByTimezone(cDateUTC, timezone=None): def format_number(cNumber): if cNumber: + # Vírgula para a separação de milhar e 2f para 2 casas decimais + value = "{:,.2f}".format(float(cNumber)) return cNumber.replace(",", "X").replace(".", ",").replace("X", ".") return "" @@ -746,8 +748,8 @@ obsCont[@xCampo='NomeVendedor']") tagtext(oNode=el_prod, cTag='qCom'))) self.stringRight(nMr - 64.5, nLin, format_number( tagtext(oNode=el_prod, cTag='vUnCom'))) - self.stringRight(nMr - 50.5, nLin, - tagtext(oNode=el_prod, cTag='vProd')) + self.stringRight(nMr - 50.5, nLin, format_number( + tagtext(oNode=el_prod, cTag='vProd'))) self.stringRight(nMr - 38.5, nLin, format_number(vBC)) self.stringRight(nMr - 26.5, nLin, format_number(vICMS)) self.stringRight(nMr - 7.5, nLin, format_number(pICMS)) diff --git a/setup.py b/setup.py index cf26c27..66cbfae 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.8" +VERSION = "1.0.9" setup( From 0c12982197181058ea870a4aaa3cde9d294a8b30 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 2 Oct 2018 10:58:46 -0300 Subject: [PATCH 05/10] [FIX] Assign the correct variable when addin thousand separator --- pytrustnfe/nfe/danfe.py | 5 ++--- setup.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pytrustnfe/nfe/danfe.py b/pytrustnfe/nfe/danfe.py index 99059b6..00c500e 100644 --- a/pytrustnfe/nfe/danfe.py +++ b/pytrustnfe/nfe/danfe.py @@ -80,8 +80,8 @@ def getdateByTimezone(cDateUTC, timezone=None): def format_number(cNumber): if cNumber: - # Vírgula para a separação de milhar e 2f para 2 casas decimais - value = "{:,.2f}".format(float(cNumber)) + # Vírgula para a separação de milhar e 2f para 2 casas decimais + cNumber = "{:,.2f}".format(float(cNumber)) return cNumber.replace(",", "X").replace(".", ",").replace("X", ".") return "" @@ -986,4 +986,3 @@ obsCont[@xCampo='NomeVendedor']") paragraph = Paragraph(ptext, style=style) w, h = paragraph.wrapOn(self.canvas, x, y) return w, h, paragraph - diff --git a/setup.py b/setup.py index 66cbfae..e22686c 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.9" +VERSION = "1.0.10" setup( From 4f3da1a0751a313d4e7e10721adbea13f5820fb6 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 2 Oct 2018 17:16:40 -0300 Subject: [PATCH 06/10] [IMP] Fixing the fields for service invoices and danfe --- pytrustnfe/nfe/danfe.py | 51 +++++++++++-- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 106 ++++++++++++++-------------- setup.py | 2 +- 3 files changed, 102 insertions(+), 57 deletions(-) diff --git a/pytrustnfe/nfe/danfe.py b/pytrustnfe/nfe/danfe.py index 00c500e..12c30a7 100644 --- a/pytrustnfe/nfe/danfe.py +++ b/pytrustnfe/nfe/danfe.py @@ -197,7 +197,8 @@ class danfe(object): oXML=oXML, el_det=el_det, max_index=nId, list_desc=list_desc, list_cod_prod=list_cod_prod) - self.adicionais(oXML=oXML) + tamanho_ocupado = self.calculo_issqn(oXML=oXML) + self.adicionais(oXML=oXML, tamanho_diminuir=tamanho_ocupado) # Gera o restante das páginas do XML while index < nId: @@ -779,7 +780,49 @@ obsCont[@xCampo='NomeVendedor']") self.nlin += nH + 3 return id - def adicionais(self, oXML=None): + def calculo_issqn(self, oXML=None): + elem_emit = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}emit") + el_total = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}total") + issqn_total = el_total.find( + ".//{http://www.portalfiscal.inf.br/nfe}ISSQNtot") + if not issqn_total: + return 0 + + self.nlin += 1 + nMr = self.width - self.nRight + self.canvas.setFont('NimbusSanL-Bold', 7) + self.string(self.nLeft + 1, self.nlin + 1, 'CÁLCULO DO ISSQN') + self.rect(self.nLeft, self.nlin + 2, + self.width - self.nLeft - self.nRight, 5.5) + self.vline(nMr - 47.5, self.nlin + 2, 5.5) + self.vline(nMr - 95, self.nlin + 2, 5.5) + self.vline(nMr - 142.5, self.nlin + 2, 5.5) + self.vline(nMr - 190, self.nlin + 2, 5.5) + # Labels + self.canvas.setFont('NimbusSanL-Regu', 5) + self.string(self.nLeft + 1, self.nlin + 3.8, 'INSCRIÇÃO MUNICIPAL') + self.string(nMr - 141.5, self.nlin + 3.8, 'VALOR TOTAL DOS SERVIÇOS') + self.string(nMr - 94, self.nlin + 3.8, 'BASE DE CÁLCULO DO ISSQN') + self.string(nMr - 46.5, self.nlin + 3.8, 'VALOR DO ISSQN') + # Conteúdo campos + self.canvas.setFont('NimbusSanL-Regu', 8) + self.string( + self.nLeft + 1, self.nlin + 6.7, + tagtext(oNode=elem_emit, cTag='IM')) + self.stringRight( + self.nLeft + 94, self.nlin + 6.7, + format_number(tagtext(oNode=issqn_total, cTag='vServ'))) + self.stringRight( + self.nLeft + 141.5, self.nlin + 6.7, + format_number(tagtext(oNode=issqn_total, cTag='vBC'))) + self.stringRight( + self.nLeft + 189, self.nlin + 6.7, + format_number(tagtext(oNode=issqn_total, cTag='vISS'))) + + self.nlin += 8 # Nr linhas ocupadas pelo bloco + return 8 + + def adicionais(self, oXML=None, tamanho_diminuir=0): el_infAdic = oXML.find( ".//{http://www.portalfiscal.inf.br/nfe}infAdic") @@ -791,8 +834,8 @@ obsCont[@xCampo='NomeVendedor']") 'INFORMAÇÕES COMPLEMENTARES') self.string((self.width / 2) + 1, self.nlin + 4, 'RESERVADO AO FISCO') self.rect(self.nLeft, self.nlin + 2, - self.width - self.nLeft - self.nRight, 42) - self.vline(self.width / 2, self.nlin + 2, 42) + self.width - self.nLeft - self.nRight, 42 - tamanho_diminuir) + self.vline(self.width / 2, self.nlin + 2, 42 - tamanho_diminuir) # Conteúdo campos styles = getSampleStyleSheet() styleN = styles['Normal'] diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index bf1cc8b..1a616a0 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -266,6 +266,7 @@ {% with imposto = det.imposto %} {{ imposto.vTotTrib }} + {% if imposto.ICMS is defined %} {% if imposto.ICMS.CST == '00' -%} @@ -529,37 +530,58 @@ {% endif %} - {% if NFe.infNFe.ide.mod != '65' %} - - {{ imposto.IPI.clEnq }} - {{ imposto.IPI.CNPJProd }} - {{ imposto.IPI.cSelo }} - {{ imposto.IPI.qSelo }} - {{ imposto.IPI.cEnq }} - {% if imposto.IPI.CST in ('00', '49', '50', '99') %} - - {{ imposto.IPI.CST }} - {{ imposto.IPI.vBC }} - {{ imposto.IPI.pIPI }} - {{ imposto.IPI.qUnid }} - {{ imposto.IPI.vUnid }} - {{ imposto.IPI.vIPI }} - - {% endif %} - {% if imposto.IPI.CST in ('01', '02', '03', '04', '51', '52', '53', '54', '55') %} - - {{ imposto.IPI.CST }} - - {% endif %} - - {% if imposto.II is defined %} - - {{ imposto.II.vBC }} - {{ imposto.II.vDespAdu }} - {{ imposto.II.vII }} - {{ imposto.II.vIOF }} - {% endif %} + {% if NFe.infNFe.ide.mod != '65' and imposto.IPI is defined %} + + {{ imposto.IPI.clEnq }} + {{ imposto.IPI.CNPJProd }} + {{ imposto.IPI.cSelo }} + {{ imposto.IPI.qSelo }} + {{ imposto.IPI.cEnq }} + {% if imposto.IPI.CST in ('00', '49', '50', '99') %} + + {{ imposto.IPI.CST }} + {{ imposto.IPI.vBC }} + {{ imposto.IPI.pIPI }} + {{ imposto.IPI.qUnid }} + {{ imposto.IPI.vUnid }} + {{ imposto.IPI.vIPI }} + + {% endif %} + {% if imposto.IPI.CST in ('01', '02', '03', '04', '51', '52', '53', '54', '55') %} + + {{ imposto.IPI.CST }} + + {% endif %} + + {% if imposto.II is defined %} + + {{ imposto.II.vBC }} + {{ imposto.II.vDespAdu }} + {{ imposto.II.vII }} + {{ imposto.II.vIOF }} + + {% endif %} + {% endif %} + {% if imposto.ISSQN is defined %} + + {{ imposto.ISSQN.vBC }} + {{ imposto.ISSQN.vAliq }} + {{ imposto.ISSQN.vISSQN }} + {{ imposto.ISSQN.cMunFG }} + {{ imposto.ISSQN.cListServ }} + {{ imposto.ISSQN.vDeducao }} + {{ imposto.ISSQN.vOutro }} + {{ imposto.ISSQN.vDescIncond }} + {{ imposto.ISSQN.vDescCond }} + {{ imposto.ISSQN.vDeducao }} + {{ imposto.ISSQN.indISS }} + {{ imposto.ISSQN.cServico }} + {{ imposto.ISSQN.cMun }} + {{ imposto.ISSQN.cPais }} + {{ imposto.ISSQN.nProcesso }} + {{ imposto.ISSQN.indIncentivo }} + {% endif %} {% if imposto.PIS.CST in ('01', '02') %} @@ -637,33 +659,13 @@ {% endif %} {% if imposto.COFINSST is defined %} - + {{ imposto.COFINSST.vBC }} {{ imposto.COFINSST.pCOFINS }} {{ imposto.COFINSST.qBCProd }} {{ imposto.COFINSST.vAliqProd }} {{ imposto.COFINSST.vCOFINS }} - - {% endif %} - {% if imposto.ISSQN is defined %} - - {{ imposto.ISSQN.vBC }} - {{ imposto.ISSQN.vAliq }} - {{ imposto.ISSQN.vISSQN }} - {{ imposto.ISSQN.cMunFG }} - {{ imposto.ISSQN.cListServ }} - {{ imposto.ISSQN.vDeducao }} - {{ imposto.ISSQN.vOutro }} - {{ imposto.ISSQN.vDescIncond }} - {{ imposto.ISSQN.vDescCond }} - {{ imposto.ISSQN.vDeducao }} - {{ imposto.ISSQN.indISS }} - {{ imposto.ISSQN.cServico }} - {{ imposto.ISSQN.cMun }} - {{ imposto.ISSQN.cPais }} - {{ imposto.ISSQN.nProcesso }} - {{ imposto.ISSQN.vDeducao }} - + {% endif %} {% if imposto.ICMSUFDest is defined %} diff --git a/setup.py b/setup.py index e22686c..d596afb 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.10" +VERSION = "1.0.11" setup( From a252d865236ff6a19b00af219341f7c769091173 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 3 Oct 2018 17:37:42 -0300 Subject: [PATCH 07/10] [FIX] Removing useless code for NFCe, adjusting xml template for NFCe --- pytrustnfe/nfe/__init__.py | 59 +-------- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 4 + setup.py | 2 +- tests/test_add_qr_code.py | 34 ----- tests/xml_com_qrcode.xml | 189 --------------------------- tests/xml_sem_qrcode.xml | 190 ---------------------------- 6 files changed, 9 insertions(+), 469 deletions(-) delete mode 100644 tests/test_add_qr_code.py delete mode 100644 tests/xml_com_qrcode.xml delete mode 100644 tests/xml_sem_qrcode.xml diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index 9a0d068..0718821 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -4,13 +4,11 @@ import os -import hashlib -import binascii from lxml import etree from .assinatura import Assinatura from pytrustnfe.xml import render_xml, sanitize_response from pytrustnfe.utils import gerar_chave, ChaveNFe -from pytrustnfe.Servidores import localizar_url, localizar_qrcode +from pytrustnfe.Servidores import localizar_url from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key # Zeep @@ -38,54 +36,6 @@ def _generate_nfe_id(**kwargs): item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:] -def _add_qrCode(xml, **kwargs): - xml = etree.fromstring(xml) - inf_nfe = kwargs['NFes'][0]['infNFe'] - nfe = xml.find(".//{http://www.portalfiscal.inf.br/nfe}NFe") - infnfesupl = etree.Element('infNFeSupl') - qrcode = etree.Element('qrCode') - chave_nfe = inf_nfe['Id'][3:] - dh_emissao = binascii.hexlify(inf_nfe['ide']['dhEmi'].encode()).decode() - versao = '100' - ambiente = kwargs['ambiente'] - valor_total = inf_nfe['total']['vNF'] - dest_cpf = 'Inexistente' - dest = nfe.find(".//{http://www.portalfiscal.inf.br/nfe}dest") - - if inf_nfe.get('dest', False): - if inf_nfe['dest'].get('CPF', False): - dest_cpf = inf_nfe['dest']['CPF'] - dest = etree.Element('dest') - cpf = etree.Element('CPF') - cpf.text = dest_cpf - dest.append(cpf) - - icms_total = inf_nfe['total']['vICMS'] - dig_val = binascii.hexlify(xml.find( - ".//{http://www.w3.org/2000/09/xmldsig#}DigestValue").text.encode()).decode() - cid_token = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['cid_token'] - csc = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['csc'] - - c_hash_QR_code = "chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF\ -={5}&vICMS={6}&digVal={7}&cIdToken={8}{9}".\ - format(chave_nfe, versao, ambiente, dest_cpf, dh_emissao, - valor_total, icms_total, dig_val, cid_token, csc) - c_hash_QR_code = hashlib.sha1(c_hash_QR_code.encode()).hexdigest() - - QR_code_url = "?chNFe={0}&nVersao={1}&tpAmb={2}&{3}dhEmi={4}&vNF={5}&vICMS\ -={6}&digVal={7}&cIdToken={8}&cHashQRCode={9}".\ - format(chave_nfe, versao, ambiente, - 'cDest={}&'.format(dest_cpf) if dest_cpf != 'Inexistente' - else '', dh_emissao, valor_total, icms_total, dig_val, - cid_token, c_hash_QR_code) - qr_code_server = localizar_qrcode(kwargs['estado'], ambiente) - qrcode_text = qr_code_server + QR_code_url - qrcode.text = etree.CDATA(qrcode_text) - infnfesupl.append(qrcode) - nfe.insert(1, infnfesupl) - return etree.tostring(xml, encoding=str) - - def _render(certificado, method, sign, **kwargs): path = os.path.join(os.path.dirname(__file__), 'templates') xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs) @@ -107,9 +57,6 @@ def _render(certificado, method, sign, **kwargs): xml_send = signer.assina_xml( xmlElem_send, kwargs['manifesto']['identificador']) - if modelo == '65': - xml_send = _add_qrCode(xml_send, **kwargs) - else: xml_send = etree.tostring(xmlElem_send, encoding=str) return xml_send @@ -129,7 +76,9 @@ def _send(certificado, method, **kwargs): session.verify = False transport = Transport(session=session) - xml = etree.fromstring(xml_send) + parser = etree.XMLParser(strip_cdata=False) + xml = etree.fromstring(xml_send, parser=parser) + client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index 1a616a0..e7d21d6 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -872,6 +872,10 @@ {% endif %} + + {{ NFe.infNFe.qrCode }} + {{ NFe.infNFe.urlChave }} + {% endfor %} diff --git a/setup.py b/setup.py index d596afb..cf468c1 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.11" +VERSION = "1.0.12" setup( diff --git a/tests/test_add_qr_code.py b/tests/test_add_qr_code.py deleted file mode 100644 index 77a24f4..0000000 --- a/tests/test_add_qr_code.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8-*- -# © 2016 Alessandro Fernandes Martini -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -import unittest -# from lxml import etree -from pytrustnfe.nfe import _add_qrCode - - -class TestAddQRCode(unittest.TestCase): - def setUp(self): - self.xml_sem_qrcode = open('tests/xml_sem_qrcode.xml', 'r') - self.xml_com_qrcode = open('tests/xml_com_qrcode.xml', 'r') - dhEmi = '2016-11-09T16:03:25-00:00' - chave_nfe = 'NFe35161121332917000163650010000000011448875034' - ambiente = 2 - valor_total = '324.00' - icms_total = '61.56' - cid_token = '000001' - csc = '123456789' - estado = '35' - total = {'vNF': valor_total, 'vICMS': icms_total} - infnfe = {'ide': {'dhEmi': dhEmi}, 'Id': chave_nfe, 'total': total, - 'codigo_seguranca': {'cid_token': cid_token, 'csc': csc}} - infnfe = {'infNFe': infnfe} - self.kwargs = {} - self.kwargs['ambiente'] = ambiente - self.kwargs['estado'] = estado - self.kwargs['NFes'] = [infnfe] - - def test_add_qrCode(self): - xml_init = self.xml_sem_qrcode.read() - xml_end = _add_qrCode(xml_init, **self.kwargs) - self.assertEqual(xml_end, self.xml_com_qrcode.read()) diff --git a/tests/xml_com_qrcode.xml b/tests/xml_com_qrcode.xml deleted file mode 100644 index 22cf1ef..0000000 --- a/tests/xml_com_qrcode.xml +++ /dev/null @@ -1,189 +0,0 @@ - - 103 - 1 - - - - 35 - 44887503 - Venda POS - 0 - 65 - 1 - 1 - 2016-11-09T16:03:58-00:00 - 1 - 1 - 3550308 - 4 - 1 - 4 - 2 - 1 - 1 - 1 - 0 - Odoo Brasil 10 - - - 21332917000163 - LEL AMBIENTAL LTDA - EPP - Zell Ambiental - - Rua Padre João - 444 - Penha de França - 3550308 - São Paulo - SP - 03637000 - 1058 - Brasil - 3425323750 - - 244694180116 - 3 - - - - MISC - - NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL - 28431000 - 2806300 - 5101 - Unit(s - 18.0 - 18.00 - 324.00 - - Unit(s - 18.0 - 18.00 - 1 - - - 0.00 - - - 0 - 00 - 3 - 324.00 - 19.00 - 61.56 - - - - - 01 - 324.00 - 0.00 - 2.11 - - - - - 01 - 324.00 - 0.00 - 9.72 - - - - - - - 324.00 - 61.56 - 0.00 - 0.00 - 0.00 - 324.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 2.11 - 9.72 - 0.00 - 324.00 - 0.00 - - - - 9 - - - 01 - 324.00 - - - - - - - - - - - - - ffJZ+04jmHN3uLx08huykyBs2r4= - - - u42y8bBqNM336yc7r0+5YWiePmCerKu3cFcp2J+lmQzIK6snba7txyeBtwVos8jQxrYLsnfWtKb5P6FxmhDeqAB41o2aoSIcnxc0yxdFn2ZDTquwU+AurH6E4hGclz8D/5qapv2+g3y+VpXMZFNNCqZSm2vJpvXBmPEY/7oO2cPB13N7WDhDRmI9H4kRDsPuxeeJetr2Bf1ThGJ0EUA4DXC7My0kl/Bw0rYwoPDhoqhxinr9Wocw1UyQ1vprLF0JVHXOtSq39Uqfqmj5QUDwUvvh4YL9bFZ8lvZZ0CZDmILaFGvr1XH3CwJ2Ws3RLlb12Arj5OT4vS8ZKhJtr/dpfA== - - - MIIIPzCCBiegAwIBAgIQYdesnYUNG8VPne0qhTeKOzANBgkqhkiG9w0BAQsFADB4 -MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2Vj -cmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYD -VQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE2MDUxMDAwMDAwMFoXDTE3MDUw -OTIzNTk1OVowgekxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQsw -CQYDVQQIEwJTUDESMBAGA1UEBxQJU2FvIFBhdWxvMTYwNAYDVQQLFC1TZWNyZXRh -cmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsU -DVJGQiBlLUNOUEogQTExJDAiBgNVBAsUG0F1dGVudGljYWRvIHBvciBBUiBTdW5z -aGluZTEuMCwGA1UEAxMlTEVaIEFNQklFTlRBTCBMVERBIEVQUDoyMTMzMjkxNzAw -MDE2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANEG6j0uXIvvHlMz -0IGzuY/vuFQncIoSE+cBUk0uq6J3dtmGAg4oaVWCHUfHbX9s2Ag1jIG+PFAo2dlt -sbLSEji74XhD+IpM/9aHm3ke8kb05ay+bYRuUjTNSwUbslT1+amAmIu7m1yPBi6u -v3+/Lj2I0g7VeBBAjv/TiBG0VRCURXvKrwWrv2Lpybo/yDnENGtRqQHihqeYFKin -nDzBsMbv4ripbi3XiAgcy/bF6NFgVMqxrNnGvSiSUhDRkmceVFIysRXUMke02Qo1 -Q5Ik1j1goUIHP44QOruXCMiT0yOK8u0qNAXR0yzSaWcBR2aJCeWgFg7sNbB50Qcx -c+2GKUECAwEAAaOCA1EwggNNMIG2BgNVHREEga4wgaugPQYFYEwBAwSgNAQyMTYw -NjE5ODYzNDEzNzgyODg2NTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMzczU1NQU1Cg -IgYFYEwBAwKgGQQXTEVPTkFSRE8gREUgTElNQSBTQU5UT1OgGQYFYEwBAwOgEAQO -MjEzMzI5MTcwMDAxNjOgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRJ3YWduZXJA -emVsbC5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUp -djQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBo -BggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9y -ZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWdu -X1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFz -aWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25S -RkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRy -YWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0 -ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5n -b3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5j -cmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSB -jjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNv -bS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9H -NC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIw -DQYJKoZIhvcNAQELBQADggIBAFIUBrNIyC4kBap/7hCW63tQhA/WNnWDNYpKM5wN -zwApVV2bqFMJURzO/7AUrHu7uZS1p/Ubo+w2dFjmnmj5DniQkY85Sd6HNa1fukJY -PK13wcUMVHMjeevIAcxnYraNdN4BIz1Svl6A8leGFgIEuDUll7Td+R7+aA8N5JYQ -dFFIe2VxvJNbWP/WA49oI8U2wkoPTfOZtfrgKf2msHm3FnTfnmyOPhIf8L31iFt6 -MbKuFjOGIaWu+Z/gRDqj/EbFcEMUrDbeIYqz2724ZGBOJrkjHO7DBqXXoN9pzCTO -RB5+gILMEnMS7zFsCuLOtLVohxgYUzg8p4Fy3nsHEzb/7IDVOnKLfjh/c5GSTvOa -JT6qznYV2yav7NyuUSNUv+5bCIBNk45+qrQ8DwpsLBsFa+RLfCwvYVK95ad/xVgJ -QosPJuzW3t0fU/FWbc00sZWV6lgBPyWhdF8EodaRIWC+EOC2wJbODyw+vdX8pUxT -TUJKV2iAP8206gR2h07o2CZgXckJGJQ5MnBUbS78AaITXZ5JlPaS7ZdU9zWY3kD+ -j5YERs0+UweijKi5eHZioGRZRDZ2uksh1wrgeLFLWuiSNaPFYVVrQ/ZGo+E5uVNl -8FuoR6P9TZjx1/A4XjqLQ9yPoPWgIWe14Vh/76dVcgz3ElWMbmPCDoc/wX+FoHX1 -Fbux - - - - - - \ No newline at end of file diff --git a/tests/xml_sem_qrcode.xml b/tests/xml_sem_qrcode.xml deleted file mode 100644 index 3352a22..0000000 --- a/tests/xml_sem_qrcode.xml +++ /dev/null @@ -1,190 +0,0 @@ - - - 103 - 1 - - - - 35 - 44887503 - Venda POS - 0 - 65 - 1 - 1 - 2016-11-09T16:03:58-00:00 - 1 - 1 - 3550308 - 4 - 1 - 4 - 2 - 1 - 1 - 1 - 0 - Odoo Brasil 10 - - - 21332917000163 - LEL AMBIENTAL LTDA - EPP - Zell Ambiental - - Rua Padre João - 444 - Penha de França - 3550308 - São Paulo - SP - 03637000 - 1058 - Brasil - 3425323750 - - 244694180116 - 3 - - - - MISC - - NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL - 28431000 - 2806300 - 5101 - Unit(s - 18.0 - 18.00 - 324.00 - - Unit(s - 18.0 - 18.00 - 1 - - - 0.00 - - - 0 - 00 - 3 - 324.00 - 19.00 - 61.56 - - - - - 01 - 324.00 - 0.00 - 2.11 - - - - - 01 - 324.00 - 0.00 - 9.72 - - - - - - - 324.00 - 61.56 - 0.00 - 0.00 - 0.00 - 324.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 2.11 - 9.72 - 0.00 - 324.00 - 0.00 - - - - 9 - - - 01 - 324.00 - - - - - - - - - - - - - ffJZ+04jmHN3uLx08huykyBs2r4= - - - u42y8bBqNM336yc7r0+5YWiePmCerKu3cFcp2J+lmQzIK6snba7txyeBtwVos8jQxrYLsnfWtKb5P6FxmhDeqAB41o2aoSIcnxc0yxdFn2ZDTquwU+AurH6E4hGclz8D/5qapv2+g3y+VpXMZFNNCqZSm2vJpvXBmPEY/7oO2cPB13N7WDhDRmI9H4kRDsPuxeeJetr2Bf1ThGJ0EUA4DXC7My0kl/Bw0rYwoPDhoqhxinr9Wocw1UyQ1vprLF0JVHXOtSq39Uqfqmj5QUDwUvvh4YL9bFZ8lvZZ0CZDmILaFGvr1XH3CwJ2Ws3RLlb12Arj5OT4vS8ZKhJtr/dpfA== - - - MIIIPzCCBiegAwIBAgIQYdesnYUNG8VPne0qhTeKOzANBgkqhkiG9w0BAQsFADB4 -MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2Vj -cmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYD -VQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE2MDUxMDAwMDAwMFoXDTE3MDUw -OTIzNTk1OVowgekxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQsw -CQYDVQQIEwJTUDESMBAGA1UEBxQJU2FvIFBhdWxvMTYwNAYDVQQLFC1TZWNyZXRh -cmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsU -DVJGQiBlLUNOUEogQTExJDAiBgNVBAsUG0F1dGVudGljYWRvIHBvciBBUiBTdW5z -aGluZTEuMCwGA1UEAxMlTEVaIEFNQklFTlRBTCBMVERBIEVQUDoyMTMzMjkxNzAw -MDE2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANEG6j0uXIvvHlMz -0IGzuY/vuFQncIoSE+cBUk0uq6J3dtmGAg4oaVWCHUfHbX9s2Ag1jIG+PFAo2dlt -sbLSEji74XhD+IpM/9aHm3ke8kb05ay+bYRuUjTNSwUbslT1+amAmIu7m1yPBi6u -v3+/Lj2I0g7VeBBAjv/TiBG0VRCURXvKrwWrv2Lpybo/yDnENGtRqQHihqeYFKin -nDzBsMbv4ripbi3XiAgcy/bF6NFgVMqxrNnGvSiSUhDRkmceVFIysRXUMke02Qo1 -Q5Ik1j1goUIHP44QOruXCMiT0yOK8u0qNAXR0yzSaWcBR2aJCeWgFg7sNbB50Qcx -c+2GKUECAwEAAaOCA1EwggNNMIG2BgNVHREEga4wgaugPQYFYEwBAwSgNAQyMTYw -NjE5ODYzNDEzNzgyODg2NTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMzczU1NQU1Cg -IgYFYEwBAwKgGQQXTEVPTkFSRE8gREUgTElNQSBTQU5UT1OgGQYFYEwBAwOgEAQO -MjEzMzI5MTcwMDAxNjOgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRJ3YWduZXJA -emVsbC5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUp -djQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBo -BggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9y -ZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWdu -X1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFz -aWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25S -RkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRy -YWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0 -ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5n -b3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5j -cmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSB -jjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNv -bS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9H -NC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIw -DQYJKoZIhvcNAQELBQADggIBAFIUBrNIyC4kBap/7hCW63tQhA/WNnWDNYpKM5wN -zwApVV2bqFMJURzO/7AUrHu7uZS1p/Ubo+w2dFjmnmj5DniQkY85Sd6HNa1fukJY -PK13wcUMVHMjeevIAcxnYraNdN4BIz1Svl6A8leGFgIEuDUll7Td+R7+aA8N5JYQ -dFFIe2VxvJNbWP/WA49oI8U2wkoPTfOZtfrgKf2msHm3FnTfnmyOPhIf8L31iFt6 -MbKuFjOGIaWu+Z/gRDqj/EbFcEMUrDbeIYqz2724ZGBOJrkjHO7DBqXXoN9pzCTO -RB5+gILMEnMS7zFsCuLOtLVohxgYUzg8p4Fy3nsHEzb/7IDVOnKLfjh/c5GSTvOa -JT6qznYV2yav7NyuUSNUv+5bCIBNk45+qrQ8DwpsLBsFa+RLfCwvYVK95ad/xVgJ -QosPJuzW3t0fU/FWbc00sZWV6lgBPyWhdF8EodaRIWC+EOC2wJbODyw+vdX8pUxT -TUJKV2iAP8206gR2h07o2CZgXckJGJQ5MnBUbS78AaITXZ5JlPaS7ZdU9zWY3kD+ -j5YERs0+UweijKi5eHZioGRZRDZ2uksh1wrgeLFLWuiSNaPFYVVrQ/ZGo+E5uVNl -8FuoR6P9TZjx1/A4XjqLQ9yPoPWgIWe14Vh/76dVcgz3ElWMbmPCDoc/wX+FoHX1 -Fbux - - - - - - From 790543d36ac578a63b0febab389bd66ee749fdaf Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 3 Oct 2018 19:15:38 -0300 Subject: [PATCH 08/10] [FIX] Ajustando as urls de consulta da danfce --- pytrustnfe/Servidores.py | 4 ++-- pytrustnfe/nfe/danfce.py | 46 +++++++++++++++++++++++----------------------- setup.py | 2 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index d2c2286..5f02d3a 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -152,7 +152,7 @@ SVRS = { WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa - WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', + WS_NFCE_QR_CODE: 'http://www.fazenda.df.gov.br/nfce/qrcode', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfce-homologacao.svrs.rs.gov.br', @@ -162,7 +162,7 @@ SVRS = { WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa - WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', + WS_NFCE_QR_CODE: 'http://www.fazenda.df.gov.br/nfce/qrcode', } } } diff --git a/pytrustnfe/nfe/danfce.py b/pytrustnfe/nfe/danfce.py index e245ada..393eaab 100644 --- a/pytrustnfe/nfe/danfce.py +++ b/pytrustnfe/nfe/danfce.py @@ -72,7 +72,7 @@ def format_telefone(telefone): class danfce(object): - def __init__(self, list_xml, logo=None): + def __init__(self, list_xml, logo=None, timezone=None): self.current_font_size = 7 self.current_font_name = 'NimbusSanL-Regu' @@ -188,14 +188,14 @@ class danfce(object): # Impostos el_total = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}total") - total_tributo = format_number(tagtext(oNode=el_total, cTag='vTotTrib'), - precision=2) - valor_total = format_number(tagtext(oNode=el_total, cTag='vProd'), - precision=2) - desconto = format_number(tagtext(oNode=el_total, cTag='vDesc'), - precision=2) - valor_a_pagar = format_number(tagtext(oNode=el_total, cTag='vNF'), - precision=2) + total_tributo = format_number( + tagtext(oNode=el_total, cTag='vTotTrib'), precision=2) + valor_total = format_number( + tagtext(oNode=el_total, cTag='vProd'), precision=2) + desconto = format_number( + tagtext(oNode=el_total, cTag='vDesc'), precision=2) + valor_a_pagar = format_number( + tagtext(oNode=el_total, cTag='vNF'), precision=2) el_pag = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}pag") troco = format_number(tagtext(oNode=el_pag, cTag="vTroco")) @@ -216,26 +216,26 @@ class danfce(object): ".//{http://www.portalfiscal.inf.br/nfe}det")) payment_methods = [] - for pagId, item in enumerate(el_pag): - if 'tPag' not in item.tag: - continue - payment = [] - method = payment_method_list[item.text] + tipo_pagamento = tagtext(oNode=item, cTag="tPag") + val = format_number(tagtext(oNode=item, cTag="vPag"), precision=2) + + method = payment_method_list[tipo_pagamento] payment.append(method) - payment.append(format_number(item.getnext().text, precision=2)) + payment.append(val) payment_methods.append(payment) - values = {'quantidade_itens': quant_produtos, - 'total_tributo': total_tributo, - 'valor_total': valor_total, - 'desconto': desconto, - 'valor_a_pagar': valor_a_pagar, - 'formas_de_pagamento': payment_methods, - 'troco': troco, - } + values = { + 'quantidade_itens': quant_produtos, + 'total_tributo': total_tributo, + 'valor_total': valor_total, + 'desconto': desconto, + 'valor_a_pagar': valor_a_pagar, + 'formas_de_pagamento': payment_methods, + 'troco': troco, + } self.draw_totals_table(values) diff --git a/setup.py b/setup.py index cf468c1..32316ac 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.12" +VERSION = "1.0.13" setup( From dbe2ab2ec5c1a986216bfe4dc088ef9aa07103e3 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Thu, 4 Oct 2018 16:11:23 -0300 Subject: [PATCH 09/10] [FIX] Ajusta a consulta de download de xml --- pytrustnfe/Servidores.py | 2 ++ pytrustnfe/nfe/__init__.py | 12 ++++++++---- setup.py | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 5f02d3a..5225c45 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -79,6 +79,8 @@ def localizar_url(servico, estado, mod='55', ambiente=2): if sigla in ('AC', 'RN', 'PB', 'SC', 'RJ') and \ servico == WS_NFE_CADASTRO: dominio = 'cad.svrs.rs.gov.br' + if sigla == 'AN' and servico == WS_NFE_RECEPCAO_EVENTO: + dominio = 'www.nfe.fazenda.gov.br' return "https://%s/%s" % (dominio, complemento) diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index 0718821..e4f406a 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -196,9 +196,7 @@ def xml_consulta_distribuicao_nfe(certificado, **kwargs): # Assinar return _render(certificado, 'NFeDistribuicaoDFe', False, **kwargs) -def consulta_distribuicao_nfe(certificado, **kwargs): - if "xml" not in kwargs: - kwargs['xml'] = xml_consulta_distribuicao_nfe(certificado, **kwargs) +def _send_v310(certificado, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url( 'NFeDistribuicaoDFe', kwargs['estado'], kwargs['modelo'], @@ -229,6 +227,12 @@ def consulta_distribuicao_nfe(certificado, **kwargs): } +def consulta_distribuicao_nfe(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_consulta_distribuicao_nfe(certificado, **kwargs) + return _send_v310(certificado, **kwargs) + + def xml_download_nfe(certificado, **kwargs): # Assinar return _render(certificado, 'NFeDistribuicaoDFe', False, **kwargs) @@ -236,4 +240,4 @@ def xml_download_nfe(certificado, **kwargs): # Assinar def download_nfe(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_download_nfe(certificado, **kwargs) - return _send(certificado, 'NFeDistribuicaoDFe', **kwargs) + return _send_v310(certificado, **kwargs) diff --git a/setup.py b/setup.py index 32316ac..a0ecfd0 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.13" +VERSION = "1.0.14" setup( From 0ce7c3045f2da0198061b34b4574e1b9a99e4e6a Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Fri, 5 Oct 2018 00:05:04 -0300 Subject: [PATCH 10/10] =?UTF-8?q?[FIX]=20Voltando=20as=20urls=20antigas,?= =?UTF-8?q?=20a=20principio=20DF=20n=C3=A3o=20atualizaram=20ainda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 5225c45..5bf4e4e 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -154,7 +154,7 @@ SVRS = { WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa - WS_NFCE_QR_CODE: 'http://www.fazenda.df.gov.br/nfce/qrcode', + WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx?', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfce-homologacao.svrs.rs.gov.br', @@ -164,7 +164,7 @@ SVRS = { WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa - WS_NFCE_QR_CODE: 'http://www.fazenda.df.gov.br/nfce/qrcode', + WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx?', } } } diff --git a/setup.py b/setup.py index a0ecfd0..ed1a6d5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "1.0.14" +VERSION = "1.0.15" setup(