Browse Source

Merge branch 'master' of https://github.com/TadaSoftware/PyNFe

* 'master' of https://github.com/TadaSoftware/PyNFe:
  [fix] add um responsavel quando existir (uf am, ms, pe, pr, sc e to)
  [fix] erro retorna_string
  serialização xml responsável tecnico NT2018/003
  NT 2018/003 Responsavel tecnico
  Correção para emissão estado de GO
  Correção URL estado de Goiás.
pull/70/head
Thiago Montenegro 7 years ago
parent
commit
7f179feebc
  1. 17
      pynfe/entidades/notafiscal.py
  2. 5
      pynfe/processamento/comunicacao.py
  3. 18
      pynfe/processamento/serializacao.py
  4. 5
      pynfe/utils/webservices.py

17
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()

5
pynfe/processamento/comunicacao.py

@ -82,7 +82,12 @@ class ComunicacaoSefaz(Comunicacao):
if ind_sinc == 1:
try:
# Protocolo com envio OK
try:
inf_prot = prot[0][0] # root protNFe
except IndexError:
# Estados como GO vem com a tag header
inf_prot = prot[1][0]
lote_status = inf_prot.xpath("ns:retEnviNFe/ns:cStat", namespaces=ns)[0].text
# Lote processado
if lote_status == '104':

18
pynfe/processamento/serializacao.py

@ -415,6 +415,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)
@ -641,6 +653,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:

5
pynfe/utils/webservices.py

@ -263,8 +263,9 @@ NFCE = {
'EVENTOS': 'sefaz.go.gov.br/nfe/services/NFeRecepcaoEvento4?wsdl',
'QR': 'sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe?',
'CADASTRO': 'sefaz.go.gov.br/nfe/services/CadConsultaCadastro4?wsdl',
'HTTPS': 'http://nfe.',
'HOMOLOGACAO': 'http://homolog.'
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://homolog.',
'URL': 'sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe'
},
'DF': {
'QR': 'http://www.fazenda.df.gov.br/nfce/qrcode?',

Loading…
Cancel
Save