diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index ab1f8d4..e728c9e 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -84,7 +84,7 @@ def localizar_url(servico, estado, mod='55', ambiente=2): if sigla == 'RS' and servico == WS_NFE_CADASTRO: dominio = 'cad.sefazrs.rs.gov.br' - if sigla in ('AC', 'RN', 'PB', 'SC') and \ + if sigla in ('AC', 'RN', 'PB', 'SC', 'RJ') and \ servico == WS_NFE_CADASTRO: dominio = 'cad.svrs.rs.gov.br' @@ -284,6 +284,7 @@ UFAM = { NFE_AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'services2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'services2/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'services2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'services2/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'services2/services/NfeInutilizacao2', @@ -294,6 +295,7 @@ UFAM = { NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homnfe.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'services2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'services2/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'services2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'services2/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'services2/services/NfeInutilizacao2', @@ -314,6 +316,7 @@ UFBA = { WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento', + WS_NFE_CANCELAMENTO: 'webservices/sre/recepcaoevento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'hnfe.sefaz.ba.gov.br', @@ -325,6 +328,7 @@ UFBA = { WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento', + WS_NFE_CANCELAMENTO: 'webservices/sre/recepcaoevento', } } @@ -338,6 +342,7 @@ UFCE = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfeh.sefaz.ce.gov.br', @@ -348,6 +353,7 @@ UFCE = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', } } @@ -362,6 +368,7 @@ UFGO = { WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', + WS_NFE_CANCELAMENTO: 'nfe/services/v2/RecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homolog.sefaz.go.gov.br', @@ -372,6 +379,7 @@ UFGO = { WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', + WS_NFE_CANCELAMENTO: 'nfe/services/v2/RecepcaoEvento', } } @@ -386,6 +394,7 @@ UFMT = { WS_NFE_SITUACAO: 'nfews/v2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfews/v2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfews/v2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfews/v2/services/RecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.sefaz.mt.gov.br', @@ -396,6 +405,7 @@ UFMT = { WS_NFE_SITUACAO: 'nfews/v2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfews/v2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfews/v2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfews/v2/services/RecepcaoEvento', } } @@ -409,6 +419,7 @@ UFMS = { WS_NFE_INUTILIZACAO: 'producao/services2/NfeInutilizacao2', WS_NFE_CONSULTA: 'producao/services2/NfeConsulta2', WS_NFE_SITUACAO: 'producao/services2/NfeStatusServico2', + WS_NFE_CANCELAMENTO: 'producao/services2/RecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.ms.gov.br', @@ -419,6 +430,7 @@ UFMS = { WS_NFE_INUTILIZACAO: 'homologacao/services2/NfeInutilizacao2', WS_NFE_CONSULTA: 'homologacao/services2/NfeConsulta2', WS_NFE_SITUACAO: 'homologacao/services2/NfeStatusServico2', + WS_NFE_CANCELAMENTO: 'homologacao/services2/RecepcaoEvento', } } @@ -432,6 +444,7 @@ UFMG = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatus2', WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'hnfe.fazenda.mg.gov.br', @@ -442,6 +455,7 @@ UFMG = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatus2', WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', } } @@ -455,6 +469,7 @@ UFPR = { WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.fazenda.pr.gov.br', @@ -465,6 +480,7 @@ UFPR = { WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', } } diff --git a/pytrustnfe/nfse/ginfes/templates/Rps.xml b/pytrustnfe/nfse/ginfes/templates/Rps.xml index 6f7b12a..b65ac46 100644 --- a/pytrustnfe/nfse/ginfes/templates/Rps.xml +++ b/pytrustnfe/nfse/ginfes/templates/Rps.xml @@ -27,11 +27,11 @@ {{ rps.valor_csll }} {{ rps.iss_retido }} {{ rps.valor_iss }} - {{ rps.valor_iss_retido }} {{ rps.outras_retencoes }} {{ rps.base_calculo }} - {{ rps.aliquota }} + {{ rps.aliquota_issqn }} {{ rps.valor_liquido_nfse }} + {{ rps.valor_iss_retido }} {{ rps.desconto_incondicionado }} {{ rps.desconto_condicionado }} diff --git a/pytrustnfe/nfse/simpliss/__init__.py b/pytrustnfe/nfse/simpliss/__init__.py index 14820d7..62daa4a 100644 --- a/pytrustnfe/nfse/simpliss/__init__.py +++ b/pytrustnfe/nfse/simpliss/__init__.py @@ -19,13 +19,6 @@ def _render_xml(certificado, method, **kwargs): xml_send = render_xml(path, '%s.xml' % method, True, **kwargs) xml_send = etree.tostring(xml_send) - # cert, key = extract_cert_and_key_from_pfx( - # certificado.pfx, certificado.password) - # cert, key = save_cert_key(cert, key) - # - # pfx_path = certificado.save_pfx() - # signer = Assinatura(pfx_path, certificado.password) - # xml_send = signer.assina_xml(xml_send, '') return xml_send @@ -114,3 +107,13 @@ def cancelar_nfse(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs) return _send('CancelarNfse', **kwargs) + + +def xml_gerar_nfse(certificado, **kwargs): + return _render_xml(certificado, 'GerarNfse', **kwargs) + + +def gerar_nfse(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_recepcionar_lote_rps(certificado, **kwargs) + return _send('GerarNfse', **kwargs) diff --git a/pytrustnfe/nfse/simpliss/templates/GerarNfse.xml b/pytrustnfe/nfse/simpliss/templates/GerarNfse.xml new file mode 100644 index 0000000..72b6282 --- /dev/null +++ b/pytrustnfe/nfse/simpliss/templates/GerarNfse.xml @@ -0,0 +1,97 @@ + + + + {{ nfse.cnpj_prestador }} + {{ nfse.inscricao_municipal }} + + {% for rps in nfse.lista_rps -%} + + {{ rps.natureza_operacao }} + {{ rps.regime_tributacao }} + {{ rps.optante_simples }} + {{ rps.incentivador_cultural }} + {{ rps.status }} + {{ rps.data_emissao }} + {{ rps.outras_informacoes }} + + + {{ rps.valor_servico }} + {{ rps.valor_deducao }} + {{ rps.valor_pis }} + {{ rps.valor_cofins }} + {{ rps.valor_inss }} + {{ rps.valor_ir }} + {{ rps.valor_csll }} + {{ rps.iss_retido }} + {{ rps.valor_iss }} + {{ rps.valor_iss_retido }} + {{ rps.outras_retencoes }} + {{ rps.base_calculo }} + {{ rps.aliquota_issqn }} + {{ rps.valor_liquido_nfse }} + {{ rps.desconto_incondicionado }} + {{ rps.desconto_condicionado }} + + {{ rps.codigo_servico }} + {{ rps.cnae }} + {{ rps.codigo_tributacao }} + {{ rps.descricao }} + {{ rps.codigo_municipio }} + {% for item in rps.itens_servico -%} + + {{ item.descricao }} + {{ item.quantidade }} + {{ item.valor_unitario }} + + {% endfor %} + + + + + {% if rps.tomador.cnpj_cpf|length == 14 %} + {{ rps.tomador.cnpj_cpf }} + {% endif %} + {% if rps.tomador.cnpj_cpf|length == 11 %} + {{ rps.tomador.cnpj_cpf }} + {% endif %} + + {{ rps.tomador.inscricao_municipal }} + + {{ rps.tomador.razao_social }} + + {{ rps.tomador.logradouro }} + {{ rps.tomador.numero }} + {{ rps.tomador.complemento }} + {{ rps.tomador.bairro }} + {{ rps.tomador.cidade }} + {{ rps.tomador.uf }} + {{ rps.tomador.cep }} + + + {{ rps.tomador.telefone }} + {{ rps.tomador.email }} + + + {% if rps.intermediario is defined -%} + + {{ rps.intermediario.razao_social }} + + {{ rps.intermediario.cnpj }} + + {{ rps.intermediario.inscricao_municipal }} + + {% endif %} + {% if rps.construcao_civil is defined -%} + + {{ rps.construcao_civil.codigo_obra }} + {{ rps.construcao_civil.art }} + + {% endif %} + + {% endfor %} + + + {{ nfse.cnpj_prestador }} + {{ nfse.senha }} + + diff --git a/pytrustnfe/nfse/simpliss/templates/Rps.xml b/pytrustnfe/nfse/simpliss/templates/Rps.xml index 6b1fe3e..9032b53 100644 --- a/pytrustnfe/nfse/simpliss/templates/Rps.xml +++ b/pytrustnfe/nfse/simpliss/templates/Rps.xml @@ -30,7 +30,7 @@ {{ rps.valor_iss_retido }} {{ rps.outras_retencoes }} {{ rps.base_calculo }} - {{ rps.aliquota }} + {{ rps.aliquota_issqn }} {{ rps.valor_liquido_nfse }} {{ rps.desconto_incondicionado }} {{ rps.desconto_condicionado }} diff --git a/pytrustnfe/test/test_simpliss.py b/pytrustnfe/test/test_simpliss.py deleted file mode 100644 index 5107b85..0000000 --- a/pytrustnfe/test/test_simpliss.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Danimar Ribeiro, Trustcode -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import os.path -import unittest -from pytrustnfe.certificado import Certificado -from pytrustnfe.nfse.simpliss import recepcionar_lote_rps - - -class test_nfse_simpliss(unittest.TestCase): - - caminho = os.path.dirname(__file__) - - def test_recepcionar_lote(self): - pfx_source = open('/home/danimar/Downloads/machado.pfx', 'r').read() - pfx = Certificado(pfx_source, '123456789') - - dados = {'cnpj_prestador': '12345678910234', - 'inscricao_prestador': '123', - 'protocolo': '123'} - response = recepcionar_lote_rps( - pfx, nfse=dados, ambiente='homologacao') - print response diff --git a/pytrustnfe/test/test_susesu.py b/pytrustnfe/test/test_susesu.py deleted file mode 100644 index 3390af7..0000000 --- a/pytrustnfe/test/test_susesu.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Danimar Ribeiro, Trustcode -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import os.path -import unittest -from pytrustnfe.nfse.susesu import enviar_nota_retorna_url - - -class test_nfse_susesu(unittest.TestCase): - - caminho = os.path.dirname(__file__) - - def test_enviar_nota_url_nota(self): - dados = { - 'cnpj_prestador': '21118045000135', - 'codigo_prefeitura': 3150, - 'senha_nfd': 'fiscalb', - 'prestador': {}, - 'tomador': {} - } - response = enviar_nota_retorna_url(ambiente='homologacao', nfse=dados) - self.assertEqual(response['received_xml'], - '0-Numero da nota fiscal invalido.') diff --git a/setup.py b/setup.py index aa52877..0ae7f00 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ # coding=utf-8 from setuptools import setup, find_packages -VERSION = "0.1.32" +VERSION = "0.1.33" setup( name="PyTrustNFe",