From 30251692ba873263f68bdd2d3f482feb82e164c1 Mon Sep 17 00:00:00 2001 From: Lucas Cardoso Date: Tue, 7 Nov 2017 11:44:57 -0300 Subject: [PATCH 1/3] Formatando totais_icms_total_nota e totais_icms_total_produtos_e_servicos para duas casas decimais --- pynfe/processamento/serializacao.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 38c5e70..bb4c32b 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -483,7 +483,7 @@ class SerializacaoXML(Serializacao): etree.SubElement(icms_total, 'vICMSDeson').text = '{:.2f}'.format(nota_fiscal.totais_icms_desonerado) # Valor Total do ICMS desonerado etree.SubElement(icms_total, 'vBCST').text = '{:.2f}'.format(nota_fiscal.totais_icms_st_base_calculo) etree.SubElement(icms_total, 'vST').text = '{:.2f}'.format(nota_fiscal.totais_icms_st_total) - etree.SubElement(icms_total, 'vProd').text = str(nota_fiscal.totais_icms_total_produtos_e_servicos) + etree.SubElement(icms_total, 'vProd').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_produtos_e_servicos) etree.SubElement(icms_total, 'vFrete').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_frete) etree.SubElement(icms_total, 'vSeg').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_seguro) etree.SubElement(icms_total, 'vDesc').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_desconto) @@ -495,7 +495,7 @@ class SerializacaoXML(Serializacao): etree.SubElement(icms_total, 'vCOFINS').text = '{:.2f}'.format(nota_fiscal.totais_icms_cofins) etree.SubElement(icms_total, 'vOutro').text = '{:.2f}'.format(nota_fiscal.totais_icms_outras_despesas_acessorias) - etree.SubElement(icms_total, 'vNF').text = str(nota_fiscal.totais_icms_total_nota) + etree.SubElement(icms_total, 'vNF').text = '{:.2f}'.format(nota_fiscal.totais_icms_total_nota) if nota_fiscal.totais_tributos_aproximado: etree.SubElement(icms_total, 'vTotTrib').text = '{:.2f}'.format(nota_fiscal.totais_tributos_aproximado) From 83f892eb258756695e3049b67354fc1d3958caa3 Mon Sep 17 00:00:00 2001 From: Lucas Cardoso Date: Mon, 13 Nov 2017 16:53:18 -0300 Subject: [PATCH 2/3] Metodo que gera o xml de consulta --- pynfe/processamento/comunicacao.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 3fd3238..41b2a1d 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -155,6 +155,28 @@ class ComunicacaoSefaz(Comunicacao): xml = self._construir_xml_soap('NFeConsultaProtocolo4', raiz) return self._post(url, xml) + def gera_xml_consulta_nota(self, modelo, chave): + """ + Este método oferece a consulta da situação da NF-e/NFC-e na Base de Dados do Portal + da Secretaria de Fazenda Estadual. + :param modelo: Modelo da nota + :param chave: Chave da nota + :return: + """ + + # url do serviço + url = self._get_url(modelo=modelo, consulta='CHAVE') + + # Monta XML do corpo da requisição + raiz = etree.Element('consSitNFe', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE) + etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente) + etree.SubElement(raiz, 'xServ').text = 'CONSULTAR' + etree.SubElement(raiz, 'chNFe').text = chave + + # Monta XML para envio da requisição + xml = self._construir_xml_soap('NFeConsultaProtocolo4', raiz) + return str(etree.tostring(xml), 'utf-8') + def consulta_notas_cnpj(self, cnpj, nsu=0): """ “Serviço de Consulta da Relação de Documentos Destinados” para um determinado CNPJ de From 1f072cb822c24218e61901fdb300c6789ffcfb0a Mon Sep 17 00:00:00 2001 From: Lucas Cardoso Date: Mon, 13 Nov 2017 17:14:45 -0300 Subject: [PATCH 3/3] Metodo com faz a consulta da nota ja assinada --- pynfe/processamento/comunicacao.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 41b2a1d..9cac623 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -177,6 +177,24 @@ class ComunicacaoSefaz(Comunicacao): xml = self._construir_xml_soap('NFeConsultaProtocolo4', raiz) return str(etree.tostring(xml), 'utf-8') + def consulta_nota_assinada(self, xml, modelo, chave_assinatura): + """ + Este método oferece a consulta da situação da NF-e/NFC-e na Base de Dados do Portal + da Secretaria de Fazenda Estadual. + :param xml: XML da nota + :param modelo: Modelo da nota + :param chave_assinatura: Tupla (certificado, chave) A3 + :return: + """ + + if type(xml) == str: + xml = etree.fromstring(xml) + + # url do serviço + url = self._get_url(modelo=modelo, consulta='CHAVE') + + return self._post(url, xml, chave_assinatura) + def consulta_notas_cnpj(self, cnpj, nsu=0): """ “Serviço de Consulta da Relação de Documentos Destinados” para um determinado CNPJ de @@ -499,10 +517,13 @@ class ComunicacaoSefaz(Comunicacao): 'Accept': 'application/soap+xml; charset=utf-8;', } - def _post(self, url, xml): - certificado_a1 = CertificadoA1(self.certificado) - chave, cert = certificado_a1.separar_arquivo(self.certificado_senha, caminho=True) - chave_cert = (cert, chave) + def _post(self, url, xml, _chave_cert=None): + if not _chave_cert: + certificado_a1 = CertificadoA1(self.certificado) + chave, cert = certificado_a1.separar_arquivo(self.certificado_senha, caminho=True) + chave_cert = (cert, chave) + else: + chave_cert = _chave_cert # Abre a conexão HTTPS try: xml_declaration = ''