def abrir_evento_para_edicao(request, hash): from emensageriapro.settings import BASE_DIR from emensageriapro.mensageiro.functions.funcoes_esocial import gravar_nome_arquivo db_slug = 'default' dict_hash = get_hash_url(hash) s2298_evtreintegr_id = int(dict_hash['id']) if s2298_evtreintegr_id: s2298_evtreintegr = get_object_or_404( s2298evtReintegr.objects.using(db_slug), excluido=False, id=s2298_evtreintegr_id) if s2298_evtreintegr.status in ( 0, 1, 2, 3, 4, 10, 11 ) or s2298_evtreintegr.processamento_codigo_resposta in (401, 402): s2298evtReintegr.objects.using(db_slug).filter( id=s2298_evtreintegr_id).update(status=0, arquivo_original=0) arquivo = 'arquivos/Eventos/s2298_evtreintegr/%s.xml' % ( s2298_evtreintegr.identidade) if os.path.exists(BASE_DIR + '/' + arquivo): from datetime import datetime data_hora_atual = str(datetime.now()).replace( ':', '_').replace(' ', '_').replace('.', '_') dad = (BASE_DIR, s2298_evtreintegr.identidade, BASE_DIR, s2298_evtreintegr.identidade, data_hora_atual) os.system( 'mv %s/arquivos/Eventos/s2298_evtreintegr/%s.xml %s/arquivos/Eventos/s2298_evtreintegr/%s_backup_%s.xml' % dad) gravar_nome_arquivo( '/arquivos/Eventos/s2298_evtreintegr/%s_backup_%s.xml' % (s2298_evtreintegr.identidade, data_hora_atual), 1) messages.success(request, 'Evento aberto para edição!') usuario_id = request.user.id gravar_auditoria(u'{}', u'{"funcao": "Evento aberto para edição"}', 's2298_evtreintegr', s2298_evtreintegr_id, usuario_id, 1) url_hash = base64.urlsafe_b64encode('{"print": "0", "id": "%s"}' % s2298_evtreintegr_id) return redirect('s2298_evtreintegr_salvar', hash=url_hash) else: messages.error( request, u''' Não foi possível abrir o evento para edição! Somente é possível abrir eventos com os seguintes status: "Cadastrado", "Importado", "Validado", "Duplicado", "Erro na validação", "XML Assinado" ou "XML Gerado" ou com o status "Enviado com sucesso" e os seguintes códigos de resposta do servidor: "401 - Lote Incorreto - Erro preenchimento" ou "402 - Lote Incorreto - schema Inválido"!''' ) return redirect(request.session['retorno_pagina'], hash=request.session['retorno_hash']) messages.error(request, 'Erro ao abrir evento para edição!') return redirect(request.session['retorno_pagina'], hash=request.session['retorno_hash'])
def abrir_evento_para_edicao(request, pk): from emensageriapro.settings import BASE_DIR from emensageriapro.mensageiro.functions.funcoes_esocial import gravar_nome_arquivo if request.user.has_perm('efdreinf.can_open_r5011evtTotalContrib'): r5011_evttotalcontrib = get_object_or_404(r5011evtTotalContrib, id=pk) status_list = [ STATUS_EVENTO_CADASTRADO, STATUS_EVENTO_IMPORTADO, STATUS_EVENTO_DUPLICADO, STATUS_EVENTO_GERADO, STATUS_EVENTO_GERADO_ERRO, STATUS_EVENTO_ASSINADO, STATUS_EVENTO_ASSINADO_ERRO, STATUS_EVENTO_VALIDADO, STATUS_EVENTO_VALIDADO_ERRO, STATUS_EVENTO_AGUARD_PRECEDENCIA, STATUS_EVENTO_AGUARD_ENVIO, STATUS_EVENTO_ENVIADO_ERRO ] if r5011_evttotalcontrib.status in status_list: r5011evtTotalContrib.objects.filter(id=pk).update( status=STATUS_EVENTO_CADASTRADO, arquivo_original=0) arquivo = 'arquivos/Eventos/r5011_evttotalcontrib/%s.xml' % ( r5011_evttotalcontrib.identidade) if os.path.exists(BASE_DIR + '/' + arquivo): data_hora_atual = str(datetime.now()).replace( ':', '_').replace(' ', '_').replace('.', '_') dad = (BASE_DIR, r5011_evttotalcontrib.identidade, BASE_DIR, r5011_evttotalcontrib.identidade, data_hora_atual) os.system( 'mv %s/arquivos/Eventos/r5011_evttotalcontrib/%s.xml %s/arquivos/Eventos/r5011_evttotalcontrib/%s_backup_%s.xml' % dad) gravar_nome_arquivo( '/arquivos/Eventos/r5011_evttotalcontrib/%s_backup_%s.xml' % (r5011_evttotalcontrib.identidade, data_hora_atual), 1) messages.success(request, 'Evento aberto para edição!') request.user.id = request.user.id gravar_auditoria(u'{}', u'{"funcao": "Evento aberto para edição"}', 'r5011_evttotalcontrib', pk, request.user.id, 1) else: messages.error( request, u''' Não foi possível abrir o evento para edição! Somente é possível abrir eventos com os seguintes status: "Cadastrado", "Importado", "Validado", "Duplicado", "Erro na validação", "XML Assinado" ou "XML Gerado" ou com o status "Enviado com sucesso" e os seguintes códigos de resposta do servidor: "401 - Lote Incorreto - Erro preenchimento" ou "402 - Lote Incorreto - schema Inválido"!''' ) else: messages.error( request, u'''Você não possui permissão para abrir evento para edição. Entre em contato com o administrador do sistema!''' ) return redirect('r5011_evttotalcontrib_salvar', pk=pk)
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('')