Browse Source

Merge pull request #8 from loggi/resolve-fork2

[FINPD-69] Usar PyTrustNFe para emitar as notas fiscais (Python 2)
pull/268/head
Isabela Morais 6 years ago
committed by GitHub
parent
commit
ee2a4dc2a0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml
  2. 20
      pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml
  3. 1
      pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml
  4. 56
      pytrustnfe/test/const.py
  5. 35
      pytrustnfe/test/test_nfse_paulistana_email_tomador.py
  6. 56
      pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py
  7. 29
      pytrustnfe/test/test_nfse_paulistana_para_lote.py
  8. 60
      pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py
  9. 46
      pytrustnfe/test/test_nfse_paulistana_valores_default.py

12
pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml

@ -34,12 +34,12 @@
<ISSRetido>{{ rps.iss_retido | default('false') }}</ISSRetido> <ISSRetido>{{ rps.iss_retido | default('false') }}</ISSRetido>
{% if rps.tomador.tipo_cpfcnpj != 3 %} {% if rps.tomador.tipo_cpfcnpj != 3 %}
<CPFCNPJTomador> <CPFCNPJTomador>
{% if rps.tomador.tipo_cpfcnpj == 1 -%}
<CPF>{{ rps.tomador.cpf_cnpj }}</CPF>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 2 -%}
<CNPJ>{{ rps.tomador.cpf_cnpj }}</CNPJ>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 1 -%}
<CPF>{{ rps.tomador.cpf_cnpj }}</CPF>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 2 -%}
<CNPJ>{{ rps.tomador.cpf_cnpj }}</CNPJ>
{% endif %}
</CPFCNPJTomador> </CPFCNPJTomador>
{% endif %} {% endif %}
{% if rps.tomador.inscricao_municipal -%} {% if rps.tomador.inscricao_municipal -%}

20
pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml

@ -6,11 +6,11 @@
</Cabecalho> </Cabecalho>
{% for rps in nfse.lista_rps -%} {% for rps in nfse.lista_rps -%}
<RPS xmlns=""> <RPS xmlns="">
<Assinatura>{{ rps.assinatura }}</Assinatura>
<Assinatura>{{ rps.assinatura }}</Assinatura>
<ChaveRPS> <ChaveRPS>
<InscricaoPrestador>{{ rps.prestador.inscricao_municipal }}</InscricaoPrestador>
<SerieRPS>{{ rps.serie }}</SerieRPS>
<NumeroRPS>{{ rps.numero }}</NumeroRPS>
<InscricaoPrestador>{{ rps.prestador.inscricao_municipal }}</InscricaoPrestador>
<SerieRPS>{{ rps.serie }}</SerieRPS>
<NumeroRPS>{{ rps.numero }}</NumeroRPS>
</ChaveRPS> </ChaveRPS>
<TipoRPS>{{ rps.tipo_rps | default('RPS') }}</TipoRPS> <TipoRPS>{{ rps.tipo_rps | default('RPS') }}</TipoRPS>
<DataEmissao>{{ rps.data_emissao }}</DataEmissao> <DataEmissao>{{ rps.data_emissao }}</DataEmissao>
@ -28,12 +28,12 @@
<ISSRetido>{{ rps.iss_retido | default('false') }}</ISSRetido> <ISSRetido>{{ rps.iss_retido | default('false') }}</ISSRetido>
{% if rps.tomador.tipo_cpfcnpj != 3 %} {% if rps.tomador.tipo_cpfcnpj != 3 %}
<CPFCNPJTomador> <CPFCNPJTomador>
{% if rps.tomador.tipo_cpfcnpj == 1 -%}
<CPF>{{ rps.tomador.cpf_cnpj }}</CPF>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 2 -%}
<CNPJ>{{ rps.tomador.cpf_cnpj }}</CNPJ>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 1 -%}
<CPF>{{ rps.tomador.cpf_cnpj }}</CPF>
{% endif %}
{% if rps.tomador.tipo_cpfcnpj == 2 -%}
<CNPJ>{{ rps.tomador.cpf_cnpj }}</CNPJ>
{% endif %}
</CPFCNPJTomador> </CPFCNPJTomador>
{% endif %} {% endif %}
{% if rps.tomador.inscricao_municipal -%} {% if rps.tomador.inscricao_municipal -%}

1
pytrustnfe/test/XMLs/xml_send_rps_batch_to_paulistana.xml
File diff suppressed because it is too large
View File

56
pytrustnfe/test/const.py

@ -0,0 +1,56 @@
LOTE_RPS = [
{
'assinatura': '123',
'serie': '1',
'numero': str(i),
'data_emissao': '2016-08-29',
'codigo_atividade': '07498',
'total_servicos': '2.00',
'total_deducoes': '3.00',
'prestador': {
'inscricao_municipal': '123456'
},
'tomador': {
'tipo_cpfcnpj': 1,
'cpf_cnpj': '12345678923256',
'inscricao_municipal': '123456',
'razao_social': 'Trustcode',
'tipo_logradouro': '1',
'complemento': 'aaa',
'logradouro': 'Vinicius de Moraes, 42',
'numero': '42',
'bairro': 'Corrego',
'cidade': 'Floripa',
'uf': 'SC',
'cep': '88037240',
'email': 'user@user.com'
},
'codigo_atividade': '07498',
'aliquota_atividade': '5.00',
'descricao': 'Venda de servico'
} for i in range(5)
]
DEFAULT_RPS = [
{
'assinatura': '123',
'serie': '1',
'numero': '1',
'data_emissao': '2016-08-29',
'codigo_atividade': '07498',
'prestador': {
'inscricao_municipal': '123456'
},
'tomador': {
'tipo_cpfcnpj': 1,
'cpf_cnpj': '12345678923256',
},
}
]
NFSE = {
'cpf_cnpj': '12345678901234',
'data_inicio': '2016-08-29',
'data_fim': '2016-08-29',
'lista_rps': []
}

35
pytrustnfe/test/test_nfse_paulistana_email_tomador.py

@ -0,0 +1,35 @@
# coding=utf-8
import unittest
import os.path
from pytrustnfe.xml import render_xml, sanitize_response
from const import NFSE, DEFAULT_RPS
template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates')
def _get_nfse(lista_rps):
nfse = NFSE
nfse['lista_rps'] = lista_rps
return nfse
def get_objects(nfse):
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse)
_, obj_rps = sanitize_response(xml_rps)
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse)
_, obj_lote_rps = sanitize_response(xml_lote_rps)
return obj_rps, obj_lote_rps
class test_nfse_paulistana_email_tomador(unittest.TestCase):
def test_rps_sem_email(self):
nfse = _get_nfse(DEFAULT_RPS)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertFalse(hasattr(obj_rps.RPS, 'EmailTomador'))
self.assertFalse(hasattr(obj_lote_rps.RPS, 'EmailTomador'))

56
pytrustnfe/test/test_nfse_paulistana_endereco_tomador.py

@ -0,0 +1,56 @@
# coding=utf-8
import unittest
import os.path
from pytrustnfe.xml import render_xml, sanitize_response
from const import NFSE, DEFAULT_RPS
attrs = ['TipoLogradouro', 'Logradouro', 'NumeroEndereco', 'ComplementoEndereco', 'Bairro', 'CEP']
template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates')
def _get_nfse(lista_rps):
nfse = NFSE
nfse['lista_rps'] = lista_rps
return nfse
def get_objects(nfse):
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse)
_, obj_rps = sanitize_response(xml_rps)
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse)
_, obj_lote_rps = sanitize_response(xml_lote_rps)
return obj_rps, obj_lote_rps
class test_nfse_paulistana_endereco_tomador(unittest.TestCase):
def test_rps_sem_cidade(self):
nfse = _get_nfse(DEFAULT_RPS)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertFalse(hasattr(obj_rps.RPS, 'EnderecoTomador'))
self.assertFalse(hasattr(obj_lote_rps.RPS, 'EnderecoTomador'))
def test_rps_sem_dados_endereco(self):
lista_rps = DEFAULT_RPS
for rps in lista_rps:
rps['tomador']['cidade'] = 'Florianópolis'
rps['tomador']['cidade'] = 'SC'
nfse = _get_nfse(lista_rps)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertTrue(hasattr(obj_rps.RPS, 'EnderecoTomador'))
self.assertTrue(hasattr(obj_lote_rps.RPS, 'EnderecoTomador'))
for attr in attrs:
self.assertFalse(hasattr(obj_rps.RPS.EnderecoTomador, attr))
self.assertFalse(hasattr(obj_lote_rps.RPS.EnderecoTomador, attr))

29
pytrustnfe/test/test_nfse_paulistana_para_lote.py

@ -0,0 +1,29 @@
# coding=utf-8
import os.path
import unittest
from pytrustnfe.xml import render_xml, sanitize_response
from const import LOTE_RPS, NFSE
def _get_nfse():
nfse = NFSE
nfse['lista_rps'] = LOTE_RPS
return nfse
class test_nfse_paulistana_para_lote(unittest.TestCase):
xml_path = os.path.join(os.path.dirname(__file__), 'XMLs')
template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates')
BATCH_SIZE = len(LOTE_RPS)
def test_envio_nfse(self):
nfse = _get_nfse()
xml_send = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=nfse)
expected_xml = open(os.path.join(self.xml_path, 'xml_send_rps_batch_to_paulistana.xml'), 'r').read()
_, obj = sanitize_response(xml_send)
self.assertEqual(obj.Cabecalho.QtdRPS, self.BATCH_SIZE)
self.assertEqual(xml_send, expected_xml)

60
pytrustnfe/test/test_nfse_paulistana_tipo_cpfcnpj.py

@ -0,0 +1,60 @@
# coding=utf-8
import os.path
import unittest
from pytrustnfe.xml import render_xml, sanitize_response
from const import DEFAULT_RPS, NFSE
template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates')
def _get_nfse(tipo_cpfcnpj):
nfse = NFSE
lista_rps = DEFAULT_RPS
for rps in lista_rps:
rps['tomador']['tipo_cpfcnpj'] = tipo_cpfcnpj
rps['tomador']['cpf_cnpj'] = '12345678923256'
nfse['lista_rps'] = lista_rps
return nfse
def get_objects(nfse):
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse)
_, obj_rps = sanitize_response(xml_rps)
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse)
_, obj_lote_rps = sanitize_response(xml_lote_rps)
return obj_rps, obj_lote_rps
class test_nfse_paulistana_tipo_cpfcnpj(unittest.TestCase):
def test_tipo_cpfcnpj_1(self):
nfse = _get_nfse(tipo_cpfcnpj=1)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador'))
self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CPF'))
self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador'))
self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CPF'))
def test_tipo_cpfcnpj_2(self):
nfse = _get_nfse(tipo_cpfcnpj=2)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador'))
self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CNPJ'))
self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador'))
self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CNPJ'))
def test_tipo_cpfcnpj_3(self):
nfse = _get_nfse(tipo_cpfcnpj=3)
obj_rps, obj_lote_rps = get_objects(nfse)
self.assertFalse(hasattr(obj_rps.RPS, 'CPFCNPJTomador'))

46
pytrustnfe/test/test_nfse_paulistana_valores_default.py

@ -0,0 +1,46 @@
# coding=utf-8
import os.path
import unittest
from pytrustnfe.xml import render_xml, sanitize_response
from const import DEFAULT_RPS, NFSE
default_values = {
'TipoRPS': 'RPS',
'TributacaoRPS': 'T',
'ValorCOFINS': 0.0,
'ValorINSS': 0.0,
'ValorIR': 0.0,
'ValorPIS': 0.0,
'ValorCSLL': 0.0,
'ISSRetido': False
}
attrs = ['TipoRPS', 'TributacaoRPS', 'ValorPIS', 'ValorCOFINS', 'ValorINSS', 'ValorIR', 'ValorCSLL', 'ISSRetido']
def _get_nfse():
nfse = NFSE
nfse['lista_rps'] = DEFAULT_RPS
return nfse
class test_nfse_paulistana_valores_default(unittest.TestCase):
template_path = os.path.join(os.path.dirname(__file__), '..', 'nfse', 'paulistana', 'templates')
nfse = _get_nfse()
def test_rps_sem_valores(self):
xml_rps = render_xml(self.template_path, 'EnvioRPS.xml', False, nfse=self.nfse)
_, obj = sanitize_response(xml_rps)
for attr in attrs:
self.assertEqual(getattr(obj.RPS, attr), default_values[attr])
def test_lote_rps_sem_valores(self):
xml_lote_rps = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=self.nfse)
_, obj = sanitize_response(xml_lote_rps)
for attr in attrs:
self.assertEqual(getattr(obj.RPS, attr), default_values[attr])
Loading…
Cancel
Save