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'])
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')
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('')
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')
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('')
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('')