Browse Source

Informaçoes do destinatário.

pull/1/head
Junior Tada 10 years ago
parent
commit
b9f3dfd3fa
  1. 17
      README
  2. 67
      pynfe/processamento/serializacao.py

17
README

@ -48,24 +48,17 @@ Referências
- Validao de XML via XSD no lxml
- http://codespeak.net/lxml/validation.html#xmlschema
- Geracao de codigos de barra Code128 no Python
- http://barcode128.blogspot.com/2007/03/code128py.html
- Descricao do Code128 na Wikipedia
- http://en.wikipedia.org/wiki/Code_128
- Documentação do módulo de geração de Code128 no ReportLab
- http://www.reportlab.com/apis/reportlab/reportlab.graphics.barcode.code128-module.html
- Thread da lista pyhton-brasil sobre streching do codigo de barras
- http://br.groups.yahoo.com/group/python-brasil/message/41299
- Lista de codigos para campo EX TIPI
- http://www.fisconet.com.br/ipi/tipi/04.htm
- Certificado para testes
- http://nf-eletronica.com/blog/?p=133
- Instalação
- Ubuntu
sudo pip3 install https://github.com/leotada/PyNFe/archive/master.zip
- Exemplo de uso
- Consulta Status

67
pynfe/processamento/serializacao.py

@ -18,6 +18,7 @@ class Serializacao(object):
_fonte_dados = None
_ambiente = 1 # 1 = Produção, 2 = Homologação
_contingencia = None # Justificativa da entrada em contingência (min 20, max 256 caracteres)
_so_cpf = False # Destinatário com apenas o cpf do cliente
_nome_aplicacao = 'PyNFe'
def __new__(cls, *args, **kwargs):
@ -26,10 +27,11 @@ class Serializacao(object):
else:
return super(Serializacao, cls).__new__(cls)
def __init__(self, fonte_dados, homologacao=False, contingencia=None):
def __init__(self, fonte_dados, homologacao=False, contingencia=None, so_cpf=False):
self._fonte_dados = fonte_dados
self._ambiente = homologacao and 2 or 1
self._contingencia = contingencia
self._so_cpf = so_cpf
def exportar(self, destino, **kwargs):
"""Gera o(s) arquivo(s) de exportacao a partir da Nofa Fiscal eletronica
@ -110,37 +112,38 @@ class SerializacaoXML(Serializacao):
# Dados do cliente (distinatario)
etree.SubElement(raiz, cliente.tipo_documento).text = so_numeros(cliente.numero_documento)
etree.SubElement(raiz, 'xNome').text = cliente.razao_social
endereco = etree.SubElement(raiz, 'enderDest')
etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
cliente.endereco_municipio, cliente.endereco_uf)
etree.SubElement(endereco, 'xMun').text = cliente.endereco_municipio
etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
etree.SubElement(endereco, 'CEP').text = so_numeros(cliente.endereco_cep)
etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(cliente.endereco_pais)
etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone
#Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista; 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
if cliente.isento_icms or cliente.inscricao_estadual.upper() == 'ISENTO':
etree.SubElement(raiz, 'indIEDest').text = str(2)
etree.SubElement(raiz, 'IE').text = 'ISENTO'
elif cliente.indicador_ie == 9:
# 9 – Não Contribuinte
etree.SubElement(raiz, 'indIEDest').text = str(9)
else:
# Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
etree.SubElement(raiz, 'indIEDest').text = cliente.indicador_ie
etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual
# Suframa
if cliente.inscricao_suframa:
etree.SubElement(raiz, 'ISUF').text = cliente.inscricao_suframa
# Inscrição Municipal do tomador do serviço
if cliente.inscricao_municipal:
etree.SubElement(raiz, 'IM').text = cliente.inscricao_municipal
etree.SubElement(raiz, 'email').text = cliente.email
if not self._so_cpf:
endereco = etree.SubElement(raiz, 'enderDest')
etree.SubElement(endereco, 'xLgr').text = cliente.endereco_logradouro
etree.SubElement(endereco, 'nro').text = cliente.endereco_numero
etree.SubElement(endereco, 'xCpl').text = cliente.endereco_complemento
etree.SubElement(endereco, 'xBairro').text = cliente.endereco_bairro
etree.SubElement(endereco, 'cMun').text = obter_codigo_por_municipio(
cliente.endereco_municipio, cliente.endereco_uf)
etree.SubElement(endereco, 'xMun').text = cliente.endereco_municipio
etree.SubElement(endereco, 'UF').text = cliente.endereco_uf
etree.SubElement(endereco, 'CEP').text = so_numeros(cliente.endereco_cep)
etree.SubElement(endereco, 'cPais').text = cliente.endereco_pais
etree.SubElement(endereco, 'xPais').text = obter_pais_por_codigo(cliente.endereco_pais)
etree.SubElement(endereco, 'fone').text = cliente.endereco_telefone
#Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista; 2 – Contribuinte isento de inscrição; 9 – Não Contribuinte
if cliente.isento_icms or cliente.inscricao_estadual.upper() == 'ISENTO':
etree.SubElement(raiz, 'indIEDest').text = str(2)
etree.SubElement(raiz, 'IE').text = 'ISENTO'
elif cliente.indicador_ie == 9:
# 9 – Não Contribuinte
etree.SubElement(raiz, 'indIEDest').text = str(9)
else:
# Indicador da IE do destinatário: 1 – Contribuinte ICMSpagamento à vista;
etree.SubElement(raiz, 'indIEDest').text = cliente.indicador_ie
etree.SubElement(raiz, 'IE').text = cliente.inscricao_estadual
# Suframa
if cliente.inscricao_suframa:
etree.SubElement(raiz, 'ISUF').text = cliente.inscricao_suframa
# Inscrição Municipal do tomador do serviço
if cliente.inscricao_municipal:
etree.SubElement(raiz, 'IM').text = cliente.inscricao_municipal
etree.SubElement(raiz, 'email').text = cliente.email
if retorna_string:
return etree.tostring(raiz, encoding="unicode", pretty_print=True)
else:

Loading…
Cancel
Save