/**
 * ======================================================================================================
 * Obtendo a base de dados de execuções orçamentária 
 * 
 * Variáveis:
 * 	$metodo	=> método utilizado para obter os dados que consta do arquivo include.soap.php
 * 	$agrupamento => label para exibição
 * 	$destino => tabela no banco de dados onde são armazenados os dados obtidos
 * 	$dados => array com valores de entrada, composto por:
 * 		'exercicio' => ano de exercício 
 * 		'programas' => array com todos os dados dos programas que serão consultados
 *
 */
function obterExecucoesOrcamentarias($metodo, $agrupamento, $destino, $dados)
{
    $obtendo = "Obtendo execuções orçamentárias agrupadas por {$agrupamento} para o exercício de {$dados['exercicio']}.";
    agora(str_repeat("-", strlen($obtendo)));
    agora($obtendo);
    agora(str_repeat("-", strlen($obtendo)));
    limparDadosExecucoesOrcamentarias($destino, $dados['exercicio'], $dados['programas'], "Limpando base de dados das execuções orçamentárias agrupadas por {$agrupamento} para o ano de {$dados['exercicio']}.");
    $codigoPrograma = 0;
    foreach ($dados['programas'] as $programa) {
        if ($codigoPrograma !== $programa['CODIGOPROGRAMA']) {
            $codigoPrograma = $programa['CODIGOPROGRAMA'];
            do {
                $numRegistrosSalvos = 0;
                $execucoesOrcamentarias = $metodo($codigoPrograma, $dados['exercicio']);
                if (!$execucoesOrcamentarias['sucesso']) {
                    agora("Houve um problema:");
                    echo "\n";
                    echo str_replace("<br>", "\n", $execucoesOrcamentarias['mensagensErro']);
                    echo "\n";
                } else {
                    // Caso não tenha sido encontrado nenhum registro o webservice retorna um array com um único elemento de índice 0 e vazio.
                    // Caso tenha sido encontrado apenas um registro o webservice retorna um array com os valores desse registro dentro da chave execucaoOrcamentaria
                    // Se há mais de um registro o webservice retorna execucaoOrcamentaria como sendo um array de arrays
                    if (isset($execucoesOrcamentarias['registros'][0]['execucaoOrcamentaria'])) {
                        foreach ($execucoesOrcamentarias['registros'] as $k => $registrosExecucoesOrcamentarias) {
                            if (isset($registrosExecucoesOrcamentarias['execucaoOrcamentaria']['acao'])) {
                                $execucaoOrcamentaria = $registrosExecucoesOrcamentarias['execucaoOrcamentaria'];
                                $dadosExecucaoOrcamentaria = montandoDadosDaExecucaoOrcamentaria($execucaoOrcamentaria, $dados['exercicio']);
                                salvarDadosSiop($destino, $dadosExecucaoOrcamentaria);
                                $numRegistrosSalvos++;
                            } else {
                                foreach ($registrosExecucoesOrcamentarias as $j => $registros) {
                                    foreach ($registros as $execucaoOrcamentaria) {
                                        $dadosExecucaoOrcamentaria = montandoDadosDaExecucaoOrcamentaria($execucaoOrcamentaria, $dados['exercicio']);
                                        salvarDadosSiop($destino, $dadosExecucaoOrcamentaria);
                                        $numRegistrosSalvos++;
                                    }
                                }
                            }
                        }
                    }
                }
            } while (!$execucoesOrcamentarias['sucesso']);
            if ($numRegistrosSalvos > 0) {
                agora("\tSalvados {$numRegistrosSalvos} registro(s) da execução orçamentária agrupadas por {$agrupamento} do programa.");
            } else {
                agora("\tExecução orçamentária do programa agrupadas por {$agrupamento} sem registros.");
            }
        }
        reset($programas);
    }
}
             echo "\n";
         } else {
             // Caso não tenha sido encontrado nenhum registro o webservice retorna um array com um único elemento de índice 0 e vazio.
             // Caso tenha sido encontrado apenas um registro o webservice retorna um array com os valores desse registro dentro da chave execucaoOrcamentaria
             // Se há mais de um registro o webservice retorna execucaoOrcamentaria como sendo um array de arrays
             if (isset($execucoesOrcamentarias['registros'][0]['execucaoOrcamentaria'])) {
                 foreach ($execucoesOrcamentarias['registros'] as $k => $registrosExecucoesOrcamentarias) {
                     if (isset($registrosExecucoesOrcamentarias['execucaoOrcamentaria']['acao'])) {
                         $execucaoOrcamentaria = $registrosExecucoesOrcamentarias['execucaoOrcamentaria'];
                         $dadosExecucaoOrcamentaria = montandoDadosDaExecucaoOrcamentaria($execucaoOrcamentaria, $exercicio);
                         salvarDadosSiop('execucao_orcamentaria', $dadosExecucaoOrcamentaria);
                         $numRegistrosSalvos++;
                     } else {
                         foreach ($registrosExecucoesOrcamentarias as $j => $registros) {
                             foreach ($registros as $execucaoOrcamentaria) {
                                 $dadosExecucaoOrcamentaria = montandoDadosDaExecucaoOrcamentaria($execucaoOrcamentaria, $exercicio);
                                 salvarDadosSiop('execucao_orcamentaria', $dadosExecucaoOrcamentaria);
                                 $numRegistrosSalvos++;
                             }
                         }
                     }
                 }
             }
         }
     } while (!$execucoesOrcamentarias['sucesso']);
     if ($numRegistrosSalvos > 0) {
         agora("\tSalvados {$numRegistrosSalvos} registro(s) da execução orçamentária do programa.");
     } else {
         agora("\tExecução orçamentária do programa sem registros.");
     }
 }