You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.4 KiB

# -*- coding: utf-8 -*-
# © 2016 Danimar Ribeiro, Trustcode
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from datetime import date, datetime
class ChaveNFe(object):
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):
assert self.cnpj != '', 'CNPJ necessário para criar chave NF-e'
assert self.estado != '', 'Estado necessário para criar chave NF-e'
assert self.emissao != '', 'Emissão necessário para criar chave NF-e'
assert self.modelo != '', 'Modelo necessário para criar chave NF-e'
assert self.serie != '', 'Série necessária para criar chave NF-e'
assert self.numero != '', 'Número necessário para criar chave NF-e'
assert self.tipo != '', 'Tipo necessário para criar chave NF-e'
assert self.codigo != '', 'Código necessário para criar chave NF-e'
def date_tostring(data):
assert isinstance(data, date), "Objeto date requerido"
return data.strftime("%d-%m-%y")
def datetime_tostring(data):
assert isinstance(data, datetime), "Objeto datetime requerido"
return data.strftime("%d-%m-%y %H:%M:%S")
def gerar_consulta_recibo(recibo):
return {'tpAmb': recibo.tpAmb, 'nRec': recibo.infRec.nRec}
def gerar_chave(obj_chave, prefix=None):
assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe"
obj_chave.validar()
chave_parcial = "%s%s%s%s%s%s%s%s" % (obj_chave.estado, obj_chave.emissao,
obj_chave.cnpj, obj_chave.modelo,
obj_chave.serie, obj_chave.numero,
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):
pass