From 9285d4556b8244d5634d95c0491e7f87b79079e5 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Tue, 11 Aug 2015 02:24:29 -0300 Subject: [PATCH] =?UTF-8?q?Implementado=20envio=20sem=20destinat=C3=A1rio?= =?UTF-8?q?=20(apenas=20para=20NFC-e)=20q?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/entidades/notafiscal.py | 4 ++++ pynfe/processamento/danfe.py | 13 ++++++++++--- pynfe/processamento/serializacao.py | 12 +++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index eba683b..15c1812 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -58,6 +58,10 @@ class NotaFiscal(Entidade): # - Forma de pagamento (obrigatorio - seleciona de lista) - NF_FORMAS_PAGAMENTO forma_pagamento = int() + # - Tipo de pagamento + # 01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros + tipo_pagamento = int() + # - Forma de emissao (obrigatorio - seleciona de lista) - NF_FORMAS_EMISSAO forma_emissao = str() diff --git a/pynfe/processamento/danfe.py b/pynfe/processamento/danfe.py index 9173f6f..aec8099 100644 --- a/pynfe/processamento/danfe.py +++ b/pynfe/processamento/danfe.py @@ -23,7 +23,10 @@ class DanfeNfce(Danfe): chave = nfe[0].attrib['Id'].replace('NFe','') data = nfe.xpath('ns:infNFe/ns:ide/ns:dhEmi/text()', namespaces=ns)[0].encode() tpamb = nfe.xpath('ns:infNFe/ns:ide/ns:tpAmb/text()', namespaces=ns)[0] - cpf = nfe.xpath('ns:infNFe/ns:dest/ns:CPF/text()', namespaces=ns)[0] + try: + cpf = nfe.xpath('ns:infNFe/ns:dest/ns:CPF/text()', namespaces=ns)[0] + except IndexError: + cpf = None total = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vNF/text()', namespaces=ns)[0] icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0] digest = nfe.xpath('sig:Signature/sig:SignedInfo/sig:Reference/sig:DigestValue/text()', namespaces=sig)[0].encode() @@ -31,8 +34,12 @@ class DanfeNfce(Danfe): data = base64.b16encode(data).decode() digest = base64.b16encode(digest).decode() - url = 'chNFe={}&nVersao={}&tpAmb={}&cDest={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( - chave, VERSAO_QRCODE, tpamb, cpf, data.lower(), total, icms, digest.lower(), token) + if cpf is None: + url = 'chNFe={}&nVersao={}&tpAmb={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( + chave, VERSAO_QRCODE, tpamb, data.lower(), total, icms, digest.lower(), token) + else: + url = 'chNFe={}&nVersao={}&tpAmb={}&cDest={}&dhEmi={}&vNF={}&vICMS={}&digVal={}&cIdToken={}'.format( + chave, VERSAO_QRCODE, tpamb, cpf, data.lower(), total, icms, digest.lower(), token) url_hash = hashlib.sha1(url.encode()+csc.encode()).digest() url_hash = base64.b16encode(url_hash).decode() diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 67870b6..c96faa1 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -396,8 +396,14 @@ class SerializacaoXML(Serializacao): raiz.append(self._serializar_emitente(nota_fiscal.emitente, retorna_string=False)) # Destinatário - raiz.append(self._serializar_cliente(nota_fiscal.cliente, modelo=nota_fiscal.modelo, retorna_string=False)) - + try: + raiz.append(self._serializar_cliente(nota_fiscal.cliente, modelo=nota_fiscal.modelo, retorna_string=False)) + except AttributeError as e: + # NFC-e pode ser gerada sem destinatário + if nota_fiscal.modelo == 65: + pass + else: + raise e # Retirada if nota_fiscal.retirada: raiz.append(self._serializar_entrega_retirada( @@ -492,7 +498,7 @@ class SerializacaoXML(Serializacao): etree.SubElement(transp, 'modFrete').text = str(9) # Pagamento pag = etree.SubElement(raiz, 'pag') - etree.SubElement(pag, 'tPag').text = '01'# 01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros + etree.SubElement(pag, 'tPag').text = str(nota_fiscal.tipo_pagamento).zfill(2) # 01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros etree.SubElement(pag, 'vPag').text = str(nota_fiscal.totais_icms_total_nota) #etree.SubElement(pag, 'card').text = '' #etree.SubElement(pag, 'CNPJ').text = '' # Informar o CNPJ da Credenciadora de cartão de crédito / débito