コード例 #1
0
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'])
コード例 #2
0
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)
コード例 #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('')