<?php 

function pintaTablaDinamica($resultado,$enlaces,$indices,$excepciones=NULL) {

	if($excepciones['noMostrarNegativos']) $noMostrarNegativos=true; else $noMostrarNegativos=false;
	
	//echo '<p>Indices:</p>';
	//print_r($indices);
	//echo "<hr>";

	/////////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////////
	
	$estructura=$resultado[0]['Grid']['DefinicionColumnas'];
	$datos=$resultado[0]['Grid']['Filas'];
	
	$columnas=array();
	$columnasNoVisibles=array(); //Utilizamos las columnas no visibles para datos que, despues, deberemos gestionar para otras pantallas
	$maxOrdenTabulacion=0;
	
	$tiposDatosProxium=unserialize(TIPOSDATOSPROXIUM);
	
	foreach($estructura['DefColumna'] as $columna) {
	
		//echo '<p>Columna cabecera:</p>';
		//print_r($columna);
		//echo "<hr>";
	
		$columnas[]=array(
				'visible'=>($columna['Visible']!='N'),
				'cabecera'=>$columna['Descripcion'],
				'alineacion'=>$columna['Alineacion'],
				'tipo'=>$tiposDatosProxium[$columna['Tipo']],
				'ordenTabulacion'=>$columna['OrdenTabulacion'],
				'orden'=>$columna['Orden'] //En este caso, la relación entre cabeceras y campos (para filtros) ya no lleva atributo (nombre campo), usamos el orden de campo
		);
		
		if($columna['OrdenTabulacion']>$maxOrdenTabulacion) $maxOrdenTabulacion=$columna['OrdenTabulacion'];
	
	}
	
	//print_r($columnas);
	
	//ORDENACION SEGUN CAMPO "ordenTabulacion"
	
	$tempColumnas=array();
	
	for($i=1;$i<=$maxOrdenTabulacion;$i++) {
	
		//creamos un array con todas las columnas que tengan el orden tabulación $i
		$columnasConTabulacion=array();
		foreach($columnas as $columna) if($columna['ordenTabulacion']==$i) $columnasConTabulacion[]=$columna;
		
		//reordenamos las obtenidas, según el campo "orden"
		$temp=array();
		foreach ($columnasConTabulacion as $clave => $columna) {
			$temp[$clave] = $columna['orden'];
		}
		array_multisort($temp,SORT_ASC,$columnasConTabulacion);
		
		//las pasamos todas en ese orden al array temporal que estamos construyendo
		foreach($columnasConTabulacion as $columna) $tempColumnas[]=$columna;
	}
	
	$columnas=$tempColumnas;
	
	
	//Gestionamos el contenido de la tabla
	
	$tempContenido=array();
		
	//Importante por el problema del XML de un solo resultado, arreglaArrayPXMobileProxiumResult aqui no funciona porque es un nivel inferior
	if(key($datos['Fila'])=='0') $datos=$datos['Fila'];
	
	foreach($datos as $fila) {
			
		$nuevaFila=array();
		$nuevaFila['datos']=array();
			
		foreach($columnas as $indice=>$columna) {
			
			$valor='';
				
			//Buscamos el dato en la fila
			foreach($fila['DatosColumnas']['Columna'] as $campo) {
				if($campo['Orden']==$columna['orden']) $valor=$campo['Dato'];
			}
			
			if( $columna['tipo']=='numero' ) {
			
				$valorNumerico=str_replace('.','',$valor);
				$valorNumerico=str_replace(',','.',$valorNumerico);
				$valorNumerico=(float)$valorNumerico;
				
				if( $noMostrarNegativos && $valor<0 ) $valor='';
			
			}
			
			
				
			$nuevaFila['datos'][]=array(
				'visible'=>$columna['visible'],
				'contenido'=>$valor,
				'alineacion'=>$columna['alineacion'],
				'tipo'=>$columna['tipo'],
				'orden'=>$columna['orden']
			);
				
		}
			
		//Gestión del contenido si lleva documentos
		$documentos=arreglaArrayPXMobileProxiumResult($fila['Documentos']);	
		if(count($documentos)>0) {
			$nuevaFila['documentos']=array();
			foreach($documentos as $documento) $nuevaFila['documentos'][]=$documento;
		}	
		
		$tempContenido[]=$nuevaFila;
	}
	
	$contenidoTabla=$tempContenido;
	
	//echo '<hr>';
	//print_r($columnas);
	//echo '<hr>';
	//print_r($contenidoTabla);
	//echo '<hr>';
	
	/////////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////////////////
	
	
	if( !$resultado[0]['Error'] && count($contenidoTabla)>0 ) {
	
		?>
		
		<table class="tablaFormateada anchoMaximo">
		
			<tr style="white-space:nowrap">
            
				<?php foreach($columnas as $encabezado) if($encabezado['visible']) { ?>
                
                <?php //print_r($encabezado); echo '<hr>'; ?>
                
				<th><?php echo $encabezado['cabecera']; ?></th>
				
				<?php } ?>
                
			</tr>
	
		<?php foreach($contenidoTabla as $fila) { ?>
		
			<?php //print_r($fila); echo '<hr>'; ?>
		
			<tr
            	class="lineaTabla <?php if($enlaces) { ?>clicable<?php } ?>"
                style="height:75px"
                <?php foreach($fila['datos'] as $columna) if(array_key_exists($columna['orden'],$indices)) { ?>
                <?php echo $indices[$columna['orden']]; ?>="<?php echo $columna['contenido']; ?>"
                <?php } ?>
            >
				<?php foreach($fila['datos'] as $indice=>$columna) if($columna['visible']) { ?>
				<td align="<?php echo $columna['alineacion']; ?>"><?php echo $columna['contenido']; ?></td>
				<?php } ?>
			</tr>
		
		<?php } ?>
		
		</table>
        
       <?php return true; ?> 
   
    <?php } else return false;//Fin si hay resultado ?>
    
    
<?php } //Fin funcion contructora tabla dinamica ?>