Browse Source

Metodo para gerar chave e testes unitários

tags/0.1.5
Danimar Ribeiro 11 years ago
parent
commit
9fdda37683
  1. 18
      pytrustnfe/ChaveNFe.py
  2. 101
      pytrustnfe/test/test_utils.py
  3. 17
      pytrustnfe/utils.py

18
pytrustnfe/ChaveNFe.py

@ -8,15 +8,15 @@ Created on 23/06/2015
class ChaveNFe(object): class ChaveNFe(object):
def __init__(self, valores):
self.cnpj = ''
self.estado = ''
self.emissao = ''
self.modelo = ''
self.serie = ''
self.numero = ''
self.tipo = ''
self.codigo = ''
def __init__(self, **kwargs):
self.cnpj = kwargs.pop('cnpj', '')
self.estado = kwargs.pop('estado', '')
self.emissao = kwargs.pop('emissao', '')
self.modelo = kwargs.pop('modelo', '')
self.serie = kwargs.pop('serie', '')
self.numero = kwargs.pop('numero', '')
self.tipo = kwargs.pop('tipo', '')
self.codigo = kwargs.pop('codigo', '')
def validar(self): def validar(self):
assert self.cnpj != '', 'CNPJ necessário para criar chave NF-e' assert self.cnpj != '', 'CNPJ necessário para criar chave NF-e'

101
pytrustnfe/test/test_utils.py

@ -7,10 +7,18 @@ Created on Jun 16, 2015
import mock import mock
import unittest import unittest
import datetime import datetime
from pytrustnfe.utils import date_tostring, datetime_tostring
from pytrustnfe.utils import date_tostring, datetime_tostring, \
gerar_chave, gerar_consulta_recibo
from pytrustnfe.ChaveNFe import ChaveNFe
from pytrustnfe.xml.DynamicXml import DynamicXml
class test_utils(unittest.TestCase): class test_utils(unittest.TestCase):
kwargs = {
'cnpj': '33009911002506', 'estado': '52', 'emissao': '0604',
'modelo': '55', 'serie': '012', 'numero': '000000780',
'tipo': '0', 'codigo': '26730161'
}
def test_date_tostring(self): def test_date_tostring(self):
hoje = datetime.date.today() hoje = datetime.date.today()
@ -25,3 +33,94 @@ class test_utils(unittest.TestCase):
self.assertEqual(data, hoje.strftime("%d-%m-%y %H:%M:%S"), self.assertEqual(data, hoje.strftime("%d-%m-%y %H:%M:%S"),
"Não convertido corretamente") "Não convertido corretamente")
self.assertRaises(Exception, datetime_tostring, "Not a date") self.assertRaises(Exception, datetime_tostring, "Not a date")
def test_geracao_chave(self):
chave = ChaveNFe(**self.kwargs)
str_chave = gerar_chave(chave)
chave_correta = '52060433009911002506550120000007800267301615'
self.assertEqual(str_chave, chave_correta,
"Geração de chave nf-e incorreta")
str_chave = gerar_chave(chave, prefix='NFe')
chave_correta = 'NFe52060433009911002506550120000007800267301615'
self.assertEqual(str_chave, chave_correta,
"Geração de chave nf-e com prefixo incorreta")
self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
def test_geracao_recibo(self):
recibo = DynamicXml('EnviNFe')
recibo.tpAmb = '1'
recibo.infRec.nRec = '0001'
consulta = gerar_consulta_recibo(recibo)
self.assertEqual(str(consulta.nRec), '0001', 'Número do recibo inválido')
self.assertEqual(str(consulta.tpAmb), '1', 'Tipo de ambiente inválido')
self.assertIsInstance(consulta, DynamicXml,
'Consulta recibo deve ser do tipo DynamicXml')
def test_chave_nfe(self):
chave = ChaveNFe(**self.kwargs)
with self.assertRaises(AssertionError) as cm:
chave.cnpj = ''
chave.validar()
chave.cnpj = '1234567891011'
self.assertEqual('CNPJ necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.estado = ''
chave.validar()
chave.estado = '42'
self.assertEqual('Estado necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.emissao = ''
chave.validar()
chave.emissao = '0'
self.assertEqual('Emissão necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.modelo = ''
chave.validar()
chave.modelo = '55'
self.assertEqual('Modelo necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.serie = ''
chave.validar()
chave.serie = '012'
self.assertEqual('Série necessária para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.numero = ''
chave.validar()
chave.numero = '000000780'
self.assertEqual('Número necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.tipo = ''
chave.validar()
chave.tipo = '42'
self.assertEqual('Tipo necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')
with self.assertRaises(AssertionError) as cm:
chave.codigo = ''
chave.validar()
self.assertEqual('Código necessário para criar chave NF-e',
cm.exception.message,
'Validação da chave nf-e incorreta')

17
pytrustnfe/utils.py

@ -6,6 +6,7 @@ Created on 22/06/2015
''' '''
from datetime import date, datetime from datetime import date, datetime
from pytrustnfe.ChaveNFe import ChaveNFe from pytrustnfe.ChaveNFe import ChaveNFe
from pytrustnfe.xml.DynamicXml import DynamicXml
def date_tostring(data): def date_tostring(data):
@ -26,14 +27,26 @@ def gerar_consulta_recibo(recibo):
return c return c
def gerar_chave(obj_chave):
def gerar_chave(obj_chave, prefix=None):
assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe" assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe"
obj_chave.validar() obj_chave.validar()
return "%s%s%s%s%s%s%s%s" % (obj_chave.estado, obj_chave.emissao,
chave_parcial = "%s%s%s%s%s%s%s%s" % (obj_chave.estado, obj_chave.emissao,
obj_chave.cnpj, obj_chave.modelo, obj_chave.cnpj, obj_chave.modelo,
obj_chave.serie, obj_chave.numero, obj_chave.serie, obj_chave.numero,
obj_chave.tipo, obj_chave.codigo) obj_chave.tipo, obj_chave.codigo)
soma = 0
contador = 2
for c in reversed(chave_parcial):
soma += int(c) * contador
contador += 1
if contador == 10:
contador = 2
dv = (11 - soma % 11) if (soma % 11 != 0 and soma % 11 != 1) else 0
if prefix:
return prefix + chave_parcial + str(dv)
return chave_parcial + str(dv)
def descompacta_nfe_distribuicao(xml): def descompacta_nfe_distribuicao(xml):
pass pass
Loading…
Cancel
Save