From 097c8ed32afc2f9b8279d341087bd9c7253cdd4a Mon Sep 17 00:00:00 2001 From: Felipe Date: Tue, 20 Mar 2018 18:39:17 -0300 Subject: [PATCH] inserida danfse imperial --- pytrustnfe/nfse/imperial/__init__.py | 76 ++++++++++++++++++++ .../imperial/templates/CANCELANOTAELETRONICA.xml | 17 +++++ .../imperial/templates/CONSULTANOTASPROTOCOLO.xml | 9 +++ .../nfse/imperial/templates/CONSULTAPROTOCOLO.xml | 9 +++ pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml | 81 ++++++++++++++++++++++ pytrustnfe/nfse/imperial/templates/SoapRequest.xml | 5 ++ pytrustnfe/xml/__init__.py | 1 + pytrustnfe/xml/filters.py | 6 ++ setup.py | 1 + 9 files changed, 205 insertions(+) create mode 100644 pytrustnfe/nfse/imperial/__init__.py create mode 100644 pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml create mode 100644 pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml create mode 100644 pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml create mode 100644 pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml create mode 100644 pytrustnfe/nfse/imperial/templates/SoapRequest.xml diff --git a/pytrustnfe/nfse/imperial/__init__.py b/pytrustnfe/nfse/imperial/__init__.py new file mode 100644 index 0000000..64a8125 --- /dev/null +++ b/pytrustnfe/nfse/imperial/__init__.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# © 2016 Danimar Ribeiro, Trustcode +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import os +from lxml import etree +from pytrustnfe import HttpClient +from pytrustnfe.xml import render_xml, sanitize_response + + +def _render(certificado, method, **kwargs): + path = os.path.join(os.path.dirname(__file__), 'templates') + xml_send = render_xml(path, '%s.xml' % method, True, **kwargs) + return etree.tostring(xml_send) + + +def _send(certificado, method, **kwargs): + base_url = '' + if kwargs['ambiente'] == 'producao': + base_url = 'https://nfe.etransparencia.com.br/rj.petropolis/webservice/aws_nfe.aspx' # noqa + else: + base_url = 'https://nfehomologacao.etransparencia.com.br/rj.petropolis/webservice/aws_nfe.aspx' # noqa + + xml_send = kwargs["xml"] + path = os.path.join(os.path.dirname(__file__), 'templates') + soap = render_xml(path, 'SoapRequest.xml', False, soap_body=xml_send) + + client = HttpClient(base_url) + response = client.post_soap(soap, 'NFeaction/AWS_NFE.%s' % method) + + response, obj = sanitize_response(response) + return { + 'sent_xml': xml_send, + 'received_xml': response, + 'object': obj + } + + +def xml_processa_rps(certificado, **kwargs): + return _render(certificado, 'PROCESSARPS', **kwargs) + + +def processa_rps(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_processa_rps(certificado, **kwargs) + return _send(certificado, 'PROCESSARPS', **kwargs) + + +def xml_consulta_protocolo(certificado, **kwargs): + return _render(certificado, 'CONSULTAPROTOCOLO', **kwargs) + + +def consulta_protocolo(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_consulta_protocolo(certificado, **kwargs) + return _send(certificado, 'CONSULTAPROTOCOLO', **kwargs) + + +def xml_consulta_notas_protocolo(certificado, **kwargs): + return _render(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs) + + +def consulta_notas_protocolo(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_consulta_notas_protocolo(certificado, **kwargs) + return _send(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs) + + +def xml_cancelar_nfse(certificado, **kwargs): + return _render(certificado, 'CANCELANOTAELETRONICA', **kwargs) + + +def cancelar_nfse(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs) + return _send(certificado, 'CANCELANOTAELETRONICA', **kwargs) diff --git a/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml b/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml new file mode 100644 index 0000000..3afb262 --- /dev/null +++ b/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml @@ -0,0 +1,17 @@ + + + + {{ cancelamento.codigo_usuario }} + {{ cancelamento.codigo_contribuinte }} + + + {{ cancelamento.serie_nota }} + {{ cancelamento.numero_nota }} + {{ cancelamento.serie_rps }} + {{ cancelamento.numero_rps }} + {{ cancelamento.valor }} + {{ cancelamento.motivo }} + {{ cancelamento.cancelar_guia }} + + + diff --git a/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml b/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml new file mode 100644 index 0000000..30ea3d6 --- /dev/null +++ b/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml @@ -0,0 +1,9 @@ + + + {{ consulta.protocolo }} + + {{ consulta.codigo_usuario }} + {{ consulta.codigo_contribuinte }} + + + diff --git a/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml b/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml new file mode 100644 index 0000000..09765e5 --- /dev/null +++ b/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml @@ -0,0 +1,9 @@ + + + {{ consulta.protocolo }} + + {{ consulta.codigo_usuario }} + {{ consulta.codigo_contribuinte }} + + + diff --git a/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml b/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml new file mode 100644 index 0000000..3cfb27a --- /dev/null +++ b/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml @@ -0,0 +1,81 @@ + + + + {{ nfse.codigo_usuario }} + {{ nfse.codigo_contribuinte }} + + + {{ nfse.ano }} + {{ nfse.mes }} + {{ nfse.cnpj_prestador }} + {{ nfse.data_emissao }} + {{ nfse.data_emissao }} + {{ nfse.tipo_tributacao }} + {{ nfse.data_adesao_simples }} + {{ nfse.aliquota_simples_isencao|comma }} + 2.00 + {% for rps in nfse.lista_rps -%} + + + + {{ rps.tipo_nfse }} + {{ rps.numero }} + {{ rps.serie }} + {{ rps.data_emissao }} + {{ rps.iss_retido }} + {{ rps.codigo_servico }} + {{ rps.descricao}} + {{ rps.valor_liquido_nfse|comma }} + {{ rps.valor_deducao|comma }} + {{ rps.discriminacao_deducao }} + {{ rps.base_calculo|comma }} + {{ rps.aliquota_issqn|comma }} + {{ rps.valor_iss|comma }} + {{ rps.valor_iss_retido|comma }} + {{ rps.tomador.cnpj_cpf }} + {{ rps.tomador.razao_social }} + {{ rps.tomador.tipo_logradouro }} + {{ rps.tomador.logradouro }} + {{ rps.tomador.numero }} + {{ rps.tomador.complemento }} + {{ rps.tomador.bairro }} + {{ rps.tomador.municipio }} + {{ rps.tomador.uf }} + {{ rps.tomador.cep }} + {{ rps.tomador.telefone }} + {{ rps.tomador.inscricao_municipal }} + {% if rps.local_prestacao == 'prestador' %} + {{ rps.prestador.tipo_logradouro }} + {{ rps.prestador.logradouro }} + {{ rps.prestador.numero }} + {{ rps.prestador.complemento }} + {{ rps.prestador.bairro }} + {{ rps.prestador.municipio }} + {{ rps.prestador.uf }} + {{ rps.prestador.cep }} + {% endif %} + {{ rps.tomador.email }} + {% for imposto in rps.impostos -%} + + + {{ imposto.sigla }} + {{ imposto.aliquota|comma }} + {{ imposto.valor|comma }} + + + {% endfor %} + + + {% endfor %} + + {{ nfse.lista_rps|length }} + {{ nfse.lista_rps|sum(attribute='valor_liquido_nfse')|comma }} + {{ nfse.lista_rps|sum(attribute='valor_iss')|comma }} + {{ nfse.lista_rps|sum(attribute='valor_deducao')|comma }} + {{ nfse.lista_rps|sum(attribute='valor_iss_retido')|comma }} + {{ nfse.quantidade_impostos }} + {{ nfse.valor_tributos|comma }} + + + + diff --git a/pytrustnfe/nfse/imperial/templates/SoapRequest.xml b/pytrustnfe/nfse/imperial/templates/SoapRequest.xml new file mode 100644 index 0000000..e8b56b4 --- /dev/null +++ b/pytrustnfe/nfse/imperial/templates/SoapRequest.xml @@ -0,0 +1,5 @@ + + + {{ soap_body }} + + diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py index 0ed0ee5..3acdbde 100644 --- a/pytrustnfe/xml/__init__.py +++ b/pytrustnfe/xml/__init__.py @@ -25,6 +25,7 @@ def render_xml(path, template_name, remove_empty, **nfe): env.filters["format_percent"] = filters.format_percent env.filters["format_datetime"] = filters.format_datetime env.filters["format_date"] = filters.format_date + env.filters["comma"] = filters.format_with_comma template = env.get_template(template_name) diff --git a/pytrustnfe/xml/filters.py b/pytrustnfe/xml/filters.py index afd19ec..c3f7cbf 100644 --- a/pytrustnfe/xml/filters.py +++ b/pytrustnfe/xml/filters.py @@ -59,3 +59,9 @@ def format_date(value): if isinstance(value, date): return value.strftime(dt_format) return value + + +def format_with_comma(value): + if isinstance(value, float): + return ('%.2f' % value).replace('.', ',') + return value diff --git a/setup.py b/setup.py index ff137cf..9774692 100644 --- a/setup.py +++ b/setup.py @@ -32,6 +32,7 @@ later (LGPLv2+)', 'nfse/simpliss/templates/*xml', 'nfse/betha/templates/*xml', 'nfse/susesu/templates/*xml', + 'nfse/imperial/templates/*xml', 'xml/schemas/*xsd', ]}, url='https://github.com/danimaribeiro/PyTrustNFe',