Browse Source

Implementação de emissão de NFCe

pull/6/merge
martini97 9 years ago
parent
commit
04ad69d329
  1. 36
      pytrustnfe/nfe/__init__.py
  2. 2
      pytrustnfe/nfe/templates/NfeAutorizacao.xml
  3. 8
      pytrustnfe/test/test_servidores.py

36
pytrustnfe/nfe/__init__.py

@ -75,8 +75,9 @@ def _add_qrCode(xml, **kwargs):
valor_total = inf_nfe['total']['vNF'] valor_total = inf_nfe['total']['vNF']
dest_cpf = 'Inexistente' dest_cpf = 'Inexistente'
dest = nfe.find(".//{http://www.portalfiscal.inf.br/nfe}dest") dest = nfe.find(".//{http://www.portalfiscal.inf.br/nfe}dest")
dest_parent = dest.getparent()
dest_parent.remove(dest)
if dest:
dest_parent = dest.getparent()
dest_parent.remove(dest)
if inf_nfe.get('dest', False): if inf_nfe.get('dest', False):
if inf_nfe['dest'].get('CPF', False): if inf_nfe['dest'].get('CPF', False):
dest_cpf = inf_nfe['dest']['CPF'] dest_cpf = inf_nfe['dest']['CPF']
@ -87,22 +88,26 @@ def _add_qrCode(xml, **kwargs):
dest_parent.append(dest) dest_parent.append(dest)
icms_total = inf_nfe['total']['vICMS'] icms_total = inf_nfe['total']['vICMS']
dig_val = xml.find( dig_val = xml.find(
".//{http://www.w3.org/2000/09/xmldsig#}DigestValue").text.encode('hex')
".//{http://www.w3.org/2000/09/xmldsig#}DigestValue")\
.text.encode('hex')
cid_token = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['cid_token'] cid_token = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['cid_token']
csc = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['csc'] csc = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['csc']
c_hash_QR_code = "chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF={5}&vICMS={6}&digVal={7}&cIdToken={8}{9}".\
c_hash_QR_code = "chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF\
={5}&vICMS={6}&digVal={7}&cIdToken={8}{9}".\
format(chave_nfe, versao, ambiente, dest_cpf, dh_emissao, format(chave_nfe, versao, ambiente, dest_cpf, dh_emissao,
valor_total, icms_total, dig_val, cid_token, csc)
valor_total, icms_total, dig_val, cid_token, csc)
c_hash_QR_code = hashlib.sha1(c_hash_QR_code).hexdigest() c_hash_QR_code = hashlib.sha1(c_hash_QR_code).hexdigest()
QR_code_url = "?chNFe={0}&nVersao={1}&tpAmb={2}&{3}dhEmi={4}&vNF={5}&vICMS={6}&digVal={7}&cIdToken={8}&cHashQRCode={9}".\
QR_code_url = "?chNFe={0}&nVersao={1}&tpAmb={2}&{3}dhEmi={4}&vNF={5}&vICMS\
={6}&digVal={7}&cIdToken={8}&cHashQRCode={9}".\
format(chave_nfe, versao, ambiente, format(chave_nfe, versao, ambiente,
'cDest={}&'.format(dest_cpf) if dest_cpf != 'Inexistente' else '',
dh_emissao, valor_total, icms_total, dig_val, cid_token, c_hash_QR_code)
'cDest={}&'.format(dest_cpf) if dest_cpf != 'Inexistente'
else '', dh_emissao, valor_total, icms_total, dig_val,
cid_token, c_hash_QR_code)
qr_code_server = localizar_qrcode(kwargs['estado'], ambiente) qr_code_server = localizar_qrcode(kwargs['estado'], ambiente)
qrcode_text = qr_code_server + QR_code_url qrcode_text = qr_code_server + QR_code_url
qrcode.text = qrcode_text
qrcode.text = etree.CDATA(qrcode_text)
infnfesupl.append(qrcode) infnfesupl.append(qrcode)
nfe.insert(1, infnfesupl) nfe.insert(1, infnfesupl)
return etree.tostring(xml) return etree.tostring(xml)
@ -113,6 +118,19 @@ def _send(certificado, method, sign, **kwargs):
xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs) xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs)
modelo = xmlElem_send.find(".//{http://www.portalfiscal.inf.br/nfe}mod") modelo = xmlElem_send.find(".//{http://www.portalfiscal.inf.br/nfe}mod")
modelo = modelo.text if modelo is not None else '55' modelo = modelo.text if modelo is not None else '55'
if modelo == '65':
pagamento = etree.Element('pag')
tipo_pagamento = etree.Element('tPag')
valor = etree.Element('vPag')
valor_pago = kwargs['NFes'][0]['infNFe']['total']['vNF']
metodo_pagamento = kwargs['NFes'][0]['infNFe']['pagamento']
tipo_pagamento.text, valor.text = metodo_pagamento, valor_pago
pagamento.append(tipo_pagamento)
pagamento.append(valor)
transp = xmlElem_send.find(
".//{http://www.portalfiscal.inf.br/nfe}transp")
transp.addnext(pagamento)
if sign: if sign:
# Caso for autorização temos que adicionar algumas tags tipo # Caso for autorização temos que adicionar algumas tags tipo
# cEan, cEANTrib porque o governo sempre complica e não segue padrão # cEan, cEANTrib porque o governo sempre complica e não segue padrão

2
pytrustnfe/nfe/templates/NfeAutorizacao.xml

@ -99,7 +99,7 @@
<CRT>{{ emit.CRT }}</CRT> <CRT>{{ emit.CRT }}</CRT>
{% endwith %} {% endwith %}
</emit> </emit>
{% if NFe.infNFe.dest is defined %}
{% if NFe.infNFe.dest is defined and NFe.infNFe.dest %}
<dest> <dest>
{% with dest = NFe.infNFe.dest %} {% with dest = NFe.infNFe.dest %}
{% if NFe.infNFe.ide.idDest == '3' %} {% if NFe.infNFe.ide.idDest == '3' %}

8
pytrustnfe/test/test_servidores.py

@ -5,13 +5,15 @@ Created on Jun 14, 2015
@author: danimar @author: danimar
''' '''
import unittest import unittest
from pytrustnfe.Servidores import localizar_url
from pytrustnfe.Servidores import localizar_url, localizar_qrcode
url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NfeAutorizacao/NfeAutoriza\ url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NfeAutorizacao/NfeAutoriza\
cao.asmx' cao.asmx'
url_sp = 'https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao.asmx' url_sp = 'https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao.asmx'
url_qrcode_homologacao_sp = 'https://homologacao.nfce.fazenda.sp.gov.br/NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx'
url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao.asmx' url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao.asmx'
url_rs = 'https://nfe.sefaz.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx' url_rs = 'https://nfe.sefaz.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx'
@ -40,3 +42,7 @@ class test_servidores(unittest.TestCase):
url = localizar_url('NfeConsultaCadastro', '42', ambiente=2) url = localizar_url('NfeConsultaCadastro', '42', ambiente=2)
self.assertEqual(url, url_cad_sc) self.assertEqual(url, url_cad_sc)
def test_localizar_qrcode(self):
url = localizar_qrcode('35')
self.assertEqual(url, url_qrcode_homologacao_sp)
Loading…
Cancel
Save