From c4748e1f19619791419ad48b5e90921259a3385c Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Thu, 24 Dec 2015 12:35:17 -0200 Subject: [PATCH] =?UTF-8?q?Comunica=C3=A7=C3=A3o=20Nfs-e=20ginfes=20cancel?= =?UTF-8?q?amento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/assinatura.py | 20 ++++++++++++++++---- pynfe/processamento/comunicacao.py | 13 ++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index fbcd3ff..5eed321 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -77,6 +77,8 @@ class AssinaturaA1(Assinatura): elif self.autorizador == 'betha': xpath = './/ns1:InfDeclaracaoPrestacaoServico' tag = 'InfDeclaracaoPrestacaoServico' + else: + raise Exception('Autorizador não encontrado!') xml = etree.fromstring(xml) # define namespaces, pega do proprio xml @@ -120,10 +122,20 @@ class AssinaturaA1(Assinatura): except Exception as e: raise e - def assinarCancelar(self, xml, tag='InfPedidoCancelamento', xpath='/CancelarNfseEnvio/ns1:Pedido', - namespaces={'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'}, retorna_string=True): - """ Default para assinar Betha """ + def assinarCancelar(self, xml, retorna_string=True): + """ Método que assina o xml para cancelamento de NFS-e """ try: + if self.autorizador == 'ginfes': + xpath = 'CancelarNfseEnvio' + tag = 'CancelarNfseEnvio' + namespaces = {'ns1': 'http://www.ginfes.com.br/servico_cancelar_nfse_envio', 'ns2':'http://www.ginfes.com.br/tipos'} + elif self.autorizador == 'betha': + xpath = '/CancelarNfseEnvio/ns1:Pedido' + tag = 'InfPedidoCancelamento' + namespaces = {'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'} + else: + raise Exception('Autorizador não encontrado!') + xml = etree.fromstring(xml) # No raiz do XML de saida raiz = etree.Element('Signature', xmlns='http://www.w3.org/2000/09/xmldsig#') @@ -153,7 +165,7 @@ class AssinaturaA1(Assinatura): # Escreve no arquivo depois de remover caracteres especiais e parse string with open('nfse.xml', 'w') as arquivo: - arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False).replace('ns1:', '').replace(':ns1', '').replace('\n',''))) + arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False).replace('\n',''))) subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'nfse.xml']) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 4143e1d..c0a1a0d 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -440,14 +440,10 @@ class ComunicacaoNfse(Comunicacao): elif autorizador.upper() == 'GINFES': self._namespace = 'http://www.ginfes.com.br/cabecalho_v03.xsd' self._versao = '3' - # xml - xml = '' + xml - # comunica via wsdl - return xml - #return self._post_https(url, xml, 'consulta') + return self._post_https(url, xml, 'cancelar') # TODO outros autorizadres else: - raise Exception('Autorizador não suportado!') + raise Exception('Autorizador não encontrado!') def _cabecalho(self, retorna_string=True): @@ -529,7 +525,10 @@ class ComunicacaoNfse(Comunicacao): elif metodo == 'consultaFaixa': return cliente.service.ConsultarNfseFaixa(cabecalho, xml) elif metodo == 'cancelar': - return cliente.service.CancelarNfse(cabecalho, xml) + # versão 3 + #return cliente.service.CancelarNfseV3(cabecalho, xml) + # versão 2 + return cliente.service.CancelarNfse(xml) # TODO outros metodos else: pass