diff --git a/pytrustnfe/nfse/campinas/__init__.py b/pytrustnfe/nfse/campinas/__init__.py
index ff5ef02..e5536af 100644
--- a/pytrustnfe/nfse/campinas/__init__.py
+++ b/pytrustnfe/nfse/campinas/__init__.py
@@ -6,27 +6,22 @@ import os
import suds
from lxml import etree
from pytrustnfe.xml import render_xml, sanitize_response
+from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
from pytrustnfe.nfse.assinatura import Assinatura
-from pytrustnfe import HttpClient
+from pytrustnfe.client import get_client
-def _render_xml(certificado, method, **kwargs):
+def _render(certificado, method, **kwargs):
path = os.path.join(os.path.dirname(__file__), 'templates')
- xml_send = render_xml(path, '%s.xml' % method, True, **kwargs)
- xml_send = etree.tostring(xml_send)
-
- return xml_send
-
+ if method == "testeEnviar":
+ xml_send = render_xml(path, 'enviar.xml', True, **kwargs)
+ else:
+ xml_send = render_xml(path, '%s.xml' % method, False, **kwargs)
-def _validate(method, xml):
- path = os.path.join(os.path.dirname(__file__), 'templates')
- schema = os.path.join(path, '%s.xsd' % method)
+ if type(xml_send) != str:
+ xml_send = etree.tostring(xml_send)
- nfe = etree.fromstring(xml)
- esquema = etree.XMLSchema(etree.parse(schema))
- esquema.validate(nfe)
- erros = [x.message for x in esquema.error_log]
- return erros
+ return xml_send
def _send(certificado, method, **kwargs):
@@ -34,19 +29,19 @@ def _send(certificado, method, **kwargs):
path = os.path.join(os.path.dirname(__file__), 'templates')
- if method == "testeEnviar":
- xml_send = render_xml(path, 'testeEnviar', **kwargs)
- else:
- xml_send = render_xml(path, '%s.xml' % method, False)
- client = HttpClient(url)
+ xml_send = _render(path, method, **kwargs)
+ client = get_client(url)
- pfx_path = certificado.save_pfx()
- signer = Assinatura(pfx_path, certificado.password)
- xml_signed = signer.assina_xml(xml_send, '')
+ if certificado:
+ cert, key = extract_cert_and_key_from_pfx(
+ certificado.pfx, certificado.password)
+ cert, key = save_cert_key(cert, key)
+ signer = Assinatura(cert, key, certificado.password)
+ xml_send = signer.assina_xml(xml_send, '')
try:
- response = getattr(client.service, method)(xml_signed)
- response, obj = sanitize_response(response)
+ response = getattr(client.service, method)(xml_send)
+ response, obj = sanitize_response(response.encode())
except suds.WebFault as e:
return {
'sent_xml': xml_send,
@@ -62,18 +57,19 @@ def _send(certificado, method, **kwargs):
def enviar(certificado, **kwargs):
- if kwargs['ambiente'] == 'producao':
- return _send(certificado, 'enviar', **kwargs)
- else:
- return _send(certificado, 'testeEnviar', **kwargs)
+ return _send(certificado, 'enviar', **kwargs)
+
+
+def teste_enviar(certificado, **kwargs):
+ return _send(certificado, 'testeEnviar', **kwargs)
def cancelar(certificado, ** kwargs):
return _send(certificado, 'cancelar', **kwargs)
-def consulta_lote(certificado, **kwargs):
- return _send(certificado, 'ConsultarLote', **kwargs)
+def consulta_lote(**kwargs):
+ return _send(False, 'consultarLote', **kwargs)
def consultar_lote_rps(certificado, **kwarg):
diff --git a/pytrustnfe/nfse/campinas/templates/ConsultaSeqRps.xsd b/pytrustnfe/nfse/campinas/templates/ConsultaSeqRps.xsd
deleted file mode 100644
index 94491a7..0000000
--- a/pytrustnfe/nfse/campinas/templates/ConsultaSeqRps.xsd
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pytrustnfe/nfse/campinas/templates/ConsultarLote.xsd b/pytrustnfe/nfse/campinas/templates/ConsultarLote.xsd
deleted file mode 100644
index 068756f..0000000
--- a/pytrustnfe/nfse/campinas/templates/ConsultarLote.xsd
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- Schema utilizado para REQUISIçÂO de Consulta de Lote de RPS.
- Este Schema XML é utilizado pelos Prestadores de serviços para consultarem Lote de RPS emitidos por eles.
-
-
-
-
-
- Cabeçalho do pedido.
-
-
-
-
-
- Informe o Codigo da Cidade.
-
-
-
-
- Informe o CPF/CNPJ do Remetente autorizado a transmitir a mensagem XML.
-
-
-
-
- Informe a Versão do Schema XML utilizado.
-
-
-
-
- Informe o Número do Lote a ser consultado.
-
-
-
-
-
-
-
-
-
diff --git a/pytrustnfe/nfse/campinas/templates/cancelar.xsd b/pytrustnfe/nfse/campinas/templates/cancelar.xsd
deleted file mode 100644
index 09f1938..0000000
--- a/pytrustnfe/nfse/campinas/templates/cancelar.xsd
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
- Schema utilizado para Cancelamento de NFSe.
- Este Schema XML é utilizado pelos Prestadores de serviços cancelarem NFSe emitidas por eles.
-
-
-
-
-
- Cabeçalho do pedido.
-
-
-
-
-
- Informe o Codigo da Cidade.
-
-
-
-
- Informe o CPF/CNPJ do Remetente autorizado a transmitir a mensagem XML.
-
-
-
-
- Informe se as NF-e a serem canceladas farão parte de uma mesma transação. True - As NF-e só serão canceladas se não ocorrer nenhum evento de erro durante o processamento de todo o lote; False - As NF-e aptas a serem canceladas serão canceladas, mesmo que ocorram eventos de erro durante processamento do cancelamento de outras NF-e deste lote.
-
-
-
-
- Informe a Versão do Schema XML utilizado.
-
-
-
-
-
-
-
- Detalhe do pedido de cancelamento de NFSe. Cada detalhe deverá conter a Chave de uma NFSe e sua respectiva assinatura de cancelamento.
-
-
-
-
-
-
-
diff --git a/pytrustnfe/nfse/campinas/templates/consulta_notas.xsd b/pytrustnfe/nfse/campinas/templates/consulta_notas.xsd
deleted file mode 100644
index 5784eb8..0000000
--- a/pytrustnfe/nfse/campinas/templates/consulta_notas.xsd
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
- Schema utilizado para REQUISIÇAO de consultas
- de notas que foram enviadas por lote de RPS.
- Este Schema XML é utilizado pelos prestadores
- de serviços para consultas de notas que foram enviadas por lote de
- RPS.
-
-
-
-
-
- Cabeçalho do pedido.
-
-
-
-
-
- Informe o Codigo da Cidade.
-
-
-
-
-
- Informe o CPF/CNPJ do Remetente
- autorizado a transmitir a mensagem XML.
-
-
-
-
- Informe a Inscrição Municipal do
- Prestador
-
-
-
-
- Informe a data de início do período
- transmitido (AAAA-MM-DD).
-
-
-
-
- Informe a data final do período
- transmitido (AAAA-MM-DD).
-
-
-
-
- Numero da nota inicial da consulta. Ou
- seja a consulta ira retornar as notas no periodo, onde o
- numero da nota seja maior ou igual a esse numero. O retorno
- não pode ultrapassar 500Kb. Caso não tenha o numero da nota,
- passar o valor Zero, será retornado as notas geradas no
- periodo até o limite de 500kb.
-
-
-
-
- Informe a Versão.
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pytrustnfe/nfse/campinas/templates/ConsultarLote.xml b/pytrustnfe/nfse/campinas/templates/consultarLote.xml
similarity index 100%
rename from pytrustnfe/nfse/campinas/templates/ConsultarLote.xml
rename to pytrustnfe/nfse/campinas/templates/consultarLote.xml
diff --git a/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xml b/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xml
deleted file mode 100644
index 6535559..0000000
--- a/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- {{ consulta.cidade }}
- {{ consulta.cpf_cnpj }}
- true
- 1
-
-
-
-
- {{ consulta.inscricao_municipal }}
- {{ consulta.rps_id }}
- {{ consulta.serie_prestacao }}
-
-
-
-
diff --git a/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xsd b/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xsd
deleted file mode 100644
index c0e83bf..0000000
--- a/pytrustnfe/nfse/campinas/templates/consultarNFSeRps.xsd
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
- Schema utilizado para Consulta de NFSe.
- Este Schema XML é utilizado pelos Prestadores de serviços consultarem NFSe emitidas por eles.
-
-
-
-
-
- Cabeçalho do pedido.
-
-
-
-
-
- Informe o Codigo da Cidade.
-
-
-
-
- Informe o CPF/CNPJ do Remetente autorizado a transmitir a mensagem XML.
-
-
-
-
- Informe se as NF-e a serem consultadas farão parte de uma mesma transação. Informe sempre True.
-
-
-
-
- Informe a Versão do Schema XML utilizado.
-
-
-
-
-
-
-
- Detalhe do pedido de consulta de NFSe. Cada detalhe deverá conter a Chave de uma NFSe e sua respectiva assinatura de consulta.
-
-
-
-
-
-
-
diff --git a/pytrustnfe/nfse/campinas/templates/enviar.xsd b/pytrustnfe/nfse/campinas/templates/enviar.xsd
deleted file mode 100644
index fedce41..0000000
--- a/pytrustnfe/nfse/campinas/templates/enviar.xsd
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-
-
-
- Schema utilizado para envio de lote de RPS.
- Este Schema XML é utilizado pelos prestadores
- de serviços para substituição em lote de RPS por NFS-e.
-
-
-
-
-
-
- Cabeçalho do Lote.
-
-
-
-
-
- Informe o Codigo da Cidade no Padrão SIAFI.
-
-
-
-
-
-
- CNPJ do contribuinte ou CPF do Responsável Legal autorizado a entregar o lote.
-
-
-
-
-
-
- Informe o Nome do Contribuinte ou do Responsável Legal
-
-
-
-
-
-
- Informe se os RPS a serem
- substituídos por
- NF-e farão
- parte de uma mesma transação.
- True - Os RPS só serão
- substituídos por NF-e se não
- ocorrer nenhum evento de erro
- durante o processamento de todo
- o lote; False - Os RPS válidos
- serão substituídos por NF-e,
- mesmo que ocorram eventos de
- erro durante processamento de
- outros RPS deste lote. Por definição
- estão sendo aceitos apenas lotes com RPS válidos,
- o lote é
- recusado caso haja algum RPS inválido.
-
-
-
-
-
-
- Informe a data de início do
- período
- transmitido
- (AAAA-MM-DD).
-
-
-
-
-
-
- Informe a data final do período
- transmitido
- (AAAA-MM-DD).
-
-
-
-
-
-
- Informe o total de RPS contidos
- na mensagem
- XML. OBS: O xml não pode ultrapassar o tamanho maximo de 500kb.
-
-
-
-
-
-
- Informe o valor total dos
- serviços prestados
- dos RPS
- contidos na mensagem XML.
-
-
-
-
-
-
- Informe o valor total das
- deduções dos RPS
- contidos na
- mensagem XML.
-
-
-
-
-
-
- Informe a Versão do Schema XML
- utilizado.
-
-
-
-
-
- Informe o Método de Envio
-
-
-
-
- Versão da DLL de envio de lote. Não é necessário informar esse campo caso não utilize a DLL.
-
-
-
-
-
-
-
-
-
- Informe os RPS a serem substituidos por
- NF-e.
-
-
-
-
-
-
-
diff --git a/setup.py b/setup.py
index a1add7c..ff137cf 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
# coding=utf-8
from setuptools import setup, find_packages
-VERSION = "0.9.2"
+VERSION = "0.9.3"
setup(
name="PyTrustNFe3",
@@ -27,6 +27,7 @@ later (LGPLv2+)',
'nfe/templates/*xml',
'nfe/fonts/*ttf',
'nfse/paulistana/templates/*xml',
+ 'nfse/campinas/templates/*xml',
'nfse/ginfes/templates/*xml',
'nfse/simpliss/templates/*xml',
'nfse/betha/templates/*xml',