Untitled

mail@pastecode.io avatar
unknown
php
7 days ago
6.7 kB
1
Indexable
Never
function process_import($ps_objeto_de_importacao, $pa_dados_csv, $pa_header_import): array
{
    // TODO: Deal with date values, multi_input fields, hierarchical objects, list-control-related (non-acervo) items, institution-targetting and required fields

    global $va_parametros_importacao, $va_usuario, $vn_usuario_logado_instituicao_codigo, $vb_usuario_logado_instituicao_admin;
    $vs_usuario_codigo = $va_usuario["usuario_codigo"];

    $vo_objeto_de_importacao = new $ps_objeto_de_importacao;
    $vo_timezone = new DateTImeZone('America/Sao_Paulo');
    $vo_datetime_inicio_importacao = new DateTime('now', $vo_timezone);
    $va_log_importacao = [
        "objeto_importacao" => $ps_objeto_de_importacao,
        "modo_importacao" => $va_parametros_importacao["import_mode"],
        "operacoes" => array(),
        "inicio" => $vo_datetime_inicio_importacao,
    ];

    foreach ($pa_dados_csv as $row => $row_data)
    {
        $va_dados_row_salvar = array();
        if (in_array($va_parametros_importacao["import_mode"], ["upsert", "update", "create"]))
        {
            if (is_item_acervo($pa_header_import))
            {

                $va_identifier_search_pointers = get_identifier_parameters_from_import_header($pa_header_import, "identificador");
                if (!$va_identifier_search_pointers && $va_parametros_importacao["import_mode"] == "update")
                {
                    $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem identificador em importação de atualização."];
                    continue;
                }
                elseif ($va_identifier_search_pointers)
                {
                    $vo_objeto_de_importacao->inicializar_campos_importacao();
                    $va_campos_importacao = $vo_objeto_de_importacao->get_campos_importacao();
                    $vs_identificacao_objeto_busca = $row_data[$va_identifier_search_pointers["posicao"]];
                    $vs_campo_identificador_busca = $va_campos_importacao["identificador_registro"][0];
                    if (isset($vs_identificacao_objeto_busca)) {
                        $va_search_parameters[$vs_campo_identificador_busca] = [
                            $vs_identificacao_objeto_busca
                        ];
                        $vo_search_result = $vo_objeto_de_importacao->ler_lista($va_search_parameters);
                    } elseif ($va_parametros_importacao["import_mode"] == "update")
                    {
                        $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem valor de identificação em importação de atualização."];

                    }
                }
                    if (isset($vo_search_result) && count($vo_search_result) > 0)
                    {
                        if ($va_parametros_importacao["import_mode"] == "create")
                        {
                            $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto já existente na aplicação."];
                            continue;
                        }
                        $va_dados_row_salvar[$ps_objeto_de_importacao . "_codigo"] = $vo_search_result[0][$ps_objeto_de_importacao . "_codigo"];
                    } elseif ($va_parametros_importacao["import_mode"] == "update")
                    {
                        $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto não existente na aplicação."];
                        continue;
                    }
            }
            // Codigos nesse pitfall referem a itens que não são de acervo

        }
        foreach ($row_data as $col => $col_data)
        {
            if (array_key_exists($col, $pa_header_import))
            {
                $vs_chave_campo_destino = $pa_header_import[$col]["campo_destino"];
                $va_dados_row_salvar["usuario_logado_codigo"] = $vs_usuario_codigo;
                if (strpos($vs_chave_campo_destino, "_codigo"))
                {
                    // Exportacao sempre traz o NOME ao invés do código. essa parte do código trata de retornar essa identificacao caso o campo seja de relacionamento
                    $vs_id_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["objeto"];
                    $vs_atributo_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][1];
                    $vs_valor_objeto_busca = $col_data;
                    $vs_atributo_objeto_retorno = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][0];
                    $vs_resultado_busca = get_codigo_objeto_from_nome($vs_id_objeto_busca, $vs_valor_objeto_busca, $vs_atributo_objeto_busca, $vs_atributo_objeto_retorno);
                    $col_data = $vs_resultado_busca;
                }
                $va_dados_row_salvar[$vs_chave_campo_destino] = $col_data;
                if (!isset($va_dados_row_salvar["item_acervo_identificador"])) {
                    $va_dados_row_salvar["item_acervo_identificador"] = "";
                }
                // TODO: Em ultima instancia onde o usuário nao selecionou instituicao, ver qual é admin e passar como default selecionada
                $va_dados_row_salvar["instituicao_codigo"] = $vn_usuario_logado_instituicao_codigo;

                $va_dados_row_salvar["item_acervo_acervo_codigo"] = $va_dados_row_salvar["instituicao_codigo"];
                // Talvez transformar em uma opcao de checkbox pra saber se o usuário quer que os dados importados estejam publicados ou não?
                $va_dados_row_salvar["texto_publicado_online"] = "1";
                $va_dados_row_salvar["texto_publicado_online_chk"] = "1";

            }
        }
        if (isset($va_parametros_importacao["import_debug"]))
        {
            $va_log_importacao["operacoes"][] = ["result" => "Positivo (Debug)"];

        }
        else
        {
            $vo_objeto_de_importacao->iniciar_transacao();
            $va_log_importacao["operacoes"][] = ["codigo_objeto" => $vo_objeto_de_importacao->salvar($va_dados_row_salvar), "result" => "Positivo"];
            $vo_objeto_de_importacao->finalizar_transacao();
        }

    }
    $va_log_importacao["fim"] = new DateTime('now', $vo_timezone);
    $va_log_importacao["duracao"] = $va_log_importacao["inicio"]->diff($va_log_importacao["fim"]);
    $va_log_importacao["duracao_string"] = $va_log_importacao["duracao"]->format('%i minutos, %s segundos');
    return $va_log_importacao;

}
Leave a Comment