def validar_evento_funcao(s2220_evtmonit_id, db_slug):
    from emensageriapro.padrao import executar_sql
    from emensageriapro.mensageiro.functions.funcoes_importacao import get_versao_evento
    from emensageriapro.mensageiro.functions.funcoes_validacoes_precedencia import validar_precedencia
    from emensageriapro.mensageiro.functions.funcoes_validacoes import get_schema_name, validar_schema
    from emensageriapro.settings import BASE_DIR
    lista_validacoes = []
    s2220_evtmonit = get_object_or_404(s2220evtMonit.objects.using(db_slug),
                                       excluido=False,
                                       id=s2220_evtmonit_id)
    if s2220_evtmonit.transmissor_lote_esocial:
        if s2220_evtmonit.transmissor_lote_esocial.transmissor:
            if s2220_evtmonit.transmissor_lote_esocial.transmissor.verificar_predecessao:
                quant = validar_precedencia('esocial', 's2220_evtmonit',
                                            s2220_evtmonit_id)
                if quant <= 0:
                    lista_validacoes.append(u'Precedência não foi enviada!')
                    precedencia = 0
                else:
                    precedencia = 1
            else:
                precedencia = 1
        else:
            lista_validacoes.append(
                u'Precedência não pode ser verificada. Vincule um transmissor para que este evento possa ser validado!'
            )
            precedencia = 0
    else:
        lista_validacoes.append(
            u'Precedência não pode ser verificada. Cadastre um transmissor para este evento para que possa ser validado!'
        )
        precedencia = 0

    s2220evtMonit.objects.using( db_slug ).\
        filter(id=s2220_evtmonit_id, excluido = False).\
        update(validacao_precedencia=precedencia)

    #executar_sql("UPDATE public.s2220_evtmonit SET validacao_precedencia=%s WHERE id=%s;" % (precedencia, s2220_evtmonit_id), False)
    #
    # Validações internas
    #
    arquivo = 'arquivos/Eventos/s2220_evtmonit/%s.xml' % (
        s2220_evtmonit.identidade)
    os.system('mkdir -p %s/arquivos/Eventos/s2220_evtmonit/' % BASE_DIR)
    lista = []
    tipo = 'esocial'
    if not os.path.exists(BASE_DIR + '/' + arquivo):
        gerar_xml_assinado(s2220_evtmonit_id, db_slug)
    if os.path.exists(BASE_DIR + '/' + arquivo):
        texto_xml = ler_arquivo(arquivo).replace("s:", "")
        versao = get_versao_evento(texto_xml)
        from emensageriapro.esocial.views.s2220_evtmonit_validar import validacoes_s2220_evtmonit
        lista = validacoes_s2220_evtmonit(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:

        validacoes = '<br>'.join(lista_validacoes).replace("'", "''")

        s2220evtMonit.objects.using( db_slug ).\
            filter(id=s2220_evtmonit_id, excluido = False).\
            update(validacoes=validacoes, status=3)

        #executar_sql("UPDATE public.s2220_evtmonit SET validacoes='%s', status=3 WHERE id=%s;" % ('<br>'.join(lista_validacoes).replace("'","''"), s2220_evtmonit_id), False)

    else:

        s2220evtMonit.objects.using( db_slug ).\
            filter(id=s2220_evtmonit_id, excluido = False).\
            update(validacoes='', status=4)

        #executar_sql("UPDATE public.s2220_evtmonit SET validacoes='', status=4 WHERE id=%s;" % (s2220_evtmonit_id), False)

    return lista_validacoes
Esempio n. 2
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('')
Esempio n. 3
0
def validar_evento_funcao(request, pk):

    from emensageriapro.padrao import executar_sql
    from emensageriapro.mensageiro.functions.funcoes_importacao import get_versao_evento
    from emensageriapro.mensageiro.functions.funcoes_validacoes_precedencia import validar_precedencia
    from emensageriapro.mensageiro.functions.funcoes_validacoes import get_schema_name, validar_schema
    from emensageriapro.settings import BASE_DIR
    from emensageriapro.efdreinf.views.r5011_evttotalcontrib_gerar_xml import gerar_xml_assinado
    VERIFICAR_PREDECESSAO_ANTES_ENVIO = config.EFDREINF_VERIFICAR_PREDECESSAO_ANTES_ENVIO

    lista_validacoes = []
    r5011_evttotalcontrib = get_object_or_404(r5011evtTotalContrib, id=pk)

    #
    # Validações internas
    #

    arquivo = 'arquivos/Eventos/r5011_evttotalcontrib/%s.xml' % (
        r5011_evttotalcontrib.identidade)
    os.system('mkdir -p %s/arquivos/Eventos/r5011_evttotalcontrib/' % BASE_DIR)
    lista = []
    tipo = 'efdreinf'

    if not os.path.exists(BASE_DIR + '/' + arquivo):

        gerar_xml_assinado(request, pk)

    if os.path.exists(BASE_DIR + '/' + arquivo):

        from emensageriapro.efdreinf.views.r5011_evttotalcontrib_validar import validacoes_r5011_evttotalcontrib

        texto_xml = ler_arquivo(arquivo).replace("s:", "")
        versao = get_versao_evento(texto_xml)
        lista = validacoes_r5011_evttotalcontrib(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(request,
                                             schema_filename,
                                             arquivo,
                                             lang='pt')

    for a in error_list:

        if a:

            lista_validacoes.append(a)

    #
    #
    #

    if lista_validacoes:

        validacoes = '<br>'.join(lista_validacoes).replace("'", "''")

        r5011evtTotalContrib.objects.\
            filter(id=pk).\
            update(validacoes=validacoes,
                   status=STATUS_EVENTO_VALIDADO_ERRO)

        messages.error(
            request,
            u'Validações foram processadas, porém foram encontrados erros!')

    else:

        if VERIFICAR_PREDECESSAO_ANTES_ENVIO:

            quant = validar_precedencia('efdreinf', 'r5011_evttotalcontrib',
                                        pk)

            if quant <= 0:

                r5011evtTotalContrib.objects.\
                    filter(id=pk).\
                    update(validacoes=None,
                           status=STATUS_EVENTO_AGUARD_PRECEDENCIA)

                messages.warning(
                    request,
                    u'Validações foram processadas com sucesso, porém o evento está aguardando envio de sua precedência!'
                )

            else:

                r5011evtTotalContrib.objects.\
                    filter(id=pk).\
                    update(validacoes=None,
                           status=STATUS_EVENTO_AGUARD_ENVIO)

                messages.success(
                    request,
                    u'Validações foram processadas com sucesso, evento está aguardandando envio!'
                )

        else:

            r5011evtTotalContrib.objects. \
                filter(id=pk).\
                update(validacoes=None,
                       status=STATUS_EVENTO_AGUARD_ENVIO)

            messages.success(
                request,
                u'Validações foram processadas com sucesso, evento está aguardandando envio!'
            )

    return lista_validacoes
def get_schema_name(arquivo):
    from emensageriapro.mensageiro.functions.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