Browse Source

Merge pull request #2 from TadaSoftware/master

Atualização do Fork
pull/68/head
erikseyti 7 years ago
committed by GitHub
parent
commit
60d37b1736
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      pynfe/processamento/comunicacao.py
  2. 8
      pynfe/processamento/serializacao.py
  3. 30
      pynfe/utils/descompactar.py
  4. 9
      pynfe/utils/webservices.py

17
pynfe/processamento/comunicacao.py

@ -167,7 +167,7 @@ class ComunicacaoSefaz(Comunicacao):
# url # url
url = self._get_url_an(consulta='DISTRIBUICAO') url = self._get_url_an(consulta='DISTRIBUICAO')
# Monta XML para envio da requisição # Monta XML para envio da requisição
raiz = etree.Element('distDFeInt', versao='1.00', xmlns=NAMESPACE_NFE)
raiz = etree.Element('distDFeInt', versao='1.01', xmlns=NAMESPACE_NFE)
etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente) etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)
if self.uf: if self.uf:
etree.SubElement(raiz, 'cUFAutor').text = CODIGOS_ESTADOS[self.uf.upper()] etree.SubElement(raiz, 'cUFAutor').text = CODIGOS_ESTADOS[self.uf.upper()]
@ -175,15 +175,16 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'CNPJ').text = cnpj etree.SubElement(raiz, 'CNPJ').text = cnpj
else: else:
etree.SubElement(raiz, 'CPF').text = cpf etree.SubElement(raiz, 'CPF').text = cpf
if not chave:
distNSU = etree.SubElement(raiz, 'distNSU') distNSU = etree.SubElement(raiz, 'distNSU')
etree.SubElement(distNSU, 'ultNSU').text = str(nsu).zfill(15) etree.SubElement(distNSU, 'ultNSU').text = str(nsu).zfill(15)
# if chave:
# consChNFe = etree.SubElement(raiz, 'consChNFe')
# etree.SubElement(consChNFe, 'chNFe').text = chave
# Monta XML para envio da requisição
if chave:
consChNFe = etree.SubElement(raiz, 'consChNFe')
etree.SubElement(consChNFe, 'chNFe').text = chave
#Monta XML para envio da requisição
xml = self._construir_xml_soap('NFeDistribuicaoDFe', raiz) xml = self._construir_xml_soap('NFeDistribuicaoDFe', raiz)
# print(url)
# print(etree.tostring(xml))
return self._post(url, xml) return self._post(url, xml)
def consulta_cadastro(self, modelo, cnpj): def consulta_cadastro(self, modelo, cnpj):
@ -352,7 +353,7 @@ class ComunicacaoSefaz(Comunicacao):
raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"') raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"')
# Estados que utilizam outros ambientes # Estados que utilizam outros ambientes
else: else:
lista_svrs = ['AC', 'RJ', 'RN', 'PB', 'SC', 'SE', 'PI']
lista_svrs = ['AC', 'RJ', 'RN', 'PB', 'SC', 'SE', 'PI', 'DF', 'ES']
lista_svan = ['MA','PA'] lista_svan = ['MA','PA']
if self.uf.upper() in lista_svrs: if self.uf.upper() in lista_svrs:
if self._ambiente == 1: if self._ambiente == 1:

8
pynfe/processamento/serializacao.py

@ -305,9 +305,9 @@ class SerializacaoXML(Serializacao):
etree.SubElement(icms_item, 'modBCST').text = str(produto_servico.icms_st_modalidade_determinacao_bc) etree.SubElement(icms_item, 'modBCST').text = str(produto_servico.icms_st_modalidade_determinacao_bc)
etree.SubElement(icms_item, 'pMVAST').text = str(produto_servico.icms_st_percentual_adicional) # Percentual da margem de valor Adicionado do ICMS ST etree.SubElement(icms_item, 'pMVAST').text = str(produto_servico.icms_st_percentual_adicional) # Percentual da margem de valor Adicionado do ICMS ST
etree.SubElement(icms_item, 'pRedBCST').text = str(produto_servico.icms_st_percentual_reducao_bc) # APercentual da Redução de BC do ICMS ST etree.SubElement(icms_item, 'pRedBCST').text = str(produto_servico.icms_st_percentual_reducao_bc) # APercentual da Redução de BC do ICMS ST
etree.SubElement(icms_item, 'vBCST ').text = str(produto_servico.icms_st_valor_base_calculo)
etree.SubElement(icms_item, 'pICMSST ').text = str(produto_servico.icms_st_aliquota)
etree.SubElement(icms_item, 'vICMSST ').text = str(produto_servico.icms_st_valor)
etree.SubElement(icms_item, 'vBCST').text = str(produto_servico.icms_st_valor_base_calculo)
etree.SubElement(icms_item, 'pICMSST').text = str(produto_servico.icms_st_aliquota)
etree.SubElement(icms_item, 'vICMSST').text = str(produto_servico.icms_st_valor)
# 20=Com redução de base de cálculo # 20=Com redução de base de cálculo
elif produto_servico.icms_modalidade == '20': elif produto_servico.icms_modalidade == '20':
etree.SubElement(icms_item, 'pRedBC').text = '{:.2f}'.format(produto_servico.icms_percentual_reducao_bc or 0) # Percentual da Redução de BC etree.SubElement(icms_item, 'pRedBC').text = '{:.2f}'.format(produto_servico.icms_percentual_reducao_bc or 0) # Percentual da Redução de BC
@ -728,7 +728,7 @@ class SerializacaoQrcode(object):
# url_chave - Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e. # url_chave - Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e.
# Informar a URL da “Consulta por chave de acesso da NFC-e”. # Informar a URL da “Consulta por chave de acesso da NFC-e”.
# A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso # A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso
lista_uf_padrao = ['PR', 'CE', 'RS', 'RJ', 'RO']
lista_uf_padrao = ['PR', 'CE', 'RS', 'RJ', 'RO', 'DF']
if uf.upper() in lista_uf_padrao: if uf.upper() in lista_uf_padrao:
qrcode = NFCE[uf.upper()]['QR'] + url qrcode = NFCE[uf.upper()]['QR'] + url
url_chave = NFCE[uf.upper()]['URL'] url_chave = NFCE[uf.upper()]['URL']

30
pynfe/utils/descompactar.py

@ -0,0 +1,30 @@
"""
@author: Lucas Resende
classe que descompacta o gzip recebido pela consulta distribuicao
"""
from io import BytesIO
import base64
import gzip
from lxml import etree
class DescompactaGzip(object):
@staticmethod
def descompacta(stringZipada):
"""
:paramn stringZipada: String
:return : Etree
"""
arq = BytesIO()
arq.write(base64.b64decode(stringZipada))
arq.seek(0)
zip = gzip.GzipFile(fileobj=arq)
texto = zip.read()
arq.close()
zip.close()
descompactado = texto.decode('utf-8')
return etree.fromstring(descompactado)

9
pynfe/utils/webservices.py

@ -172,7 +172,10 @@ NFCE = {
'CHAVE': '', 'CHAVE': '',
'INUTILIZACAO': '', 'INUTILIZACAO': '',
'EVENTOS': '', 'EVENTOS': '',
'QR': ''
'QR': 'sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx? ',
'HTTPS': 'http://nfe.',
'HOMOLOGACAO': 'http://homologacao.',
'URL': 'www.sefaz.es.gov.br/nfce/consulta'
}, },
'RJ': { 'RJ': {
'STATUS': '', 'STATUS': '',
@ -263,6 +266,10 @@ NFCE = {
'HTTPS': 'http://nfe.', 'HTTPS': 'http://nfe.',
'HOMOLOGACAO': 'http://homolog.' 'HOMOLOGACAO': 'http://homolog.'
}, },
'DF': {
'QR': 'http://www.fazenda.df.gov.br/nfce/qrcode?',
'URL': 'www.fazenda.df.gov.br/nfce/consulta'
},
# RO, AC, RR, PA, AP, TO, MA, PI, RN, PB, AL, SE, BA, ES, RJ, GO, DF # RO, AC, RR, PA, AP, TO, MA, PI, RN, PB, AL, SE, BA, ES, RJ, GO, DF
'SVRS': { 'SVRS': {
'STATUS': 'svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx', 'STATUS': 'svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx',

Loading…
Cancel
Save