From 52c2fab62dc7ebaa35b9754d8a583ae196dfe507 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Wed, 9 Dec 2015 13:41:27 -0200 Subject: [PATCH] =?UTF-8?q?Implanta=C3=A7=C3=A3o=20de=20consulta=20Nfse=20?= =?UTF-8?q?por=20faixa=20de=20numera=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/comunicacao.py | 29 +++++++++++++---------------- pynfe/processamento/serializacao.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 1a5d2cc..12c9a38 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -385,6 +385,17 @@ class ComunicacaoNfse(Comunicacao): # comunica via wsdl return self._post2(url, xml, 'consultaRps') + def consulta_faixa(self, autorizador, xml): + if autorizador.upper() == 'BETHA': + self._namespace = NAMESPACE_BETHA + self._versao = '2.02' + # url do serviço + url = self._get_url(autorizador) + # xml + xml = xml.replace('ns1:','').replace(':ns1','').replace('','') + # comunica via wsdl + return self._post2(url, xml, 'consultaFaixa') + def cancelar(self, autorizador, nota): if autorizador.upper() == 'BETHA': self._namespace = NAMESPACE_BETHA @@ -412,15 +423,6 @@ class ComunicacaoNfse(Comunicacao): else: return raiz - def _construir_xml(self, dados): - """Mota o XML para o envio via SOAP""" - - raiz = etree.Element('{%s}Envelope'%NAMESPACE_SOAP, nsmap={'e': self._namespace}) - etree.SubElement(raiz, '{%s}Header'%NAMESPACE_SOAP) - body = etree.SubElement(raiz, '{%s}Body'%NAMESPACE_SOAP) - body.append(dados) - return raiz - def _get_url(self, autorizador): """ Retorna a url para comunicação com o webservice """ if self._ambiente == 1: @@ -433,13 +435,6 @@ class ComunicacaoNfse(Comunicacao): raise Exception('Autorizador nao encontrado!') return self.url - def _post_header(self): - u"""Retorna um dicionário com os atributos para o cabeçalho da requisição HTTP""" - return { - u'content-type': u'application/soap+xml; charset=utf-8;', - u'Accept': u'application/soap+xml; charset=utf-8;', - } - def _post(self, url, xml): certificadoA1 = CertificadoA1(self.certificado) chave, cert = certificadoA1.separar_arquivo(self.certificado_senha, caminho=True) @@ -478,6 +473,8 @@ class ComunicacaoNfse(Comunicacao): return cliente.service.GerarNfse(cabecalho, xml) elif metodo == 'consultaRps': return cliente.service.ConsultarNfsePorRps(cabecalho, xml) + elif metodo == 'consultaFaixa': + return cliente.service.ConsultarNfseFaixa(cabecalho, xml) elif metodo == 'cancelar': return cliente.service.CancelarNfse(cabecalho, xml) # TODO outros metodos diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 8ed06bd..f3f3269 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -696,6 +696,25 @@ class SerializacaoNfse(Serializacao): return consulta.toxml(element_name='ConsultarNfseRpsEnvio') + def consultarFaixa(self, emitente, inicio, fim, pagina): + """Retorna string de um XML gerado a partir do + XML Schema (XSD). Binding gerado pelo modulo PyXB.""" + + # Prestador + id_prestador = nfse_schema.tcIdentificacaoPrestador() + id_prestador.CpfCnpj = emitente.cnpj + id_prestador.InscricaoMunicipal = emitente.inscricao_municipal + + consulta = nfse_schema.ConsultarNfseFaixaEnvio() + consulta.Prestador = id_prestador + consulta.Pagina = pagina + # É necessário BIND antes de atribuir numero final e numero inicial + consulta.Faixa = BIND() + consulta.Faixa.NumeroNfseInicial = inicio + consulta.Faixa.NumeroNfseFinal = fim + + return consulta.toxml(element_name='ConsultarNfseFaixaEnvio') + def cancelar(self, nfse): """Retorna string de um XML gerado a partir do XML Schema (XSD). Binding gerado pelo modulo PyXB."""