def arquivos_recuperacao(request, hash):
    db_slug = 'default'
    try:
        usuario_id = request.user.id
        dict_hash = get_hash_url( hash )
        arquivos_id = int(dict_hash['id'])
        for_print = int(dict_hash['print'])
    except:
        usuario_id = False
        return redirect('login')
    usuario = get_object_or_404(Usuarios.objects.using( db_slug ), excluido = False, id = usuario_id)
    pagina = ConfigPaginas.objects.using( db_slug ).get(excluido = False, endereco='arquivos')
    permissao = ConfigPermissoes.objects.using( db_slug ).get(excluido = False, config_paginas=pagina, config_perfis=usuario.config_perfis)

    dict_permissoes = json_to_dict(usuario.config_perfis.permissoes)
    paginas_permitidas_lista = usuario.config_perfis.paginas_permitidas
    modulos_permitidos_lista = usuario.config_perfis.modulos_permitidos

    arquivos = get_object_or_404(Arquivos.objects.using( db_slug ), excluido = False, id = arquivos_id)
    from emensageriapro.settings import BASE_DIR
    from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo
    if arquivos.permite_recuperacao:
        dados = importar_arquivo(arquivos.arquivo, request, 0)
        if dados:
            messages.warning(request, 'Arquivo recuperado com sucesso! Por gentileza confira todo o conteúdo do mesmo, pois este processo não passou por validação')
        else:
            messages.error(request, 'Arquivo não pode ser recuperado pois já existe um arquivo com a mesma identidade cadastrado!')
    else:
        messages.error(request,
                       'Este arquivo não permite ser recuperado!')
    atualizar_versao()
    return redirect('arquivos', hash=request.session['retorno_hash'])
예제 #2
0
def importacao_reprocessar(request, pk):

    from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo

    arquivos = get_object_or_404(ImportacaoArquivosEventos, id=pk)

    dados_importacao = importar_arquivo(arquivos, request, 0)

    if dados_importacao:

        ImportacaoArquivosEventos.objects.filter(id=arquivos.id).\
            update(status=STATUS_IMPORT_PROCESSADO)

        messages.warning(request, '''
                    Arquivo recuperado com sucesso! 
                    Por gentileza confira todo o conteúdo 
                    do mesmo, pois este processo não 
                    passou por validação''')

    else:

        messages.error(request, '''
                    Arquivo não pode ser recuperado 
                    pois já existe um arquivo com a 
                    mesma identidade cadastrado!''')

    return redirect('mapa_importacoes', tab='master')
예제 #3
0
def scripts_processar_arquivos(request):
    #atualizar_importador()
    import os
    from emensageriapro.settings import BASE_DIR
    from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo, get_identidade_evento, get_versao_evento
    from emensageriapro.mensageiro.functions.funcoes_validacoes import VERSAO_ATUAL
    db_slug = 'default'

    for_print = 0
    executar_sql(
        """
    UPDATE public.importacao_arquivos_eventos
       SET excluido=True
     WHERE importacao_arquivos_id IN (SELECT id FROM importacao_arquivos WHERE excluido=True);""",
        False)

    arquivos = ImportacaoArquivosEventos.objects.using(db_slug).filter(
        excluido=False, status=0).exclude(id=0).all()

    for arquivo in arquivos:
        error_list = []

        ident = str(arquivo.id)
        while len(ident) < 10:
            ident = '0' + ident
        filename = arquivo.arquivo
        dados_eventos = {}
        import os.path
        if os.path.isfile(BASE_DIR + '/' + filename):
            dados_eventos['identidade_evento'] = get_identidade_evento(
                ler_arquivo(filename))
            dados_eventos['versao'] = get_versao_evento(ler_arquivo(filename))
            existe_identidade = executar_sql(
                "SELECT count(*) FROM public.transmissor_eventos_esocial WHERE identidade='%s'"
                % dados_eventos['identidade_evento'], True)
            existe_identidade = existe_identidade[0][0]

            if existe_identidade:
                dados_eventos['status'] = 5
                error_list = [
                    'Não é possível importar o evento pois o ID já existe em nossa base!'
                ]
                origem = BASE_DIR + '/' + arquivo.arquivo
                destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                    '/aguardando/', '/erro/' + ident + '__')
                os.system('mv %s %s' % (origem, destino))
                dados_eventos['arquivo'] = arquivo.arquivo.replace(
                    '/aguardando/', '/erro/' + ident + '__')
                ia_id = arquivo.importacao_arquivos_id
                gravar_nome_arquivo(dados_eventos['arquivo'], 1)

            elif dados_eventos['versao'] in VERSAO_ATUAL:
                quant_erros, error_list = validar_arquivo(filename,
                                                          request,
                                                          lang='pt')
                if not quant_erros or (quant_erros == 1
                                       and 'Signature' in str(error_list)):
                    dados_importacao = importar_arquivo(filename, request, 1)
                    #dados_eventos['evento'] = dados_eventos['tabela']
                    #del dados_eventos['tabela']
                    dados_eventos['evento'] = dados_importacao['tabela']
                    dados_eventos['status'] = 1
                    origem = BASE_DIR + '/' + arquivo.arquivo
                    destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                        '/aguardando/', '/processado/' + ident + '__')
                    os.system('mv %s %s' % (origem, destino))
                    dados_eventos['arquivo'] = '/' + arquivo.arquivo.replace(
                        '/aguardando/', '/processado/' + ident + '__')
                    atualizar_arquivo_tabela(dados_eventos['evento'],
                                             dados_importacao['identidade'],
                                             dados_eventos['arquivo'],
                                             arquivo.id)
                    gravar_nome_arquivo(dados_eventos['arquivo'], 1)
                else:
                    #dados_eventos['evento'] = dados_eventos['tabela']
                    #del dados_eventos['tabela']
                    dados_eventos['status'] = 2
                    origem = BASE_DIR + '/' + arquivo.arquivo
                    destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                        '/aguardando/', '/erro/' + ident + '__')
                    os.system('mv %s %s' % (origem, destino))
                    dados_eventos['arquivo'] = arquivo.arquivo.replace(
                        '/aguardando/', '/erro/' + ident + '__')
                    gravar_nome_arquivo(dados_eventos['arquivo'], 1)

            else:
                dados_eventos['status'] = 2
                error_list = ['Versão do evento incompatível!']
                origem = BASE_DIR + '/' + arquivo.arquivo
                destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                    '/aguardando/', '/erro/' + ident + '__')
                os.system('mv %s %s' % (origem, destino))
                dados_eventos['arquivo'] = arquivo.arquivo.replace(
                    '/aguardando/', '/erro/' + ident + '__')
                ia_id = arquivo.importacao_arquivos_id
                gravar_nome_arquivo(dados_eventos['arquivo'], 1)
        else:
            dados_eventos['status'] = 2
            error_list = ['Arquivo não encontrado!']

        dados_eventos['validacoes'] = '<br>'.join(error_list)
        dados_eventos['criado_em'] = datetime.datetime.now()
        dados_eventos['criado_por_id'] = 1
        dados_eventos['excluido'] = False
        ImportacaoArquivosEventos.objects.using(db_slug).filter(
            id=arquivo.id).update(**dados_eventos)
        ia_id = arquivo.importacao_arquivos_id
        atualizar_importador()
    return HttpResponse('')
예제 #4
0
def arquivos_recuperacao(request, pk):

    import os
    from datetime import datetime
    from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo
    from emensageriapro.mensageiro.models import ImportacaoArquivosEventos
    from emensageriapro.settings import BASE_DIR

    arquivos = get_object_or_404(Arquivos, id=pk)

    if arquivos.permite_recuperacao:

        arquivo_importacao = ImportacaoArquivosEventos.objects.filter(
            arquivo=arquivos.arquivo).all()

        if not arquivo_importacao:

            a = arquivos.arquivo.split('/')
            nome_arquivo = a[len(a) - 1]
            path_arq = '/arquivos/Importacao/aguardando/' + nome_arquivo

            os.system('cp %s %s' %
                      (BASE_DIR + arquivos.arquivo, BASE_DIR + path_arq))

            arq_import = ImportacaoArquivos.objects. \
                filter(arquivo=arquivos.arquivo).all()

            if arq_import:
                obj = arq_import[0]
            else:
                dados_importacao = {}
                dados_importacao['arquivo'] = path_arq
                dados_importacao['status'] = 0
                dados_importacao['data_hora'] = datetime.now()
                dados_importacao['quant_processado'] = 0
                dados_importacao['quant_erros'] = 0
                dados_importacao['quant_aguardando'] = 0
                dados_importacao['importado_por_id'] = request.user.id

                obj = ImportacaoArquivos(**dados_importacao)
                obj.save()

            dados_eventos = {}
            dados_eventos['importacao_arquivos_id'] = obj.id
            dados_eventos['evento'] = '-'
            dados_eventos['versao'] = '-'
            dados_eventos['identidade_evento'] = '-'
            dados_eventos['identidade'] = 0
            dados_eventos['arquivo'] = path_arq
            dados_eventos['status'] = 0
            dados_eventos['data_hora'] = datetime.now()
            dados_eventos['validacoes'] = ''

            obj_ev = ImportacaoArquivosEventos(**dados_eventos)
            obj_ev.save()

            arquivo_importacao = ImportacaoArquivosEventos.objects.filter(
                arquivo=path_arq).all()

        dados_importacao = importar_arquivo(arquivo_importacao[0], request, 0)
        dados_importacao['status'] = STATUS_IMPORT_PROCESSADO

        if dados_importacao:
            messages.warning(
                request, '''
                Arquivo recuperado com sucesso! 
                Por gentileza confira todo o conteúdo 
                do mesmo, pois este processo não 
                passou por validação''')

        else:
            messages.error(
                request, '''
                Arquivo não pode ser recuperado 
                pois já existe um arquivo com a 
                mesma identidade cadastrado!''')

    else:
        messages.error(request, 'Este arquivo não permite ser recuperado!')

    return redirect('arquivos')
예제 #5
0
def scripts_processar_arquivos(request, tab):

    create_import_dirs()

    import os.path
    from emensageriapro.settings import BASE_DIR, VERSOES_EFDREINF, VERSOES_ESOCIAL
    from emensageriapro.functions import get_identidade_evento, get_versao_evento
    from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo

    arquivos_lista = ImportacaoArquivos.objects.all()
    ImportacaoArquivosEventos.objects.\
        exclude(importacao_arquivos__in=arquivos_lista).delete()

    arquivos = ImportacaoArquivosEventos.objects.\
        filter(status=STATUS_IMPORT_AGUARDANDO).exclude(id=0).all()

    for arquivo in arquivos:

        filename = arquivo.arquivo
        dados_eventos = {}

        if os.path.isfile(BASE_DIR + filename) and '.xml' in filename.lower():

            dados_eventos['identidade_evento'] = get_identidade_evento(ler_arquivo(filename))
            dados_eventos['versao'] = get_versao_evento(ler_arquivo(filename))

            existe_identidade_esocial = TransmissorEventosEsocial.objects.\
                filter(identidade=dados_eventos['identidade_evento']).all()

            existe_identidade_efdreinf = TransmissorEventosEfdreinf.objects.\
                filter(identidade=dados_eventos['identidade_evento']).all()

            if existe_identidade_esocial or existe_identidade_efdreinf:

                dados_eventos['status'] = STATUS_IMPORT_ERRO_IDENTIDADE_EXISTENTE
                error_list = ['Não é possível importar o evento pois o ID já existe em nossa base!']
                move_event(arquivo, 'erros')

            elif dados_eventos['versao'] in VERSOES_ESOCIAL or dados_eventos['versao'] in VERSOES_EFDREINF:

                quant_erros, error_list = validar_arquivo(request, filename, lang='pt')

                if not quant_erros or (quant_erros == 1 and 'Signature' in str(error_list)):

                    dados_importacao = importar_arquivo(arquivo, request, False)

                    dados_eventos['evento'] = dados_importacao['evento']
                    dados_eventos['status'] = STATUS_IMPORT_PROCESSADO
                    # xml_ger, xml_imp = verificacao_importacao_funcao(arquivo)
                    # if xml_ger in xml_imp:
                    #     print 'OK'
                    # else:
                    #     print 'ERROR'

                else:

                    dados_eventos['status'] = STATUS_IMPORT_ERRO_PROCESSAMENTO
                    move_event(arquivo, 'erros')

            else:

                dados_eventos['status'] = STATUS_IMPORT_ERRO_VERSAO_LEIAUTE
                error_list = ['Versão do evento incompatível!']
                move_event(arquivo, 'erros')

        else:

            dados_eventos['status'] = STATUS_IMPORT_ERRO_ARQUIVO_INVALIDO
            error_list = ['Arquivo não encontrado!']

        dados_eventos['validacoes'] = '<br>'.join(error_list)

        ImportacaoArquivosEventos.objects.\
            filter(id=arquivo.id).update(**dados_eventos)

    if tab == 'mapa':

        messages.success(request, 'Processamento realizado com sucesso...')
        return redirect('mapa_importacoes', tab='master')

    return HttpResponse('')
예제 #6
0
def scripts_validacao_automatica(request):
    import os
    from emensageriapro.settings import BASE_DIR
    from emensageriapro.padrao import executar_sql
    for_print = 0
    executar_sql(
        """
    UPDATE public.importacao_arquivos_eventos
       SET excluido=True
     WHERE importacao_arquivos_id IN (SELECT id FROM importacao_arquivos WHERE excluido=True) ;

    """, False)
    db_slug = 'default'
    arquivos = ImportacaoArquivosEventos.objects.using(db_slug).filter(
        excluido=False, status=0).exclude(id=0).all()
    for arquivo in arquivos:
        filename = arquivo.arquivo

        arq_compl = filename
        from emensageriapro.mensageiro.functions.funcoes_importacao import importar_arquivo
        from emensageriapro.mensageiro.views.processar_arquivos import validar_arquivo
        dados_eventos = {}
        quant_erros, error_list = validar_arquivo(filename, request, lang='pt')
        if not error_list:
            dados_eventos = importar_arquivo(filename, request, 1)
        if not dados_eventos:
            dados_eventos = {}
            dados_eventos['status'] = 5
            dados_eventos['validacoes'] = 'Evento já existe em nossa base!'
            dados_eventos['criado_em'] = datetime.datetime.now()
            dados_eventos['criado_por_id'] = 1
            dados_eventos['excluido'] = False
            ImportacaoArquivosEventos.objects.using(db_slug).filter(
                id=arquivo.id).update(**dados_eventos)
            from emensageriapro.padrao import executar_sql
            ia_id = arquivo.importacao_arquivos_id
            executar_sql(
                """
                UPDATE public.importacao_arquivos SET
                quant_aquardando = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status=0),
                quant_error = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status in (2,5)),
                quant_processado = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status=1)
                WHERE id=%s
            """ % (ia_id, ia_id, ia_id, ia_id), False)

        else:
            if error_list:
                dados_eventos['status'] = 2
            else:
                dados_eventos['status'] = 4
            dados_eventos['validacoes'] = '<br>'.join(error_list)
            dados_eventos['criado_em'] = datetime.datetime.now()
            dados_eventos['criado_por_id'] = 1
            dados_eventos['excluido'] = False
            print dados_eventos
            ImportacaoArquivosEventos.objects.using(db_slug).filter(
                id=arquivo.id).update(**dados_eventos)
            from emensageriapro.padrao import executar_sql
            ia_id = arquivo.importacao_arquivos_id
            executar_sql(
                """
                UPDATE public.importacao_arquivos SET
                quant_aquardando = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status=0),
                quant_error = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status in (2,5) ),
                quant_processado = (
                SELECT count(*) FROM public.importacao_arquivos_eventos e
                WHERE e.importacao_arquivos_id=%s AND e.status=1)
                WHERE id=%s
            """ % (ia_id, ia_id, ia_id, ia_id), False)
    arquivos = ImportacaoArquivosEventos.objects.using(db_slug).filter(
        excluido=False).exclude(id=0).all()
    for arquivo in arquivos:
        if arquivo.status in [2, 5]:
            for arquivo in arquivos:
                origem = BASE_DIR + '/' + arquivo.arquivo
                destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                    '/aguardando/', '/erro/')
                print 'mv %s %s' % (origem, destino)
                os.system('mv %s %s' % (origem, destino))
                dados = {}
                dados['arquivo'] = arquivo.arquivo.replace(
                    '/aguardando/', '/erro/')
                ImportacaoArquivosEventos.objects.using(db_slug).filter(
                    id=arquivo.id).update(**dados)
        elif arquivo.status == 1:
            for arquivo in arquivos:
                origem = BASE_DIR + '/' + arquivo.arquivo
                destino = BASE_DIR + '/' + arquivo.arquivo.replace(
                    '/aguardando/', '/processado/')
                print 'mv %s %s' % (origem, destino)
                os.system('mv %s %s' % (origem, destino))
                dados = {}
                dados['arquivo'] = arquivo.arquivo.replace(
                    '/aguardando/', '/processado/')
                ImportacaoArquivosEventos.objects.using(db_slug).filter(
                    id=arquivo.id).update(**dados)

    return HttpResponse('')