<?PHP
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */

<?
/*********************************************************************

Programa: dedurador.php
Criado em: 01/03/2010
Autor: Gustavo Moreira

Defini��o:
    Esse script verifica as s�ries hist�ricas que precisam ser calculadas e cria as respectivas
    s�ries como pendentes.


Par�metros de Entrada:

    Nenhum

Sa�da:
    Nenhum

*********************************************************************/

set_time_limit  ( 600  );

include "includes/pg_begin.php";     //carrega arquivo de conexao

function inverte_periodo($p)
{
    $aux = split("/",$p);
    if (count($aux) == 2)    
        return $aux[1] . "/" . $aux[0];
    else
        return $p;
}


include "includes/functions.php";     //carrega arquivo de funcoes

GravarLog("DEDURADOR","Inicio da Execucao",0, $dbh);

$qt = 0;

$sql = "Select i.codigoindicador, inicioseriehistorica, urlcalculador,  g.codigogranularidade, g.nomegranularidade, p.codigoperiodicidade, p.nomeperiodicidade
        From pcni_painel.indicador i
        inner join pcni_painel.indicadorgranularidade ig on i.codigoindicador = ig.codigoindicador 
        inner join pcni_painel.granularidade g on g.codigogranularidade = ig.codigogranularidade
        inner join pcni_painel.indicadorperiodicidade ip on i.codigoindicador = ip.codigoindicador
        inner join pcni_painel.periodicidade p on p.codigoperiodicidade = ip.codigoperiodicidade
        where urlcalculador is not null
        order by i.codigoindicador, g.codigogranularidade, p.codigoperiodicidade";

$result = pg_query($dbh, $sql);



while ($row = pg_fetch_array($result))
{
    //encontra a data inicial e final de acordo com o periodo (mensal, anual, etc...)
    //mensal
    if ($row["codigoperiodicidade"] == 1)
    {
        $ini = date("m/Y", strtotime($row["inicioseriehistorica"]));
        $lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));        
        $fim = date("m/Y",$lastmonth);
    }
    
    //bimestral (B1, B2, ..., B6)
    if ($row["codigoperiodicidade"] == 2)
    {
        
        $mes = date("m", strtotime($row["inicioseriehistorica"]));        
        $ini = "B" . ceil($mes/2) . "/" . date("Y", strtotime($row["inicioseriehistorica"]));
        
        $mes = date("m");
        if ($mes <= "02")
        {
          $fim = "B6/" . (date("Y")-1); 
        }
        else
          $fim = "B" . ceil(($mes-2)/2) . "/" . date("Y");
    }
    
    //trimestral (T1, T2, T3, T4)
    if ($row["codigoperiodicidade"] == 3)
    {
        
        $mes = date("m", strtotime($row["inicioseriehistorica"]));        
        $ini = "T" . ceil($mes/3) . "/" . date("Y", strtotime($row["inicioseriehistorica"]));
        
        $mes = date("m");        
        if ($mes <= "03")
        {
            $fim = "T4/" . (date("Y")-1); 
        }
        else
            $fim = "T" . ceil(($mes-3)/3) . "/" . date("Y");
    }
    
     //semestral (S1, S2)
    if ($row["codigoperiodicidade"] == 4)
    {
        
        $mes = date("m", strtotime($row["inicioseriehistorica"]));        
        $ini = "S" . ceil($mes/6) . "/" . date("Y", strtotime($row["inicioseriehistorica"]));
        
        $mes = date("m");
        if ($mes <= "06")
        {
            $fim = "S2/" . (date("Y")-1);
        }
        else
            $fim = "S" . ceil(($mes-6)/6) . "/" . date("Y");
    }
    
    
    //anual
    if ($row["codigoperiodicidade"] == 5)
    {
        $ini = date("Y", strtotime($row["inicioseriehistorica"]));        
        $fim = date("Y")-1;
    }    
    
    $ini_inv = inverte_periodo($ini);
    $fim_inv = inverte_periodo($fim);
    
    //echo "ini " .  $ini_inv . "<br>";    
    //echo "fim " . $fim_inv . "<br>";
    
    
    //do periodo inicial at� a data atual verifica se o periodo existe
    while ($ini_inv <= $fim_inv)
    {
        $encontrou = false;
        
        $periodo = $ini;
        $periodo_inv = inverte_periodo($periodo);
        
        $sql = "Select codigoindicador from seriehistorica where codigoindicador = '" . $row["codigoindicador"] . "' and valorperiodo in ('$periodo', '$periodo_inv') and  codigogranularidade = ". $row["codigogranularidade"] ;
        
        $result_aux = pg_query($dbh, $sql); 
        $encontrou = pg_num_rows($result_aux) > 0;
        
        if (!$encontrou)
        {                
            
            $sql = "Insert into seriehistorica (
                        codigoindicador,
                        codigogranularidade,
                        valorperiodo,
                        valorindicador,
                        valorgranularidade,
                        status,
                        codigoperiodicidade )
                        values (upper('" . $row["codigoindicador"]. "'), ".$row["codigogranularidade"].", '$periodo_inv', 0, '".$row["nomegranularidade"]."', 1, " . $row["codigoperiodicidade"]. " )";
            
            //echo $sql . "<br>";            
            GravarLog("DEDURADOR","Criacao de serie pendente: $sql",0, $dbh);
            
            $qt++;
            pg_query($dbh, $sql);            
            
        }
        
        //incrementar o per�odo
        //mensal
        if ($row["codigoperiodicidade"] == 1)
        {
            $aux = split("/",$ini);
            
            if ($aux[0] == "12")
            {
                $ini = "01/" . ($aux[1] + 1);
            }
            else
            {
                if ( ($aux[0] + 1) < 10)
                    $ini = "0" . ($aux[0] + 1) . "/" . $aux[1];
                else
                    $ini = ($aux[0] + 1) . "/" . $aux[1];
            }
        }
        
        //bimestral (B1, B2, ..., B6)
        if ($row["codigoperiodicidade"] == 2)
        {            
            $aux = split("/",$ini);
            
            if ($aux[0] == "B6")
            {
                $ini = "B1/" . ($aux[1] + 1);
            }
            else
            {
                $ini = "B" . ($aux[0][1] + 1) . "/" . $aux[1];
            }
        }
        
        //trimestral (T1, T2, T3, T4)
        if ($row["codigoperiodicidade"] == 3)
        {
            
            $aux = split("/",$ini);
            
            if ($aux[0] == "T4")
            {
                $ini = "T1/" . ($aux[1] + 1);
            }
            else
            {
                $ini = "T" . ($aux[0][1] + 1) . "/" . $aux[1];
            }
            
        }
        
         //semestral (S1, S2)
        if ($row["codigoperiodicidade"] == 4)
        {
            
            $aux = split("/",$ini);
            
            if ($aux[0] == "S2")
            {
                $ini = "S1/" . ($aux[1] + 1);
            }
            else
            {
                $ini = "S" . ($aux[0][1] + 1) . "/" . $aux[1];
            }
            
        }
        
        //anual
        if ($row["codigoperiodicidade"] == 5)
        {
            $ini = $ini + 1;
        }
        
        $ini_inv = inverte_periodo($ini);
        
       //echo $ini_inv . "<br>";        
       //echo "****************<br>";
    }
    
    //echo "Fim Loop <br>";    
}        
        
echo "Numero de s�ries criadas: " . $qt;

GravarLog("DEDURADOR","Termino da Execucao: Numero de series criadas: $qt",0, $dbh);

include "includes/pg_end.php";
?>