diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index c2fc6ac..3c994c0 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -355,6 +355,7 @@ class NotaFiscal(Entidade): self.duplicatas = [] self.observacoes_contribuinte = [] self.processos_referenciados = [] + self.responsavel_tecnico = [] super(NotaFiscal, self).__init__(*args, **kwargs) @@ -417,11 +418,17 @@ class NotaFiscal(Entidade): return obj def adicionar_processo_referenciado(self, **kwargs): - u"""Adiciona uma instancia de Processo Referenciado""" + """Adiciona uma instancia de Processo Referenciado""" obj = NotaFiscalProcessoReferenciado(**kwargs) self.processos_referenciados.append(obj) return obj + def adicionar_responsavel_tecnico(self, **kwargs): + """ Adiciona uma instancia de Responsavel Tecnico """ + obj = NotaFiscalResponsavelTecnico(**kwargs) + self.responsavel_tecnico.append(obj) + return obj + def _codigo_numerico_aleatorio(self): self.codigo_numerico_aleatorio = str(random.randint(0, 99999999)).zfill(8) return self.codigo_numerico_aleatorio @@ -1003,3 +1010,11 @@ class NotaFiscalServico(Entidade): def __str__(self): return ' '.join([str(self.identificador)]) + +class NotaFiscalResponsavelTecnico(Entidade): + # NT 2018/003 + cnpj = str() + contato = str() + email = str() + fone = str() + csrt = str() diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 077bbb2..c6e56e9 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -410,6 +410,18 @@ class SerializacaoXML(Serializacao): else: return raiz + def _serializar_responsavel_tecnico(self, responsavel_tecnico, tag_raiz='infRespTec', retorna_string=True): + raiz = etree.Element(tag_raiz) + etree.SubElement(raiz, 'CNPJ').text = responsavel_tecnico.cnpj + etree.SubElement(raiz, 'xContato').text = responsavel_tecnico.contato + etree.SubElement(raiz, 'email').text = responsavel_tecnico.email + etree.SubElement(raiz, 'fone').text = responsavel_tecnico.fone + + if retorna_string: + return etree.tostring(raiz, encoding="unicode", pretty_print=True) + else: + return raiz + def _serializar_nota_fiscal(self, nota_fiscal, tag_raiz='infNFe', retorna_string=True): raiz = etree.Element(tag_raiz, versao=self._versao) @@ -636,6 +648,12 @@ class SerializacaoXML(Serializacao): if nota_fiscal.informacoes_complementares_interesse_contribuinte: etree.SubElement(info_ad, 'infCpl').text = nota_fiscal.informacoes_complementares_interesse_contribuinte + # Responsavel Tecnico NT2018/003 + if nota_fiscal.responsavel_tecnico: + raiz.append(self._serializar_responsavel_tecnico( + nota_fiscal.responsavel_tecnico[0], retorna_string=False)) + + if retorna_string: return etree.tostring(raiz, encoding="unicode", pretty_print=True) else: