<commit_before># -*- coding: utf-8 -*-

from .nota import NotaFiscal
from pysignfe.corr_unicode import *

from pysignfe.nfe import ProcessadorNFe, DANFE
from pysignfe.nfe.manual_401 import *
#from pysignfe.nfe.manual_500 import *
from pysignfe.nfe.manual_600 import *

from os.path import abspath, dirname
from OpenSSL import crypto
import io
from xml.dom import minidom
from datetime import datetime

from pysignfe.nfe.danfe.danferetrato import *
from pysignfe.nfe.webservices_2 import ESTADO_WS, SVAN, SVRS, UFRS, NFE_AMBIENTE_PRODUCAO
from pysignfe.nfe.webservices_3 import ESTADO_WS as ESTADO_WS3
from pysignfe.nfe.webservices_3 import ESTADO_SVC_CONTINGENCIA
from pysignfe.nfe.webservices_3 import SVAN as SVAN3
from pysignfe.nfe.webservices_3 import AN
from pysignfe.nfe.webservices_3 import SVRS as SVRS3
from pysignfe.nfe.webservices_3 import UFRS as UFRS3
from pysignfe.nfe.webservices_flags import WS_NFE_CONSULTA_CADASTRO, WS_NFE_EVENTO, UF_CODIGO

FILE_DIR = abspath(dirname(__file__))

class nf_e(NotaFiscal):

    def consultar_servidor(self, cert, key, versao=u'3.10', ambiente=2, estado=u'MG',
                           contingencia=False, salvar_arquivos=True):
        """
        Este método verifica se o servidor está em operação
        @param cert: string do certificado digital A1,
        @param key: chave privada do certificado digital,
        @param versao: versão da nfe,
        @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação,
        @param estado: estado em que realizará a consulta do servidor,
        @param contingencia : habilita a contigência.
        @param salvar_arquivos: salvar ou nao os arquivos XML gerados.
        @return: Dicionário com o status,envio,resposta e reason.
        """
        p = ProcessadorNFe()
        p.ambiente = ambiente
        p.estado = estado
        p.versao = versao
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.salvar_arquivos = salvar_arquivos
        p.contingencia = contingencia
        p.caminho = u''
        
        processo = p.consultar_servico()
        status = processo.resposta.cStat.valor
        processo.envio.xml
        processo.resposta.xml
        processo.resposta.reason

        return{'status': processo.resposta.cStat.valor, 'status_motivo': processo.resposta.xMotivo.valor, 
                'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'reason': processo.resposta.reason}

    def processar_nota(self, xml_nfe, cert, key, versao=u'3.10', consumidor=False, ambiente=2, estado=u'MG',
                      contingencia=False, salvar_arquivos=True, n_consultas_recibo=2, consultar_servico=True):
        """
        Este método realiza o processamento de validação, assinatura e transmissão da nfe.
        @param xml_nfe: xml da nfe (string)
        @param consultar_servico: consulta o status do webservice antes de enviar
        @param consumidor: True caso NFC-e
        @param n_consultas_recibo: numero de tentativas de consultar o recibo<commit_msg>metodo gerar/validar xml<commit_after># -*- coding: utf-8 -*-

from .nota import NotaFiscal
from pysignfe.corr_unicode import *

from pysignfe.nfe import ProcessadorNFe, DANFE
from pysignfe.nfe.manual_401 import *
#from pysignfe.nfe.manual_500 import *
from pysignfe.nfe.manual_600 import *

from os.path import abspath, dirname
from OpenSSL import crypto
import io
from xml.dom import minidom
from datetime import datetime

from pysignfe.nfe.danfe.danferetrato import *
from pysignfe.nfe.webservices_2 import ESTADO_WS, SVAN, SVRS, UFRS, NFE_AMBIENTE_PRODUCAO
from pysignfe.nfe.webservices_3 import ESTADO_WS as ESTADO_WS3
from pysignfe.nfe.webservices_3 import ESTADO_SVC_CONTINGENCIA
from pysignfe.nfe.webservices_3 import SVAN as SVAN3
from pysignfe.nfe.webservices_3 import AN
from pysignfe.nfe.webservices_3 import SVRS as SVRS3
from pysignfe.nfe.webservices_3 import UFRS as UFRS3
from pysignfe.nfe.webservices_flags import WS_NFE_CONSULTA_CADASTRO, WS_NFE_EVENTO, UF_CODIGO

FILE_DIR = abspath(dirname(__file__))

class nf_e(NotaFiscal):

    def consultar_servidor(self, cert, key, versao=u'3.10', ambiente=2, estado=u'MG',
                           contingencia=False, salvar_arquivos=True):
        """
        Este método verifica se o servidor está em operação
        @param cert: string do certificado digital A1,
        @param key: chave privada do certificado digital,
        @param versao: versão da nfe,
        @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação,
        @param estado: estado em que realizará a consulta do servidor,
        @param contingencia : habilita a contigência.
        @param salvar_arquivos: salvar ou nao os arquivos XML gerados.
        @return: Dicionário com o status,envio,resposta e reason.
        """
        p = ProcessadorNFe()
        p.ambiente = ambiente
        p.estado = estado
        p.versao = versao
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.salvar_arquivos = salvar_arquivos
        p.contingencia = contingencia
        p.caminho = u''
        
        processo = p.consultar_servico()
        status = processo.resposta.cStat.valor
        processo.envio.xml
        processo.resposta.xml
        processo.resposta.reason

        return{'status': processo.resposta.cStat.valor, 'status_motivo': processo.resposta.xMotivo.valor, 
                'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'reason': processo.resposta.reason}
    
    def gerar_xml(self, xml_nfe, cert, key, versao=u'3.10', consumidor=False, ambiente=2, estado=u'MG', salvar_arquivos=True):
        p = ProcessadorNFe()
        p.ambiente = ambiente
        p.estado = estado
        p.versao = versao
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.salvar_arquivos = salvar_arquivos
        p.caminho = u''
        
        if versao == '3.10':
            n = NFe_310()
        else:
            n = NFe_200()
        n.infNFe.xml = xml_nfe
                
        n.auto_preencher_campos(ambiente=ambiente, estado=estado)
        
        if consumidor:
            n.preencher_campos_nfce()
        else:
            n.preencher_campos_nfe()
            
        p.gerar_xml([n])
        
        
    
    def processar_nota(self, xml_nfe, cert, key, versao=u'3.10', consumidor=False, ambiente=2, estado=u'MG',
                      contingencia=False, salvar_arquivos=True, n_consultas_recibo=2, consultar_servico=True):
        """
        Este método realiza o processamento de validação, assinatura e transmissão da nfe.
        @param xml_nfe: xml da nfe (string)
        @param consultar_servico: consulta o status do webservice antes de enviar
        @param consumidor: True caso NFC-e
        @param n_consultas_recibo: numero de tentativas de consultar o recibo
{'fraction_non_alphanumeric': 0.07759988460983701, 'fraction_numerical': 0.011394778595124765, 'mean_word_length': 2.9532497149372863, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 22}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '606974', 'n_tokens_mistral': 2480, 'n_tokens_neox': 2390, 'n_words': 587}