diff --git a/pytrustnfe/nfse/issnet/__init__.py b/pytrustnfe/nfse/issnet/__init__.py
index 449d2f85..6705ddda 100644
--- a/pytrustnfe/nfse/issnet/__init__.py
+++ b/pytrustnfe/nfse/issnet/__init__.py
@@ -1,3 +1,80 @@
-# -*- coding: utf-8 -*-
-# © 2016 Danimar Ribeiro, Trustcode
+# © 2020 Danimar Ribeiro, Trustcode
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import os
+from requests import Session
+from zeep import Client
+from zeep.transports import Transport
+from requests.packages.urllib3 import disable_warnings
+
+from pytrustnfe.xml import render_xml, sanitize_response
+from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
+from pytrustnfe.nfe.assinatura import Assinatura
+
+
+def _render(certificado, method, **kwargs):
+ path = os.path.join(os.path.dirname(__file__), "templates")
+ xml_send = render_xml(path, "%s.xml" % method, True, **kwargs)
+
+ reference = ""
+ if method == "RecepcionarLoteRps":
+ reference = "rps%s" % kwargs["nfse"]["lista_rps"][0]["numero"]
+
+ signer = Assinatura(certificado.pfx, certificado.password)
+ xml_send = signer.assina_xml(xml_send, reference)
+ return xml_send
+
+
+def _send(certificado, method, **kwargs):
+ base_url = ""
+ if kwargs["ambiente"] == "producao":
+ base_url = "https://www.issnetonline.com.br/webserviceabrasf/duquedecaxias/servicos.asmx?wsdl"
+ else:
+ raise Exception('Não existe ambiente de homologação para este município!')
+
+ cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password)
+ cert, key = save_cert_key(cert, key)
+
+ disable_warnings()
+ session = Session()
+ session.cert = (cert, key)
+ session.verify = False
+ transport = Transport(session=session)
+
+ client = Client(base_url, transport=transport)
+
+ xml_send = kwargs["xml"]
+ response = client.service[method](xml_send)
+
+ response, obj = sanitize_response(response)
+ return {"sent_xml": xml_send, "received_xml": response, "object": obj}
+
+
+def xml_recepcionar_lote_rps(certificado, **kwargs):
+ return _render(certificado, "RecepcionarLoteRps", **kwargs)
+
+
+def recepcionar_lote_rps(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs["xml"] = xml_recepcionar_lote_rps(certificado, **kwargs)
+ return _send(certificado, "RecepcionarLoteRps", **kwargs)
+
+
+def xml_consultar_lote_rps(certificado, **kwargs):
+ return _render(certificado, "ConsultarLoteRps", **kwargs)
+
+
+def consultar_lote_rps(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs["xml"] = xml_consultar_lote_rps(certificado, **kwargs)
+ return _send(certificado, "ConsultarLoteRps", **kwargs)
+
+
+def xml_cancelar_nfse(certificado, **kwargs):
+ return _render(certificado, "CancelarNfse", **kwargs)
+
+
+def cancelar_nfse(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs["xml"] = xml_cancelar_nfse(certificado, **kwargs)
+ return _send(certificado, "CancelarNfse", **kwargs)
diff --git a/pytrustnfe/nfse/issnet/templates/CancelarNfse.xml b/pytrustnfe/nfse/issnet/templates/CancelarNfse.xml
new file mode 100644
index 00000000..979f490d
--- /dev/null
+++ b/pytrustnfe/nfse/issnet/templates/CancelarNfse.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ {{ cancelamento.numero_nfse }}
+ {{ cancelamento.cnpj_prestador }}
+ {{ cancelamento.inscricao_municipal }}
+ {{ cancelamento.cidade }}
+
+ {{ cancelamento.codigo_cancelamento }}
+
+
+
diff --git a/pytrustnfe/nfse/issnet/templates/ConsultarLoteRps.xml b/pytrustnfe/nfse/issnet/templates/ConsultarLoteRps.xml
new file mode 100644
index 00000000..050636ea
--- /dev/null
+++ b/pytrustnfe/nfse/issnet/templates/ConsultarLoteRps.xml
@@ -0,0 +1,7 @@
+
+
+ {{ consulta.cnpj_prestador }}
+ {{ consulta.inscricao_municipal }}
+
+ {{ consulta.protocolo }}
+
diff --git a/pytrustnfe/nfse/issnet/templates/RecepcionarLoteRps.xml b/pytrustnfe/nfse/issnet/templates/RecepcionarLoteRps.xml
new file mode 100644
index 00000000..5940ca4d
--- /dev/null
+++ b/pytrustnfe/nfse/issnet/templates/RecepcionarLoteRps.xml
@@ -0,0 +1,13 @@
+
+
+ {{ nfse.numero_lote }}
+ {{ nfse.cnpj_prestador }}
+ {{ nfse.inscricao_municipal }}
+ {{ nfse.lista_rps|length }}
+
+ {% for rps in nfse.lista_rps -%}
+ {% include 'Rps.xml' %}
+ {% endfor %}
+
+
+
diff --git a/pytrustnfe/nfse/issnet/templates/Rps.xml b/pytrustnfe/nfse/issnet/templates/Rps.xml
new file mode 100644
index 00000000..a6d59bdb
--- /dev/null
+++ b/pytrustnfe/nfse/issnet/templates/Rps.xml
@@ -0,0 +1,91 @@
+
+
+
+ {{ rps.numero }}
+ {{ rps.serie }}
+ {{ rps.tipo_rps }}
+
+ {{ rps.data_emissao }}
+ {{ rps.natureza_operacao }}
+ {{ rps.regime_tributacao }}
+ {{ rps.optante_simples }}
+ {{ rps.incentivador_cultural }}
+ {{ rps.status }}
+
+ {{ rps.numero_substituido }}
+ {{ rps.serie_substituido }}
+ {{ rps.tipo_substituido }}
+
+
+
+ {{ 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_servico }}
+ {{ rps.codigo_tributacao_municipio }}
+ {{ rps.descricao }}
+ {{ rps.codigo_municipio }}
+
+
+ {{ rps.prestador.cnpj }}
+ {{ rps.prestador.inscricao_municipal }}
+
+
+
+
+ {% 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 %}
+
+
diff --git a/setup.py b/setup.py
index 07316f98..10528e41 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
from setuptools import setup, find_packages
-VERSION = "1.0.55"
+VERSION = "1.0.56"
setup(
@@ -41,6 +41,7 @@
"nfse/bh/templates/*xml",
"nfse/mga/templates/*xml",
"nfse/aparecida/templates/*xml",
+ "nfse/issnet/templates/*xml",
"xml/schemas/*xsd",
]
},