Skip to content

Commit

Permalink
Merge pull request #306 from felps-dev/master
Browse files Browse the repository at this point in the history
Possibilidade de adicionar um código numérico aleatório e não gerar automaticamente.
  • Loading branch information
juniortada authored Nov 9, 2023
2 parents e984865 + fddac3b commit 33ede3a
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
9 changes: 5 additions & 4 deletions pynfe/entidades/notafiscal.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# -*- coding: utf-8 -*-
import random
from decimal import Decimal

from .base import Entidade
from pynfe import get_version
from pynfe.utils.flags import NF_STATUS, CODIGOS_ESTADOS

# from pynfe.utils import so_numeros, memoize
from pynfe.utils import so_numeros
from pynfe.utils.flags import CODIGOS_ESTADOS, NF_STATUS

from decimal import Decimal
from .base import Entidade


class NotaFiscal(Entidade):
Expand Down Expand Up @@ -465,7 +465,8 @@ def adicionar_responsavel_tecnico(self, **kwargs):
return obj

def _codigo_numerico_aleatorio(self):
self.codigo_numerico_aleatorio = str(random.randint(0, 99999999)).zfill(8)
if not self.codigo_numerico_aleatorio:
self.codigo_numerico_aleatorio = str(random.randint(0, 99999999)).zfill(8)
return self.codigo_numerico_aleatorio

def _dv_codigo_numerico(self, key):
Expand Down
36 changes: 32 additions & 4 deletions tests/test_nfce_serializacao.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
#!/usr/bin/env python
# *-* encoding: utf8 *-*

import datetime
import unittest
from decimal import Decimal

from pynfe.entidades.cliente import Cliente
from pynfe.entidades.emitente import Emitente
from pynfe.entidades.notafiscal import NotaFiscal
from pynfe.entidades.fonte_dados import _fonte_dados
from pynfe.processamento.serializacao import SerializacaoXML
from pynfe.entidades.notafiscal import NotaFiscal
from pynfe.processamento.assinatura import AssinaturaA1
from pynfe.processamento.serializacao import SerializacaoXML
from pynfe.processamento.validacao import Validacao
from pynfe.utils.flags import (
CODIGO_BRASIL,
Expand All @@ -18,8 +20,6 @@
XSD_NFE,
XSD_NFE_PROCESSADA,
)
from decimal import Decimal
import datetime


class SerializacaoNFeTestCase(unittest.TestCase):
Expand Down Expand Up @@ -531,6 +531,34 @@ def test_notafiscal_produto_cst00(self):
# Testa a validação do XML com os schemas XSD
self.validacao_com_xsd_do_xml_gerado_sem_processar()

def test_codigo_numerico_aleatorio(self):
# Preenche as classes do pynfe
self.emitente = self.preenche_emitente()
self.cliente = self.preenche_destinatario()
self.preenche_notafiscal_produto()

# Serializa e assina o XML
self.xml = self.serializa_nfe()
chave_nfce = self.xml[0].attrib["Id"]
antigo_codigo = self.notafiscal.codigo_numerico_aleatorio

# Gera novamente a nota fiscal e serializa
self.preenche_notafiscal_produto()
self.xml = self.serializa_nfe()

self.assertNotEqual(antigo_codigo, self.notafiscal.codigo_numerico_aleatorio)
self.assertNotEqual(chave_nfce, self.xml[0].attrib["Id"])

# Gera novamente a nota fiscal atribuindo um código aleatório.
# E serializa
self.preenche_notafiscal_produto()
self.notafiscal.codigo_numerico_aleatorio = antigo_codigo
self.xml = self.serializa_nfe()

# Verifica se a chave e codigo se mantiveram
self.assertEqual(antigo_codigo, self.notafiscal.codigo_numerico_aleatorio)
self.assertEqual(chave_nfce, self.xml[0].attrib["Id"])


if __name__ == "__main__":
unittest.main()

0 comments on commit 33ede3a

Please sign in to comment.