def validar_evento_funcao(s2410_evtcdbenin_id, db_slug): from emensageriapro.padrao import executar_sql from emensageriapro.funcoes_importacao import get_versao_evento from emensageriapro.funcoes_validacoes_precedencia import validar_precedencia from emensageriapro.funcoes_validacoes import get_schema_name, validar_schema from emensageriapro.settings import BASE_DIR lista_validacoes = [] s2410_evtcdbenin = get_object_or_404(s2410evtCdBenIn.objects.using(db_slug), excluido=False, id=s2410_evtcdbenin_id) quant = validar_precedencia('esocial', 's2410_evtcdbenin', s2410_evtcdbenin_id) if quant <= 0: #lista_validacoes.append('Precedência não foi enviada!') precedencia = 0 else: precedencia = 1 executar_sql("UPDATE public.s2410_evtcdbenin SET validacao_precedencia=%s WHERE id=%s;" % (precedencia, s2410_evtcdbenin_id), False) # # Validações internas # arquivo = 'arquivos/Eventos/s2410_evtcdbenin/%s.xml' % (s2410_evtcdbenin.identidade) os.system('mkdir -p %s/arquivos/Eventos/s2410_evtcdbenin/' % BASE_DIR) lista = [] tipo = 'esocial' if not os.path.exists(BASE_DIR + '/' + arquivo): gerar_xml_assinado(s2410_evtcdbenin_id, db_slug) if os.path.exists(BASE_DIR + '/' + arquivo): texto_xml = ler_arquivo(arquivo).replace("s:", "") versao = get_versao_evento(texto_xml) if tipo == 'esocial': if versao == 'v02_04_02': from emensageriapro.esocial.validacoes.v02_04_02.s2410_evtcdbenin import validacoes_s2410_evtcdbenin lista = validacoes_s2410_evtcdbenin(arquivo) elif tipo == 'efdreinf': if versao == 'v1_03_02': from emensageriapro.efdreinf.validacoes.v1_03_02.s2410_evtcdbenin import validacoes_s2410_evtcdbenin lista = validacoes_s2410_evtcdbenin(arquivo) for a in lista: if a: lista_validacoes.append(a) # # validando schema # schema_filename = get_schema_name(arquivo) quant_erros, error_list = validar_schema(schema_filename, arquivo, lang='pt') for a in error_list: if a: lista_validacoes.append(a) # # # if lista_validacoes: executar_sql("UPDATE public.s2410_evtcdbenin SET validacoes='%s', status=3 WHERE id=%s;" % ('<br>'.join(lista_validacoes).replace("'","''"), s2410_evtcdbenin_id), False) else: executar_sql("UPDATE public.s2410_evtcdbenin SET validacoes='', status=4 WHERE id=%s;" % (s2410_evtcdbenin_id), False) return lista_validacoes
def get_schema_name(arquivo): from emensageriapro.funcoes_importacao import get_versao_evento from emensageriapro.padrao import ler_arquivo xml = ler_arquivo(arquivo).replace("s:", "") if 'eSocial' in xml: tipo = 'esocial' elif 'Reinf' in xml: tipo = 'efdreinf' versao = get_versao_evento(xml) schema_filename = '' if tipo == 'esocial': if 'evtInfoEmpregador' in xml: schema_filename = '%s/%s/evtInfoEmpregador.xsd' % (tipo, versao) elif 'evtTabEstab' in xml: schema_filename = '%s/%s/evtTabEstab.xsd' % (tipo, versao) elif 'evtTabRubrica' in xml: schema_filename = '%s/%s/evtTabRubrica.xsd' % (tipo, versao) elif 'evtTabLotacao' in xml: schema_filename = '%s/%s/evtTabLotacao.xsd' % (tipo, versao) elif 'evtTabCargo' in xml: schema_filename = '%s/%s/evtTabCargo.xsd' % (tipo, versao) elif 'evtTabCarreira' in xml: schema_filename = '%s/%s/evtTabCarreira.xsd' % (tipo, versao) elif 'evtTabFuncao' in xml: schema_filename = '%s/%s/evtTabFuncao.xsd' % (tipo, versao) elif 'evtTabHorTur' in xml: schema_filename = '%s/%s/evtTabHorTur.xsd' % (tipo, versao) elif 'evtTabAmbiente' in xml: schema_filename = '%s/%s/evtTabAmbiente.xsd' % (tipo, versao) elif 'evtTabProcesso' in xml: schema_filename = '%s/%s/evtTabProcesso.xsd' % (tipo, versao) elif 'evtTabOperPort' in xml: schema_filename = '%s/%s/evtTabOperPort.xsd' % (tipo, versao) elif 'evtRemun' in xml: schema_filename = '%s/%s/evtRemun.xsd' % (tipo, versao) elif 'evtRmnRPPS' in xml: schema_filename = '%s/%s/evtRmnRPPS.xsd' % (tipo, versao) elif 'evtBenPrRP' in xml: schema_filename = '%s/%s/evtBenPrRP.xsd' % (tipo, versao) elif 'evtPgtos' in xml: schema_filename = '%s/%s/evtPgtos.xsd' % (tipo, versao) elif 'evtAqProd' in xml: schema_filename = '%s/%s/evtAqProd.xsd' % (tipo, versao) elif 'evtComProd' in xml: schema_filename = '%s/%s/evtComProd.xsd' % (tipo, versao) elif 'evtContratAvNP' in xml: schema_filename = '%s/%s/evtContratAvNP.xsd' % (tipo, versao) elif 'evtInfoComplPer' in xml: schema_filename = '%s/%s/evtInfoComplPer.xsd' % (tipo, versao) elif 'evtTotConting' in xml: schema_filename = '%s/%s/evtTotConting.xsd' % (tipo, versao) elif 'evtReabreEvPer' in xml: schema_filename = '%s/%s/evtReabreEvPer.xsd' % (tipo, versao) elif 'evtFechaEvPer' in xml: schema_filename = '%s/%s/evtFechaEvPer.xsd' % (tipo, versao) elif 'evtContrSindPatr' in xml: schema_filename = '%s/%s/evtContrSindPatr.xsd' % (tipo, versao) elif 'evtAdmPrelim' in xml: schema_filename = '%s/%s/evtAdmPrelim.xsd' % (tipo, versao) elif 'evtAdmissao' in xml: schema_filename = '%s/%s/evtAdmissao.xsd' % (tipo, versao) elif 'evtAltCadastral' in xml: schema_filename = '%s/%s/evtAltCadastral.xsd' % (tipo, versao) elif 'evtAltContratual' in xml: schema_filename = '%s/%s/evtAltContratual.xsd' % (tipo, versao) elif 'evtCAT' in xml: schema_filename = '%s/%s/evtCAT.xsd' % (tipo, versao) elif 'evtMonit' in xml: schema_filename = '%s/%s/evtMonit.xsd' % (tipo, versao) elif 'evtAfastTemp' in xml: schema_filename = '%s/%s/evtAfastTemp.xsd' % (tipo, versao) elif 'evtExpRisco' in xml: schema_filename = '%s/%s/evtExpRisco.xsd' % (tipo, versao) elif 'evtInsApo' in xml: schema_filename = '%s/%s/evtInsApo.xsd' % (tipo, versao) elif 'evtAvPrevio' in xml: schema_filename = '%s/%s/evtAvPrevio.xsd' % (tipo, versao) elif 'evtConvInterm' in xml: schema_filename = '%s/%s/evtConvInterm.xsd' % (tipo, versao) elif 'evtReintegr' in xml: schema_filename = '%s/%s/evtReintegr.xsd' % (tipo, versao) elif 'evtDeslig' in xml: schema_filename = '%s/%s/evtDeslig.xsd' % (tipo, versao) elif 'evtTSVInicio' in xml: schema_filename = '%s/%s/evtTSVInicio.xsd' % (tipo, versao) elif 'evtTSVAltContr' in xml: schema_filename = '%s/%s/evtTSVAltContr.xsd' % (tipo, versao) elif 'evtTSVTermino' in xml: schema_filename = '%s/%s/evtTSVTermino.xsd' % (tipo, versao) elif 'evtCdBenPrRP' in xml: schema_filename = '%s/%s/evtCdBenPrRP.xsd' % (tipo, versao) elif 'evtExclusao' in xml: schema_filename = '%s/%s/evtExclusao.xsd' % (tipo, versao) elif 'evtBasesTrab' in xml: schema_filename = '%s/%s/evtBasesTrab.xsd' % (tipo, versao) elif 'evtIrrfBenef' in xml: schema_filename = '%s/%s/evtIrrfBenef.xsd' % (tipo, versao) elif 'evtCS' in xml: schema_filename = '%s/%s/evtCS.xsd' % (tipo, versao) elif 'evtIrrf' in xml: schema_filename = '%s/%s/evtIrrf.xsd' % (tipo, versao) if tipo == 'efdreinf': if 'evtInfoContri' in xml: schema_filename = '%s/%s/evtInfoContribuinte.xsd' % (tipo, versao) elif 'evtTabProcesso' in xml: schema_filename = '%s/%s/evtTabProcesso.xsd' % (tipo, versao) elif 'evtServTom' in xml: schema_filename = '%s/%s/evtTomadorServicos.xsd' % (tipo, versao) elif 'evtServPrest' in xml: schema_filename = '%s/%s/evtPrestadorServicos.xsd' % (tipo, versao) elif 'evtAssocDespRec' in xml: schema_filename = '%s/%s/evtRecursoRecebidoAssociacao.xsd' % ( tipo, versao) elif 'evtAssocDespRep' in xml: schema_filename = '%s/%s/evtRecursoRepassadoAssociacao.xsd' % ( tipo, versao) elif 'evtComProd' in xml: schema_filename = '%s/%s/evtInfoProdRural.xsd' % (tipo, versao) elif 'evtCPRB' in xml: schema_filename = '%s/%s/evtInfoCPRB.xsd' % (tipo, versao) elif 'evtPgtosDivs' in xml: schema_filename = '%s/%s/r2070_evtpgtosdivs' % (tipo, versao) elif 'evtReabreEvPer' in xml: schema_filename = '%s/%s/evtReabreEvPer.xsd' % (tipo, versao) elif 'evtFechaEvPer' in xml: schema_filename = '%s/%s/evtFechamento.xsd' % (tipo, versao) elif 'evtEspDesportivo' in xml: schema_filename = '%s/%s/evtEspDesportivo.xsd' % (tipo, versao) elif 'evtTotal' in xml: schema_filename = '%s/%s/r5001_evttotal' % (tipo, versao) elif 'evtTotalContrib' in xml: schema_filename = '%s/%s/r5011_evttotalcontrib' % (tipo, versao) elif 'evtExclusao' in xml: schema_filename = '%s/%s/evtExclusao.xsd' % (tipo, versao) return schema_filename
def scripts_processar_arquivos(request): #atualizar_importador() import os from emensageriapro.settings import BASE_DIR from emensageriapro.funcoes_importacao import importar_arquivo, get_identidade_evento, get_versao_evento from emensageriapro.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('')