Browse Source

Merge pull request #3 from TadaSoftware/master

Merge
pull/65/head
Flávyo Henrique 6 years ago
committed by GitHub
parent
commit
145b417adb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      README.md
  2. 2
      pynfe/entidades/produto.py
  3. 13
      pynfe/processamento/comunicacao.py
  4. 9
      pynfe/processamento/serializacao.py
  5. 24
      pynfe/utils/webservices.py
  6. 2
      requirements-nfse.txt
  7. 10
      setup.py

4
README.md

@ -91,7 +91,9 @@ Documentação
- https://github.com/leotada/PyNFe/wiki
- http://pynfe.readthedocs.org/pt/latest/
backlog:
Backlog
-------
- renomeado metodo serializar_evento (_serializar_evento)
- removido metoco con.cancelar (utilizar con.evento)
- add evento carta de correção (con.evento)

2
pynfe/entidades/produto.py

@ -34,6 +34,8 @@ class Produto(Entidade):
# Tabela https://www.confaz.fazenda.gov.br/anexo-i.pdf
cest = str()
cbenef = str()
# - Unid. Com.
unidade_comercial = str()

13
pynfe/processamento/comunicacao.py

@ -200,7 +200,7 @@ class ComunicacaoSefaz(Comunicacao):
:return:
"""
# UF que utilizam a SVRS - Sefaz Virtual do RS: Para serviço de Consulta Cadastro: AC, RN, PB, SC
lista_svrs = ['AC', 'RJ', 'RN', 'PB', 'SC', 'PI']
lista_svrs = ['AC', 'RN', 'PB', 'SC']
# RS implementa um método diferente na consulta de cadastro
if self.uf.upper() == 'RS':
@ -358,8 +358,7 @@ class ComunicacaoSefaz(Comunicacao):
raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"')
# Estados que utilizam outros ambientes
else:
lista_svrs = ['AC', 'RJ', 'RN', 'PB', 'SC', 'SE', 'PI', 'DF', 'ES']
lista_svan = ['MA','PA']
lista_svrs = ['AC', 'AL', 'AP', 'DF', 'ES', 'PB', 'PI', 'RJ', 'RN', 'RO', 'RR', 'SC', 'SE', 'TO']
if self.uf.upper() in lista_svrs:
if self._ambiente == 1:
ambiente = 'HTTPS'
@ -373,7 +372,9 @@ class ComunicacaoSefaz(Comunicacao):
self.url = NFCE['SVRS'][ambiente] + NFCE['SVRS'][consulta]
else:
raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"')
elif self.uf.upper() in lista_svan:
# unico UF que utiliza SVAN ainda para NF-e
# SVRS para NFC-e
elif self.uf.upper() == 'MA':
if self._ambiente == 1:
ambiente = 'HTTPS'
else:
@ -383,9 +384,11 @@ class ComunicacaoSefaz(Comunicacao):
self.url = NFE['SVAN'][ambiente] + NFE['SVAN'][consulta]
elif modelo == 'nfce':
# nfce Ex: https://homologacao.nfce.fazenda.pr.gov.br/nfce/NFeStatusServico3
self.url = NFCE['SVAN'][ambiente] + NFCE['SVAN'][consulta]
self.url = NFCE['SVRS'][ambiente] + NFCE['SVRS'][consulta]
else:
raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"')
else:
raise Exception(f"Url não encontrada para {modelo} e {consulta} {self.uf.upper()}")
return self.url
def _construir_xml_soap(self, metodo, dados, cabecalho=False):

9
pynfe/processamento/serializacao.py

@ -222,7 +222,10 @@ class SerializacaoXML(Serializacao):
etree.SubElement(prod, 'NCM').text = produto_servico.ncm
# Codificação opcional que detalha alguns NCM. Formato: duas letras maiúsculas e 4 algarismos.
# Se a mercadoria se enquadrar em mais de uma codificação, informar até 8 codificações principais.
#etree.SubElement(prod, 'NVE').text = ''
# etree.SubElement(prod, 'NVE').text = ''
# etree.SubElement(prod, 'CEST').text = produto_service.cest
if produto_servico.cbenef:
etree.SubElement(prod, 'cBenef').text = produto_servico.cbenef
etree.SubElement(prod, 'CFOP').text = produto_servico.cfop
etree.SubElement(prod, 'uCom').text = produto_servico.unidade_comercial
etree.SubElement(prod, 'qCom').text = str(produto_servico.quantidade_comercial or 0)
@ -787,10 +790,10 @@ class SerializacaoQrcode(object):
elif uf.upper() == 'SP':
if tpamb == '1':
qrcode = NFCE[uf.upper()]['HTTPS'] + 'www.' + NFCE[uf.upper()]['QR'] + url
url_chave = NFCE[uf.upper()]['HTTPS'] + 'www.' + NFCE[uf.upper()]['URL'] + url
url_chave = NFCE[uf.upper()]['HTTPS'] + 'www.' + NFCE[uf.upper()]['URL']
else:
qrcode = NFCE[uf.upper()]['HTTPS'] + 'www.homologacao.' + NFCE[uf.upper()]['QR'] + url
url_chave = NFCE[uf.upper()]['HTTPS'] + 'www.homologacao.' + NFCE[uf.upper()]['URL'] + url
url_chave = NFCE[uf.upper()]['HTTPS'] + 'www.homologacao.' + NFCE[uf.upper()]['URL']
# BA tem comportamento distindo para qrcode e url
elif uf.upper() == 'BA':
if tpamb == '1':

24
pynfe/utils/webservices.py

@ -157,13 +157,17 @@ NFCE = {
'URL': 'http://hinternet.sefaz.ba.gov.br/nfce/consulta'
},
'MG': {
'STATUS': '',
'AUTORIZACAO': '',
'RECIBO': '',
'CHAVE': '',
'INUTILIZACAO': '',
'EVENTOS': '',
'QR': ''
'STATUS': 'fazenda.mg.gov.br/nfce/services/NFeStatusServico4',
'AUTORIZACAO': 'fazenda.mg.gov.br/nfce/services/NFeAutorizacao4',
'RECIBO': 'fazenda.mg.gov.br/nfce/services/NFeRetAutorizacao4',
'CHAVE': 'fazenda.mg.gov.br/nfce/services/NFeConsultaProtocolo4',
'INUTILIZACAO': 'fazenda.mg.gov.br/nfce/services/NFeInutilizacao4',
'EVENTOS': 'fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4',
'CADASTRO': 'fazenda.mg.gov.br/nfce/services/CadConsultaCadastro4',
'QR': 'fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml?',
'HTTPS': 'https://nfce.',
'HOMOLOGACAO': 'https://hnfce.',
'URL': 'fazenda.mg.gov.br/portalnfce'
},
'ES': {
'STATUS': '',
@ -317,7 +321,7 @@ NFE = {
'CHAVE': 'sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?WSDL',
'INUTILIZACAO': 'sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?WSDL',
'EVENTOS': 'sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?WSDL',
'CADASTRO': 'nfe.sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?wsdl',
'CADASTRO': 'sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?wsdl',
'DOWNLOAD': 'sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl',
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://nfeh.'
@ -329,7 +333,7 @@ NFE = {
'CHAVE': 'sefaz.pe.gov.br/nfe-service/services/NFeConsultaProtocolo4',
'INUTILIZACAO': 'sefaz.pe.gov.br/nfe-service/services/NFeInutilizacao4',
'EVENTOS': 'sefaz.pe.gov.br/nfe-service/services/NFeRecepcaoEvento4',
# 'CADASTRO': 'sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro2',
'CADASTRO': 'sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro4?wsdl',
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://nfehomolog.'
},
@ -442,7 +446,7 @@ NFE = {
'CHAVE': 'svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx',
'INUTILIZACAO': 'svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx',
'EVENTOS': 'svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx',
'CADASTRO': 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro2.asmx',
'CADASTRO': 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx',
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://nfe-homologacao.'
},

2
requirements-nfse.txt

@ -1,3 +1,3 @@
# Opcional para NFS-e
suds-jurko
pyxb
pyxb=1.2.4

10
setup.py

@ -1,5 +1,5 @@
#!/usr/bin/env python
from setuptools import setup, find_packages
import setuptools
try: # for pip >= 10
from pip._internal.req import parse_requirements as parse
except ImportError: # for pip <= 9.0.3
@ -7,13 +7,17 @@ except ImportError: # for pip <= 9.0.3
requirements = lambda f: [str(i.req) for i in parse(f, session=False)]
setup(
setuptools.setup(
name='PyNFe',
version='0.4',
packages=find_packages(),
author='TadaSoftware',
author_email='tadasoftware@gmail.com',
url='https://github.com/TadaSoftware',
packages=setuptools.find_packages(),
package_data={
'pynfe': ['data/**/*.txt'],
},
install_requires=requirements('requirements.txt'),
zip_safe=False,
python_requires='>=3.6',
)
Loading…
Cancel
Save