Browse Source

[FIX] Ajusta a nota de petropolis ao novo formato

pull/225/head
Danimar Ribeiro 7 years ago
parent
commit
0d3dd0693f
  1. 70
      pytrustnfe/nfse/imperial/__init__.py
  2. 17
      pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml
  3. 9
      pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml
  4. 9
      pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml
  5. 14
      pytrustnfe/nfse/imperial/templates/CancelarNota.xml
  6. 43
      pytrustnfe/nfse/imperial/templates/GerarNota.xml
  7. 81
      pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml
  8. 5
      pytrustnfe/nfse/imperial/templates/SoapRequest.xml
  9. 2
      setup.py

70
pytrustnfe/nfse/imperial/__init__.py

@ -3,8 +3,11 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import os
import requests
from lxml import etree
from pytrustnfe import HttpClient
from requests import Session
from zeep import Client
from zeep.transports import Transport
from pytrustnfe.xml import render_xml, sanitize_response
@ -17,58 +20,41 @@ def _render(certificado, method, **kwargs):
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
base_url = 'https://petropolis.sigiss.com.br/petropolis/ws/sigiss_ws.php' # 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.decode())
client = HttpClient(base_url)
response = client.post_soap(soap, 'NFeaction/AWS_NFE.%s' % method)
response, obj = sanitize_response(response)
return {
'sent_xml': xml_send.decode(),
'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)
raise Exception('Não existe ambiente de homologação!')
def xml_consulta_protocolo(certificado, **kwargs):
return _render(certificado, 'CONSULTAPROTOCOLO', **kwargs)
xml_send = kwargs["xml"].decode('utf-8')
headers = {
'SOAPAction': "urn:sigiss_ws#%s" % method,
'Content-Type': 'text/xml; charset="utf-8"'
}
r = requests.post(base_url, data=xml_send, headers=headers)
response, obj = sanitize_response(r.text.strip())
def consulta_protocolo(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_consulta_protocolo(certificado, **kwargs)
return _send(certificado, 'CONSULTAPROTOCOLO', **kwargs)
return {
'sent_xml': xml_send,
'received_xml': response,
'object': obj.Body
}
def xml_consulta_notas_protocolo(certificado, **kwargs):
return _render(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs)
def xml_gerar_nota(certificado, **kwargs):
return _render(certificado, 'GerarNota', **kwargs)
def consulta_notas_protocolo(certificado, **kwargs):
def gerar_nota(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_consulta_notas_protocolo(certificado, **kwargs)
return _send(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs)
kwargs['xml'] = xml_gerar_nota(certificado, **kwargs)
return _send(certificado, 'GerarNota', **kwargs)
def xml_cancelar_nfse(certificado, **kwargs):
return _render(certificado, 'CANCELANOTAELETRONICA', **kwargs)
def xml_cancelar_nota(certificado, **kwargs):
return _render(certificado, 'CancelarNota', **kwargs)
def cancelar_nfse(certificado, **kwargs):
def cancelar_nota(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs)
return _send(certificado, 'CANCELANOTAELETRONICA', **kwargs)
kwargs['xml'] = xml_cancelar_nota(certificado, **kwargs)
return _send(certificado, 'CancelarNota', **kwargs)

17
pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml

@ -1,17 +0,0 @@
<ws_nfe.CANCELANOTAELETRONICA xmlns="NFe">
<Sdt_cancelanfe>
<Login>
<CodigoUsuario>{{ cancelamento.codigo_usuario }}</CodigoUsuario>
<CodigoContribuinte>{{ cancelamento.codigo_contribuinte }}</CodigoContribuinte>
</Login>
<Nota>
<SerieNota>{{ cancelamento.serie_nota }}</SerieNota>
<NumeroNota>{{ cancelamento.numero_nota }}</NumeroNota>
<SerieRPS>{{ cancelamento.serie_rps }}</SerieRPS>
<NumeroRps>{{ cancelamento.numero_rps }}</NumeroRps>
<ValorNota>{{ cancelamento.valor }}</ValorNota>
<MotivoCancelamento>{{ cancelamento.motivo }}</MotivoCancelamento>
<PodeCancelarGuia>{{ cancelamento.cancelar_guia }}</PodeCancelarGuia>
</Nota>
</Sdt_cancelanfe>
</ws_nfe.CANCELANOTAELETRONICA>

9
pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml

@ -1,9 +0,0 @@
<ws_nfe.CONSULTANOTASPROTOCOLO xmlns="NFe">
<Sdt_consultanotasprotocoloin>
<Protocolo>{{ consulta.protocolo }}</Protocolo>
<Login>
<CodigoUsuario>{{ consulta.codigo_usuario }}</CodigoUsuario>
<CodigoContribuinte>{{ consulta.codigo_contribuinte }}</CodigoContribuinte>
</Login>
</Sdt_consultanotasprotocoloin>
</ws_nfe.CONSULTANOTASPROTOCOLO>

9
pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml

@ -1,9 +0,0 @@
<ws_nfe.CONSULTAPROTOCOLO xmlns="NFe">
<Sdt_consultaprotocoloin>
<Protocolo>{{ consulta.protocolo }}</Protocolo>
<Login>
<CodigoUsuario>{{ consulta.codigo_usuario }}</CodigoUsuario>
<CodigoContribuinte>{{ consulta.codigo_contribuinte }}</CodigoContribuinte>
</Login>
</Sdt_consultaprotocoloin>
</ws_nfe.CONSULTAPROTOCOLO>

14
pytrustnfe/nfse/imperial/templates/CancelarNota.xml

@ -0,0 +1,14 @@
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<CancelarNota xmlns="urn:sigiss_ws">
<DadosCancelaNota>
<ccm>{{ cancelamento.ccm }}</ccm>
<cnpj>{{ cancelamento.cnpj }}</cnpj>
<senha>{{ cancelamento.senha }}</senha>
<nota>{{ cancelamento.nota }}</nota>
<motivo>{{ cancelamento.motivo }}</motivo>
<email>{{ cancelamento.email }}</email>
</DadosCancelaNota>
</CancelarNota>
</Body>
</Envelope>

43
pytrustnfe/nfse/imperial/templates/GerarNota.xml

@ -0,0 +1,43 @@
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<GerarNota xmlns="urn:sigiss_ws">
<DescricaoRps>
<ccm>{{ nfse.ccm }}</ccm>
<cnpj>{{ nfse.cnpj }}</cnpj>
<senha>{{ nfse.senha }}</senha>
<crc>{{ nfse.crc }}</crc>
<crc_estado>{{ nfse.crc_estado }}</crc_estado>
<aliquota_simples>{{ nfse.aliquota_simples }}</aliquota_simples>
<id_sis_legado>{{ nfse.id_sis_legado }}</id_sis_legado>
<servico>{{ nfse.servico }}</servico>
<situacao>{{ nfse.situacao }}</situacao>
<valor>{{ nfse.valor }}</valor>
<base>{{ nfse.base }}</base>
<descricaoNF>{{ nfse.descricaoNF }}</descricaoNF>
<tomador_tipo>{{ nfse.tomador_tipo }}</tomador_tipo>
<tomador_cnpj>{{ nfse.tomador_cnpj }}</tomador_cnpj>
<tomador_email>{{ nfse.tomador_email }}</tomador_email>
<tomador_ie>{{ nfse.tomador_ie }}</tomador_ie>
<tomador_razao>{{ nfse.tomador_razao }}</tomador_razao>
<tomador_fantasia>{{ nfse.tomador_fantasia }}</tomador_fantasia>
<tomador_endereco>{{ nfse.tomador_endereco }}</tomador_endereco>
<tomador_numero>{{ nfse.tomador_endereco }}</tomador_numero>
<tomador_complemento>{{ nfse.tomador_complemento }}</tomador_complemento>
<tomador_bairro>{{ nfse.tomador_bairro }}</tomador_bairro>
<tomador_CEP>{{ nfse.tomador_CEP }}</tomador_CEP>
<tomador_cod_cidade>{{ nfse.tomador_cod_cidade }}</tomador_cod_cidade>
<tomador_fone>{{ nfse.tomador_fone }}</tomador_fone>
<tomador_ramal>{{ nfse.tomador_ramal }}</tomador_ramal>
<tomador_fax>{{ nfse.tomador_fax }}</tomador_fax>
<outro_municipio>{{ nfse.outro_municipio }}</outro_municipio>
<cod_outro_municipio>{{ nfse.cod_outro_municipio }}</cod_outro_municipio>
<retencao_iss>{{ nfse.retencao_iss }}</retencao_iss>
<pis>{{ nfse.pis }}</pis>
<cofins>{{ nfse.cofins }}</cofins>
<inss>{{ nfse.inss }}</inss>
<irrf>{{ nfse.irrf }}</irrf>
<csll>{{ nfse.csll }}</csll>
</DescricaoRps>
</GerarNota>
</Body>
</Envelope>

81
pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml

@ -1,81 +0,0 @@
<ws_nfe.PROCESSARPS xmlns="NFe">
<Sdt_processarpsin>
<Login>
<CodigoUsuario>{{ nfse.codigo_usuario }}</CodigoUsuario>
<CodigoContribuinte>{{ nfse.codigo_contribuinte }}</CodigoContribuinte>
</Login>
<SDTRPS>
<Ano>{{ nfse.ano }}</Ano>
<Mes>{{ nfse.mes }}</Mes>
<CPFCNPJ>{{ nfse.cnpj_prestador }}</CPFCNPJ>
<DTIni>{{ nfse.data_emissao }}</DTIni>
<DTFin>{{ nfse.data_emissao }}</DTFin>
<TipoTrib>{{ nfse.tipo_tributacao }}</TipoTrib>
<DtAdeSN>{{ nfse.data_adesao_simples }}</DtAdeSN>
<AlqIssSN_IP>{{ nfse.aliquota_simples_isencao|comma }}</AlqIssSN_IP>
<Versao>2.00</Versao>
{% for rps in nfse.lista_rps -%}
<Reg20>
<!-- Optional -->
<Reg20Item>
<TipoNFS>{{ rps.tipo_nfse }}</TipoNFS>
<NumRps>{{ rps.numero }}</NumRps>
<SerRps>{{ rps.serie }}</SerRps>
<DtEmi>{{ rps.data_emissao }}</DtEmi>
<RetFonte>{{ rps.iss_retido }}</RetFonte>
<CodSrv>{{ rps.codigo_servico }}</CodSrv>
<DiscrSrv>{{ rps.descricao}}</DiscrSrv>
<VlNFS>{{ rps.valor_liquido_nfse|comma }}</VlNFS>
<VlDed>{{ rps.valor_deducao|comma }}</VlDed>
<DiscrDed>{{ rps.discriminacao_deducao }}</DiscrDed>
<VlBasCalc>{{ rps.base_calculo|comma }}</VlBasCalc>
<AlqIss>{{ rps.aliquota_issqn|comma }}</AlqIss>
<VlIss>{{ rps.valor_iss|comma }}</VlIss>
<VlIssRet>{{ rps.valor_iss_retido|comma }}</VlIssRet>
<CpfCnpTom>{{ rps.tomador.cnpj_cpf }}</CpfCnpTom>
<RazSocTom>{{ rps.tomador.razao_social }}</RazSocTom>
<TipoLogtom>{{ rps.tomador.tipo_logradouro }}</TipoLogtom>
<LogTom>{{ rps.tomador.logradouro }}</LogTom>
<NumEndTom>{{ rps.tomador.numero }}</NumEndTom>
<ComplEndTom>{{ rps.tomador.complemento }}</ComplEndTom>
<BairroTom>{{ rps.tomador.bairro }}</BairroTom>
<MunTom>{{ rps.tomador.municipio }}</MunTom>
<SiglaUFTom>{{ rps.tomador.uf }}</SiglaUFTom>
<CepTom>{{ rps.tomador.cep }}</CepTom>
<Telefone>{{ rps.tomador.telefone }}</Telefone>
<InscricaoMunicipal>{{ rps.tomador.inscricao_municipal }}</InscricaoMunicipal>
{% if rps.local_prestacao == 'prestador' %}
<TipoLogLocPre>{{ rps.prestador.tipo_logradouro }}</TipoLogLocPre>
<LogLocPre>{{ rps.prestador.logradouro }}</LogLocPre>
<NumEndLocPre>{{ rps.prestador.numero }}</NumEndLocPre>
<ComplEndLocPre>{{ rps.prestador.complemento }}</ComplEndLocPre>
<BairroLocPre>{{ rps.prestador.bairro }}</BairroLocPre>
<MunLocPre>{{ rps.prestador.municipio }}</MunLocPre>
<SiglaUFLocpre>{{ rps.prestador.uf }}</SiglaUFLocpre>
<CepLocPre>{{ rps.prestador.cep }}</CepLocPre>
{% endif %}
<Email1>{{ rps.tomador.email }}</Email1>
{% for imposto in rps.impostos -%}
<Reg30>
<Reg30Item>
<TributoSigla>{{ imposto.sigla }}</TributoSigla>
<TributoAliquota>{{ imposto.aliquota|comma }}</TributoAliquota>
<TributoValor>{{ imposto.valor|comma }}</TributoValor>
</Reg30Item>
</Reg30>
{% endfor %}
</Reg20Item>
</Reg20>
{% endfor %}
<Reg90>
<QtdRegNormal>{{ nfse.lista_rps|length }}</QtdRegNormal>
<ValorNFS>{{ nfse.lista_rps|sum(attribute='valor_liquido_nfse')|comma }}</ValorNFS>
<ValorISS>{{ nfse.lista_rps|sum(attribute='valor_iss')|comma }}</ValorISS>
<ValorDed>{{ nfse.lista_rps|sum(attribute='valor_deducao')|comma }}</ValorDed>
<ValorIssRetTom>{{ nfse.lista_rps|sum(attribute='valor_iss_retido')|comma }}</ValorIssRetTom>
<QtdReg30>{{ nfse.quantidade_impostos }}</QtdReg30>
<ValorTributos>{{ nfse.valor_tributos|comma }}</ValorTributos>
</Reg90>
</SDTRPS>
</Sdt_processarpsin>
</ws_nfe.PROCESSARPS>

5
pytrustnfe/nfse/imperial/templates/SoapRequest.xml

@ -1,5 +0,0 @@
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
{{ soap_body }}
</Body>
</Envelope>

2
setup.py

@ -2,7 +2,7 @@
from setuptools import setup, find_packages
VERSION = "1.0.35"
VERSION = "1.0.36"
setup(

Loading…
Cancel
Save