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',