Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possibilidade de adicionar um código numérico aleatório e não gerar automaticamente. #306

Merged
merged 2 commits into from
Nov 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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()