From 043430dce85113ea14e761f4beb50981778f39b8 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Wed, 9 Jul 2014 10:34:06 +0000 Subject: [PATCH] - --- ferramentas/saiku/esquemaxml.php | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------- 1 file changed, 82 insertions(+), 77 deletions(-) diff --git a/ferramentas/saiku/esquemaxml.php b/ferramentas/saiku/esquemaxml.php index 58643c5..859b9e1 100644 --- a/ferramentas/saiku/esquemaxml.php +++ b/ferramentas/saiku/esquemaxml.php @@ -74,7 +74,7 @@ gravaDados(array($stringDatasource),$nomeDatasource); if(empty($_GET["xmlesquema"])){ $m = new Metaestat(); - + // //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao // @@ -138,7 +138,7 @@ if(empty($_GET["xmlesquema"])){ $item = ""; $registros = ""; //echo "
";var_dump($regioes);exit;
-	
+
 	$xml = "";
 	//cria as dimensoes de tipo temporal
 	if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){
@@ -172,7 +172,7 @@ if(empty($_GET["xmlesquema"])){
 	//dimensoes geograficas
 	//as dimensoes sao duplicadas
 	//uma delas contem o geocodigo que permite a geracao do mapa
-	
+
 	//guarda as regioes filhas de uma determinada regiao (chave)
 	$filhosDaRegiao = array();
 	$VirtualCubeDimensionDaRegiao = array();
@@ -184,87 +184,91 @@ if(empty($_GET["xmlesquema"])){
 	}
 	$xml1 = "";
 	$xml2 = "";
+	
 	foreach($regioes as $regiao){
-		$caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
+		$sqls = array();
 		$xml1 .= "
 		
-		
+		
 		";
 		$xml2 .= "
 		
-		
+		
 		";
 		//cria uma view juntando as tabelas da hierarquia de regioes
+		$caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
+		//$caminho[] = $regiao["codigo_tipo_regiao"];
+
 		$n = count($caminho);
-		$colunas = array();
+		$regiaoAtual = $regiao;
 		$niveis1 = array();
 		$niveis2 = array();
-		$sql = "SELECT __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} AS regiao ";
-		$colunas[] = "regiao.{$regiao['identificador']} as codigo ";
-		$colunas[] = "regiao.{$regiao['colunanomeregiao']} AS nome";
-		//$colunas[] = "regiao".$regiao['identificador'];
-		$tabelaAnt = "regiao";
-	
-		for($i=0;$i<$n;$i++){
-			$r = $m->listaTipoRegiao($caminho[$i]);
-	
-			array_push($filhosDaRegiao[$caminho[$i]],$regiao["codigo_tipo_regiao"]);
-	
-			$colunas[] = "j$i.{$r['colunanomeregiao']} AS j$i{$r['colunanomeregiao']}";
-			$colunas[] = "j$i.{$r['identificador']}  AS j$i{$r['identificador']}";
-			$sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
-			AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text
-			";
-			$tabelaAnt = "j".$i;
+		$unico = "true";
+		for($j=0;$j<=$n;$j++){
+			$colunas = array();
+			$sql = "SELECT __COLUNAS__ FROM {$regiaoAtual['esquemadb']}.{$regiaoAtual['tabela']} as a$j ";
+			$colunas[] = "a$j.{$regiaoAtual['identificador']}::text as codigo ";
+			//inclui campos vazios na sequencia de campos
+			for($k=0;$k<$j;$k++){
+				$colunas[] = "''";
+				$colunas[] = "''";
+			}
+
+			$colunas[] = "a$j.{$regiaoAtual['identificador']}::text AS  {$regiaoAtual['identificador']} ";
+			$colunas[] = "a$j.{$regiaoAtual['colunanomeregiao']}::text AS {$regiaoAtual['colunanomeregiao']} ";
+
+			for($i=$j;$i<$n;$i++){
+				$r = $m->listaTipoRegiao($caminho[$i]);
+
+				if(count($colunas) > ($j + 4)){
+					$colunas[] = "''::text AS {$r['identificador']} ";
+					$colunas[] = "''::text AS {$r['colunanomeregiao']} ";
+				}
+				else{
+					$colunas[] = "b$i.{$r['identificador']}::text AS {$r['identificador']} ";
+					$colunas[] = "b$i.{$r['colunanomeregiao']}::text AS {$r['colunanomeregiao']} ";
+				}
+				//descobre a coluna de ligacao da regiao
+				$agr = $m->listaAgregaRegiaoFilho($regiaoAtual['codigo_tipo_regiao'],$r['codigo_tipo_regiao']);
+
+				$sql .= " JOIN {$r['esquemadb']}.{$r['tabela']} as b$i ON 
+					a$j.{$agr['colunaligacao_regiaopai']}::text = b$i.{$r['identificador']}::text
+				";
+			}
+
+			$colunas = implode($colunas,",");
+			$sql = str_replace("__COLUNAS__",$colunas,$sql);
+			//inclui a selecao se houver
+			if(!empty($selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]])){
+				$rs = $selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]];
+			}
+			$pos = strpos($sql, "regiao.".$rs["item"]." ");
+			if($rs != "" || !$pos === false){
+				$sql .= " WHERE regiao.".$rs["sql"];
+			}
+			$sqls[] = $sql;
+
 			$niveis1[] = "
-			
+			
 			";
-			$niveis2[] = "
-			
+			$niveis2[] = "
+			
 			";
+			$unico = "false";
+			$regiaoAtual = $m->listaTipoRegiao($caminho[$j]);
 		}
-		$niveis1[] = "
-		
-		
-		";
-		$niveis2[] = "
-		
-		";
-		//verifica outras colunas
-		$vis = $regiao['colunasvisiveis'];
-		if($vis != ""){
-			$vis = str_replace(";",",",$vis);
-			$vis = str_replace(",,",",",$vis);
-			$vis = explode(",",$vis);
-			foreach($vis as $v){
-				$colunas[] = "regiao.".$v." as ".$v;
-			}
-			$colunas = array_unique($colunas);
-		}
-		$colunas = implode($colunas,",");
-		$sql = str_replace("__COLUNAS__",$colunas,$sql);
-		//inclui a selecao se houver
-		if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]]))
-			$rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];
-		$pos = strpos($sql, "regiao.".$rs["item"]." ");
-		if($rs != "" || !$pos === false){
-			$sql .= " WHERE regiao.".$rs["sql"];
-		}
-	
+		//echo "
";echo implode("UNION\n\n",$sqls);exit;
+
 		$xml1 .= "
-		$sql
+		".implode(" UNION ",$sqls)."
 		";
 		$xml2 .= "
-		$sql
+		".implode(" UNION ",$sqls)."
 		";
+		$niveis1 = array_reverse($niveis1);
+		$niveis2 = array_reverse($niveis2);
 		$xml1 .= implode(" ",$niveis1);
 		$xml2 .= implode(" ",$niveis2);
 		$xml1 .= "
@@ -276,6 +280,8 @@ if(empty($_GET["xmlesquema"])){
 		
 		";
 	}
+	//echo header("Content-type: application/xml");
+	//echo $xml.$xml1.$xml2;exit;
 	//echo "
";var_dump($filhosDaRegiao);exit;
 	//outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
 	$parametros = $m->listaTodosParametros();
@@ -300,7 +306,7 @@ if(empty($_GET["xmlesquema"])){
 		
 		";
 		//cria uma view juntando as tabelas da hierarquia de regioes
-		$colunas = "dim.{$d['coluna']} as codigo, ";
+		$colunas = "dim.{$d['coluna']}::text as codigo, ";
 		$colunas .= "dim.{$d['coluna']} AS nome";
 		$sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo";
 		$xml3 .= "$sql";
@@ -382,7 +388,7 @@ if(empty($_GET["xmlesquema"])){
 				if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
 					$outrosParametros[] = $k;
 					$VirtualCubeDimension[] = "";
-					$u = "";
+					$u = "";
 					$dimEnsoes[] = $u;
 					array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"");
 				}
@@ -392,7 +398,7 @@ if(empty($_GET["xmlesquema"])){
 		$xml .= "
 		";
 		$incluirChaves = array("*");
-	
+
 		if(count($parComposto) > 0){
 			//$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";
 			$incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";
@@ -402,17 +408,16 @@ if(empty($_GET["xmlesquema"])){
 				//$incluirChaves[] = $o."::text as ".$o."_";
 			}
 		}
-	
-		$sql = "select ".implode(",",$incluirChaves)." from {$c["esquemadb"]}.{$c["tabela"]}";
-	
+
+		$sql = "select ".implode(",",$incluirChaves).",{$c["colunaidgeo"]}::text as codigodim from {$c["esquemadb"]}.{$c["tabela"]}";
 		$xml .= "
 		$sql
-		
-		
+		
+		
 		";
-	
+
 		$xml .= implode(" ",array_unique($dimEnsoes));
-	
+
 		//inclui cada elemento em medida
 		foreach($tb as $medida){
 			$agregador = "sum";
@@ -447,7 +452,7 @@ if(empty($_GET["xmlesquema"])){
 	//$filhosDaRegiao = array();
 	//$VirtualCubeDimensionDaRegiao = array();
 	//$VirtualCubeMeasureDaRegiao = array();
-	
+
 	foreach($regioes as $regiao){
 		//inclui os parametros para a regiao de acordo com os filhos que possui
 		$d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
@@ -466,7 +471,7 @@ if(empty($_GET["xmlesquema"])){
 	$xml .= "";
 	error_reporting(0);
 	ob_end_clean();
-	
+
 	if($_GET["output"] == "xml"){
 		echo header("Content-type: application/xml");
 		echo $xml;exit;
--
libgit2 0.21.2