<?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>>
 */

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

Programa: ED13.PHP
Criado em: 07/05/2010
Autor: Raphael do Vale

Defini��o:
Indicador ED15 - Distribui��o do total dos professores segundo �ltimo n�vel de forma��o conclu�do


C�lculo:
(Professores por n�vel conclu�do / Total de professores) * 100

Par�metros de Entrada (via GET):

...?indicador=III&granularidade=GGG&periodo=PPP&escola=EEE
    III = no indicador, em caixa baixa, � informado o seu c�digo
    GGG = na granularidade, em caixa baixa e sem acentua��o, � informada o nome da granularidade desejada (rede ou escola)
    PPP = no periodo, em se tratando de um indicador anual, � informado o ano, no formato AAAA (exs: 2010, 2009 etc)
    EEE = codigo da escola, caso a granularidade seja de escola

Sa�da:
Formato do retorno
CCC;III;G1;PPP;VVV
CCC = c�digo de retorno da chamada ao Calculador
III = c�digo do indicador retornado, em caixa baixa
G1 = nome do gr�o retornado (string, pode estar acentuado e com letras ma�usculas e min�sculas)
PPP = Per�odo calculado
VVV = valor retornado

Exemplos de retorno:

0;ed15;REDE;2010;fundamental incompleto;20,2
0;ed15;REDE;2010;fundamental completo;20,2

Uma linha para cada n�vel de forma��o

C�digos de Retorno:

0 - Sucesso
1 - N�o tenho valor
2 - N�o sou eu
3 - Um ou mais Par�metros obrigat�rios faltando
4 - Um ou mais Par�metros fora do formato esperado
5 - Granularidade invalida


*********************************************************************/
/* PAR�METROS DE ENTRADA */
$indicador = $_GET["indicador"];
$granularidade = $_GET["granularidade"];
$periodo = $_GET["periodo"];
$semformacao = "erro";
/* VALIDAR A ENTRADA DE DADOS */
	
	$ano = date("Y");

//obrigatoriedade dos par�metros
$erro = false;
$codErro = -1;
if (($indicador == "") || ($granularidade == "") || ($periodo == ""))
{
	$erro = true;
	$codErro = 3;
}
//indicador correto
if (!$erro && strtoupper($indicador) != "ED15")
{
    $erro = true;
	$codErro = 2;
}

if (!$erro && $granularidade != "rede" && $granularidade != "escola" )
{
    $erro = true;
	$codErro = 5;	
}

$periodo = intval($periodo);
if(!$erro && ($periodo < 2009 || $periodo > 2030) )
{
	$erro = true;
	$codErro = 4;
}
if( $erro )
{
	echo "$codErro";
	exit;
}

/* INICIAR CONEX�O COM BANCO DE DADOS (CRAS) */
require "../includes/begin.php";

/* Efetuar o c�lculo */
if( $granularidade == "rede")
{
	
	$sql = "
	SELECT
		f.codformacao,f.nomeformacao, 
		count(distinct p.codprofessor)::numeric(10,2)/(
			SELECT count(*) from mat_professor where date_part('year',dataadmissaoprofessor) <= 2010 or dataadmissaoprofessor is null
		)*100 as valor
	FROM
		mat_formacaoacademica f LEFT OUTER JOIN mat_professor p
			ON(f.codformacao = p.formacaoacademicaprofessor)
	WHERE
			date_part('year',dataadmissaoprofessor) <= $periodo or dataadmissaoprofessor is null
	AND		e.coddependenciaadministrativa = 3
	GROUP BY
		f.codformacao,f.nomeformacao
	ORDER BY
		f.codformacao
	 ";
			//die(nl2br($sql));
	
	$result=executaQuery($dbh, $sql);
	
	if (pg_num_rows($result) == 0 )
	{
		echo "1";
		exit;
	}
	while( ($row = pg_fetch_array($result)) )
	{
	
		$valor = str_replace(".",",",round($row["valor"],2));
		$formacao = htmlentities($row["nomeformacao"]);
		
		//Escrever a resposta
		echo "0;ed15;$granularidade;$periodo;$formacao;$valor\n";
	}
}
else
{
	// granularidade de escola
	$sql = "
SELECT
	formacao.codescola,
	formacao.nomeescola,
	formacao.codformacao,
	formacao.nomeformacao, 
	(formacao.qtd/escola.total)*100 as valor
FROM
	(
		SELECT
			e.codescola,e.nomeescola,f.codformacao,f.nomeformacao, 
			count(*)::numeric(10,2) as qtd
		FROM
			mat_escola e LEFT OUTER JOIN \"mat_professorEscola\" pe
				ON(pe.codescola = e.codescola)
			INNER JOIN mat_professor p
				ON(pe.codprofessor = p.codprofessor)
			INNER JOIN mat_formacaoacademica f
				ON(p.formacaoacademicaprofessor = f.codformacao)

		WHERE
			date_part('year',dataadmissaoprofessor) <= $periodo or dataadmissaoprofessor is null
		AND	e.coddependenciaadministrativa = 3
		GROUP BY
			e.codescola,e.nomeescola,f.codformacao,f.nomeformacao
		ORDER BY e.nomeescola,f.codformacao
	) as formacao
	INNER JOIN
	(
		SELECT 
			ee.codescola,count(*) as total
		FROM 
			mat_escola ee INNER JOIN \"mat_professorEscola\" pep
				ON(pep.codescola = ee.codescola)
			INNER JOIN mat_professor pp
				ON(pep.codprofessor = pp.codprofessor)
		WHERE 
			date_part('year',pp.dataadmissaoprofessor) <= $periodo or pp.dataadmissaoprofessor is null
		GROUP BY ee.codescola
	) as escola 
	ON( formacao.codescola = escola.codescola )
ORDER BY formacao.codescola
	 ";
	$result=executaQuery($dbh, $sql);
	
	if (pg_num_rows($result) == 0 )
	{
		echo "1";
		exit;
	}
	while ($row = pg_fetch_array($result))
    {
        $nome = trim($row["nomeescola"]);
        $formacao = trim($row['nomeformacao']);
        
        $valor = str_replace(".",",",round($row["valor"],2));
        
        //Escrever a resposta
        echo "0;ed15;$nome;$periodo;$formacao;$valor\n";
    }
}

/* ENCERRAR CONEX�O COM BANCO DE DADOS */
include "../includes/end.php";