From f0ca867a6c13f09cf3ad64252cff0f7ad73464bc Mon Sep 17 00:00:00 2001 From: leogregianin Date: Mon, 26 Oct 2020 10:49:43 -0400 Subject: [PATCH] [feat] Grupo de pessoas autorizadas a baixar XML --- pynfe/entidades/notafiscal.py | 12 ++++++++++++ pynfe/processamento/serializacao.py | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index 0036160..4c204ed 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -145,6 +145,9 @@ class NotaFiscal(Entidade): # - Local de entrega diferente do destinatario (Sim/Nao) local_entrega_diferente_destinatario = False + # - Autorizados a baixar XML (lista 1 para * / ManyToManyField) + autorizados_baixar_xml = None + # - Produtos e Servicos (lista 1 para * / ManyToManyField) produtos_e_servicos = None @@ -349,6 +352,7 @@ class NotaFiscal(Entidade): processos_referenciados = None def __init__(self, *args, **kwargs): + self.autorizados_baixar_xml = [] self.notas_fiscais_referenciadas = [] self.produtos_e_servicos = [] self.transporte_volumes = [] @@ -362,6 +366,11 @@ class NotaFiscal(Entidade): def __str__(self): return ' '.join([str(self.modelo), self.serie, self.numero_nf]) + def adicionar_autorizados_baixar_xml(self, **kwargs): + obj = AutorizadosBaixarXML(**kwargs) + self.autorizados_baixar_xml.append(obj) + return obj + def adicionar_nota_fiscal_referenciada(self, **kwargs): u"""Adiciona uma instancia de Nota Fisca referenciada""" obj = NotaFiscalReferenciada(**kwargs) @@ -1026,3 +1035,6 @@ class NotaFiscalResponsavelTecnico(Entidade): email = str() fone = str() csrt = str() + +class AutorizadosBaixarXML(Entidade): + CPFCNPJ = str() diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 3c3fd73..19b0bce 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -214,6 +214,19 @@ class SerializacaoXML(Serializacao): else: return raiz + def _serializar_autorizados_baixar_xml(self, autorizados_baixar_xml, tag_raiz='autXML', retorna_string=True): + raiz = etree.Element(tag_raiz) + + if len(so_numeros(autorizados_baixar_xml.CPFCNPJ)) == 11: + etree.SubElement(raiz, 'CPF').text = so_numeros(autorizados_baixar_xml.CPFCNPJ) + else: + etree.SubElement(raiz, 'CNPJ').text = so_numeros(autorizados_baixar_xml.CPFCNPJ) + + if retorna_string: + return etree.tostring(raiz, encoding="unicode", pretty_print=True) + else: + return raiz + def _serializar_produto_servico(self, produto_servico, modelo, tag_raiz='det', retorna_string=True): raiz = etree.Element(tag_raiz) @@ -555,6 +568,10 @@ class SerializacaoXML(Serializacao): tag_raiz='entrega', )) + # Autorizados a baixar o XML + for num, item in enumerate(nota_fiscal.autorizados_baixar_xml): + raiz.append(self._serializar_autorizados_baixar_xml(item, retorna_string=False)) + # Itens for num, item in enumerate(nota_fiscal.produtos_e_servicos): det = self._serializar_produto_servico(item, modelo=nota_fiscal.modelo, retorna_string=False)