<?php

class covensol_srh_c_reporte {

	function covensol_srh_c_reporte($propiedades=array()){		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// Function: srh
		// Access: public (covensol_srh_c_reporte)
		// Description: Constructor de la Clase
		// Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 04/11/2013 								
		// Fecha Última Modificación : 
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		global $ruta;
		if($ruta==''){$ruta="../";}		
		//require_once($ruta."shared/class_folder/sigesp_include.php");
		require_once($ruta."shared/class_folder/sigesp_include_covensol.php");
		$io_include=new sigesp_include_covensol();
		$io_conexion=$io_include->uf_conectar();
		//require_once($ruta."shared/class_folder/class_sql.php");
		require_once($ruta."shared/class_folder/class_sql_covensol.php");
		$this->io_sql=new class_sql_covensol($io_conexion);	
		require_once($ruta."shared/class_folder/class_mensajes.php");
		$this->io_mensajes=new class_mensajes();
		require_once($ruta."shared/class_folder/sigesp_conexiones.php");
		$this->io_conexiones=new conexiones();
		require_once($ruta."shared/class_folder/class_funciones.php");
		$this->io_funciones=new class_funciones();		
		require_once($ruta."shared/class_folder/sigesp_c_seguridad.php");
		$this->io_seguridad= new sigesp_c_seguridad();				
        $this->ls_codemp=$_SESSION["la_empresa"]["codemp"];
		$this->codemp=$_SESSION["la_empresa"]["codemp"];
		if($propiedades['habilitar_json_lib']){
			require_once($ruta.'shared/class_folder/JSON.php');
			$this->json = new JSON();
		}	
		$this->postgres_ilike = '';
		if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->postgres_ilike = 'I';}
		
		$this->EsAjax = 0;
			
		if($propiedades['RepExcel']){
			require_once($ruta.'shared/PHPExcel/Classes/PHPExcelCovensol.php');
			$this->PHPExcel = new PHPExcelCovensol();
			$this->objWriter = PHPExcel_IOFactory::createWriter($this->PHPExcel, 'Excel5');
		}
		
		require_once($ruta."shared/class_folder/grid_covensol.php");
		$this->Grid = new GridCovensol();
		
		require_once($ruta."shared/class_folder/class_numero_a_letra.php");
		$this->numalet	  = new class_numero_a_letra();		
		//$this->cfg_codsis = 'FOP';
		//$this->cfg_seccion = 'SEGURIDAD';
		//$this->cfg_type ='C';
		//$this->nominas   = $this->obtCfg('NOMINAS_PERSONAL');
		
	}
	
	function ValidarSesion($opciones = array()){
	//==========================================================================================================================
	//	Function:      ValidarSesion
	//  Elaborado por: Lic. Edgar A. Quintero U.
	//	Returns:	   
	//	Description:   Ejecuta la acción en caso de no haber obtenido las credenciales necesarias.
	//==========================================================================================================================
		if(!array_key_exists("la_logusr",$_SESSION)){
			echo '<script type="text/javascript">';			
			echo "if(window.opener!=null){opener.location.href='../sigesp_inicio_sesion.php'; window.close();}";
			echo "else{location.href='../sigesp_inicio_sesion.php';}";		
			echo '</script>';		
			return false;
		}
		return true;	
	}
	
   function cargar_seguridad($as_sistema,$as_ventanas)
   {
		$ls_empresa=$_SESSION["la_empresa"]["codemp"];
		$ls_logusr=$_SESSION["la_logusr"];
		$this->seguridad["empresa"]=$ls_empresa;
		$this->seguridad["logusr"]=$ls_logusr;
		$this->seguridad["sistema"]=$as_sistema;
		$this->seguridad["ventanas"]=$as_ventanas;
		$this->permisos="";
		$this->la_permisos = array();
		$this->la_permisos["leer"]="";
		$this->la_permisos["incluir"]="";
		$this->la_permisos["cambiar"]="";
		$this->la_permisos["eliminar"]="";
		$this->la_permisos["imprimir"]="";
		$this->la_permisos["anular"]="";
		$this->la_permisos["ejecutar"]="";
		if (array_key_exists("permisos",$_POST)||($ls_logusr=="PSEGIS"))
		{	
			if($ls_logusr=="PSEGIS")
			{
				$this->permisos="1";
				$this->la_permisos=$this->io_seguridad->uf_sss_load_permisossigesp();
			}
			else
			{
				$this->permisos=$_POST["permisos"];
				$this->la_permisos["leer"]=$_POST["leer"];
				$this->la_permisos["incluir"]=$_POST["incluir"];
				$this->la_permisos["cambiar"]=$_POST["cambiar"];
				$this->la_permisos["eliminar"]=$_POST["eliminar"];
				$this->la_permisos["imprimir"]=$_POST["imprimir"];
				$this->la_permisos["anular"]=$_POST["anular"];
				$this->la_permisos["ejecutar"]=$_POST["ejecutar"];
			}
		}
		else
		{
			$this->permisos=$this->io_seguridad->uf_sss_load_permisos($ls_empresa,$ls_logusr,$as_sistema,$as_ventanas,$this->la_permisos);
		}
		
   }// end function cargar_seguridad
   
   function guardar_seguridad($param=array()){
	   $resp = $this->io_seguridad->uf_sss_insert_eventos_ventana( $this->seguridad["empresa"],
																   $this->seguridad["sistema"],
																   $this->seguridad['evento'],
																   $this->seguridad["logusr"],
																   $this->seguridad["ventanas"],
	   															   $this->seguridad['descripcion']);
	   return true;
	   
   }
   
   function imprimir_permisos($as_permisos,$aa_permisos,$as_logusr,$as_accion)
   {
		if (($as_permisos)||($as_logusr=="PSEGIS"))
		{
			print("<input type=hidden name=permisos id=permisos value='$as_permisos'>");
			print("<input type=hidden name=leer id=leer value='$aa_permisos[leer]'>");
			print("<input type=hidden name=incluir id=incluir value='$aa_permisos[incluir]'>");
			print("<input type=hidden name=cambiar id=cambiar value='$aa_permisos[cambiar]'>");
			print("<input type=hidden name=eliminar id=eliminar value='$aa_permisos[eliminar]'>");
			print("<input type=hidden name=imprimir id=imprimir value='$aa_permisos[imprimir]'>");
			print("<input type=hidden name=anular id=anular value='$aa_permisos[anular]'>");
			print("<input type=hidden name=ejecutar id=ejecutar value='$aa_permisos[ejecutar]'>");
		}
		else
		{
			print("<script language=JavaScript>");
			print("".$as_accion."");
			print("</script>");
		}
   }// end function uf_print_permisos
   
   function obtCfg($param,$prop=array())
	{
		
		
		$prop['criterio'] = (!$prop['criterio'])?'param':$prop['criterio'];
		$this->cfg_type = $this->cfg_type?$this->cfg_type:'C';

  
		switch($prop['criterio']){					
				
				case 'param':					
					$ls_sql="SELECT value
							  FROM sigesp_config 
							 WHERE codemp='".$this->ls_codemp."' 
							   AND codsis='".$this->cfg_codsis."' 
							   AND seccion='".$this->cfg_seccion."' 
							   AND type='".$this->cfg_type."'
							   AND entry='".$param."' ";
					break;
		
		}
				
		$this->RsFopConf=$this->io_sql->select($ls_sql);
				
		if($this->RsFopConf===false)
		{
			$metodo = 'obtCfg';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
			
		return $this->RsFopConf->fields["value"];
	}
	
	function obtSegEstructuras($prop=array())
	{
					
		if(!$this->codintper){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar la seguridad de estructura. 				           			    
						<br><br><b>METODO:</b> obtSegEstructuras ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$ls_sql="SELECT codintper, enabled
				  FROM sss_permisos_internos 
				 WHERE codemp='".$this->ls_codemp."' 
				   AND codusu='".$_SESSION["la_logusr"]."' 
				   AND codsis='".$this->cfg_codsis."'
				   AND codintper='".$this->codintper."' ";
						
		$this->RsFopSeg=$this->io_sql->select($ls_sql);
				
		if($this->RsFopSeg===false)
		{
			$metodo = 'obtSegEstructuras';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		$this->FopSegEnable = $this->RsFopSeg->RecordCount()?1:0;
		
		return $this->FopSegEnable;
	}
	
	
 
   function formato_numerico_us($numero){
	
			$busca = array(".", ",");
			$sustituye   = array("", ".");
			number_format(str_replace($busca,$sustituye,$numero),2,'.','');
			return number_format(str_replace($busca,$sustituye,$numero),2,'.','');
	
	}

		
   function FormatLonCodEstPro($datos=array()){
	            
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro1'];
				$datos['codestpro1']=substr($datos['codestpro1'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro1']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro2'];
				$datos['codestpro2']=substr($datos['codestpro2'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro2']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro3'];
				$datos['codestpro3']=substr($datos['codestpro3'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro3']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro4'];
				$datos['codestpro4']=substr($datos['codestpro4'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro4']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro5'];
				$datos['codestpro5']=substr($datos['codestpro5'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro5']);
				
				return $datos;
   }
	
	function GenerarArchivoExcel($nomarch){
		header('Content-Type: application/vnd.ms-excel');
		header('Content-Disposition: attachment;filename="'.$nomarch.'.xls"');
		header('Cache-Control: max-age=0');
		$this->objWriter->save('php://output');
		exit();
	}
	
	function EncabezadoRepExcel($titulo){
			$this->PHPExcel->CeldaTitulo('A','FECHA Y HORA:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',date('d/m/Y').' - '.date('H:i'),false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->CeldaTitulo('A','USUARIO:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$_SESSION["la_logusr"],false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->CeldaTitulo('A','REPORTE:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$titulo,false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->nroFila++;	
	}
	
	function ConsultaODI($prop=array()){	
		 
		 $criterio = "";
		 
		 if(!$prop['nroreg'])
		 {				
			$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder realizar la consulta de la ODI';
			$this->io_mensajes->message($mensaje);															
			return false;
		 }
		 
		 $orden = $prop['orden']?$prop['orden']:'pn.codper';
		 		 
		 $ls_sql="  SELECT pn.codper,p.nomper,p.apeper,pn.codcar,c.descar,pn.codasicar,rac.denasicar,u.desuniadm, 
						   o.*,
						   (SELECT pe.codper 
						      FROM srh_persona_odi pe 
						     WHERE pe.codemp = o.codemp
							   AND pe.nroreg = o.nroreg
							   AND pe.tipo='E') AS codperev
					FROM srh_odi o
					INNER JOIN srh_persona_odi po ON po.codemp = o.codemp
												 AND po.nroreg = o.nroreg
												 AND po.tipo='P'
					INNER JOIN sno_personal p ON p.codemp=po.codemp AND p.codper=po.codper 
					INNER JOIN sno_personalnomina pn ON po.codemp=pn.codemp						 
										AND po.codper=pn.codper
					INNER JOIN sno_nomina n ON n.codnom = pn.codnom
								   AND n.espnom='0'
					INNER JOIN sno_cargo c ON pn.codemp = c.codemp
								AND pn.codnom = c.codnom			
								AND pn.codcar = c.codcar
					INNER JOIN sno_asignacioncargo rac ON pn.codemp = rac.codemp
										  AND pn.codnom = rac.codnom					 
									  AND pn.codasicar = rac.codasicar
					INNER JOIN sno_unidadadmin u ON pn.codemp = u.codemp
								   AND pn.minorguniadm = u.minorguniadm
								   AND pn.ofiuniadm = u.ofiuniadm
								   AND pn.uniuniadm = u.uniuniadm
								   AND pn.depuniadm = u.depuniadm
								   AND pn.prouniadm = u.prouniadm
					WHERE o.nroreg='".$prop['nroreg']."'
					ORDER BY ".$orden;
						
		$rs=$this->io_sql->select($ls_sql);
				
		if($rs===false){
			$metodo = 'ConsultaODI';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
						
		return $rs;
	}
	
	
	
	function ConsultaEvaluadorODI($prop=array()){	
		 
		 $criterio = "";
		 $metodo = 'ConsultaEvaluadorODI';
		 
		 if(!$prop['codper'])
		 {				
			$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder realizar la consulta del evaluador la ODI'.'n'.
			           'METODO: '.$metodo;
			$this->io_mensajes->message($mensaje);															
			return false;
		 }
		 
		 $orden = $prop['orden']?$prop['orden']:'p.codper';
		 		 
		 $ls_sql="  SELECT pn.codper,p.nomper,p.apeper,pn.codcar,c.descar,pn.codasicar,rac.denasicar,u.desuniadm
					FROM sno_personal p
					INNER JOIN sno_personalnomina pn ON p.codemp=pn.codemp						 
										            AND p.codper=pn.codper
					INNER JOIN sno_nomina n ON n.codnom = pn.codnom
								   AND n.espnom='0'
					INNER JOIN sno_cargo c ON pn.codemp = c.codemp
								AND pn.codnom = c.codnom			
								AND pn.codcar = c.codcar
					INNER JOIN sno_asignacioncargo rac ON pn.codemp = rac.codemp
										  AND pn.codnom = rac.codnom					 
									  AND pn.codasicar = rac.codasicar
					INNER JOIN sno_unidadadmin u ON pn.codemp = u.codemp
								   AND pn.minorguniadm = u.minorguniadm
								   AND pn.ofiuniadm = u.ofiuniadm
								   AND pn.uniuniadm = u.uniuniadm
								   AND pn.depuniadm = u.depuniadm
								   AND pn.prouniadm = u.prouniadm
					WHERE p.codemp='".$this->codemp."'
					  AND p.codper='".$prop['codper']."'
					ORDER BY ".$orden;
						
		$rs=$this->io_sql->select($ls_sql);
	    //echo $ls_sql;
		if($rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
						
		return $rs;
	}
	
	
	function ConsultaDtODI($prop=array()){	
		 
		 $criterio = "";
		 $metodo = 'ConsultaDtODI';
		 
		 if(!$prop['nroreg'])
		 {				
			$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder realizar la consulta del detalle la ODI'.'n'.
			           'METODO: '.$metodo;
			$this->io_mensajes->message($mensaje);															
			return false;
		 }
		 
		 $orden = $prop['orden']?$prop['orden']:'dto.cododi';
		 		 
		 $ls_sql="  SELECT *
					FROM srh_dt_odi dto
					WHERE dto.codemp='".$this->codemp."'
					  AND dto.nroreg='".$prop['nroreg']."'
					ORDER BY ".$orden;
						
		$rs=$this->io_sql->select($ls_sql);
	    //echo $ls_sql;
		if($rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
						
		return $rs;
	}
	
	function EncabezadoDtODI($parametro=array()){		
		
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
					    <tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="7" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado3']['tamaño'].'">					            
								<b> Registro de Objetivos de Desempeño Individual (O.D.I) </b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'" color="'.$this->RepParam['encabezado']['color_letra'].'"> Objetivo de Desempeño Individual </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'" color="'.$this->RepParam['encabezado']['color_letra'].'"> Peso </font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaDtODI($datos=array()){
			
			$fin_tabla = '</table></p>';
			
			$fin_tabla = '   <tr>
							   <td width="'.($this->RepParam['ancho'][1]).'" align="right">
								 <font size="'.$this->RepParam['encabezado']['tamaño'].'"> <b>TOTAL:</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][2]).'" align="right">
								 <font size="'.$this->RepParam['encabezado']['tamaño'].'"> '.number_format(abs($datos['total']),2,',','.').'</font>
							   </td>							   
							 </tr>							 
						   </table></p>';
			
			return $fin_tabla; 
	}
	
	function FilaDtODI($datos){			

			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="justify" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'" color="'.$this->RepParam['fila']['color_letra'].'">'.$datos['odi'].'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'" color="'.$this->RepParam['fila']['color_letra'].'">'.$datos['valor'].'</font></td>
					  </tr>';
			
			return $filas;
	}
	
	
	function InfoDtODI($datos=array()){
			 
			 $metodo = 'InfoDtODI';
			 if(!$datos['nroreg'])
			 {				
				$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder el reporte de detalle la ODI'.'n'.
						   'METODO: '.$metodo;
				$this->io_mensajes->message($mensaje);															
				return false;
			 }
			
			$resul = $this->ConsultaDtODI($datos);			
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$totales=array();
			foreach($resul as $datosFila){			               												
					$filas .= $this->FilaDtODI($datosFila);
					$totales['total'] += $datosFila['valor'];		
			}	
									
			$reporte = $this->EncabezadoDtODI().$filas.$this->FinTablaDtODI($totales);
						
			return $reporte;
	
	}
	
	function ConsultaDtRevODI($prop=array()){	
		 
		 $criterio = "";
		 $metodo = 'ConsultaDtRevODI';
		 
		 if(!$prop['nroreg'] or !$prop['fecrev'])
		 {				
			$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder realizar la consulta del detalle la revisión de la ODI'.'n'.
			           'METODO: '.$metodo;
			$this->io_mensajes->message($mensaje);															
			return false;
		 }
		 
		 $orden = $prop['orden']?$prop['orden']:'dtro.cododi';
		 //codemp, nroreg, fecrev, cododi, odi, observacion	 
		 $ls_sql="  SELECT codemp, nroreg, fecrev, cododi, odi, 
		                   (CASE observacion WHEN '3' THEN 'NO ALCANZADO'
						                    WHEN '2' THEN 'ALCANZADO'
											ELSE 'NINGUNO'
											END) AS estado
					FROM srh_dt_revisiones_odi dtro
					WHERE dtro.codemp='".$this->codemp."'
					  AND dtro.nroreg='".$prop['nroreg']."'
					  AND dtro.fecrev='".$prop['fecrev']."'
					ORDER BY ".$orden;
						
		$rs=$this->io_sql->select($ls_sql);
	    //echo $ls_sql;
		if($rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
						
		return $rs;
	}
	
	function EncabezadoDtRevODI($parametro=array()){		
		
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
					    <tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="7" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado3']['tamaño'].'">					            
								<b> '.$parametro['titulo'].' (O.D.I) </b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">	
						    <td align="center"  width="'.$this->RepParam['ancho'][0].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'" color="'.$this->RepParam['encabezado']['color_letra'].'"> Fecha </font></td>					
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'" color="'.$this->RepParam['encabezado']['color_letra'].'"> Objetivo de Desempeño Individual </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'" color="'.$this->RepParam['encabezado']['color_letra'].'"> Estado </font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaDtRevODI($datos=array()){
			
			$fin_tabla = '</table>';
			
			return $fin_tabla; 
	}
	
	function FilaDtRevODI($datos){			

			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][0].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'" color="'.$this->RepParam['fila']['color_letra'].'">'.$this->io_conexiones->formatea_fecha_normal($datos['fecrev']).'</font></td>
							<td width="'.$this->RepParam['ancho'][1].'" align="justify" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'" color="'.$this->RepParam['fila']['color_letra'].'">'.$datos['odi'].'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'" color="'.$this->RepParam['fila']['color_letra'].'">'.$datos['estado'].'</font></td>
					  </tr>';
			
			return $filas;
	}
	
	function FirmaRev(){
		
		$FirmaSello = '<table cellspacing="0" cellpadding="1" border="1">
						  <tr bgcolor="#E8F3FD">					
							<td  align="center" height="6" width="'.($this->RepParam['ancho']['total']/2).'"><font size="6">FIRMA SUPERVISOR                              FECHA:__/__/__</font></td>
							<td  align="center" height="6"  width="'.($this->RepParam['ancho']['total']/2).'"><font size="6">FIRMA SUPERVISADO                            FECHA:__/__/__</font></td>										
						  </tr>
						  <tr>
						    <td>					   
							</td>
							<td height="35" align="center">					   
							</td>						
						   </tr>				 
						</table></p>';
			return $FirmaSello;
	}
	
	
	function InfoDtRevODI($datos=array()){
			 
			 $metodo = 'InfoDtRevODI';
			 if(!$datos['nroreg'])
			 {				
				$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder generar el reporte de detalle de la revision ODI'.'n'.
						   'METODO: '.$metodo;
				$this->io_mensajes->message($mensaje);															
				return false;
			 }
			
			$rsrev = $this->ConsultaRevisionesODI($datos);
			if($rsrev===false){return false;}			
			if(!$rsrev->RecordCount()){return 0;}
			
			$i=0;
			$reporte = "";
			foreach($rsrev as $datosRev){	
			    if($i==0){$datosRev['titulo'] = 'PRIMERA REVISIÓN';}
				if($i==1){$datosRev['titulo'] = 'SEGUNDA REVISIÓN';}	
						
				$resul = $this->ConsultaDtRevODI($datosRev);			
				if($resul===false){return false;}			
				if(!$resul->RecordCount()){return 0;}
				
				$totales=array();
				$filas = "";
				foreach($resul as $datosFila){			               												
						$filas .= $this->FilaDtRevODI($datosFila);
						$totales['total'] += $datosFila['valor'];		
				}	
				
				$parametro['titulo']=$datosRev['titulo'];						
				$reporte .= $this->EncabezadoDtRevODI($parametro).$filas.$this->FinTablaDtRevODI($totales).$this->FirmaRev();
				$i++;
			}
			
						
			return $reporte;
	
	}
	
	
	function ConsultaRevisionesODI($prop=array()){	
		 
		 $criterio = "";
		 $metodo = 'ConsultaRevisionesODI';
		 
		 if(!$prop['nroreg'])
		 {				
			$mensaje = 'VALIDACIÓN DE DATOS: Faltan datos para poder realizar la consulta de revisiones de la ODI'.'\n'.
			           'METODO: '.$metodo;
			$this->io_mensajes->message($mensaje);															
			return false;
		 }
		 
		 //codemp, nroreg, fecrev, cododi, odi, observacion	 
		 $ls_sql="  SELECT nroreg, fecrev
					FROM srh_dt_revisiones_odi dtro
					WHERE dtro.codemp='".$this->codemp."'
					  AND dtro.nroreg='".$prop['nroreg']."'
					GROUP BY dtro.nroreg, dtro.fecrev
					ORDER BY dtro.nroreg, dtro.fecrev
					";
				
		$rs=$this->io_sql->select($ls_sql);
	    
		if($rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
		//print_r($rs);				
		return $rs;
	}
	
	
	function EncabezadoRepLisEvalDesemp($parametro=array()){		
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','S','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('D','EVALUACIONES '.$TxtMoneda,false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->ColorLinea('T','Z','FFDDDDDD');
		$this->PHPExcel->CeldaTitulo('W','ODI'.$TxtMoneda,false,20,'left','FFDDDDDD',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','NROEVAL',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','NROREG',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','CODPER',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','NOMBRE',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','APELLIDO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','CARGO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','UNIDAD',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','NOMINA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','FEC. EVAL',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','TOTAL ODI',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('K','TOTAL COMPE',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('L','TOTAL EVAL',true,0,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('M','ACTUACIÓN',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('N','OBS SUP',false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('O','OBS JEFE',false,20,'center','FFCCCCCC',true);
		
		$this->PHPExcel->CeldaTitulo('P','TIPO EVAL',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('Q','ESCALA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('R','VALINI',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('S','VALFIN',true,0,'center','FFCCCCCC',true);
		
		
		$this->PHPExcel->CeldaTitulo('T','NROREG ODI',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('U','FEC.ODI',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('V','ESTATUS ODI',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('W','FECINIREV1',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('X','FECFINREV1',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('Y','FECINIREV2',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('Z','FECFINREV2',true,0,'center','FFCCCCCC',true);
			
		$this->PHPExcel->nroFila++;					
		return true; 
		
	}
		
	function FilaRepLisEvalDesemp($datos){
			
			$this->PHPExcel->CeldaTitulo('A',$datos['nroeval'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('B',$datos['nroreg'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['codper'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('D',$datos['nomper'],true,0,'left');				
			$this->PHPExcel->CeldaTitulo('E',$datos['apeper'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('F',$datos['infocargo'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('G',$datos['infounidad'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('H',$datos['infonomina'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('I',$this->io_conexiones->formatea_fecha_normal($datos['fecha']),true,0,'number');			
			$this->PHPExcel->CeldaTitulo('J',$datos['totalodi'],true,0,'number');			
			$this->PHPExcel->CeldaTitulo('K',$datos['totalcompe'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('L',$datos['totalodi']+$datos['totalcompe'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('M',$datos['actuacion'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('N',$datos['obs_sup'],false,20,'number');
			$this->PHPExcel->CeldaTitulo('O',$datos['obs_jefe'],false,20,'number');
			
			$this->PHPExcel->CeldaTitulo('P',$datos['deneval'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('Q',$datos['denesc'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('R',$datos['valini'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('S',$datos['valfin'],true,0,'number');
			
			$this->PHPExcel->CeldaTitulo('T',$datos['nroreg'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('U',$this->io_conexiones->formatea_fecha_normal($datos['fecodi']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('V',$datos['denestodi'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('W',$this->io_conexiones->formatea_fecha_normal($datos['fecinirev1']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('X',$this->io_conexiones->formatea_fecha_normal($datos['fecfinrev1']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('Y',$this->io_conexiones->formatea_fecha_normal($datos['fecinirev2']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('Z',$this->io_conexiones->formatea_fecha_normal($datos['fecfinrev2']),true,0,'number');
			
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepLisEvalDesempExcel($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$rs = $this->ConsultaEvalDesemp($datos);	
			if($rs===false){return false;}			
			if(!$rs->RecordCount()){return '';}
			
			$nro=0;
			
			$totales['total_cantidad_detalle']=0;
			
			$resp = $this->EncabezadoRepLisEvalDesemp();
			if($resp===false){return false;}
			
			foreach($rs as $datosFila){
				
				$total_cantidad_detalle += $datosFila['cantidad_detalle'];
				
				$resp=$this->FilaRepLisEvalDesemp($datosFila);
				if($resp===false){return false;}	
				
			}
			
			$this->TotalRepLisEvalDesemp['total_cantidad_detalle'] += $total_cantidad_detalle;
			
							
			//$resp=$this->FinTablaRepLisEvalDesemp($totales);									
			//if($resp===false){return false;}
						
			return true;
	
	}
	
	function ConsultaEvalDesemp($datos=array()){	
		 
		$criterio = "";
		$metodo = 'ConsultaEvalDesemp';
		 
		$datos['permisos_uniadm'] = 1;
		$datos['permisos_nomina'] = 1;
		
		if($datos['permisos_uniadm']){
				$inner .= " INNER JOIN sss_permisos_especificos pe ON pe.codemp=sno_personalnomina.codemp 
																  AND pe.codperesp = sno_personalnomina.minorguniadm||sno_personalnomina.ofiuniadm||sno_personalnomina.uniuniadm||sno_personalnomina.depuniadm||sno_personalnomina.prouniadm
																  AND pe.codusu='".$_SESSION["la_logusr"]."' 
																  AND pe.codsis='SRH' 
																  AND pe.tipperesp='PERMISOS_UNIDAD_ADMINISTRATIVA' 
																  AND pe.enabled=1			             		
							 ";
		 }
		 
		 
		 if($datos['permisos_nomina']){
				$inner .= " 	INNER JOIN sss_permisos_especificos pe2 ON pe2.codemp=sno_personalnomina.codemp 
																	   AND pe2.codperesp = sno_personalnomina.codnom
																	   AND pe2.codusu='".$_SESSION["la_logusr"]."' 
																	   AND pe2.codsis='SNO' 
																	   AND pe2.tipperesp='PERMISOS_NOMINA' 
																	   AND pe2.enabled=1	             		
							 ";
		  }
		
		if($datos['fechades']){
			$criterio .= " AND (srh_evaluacion_desempeno.fecha BETWEEN  '".$this->io_conexiones->formatea_fecha_bd($datos['fechades'])."' 
																   AND '".$this->io_conexiones->formatea_fecha_bd($datos['fechahas'])."') ";
		}
		
		if($datos['codperdes']){
			$criterio .= " AND (srh_persona_evaluacion_desempeno.codper BETWEEN  '".$this->io_conexiones->formatea_fecha_bd($datos['codperdes'])."' 
																            AND '".$this->io_conexiones->formatea_fecha_bd($datos['codperhas'])."') ";
		}
		
		
					
		$ls_sql= "SELECT DISTINCT srh_evaluacion_desempeno.codemp,srh_evaluacion_desempeno.nroeval,srh_evaluacion_desempeno.
		                          fecha,srh_evaluacion_desempeno.fecinie,  
								  srh_evaluacion_desempeno.fecfine,srh_evaluacion_desempeno.revision,
								  srh_evaluacion_desempeno.totalodi,srh_evaluacion_desempeno.totalcompe,  
								  srh_evaluacion_desempeno.actuacion,srh_evaluacion_desempeno.obs_sup,
								  srh_evaluacion_desempeno.obs_jefe,srh_evaluacion_desempeno.tipo_eval, 
								  srh_persona_evaluacion_desempeno.codper,srh_persona_evaluacion_desempeno.tipo,
								  sno_personal.nomper,sno_personal.apeper, srh_tipoevaluacion.codeval,  
								  srh_tipoevaluacion.deneval,srh_tipoevaluacion.codesc,
								  MAX(sno_asignacioncargo.denasicar) as denasicar,
								  MAX(sno_cargo.descar) as descar,  
								  MAX(srh_odi.nroreg) as nroreg, 
								  MAX(srh_odi.fecha) as fecodi, 
								  MAX(srh_odi.estodi) as estodi, 
								  MAX(srh_estodi.denestodi) as denestodi,
								  MAX(fecinirev1) AS fecinirev1,
								  MAX(fecfinrev1) AS fecfinrev1,
								  MAX(fecinirev2) AS fecinirev2,
								  MAX(fecfinrev2) AS fecfinrev2,
								 (MAX(sno_personalnomina.minorguniadm)||
								  MAX(sno_personalnomina.ofiuniadm)||
								  MAX(sno_personalnomina.uniuniadm)||
								  MAX(sno_personalnomina.depuniadm)||
								  MAX(sno_personalnomina.prouniadm)) AS coduniadm,
								  (CASE WHEN MAX(sno_personalnomina.codcar) = '0000000000' THEN '('||MAX(sno_personalnomina.codasicar)||') - '||MAX(sno_asignacioncargo.denasicar)
								        ELSE '('||MAX(sno_personalnomina.codcar)||') - '||MAX(sno_cargo.descar)  
									    END ) as infocargo,
							      MAX(u.desuniadm) as infounidad,
								  '('||MAX(sno_personalnomina.codnom)||') - '||MAX(sno_nomina.desnom) as infonomina,
								  MAX(te.deneval) AS deneval,
								 MAX(eg.denesc) as denesc,
								 MAX(eg.valini) as valini,
								 MAX(eg.valfin) as valfin
				  FROM srh_evaluacion_desempeno
				  INNER JOIN srh_odi ON srh_odi.nroreg = srh_evaluacion_desempeno.nroreg
				  INNER JOIN srh_estodi ON srh_estodi.estodi=srh_odi.estodi
				  INNER JOIN srh_tipoevaluacion te ON te.codeval=srh_evaluacion_desempeno.tipo_eval
				  INNER JOIN srh_escalageneral eg ON eg.codesc=te.codesc	
				  INNER JOIN srh_persona_evaluacion_desempeno ON srh_persona_evaluacion_desempeno.nroeval = srh_evaluacion_desempeno.nroeval											                 
				  INNER JOIN srh_tipoevaluacion ON srh_tipoevaluacion.codeval = srh_evaluacion_desempeno.tipo_eval
				  INNER JOIN sno_personalnomina ON srh_persona_evaluacion_desempeno.codper=sno_personalnomina.codper
				  INNER JOIN sno_personal ON srh_persona_evaluacion_desempeno.codper=sno_personal.codper                             						
				  INNER JOIN sno_asignacioncargo ON sno_personalnomina.codasicar=sno_asignacioncargo.codasicar
												AND sno_personalnomina.codnom=sno_asignacioncargo.codnom
				  INNER JOIN sno_cargo ON sno_personalnomina.codcar=sno_cargo.codcar
									  AND sno_personalnomina.codnom=sno_cargo.codnom
				  INNER JOIN sno_nomina ON sno_nomina.codnom = sno_personalnomina.codnom
									   AND sno_nomina.espnom='0'
				  INNER JOIN sno_unidadadmin u ON sno_personalnomina.codemp = u.codemp		     
											 AND sno_personalnomina.minorguniadm = u.minorguniadm
											 AND sno_personalnomina.ofiuniadm = u.ofiuniadm
											 AND sno_personalnomina.uniuniadm = u.uniuniadm
											 AND sno_personalnomina.depuniadm = u.depuniadm
											 AND sno_personalnomina.prouniadm = u.prouniadm
				  ".$inner." 			   
				  WHERE srh_persona_evaluacion_desempeno.tipo='P' 
				  ".$criterio."				
				  GROUP BY srh_evaluacion_desempeno.codemp,srh_evaluacion_desempeno.nroeval,
				           srh_evaluacion_desempeno.fecha,srh_evaluacion_desempeno.fecinie,  
						   srh_evaluacion_desempeno.fecfine,srh_evaluacion_desempeno.revision,
						   srh_evaluacion_desempeno.totalodi,srh_evaluacion_desempeno.totalcompe,  
						   srh_evaluacion_desempeno.actuacion,srh_evaluacion_desempeno.obs_sup,
						   srh_evaluacion_desempeno.obs_jefe,srh_evaluacion_desempeno.tipo_eval,  
						   srh_persona_evaluacion_desempeno.codper,srh_persona_evaluacion_desempeno.tipo,
						   sno_personal.nomper,sno_personal.apeper, srh_tipoevaluacion.codeval,  
						   srh_tipoevaluacion.deneval,srh_tipoevaluacion.codesc,
						   srh_odi.nroreg, srh_odi.fecha, srh_odi.estodi, srh_estodi.denestodi  
				  ORDER BY srh_evaluacion_desempeno.nroeval ";
				  		
	    $rs_data=$this->io_sql->select($ls_sql);
	    
		if($rs_data===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);	
			return false;					
		}		
		//print_r($rs);				
		return $rs_data;
		
	}
	
	
}//////////////////////////////////////////////////////////////******* FIN CLASE FORMULACIÓN *******/////////////////////////////////////////////////////////


?>
