<?php 
	
	// Archivo de conexión a la base de datos
	require_once "conexion.php";
	class ModeloAdministracion extends ModeloConexion {

		/*=================================================================================
		CONSULTA USUARIOS (Responsables)
		==================================================================================*/
		protected function mdlConsultaUsuarios(){

			$query = "SELECT * FROM sie_usuarios WHERE estado = 1 ORDER BY nombres ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		} 

		/*=================================================================================
		CONSULTA USUARIOS (Responsables)
		==================================================================================*/
		protected function mdlConsultaUsuariosId($id_usuario){

			$query = "SELECT * FROM sie_usuarios WHERE id = '$id_usuario'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA PROCESOS
		==================================================================================*/
		protected function mdlConsultaProcesos(){

			$query = "SELECT * FROM sie_procesos WHERE proceso_sie = 1 ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA OPCIONES DE PROCESO
		==================================================================================*/
		protected function mdlConsultaOpcionesProcesos(){

			$query = "SELECT descripcion, icono, href, count(descripcion) cantidad FROM sie_opciones_procesos GROUP BY descripcion HAVING cantidad > 1";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		REGISTRA OPCIONES DE PROCESO
		==================================================================================*/
		protected function mdlRegistraOpcionProceso($descripcion, $consultaUltimoProceso, $estado, $id_usuario_crea, $icono, $href){

			$fecha_actual = date('Y-m-d H:i:s');

			$query = "INSERT INTO sie_opciones_procesos (descripcion, id_proceso, estado, fecha_creacion, id_usuario_crea, id_usuario_inactiva, icono, href)VALUES('$descripcion', '$consultaUltimoProceso', '$estado', '$fecha_actual', '$id_usuario_crea', '$id_usuario_crea', '$icono', '$href')";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $query;	

		}

		/*=================================================================================
		CONSULTA ICONOS
		==================================================================================*/
		protected function mdlConsultaIconos(){

			$query = "SELECT * FROM sie_iconos ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA MACRO PROCESOS
		==================================================================================*/
		protected function mdlConsultaMacroProcesos(){

			$query = "SELECT * FROM sie_macroprocesos ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA MACRO PROCESO
		==================================================================================*/
		protected function mdlConsultaMacroProceso($id_macro_proceso){

			$query = "SELECT * FROM sie_macroprocesos WHERE id = '$id_macro_proceso'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	
		} 

		/*=================================================================================
		CONSULTA PERFILES
		==================================================================================*/
		protected function mdlConsultaPerfiles(){

			$query = "SELECT * FROM sie_perfiles ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	
		} 


		protected function mdlRegistraSiePermiso($datos, $id_perfil, $id_proceso){

			$query = "INSERT INTO sie_permisos (id_perfil, id_proceso, activo, fecha_concedido, id_usuario_concede, fecha_denegado, id_usuario_deniega)VALUES(:id_perfil, :id_proceso, :activo, :fecha_concedido, :id_usuario_concede, :fecha_denegado, :id_usuario_deniega)";

			$sql = ModeloConexion::conectardb()->prepare($query);

			$sql->bindParam(':id_perfil', $id_perfil);
			$sql->bindParam(':id_proceso', $id_proceso);
			$sql->bindParam(':activo', $datos['activo']);
			$sql->bindParam(':fecha_concedido', $datos['fecha']);
			$sql->bindParam(':id_usuario_concede', $datos['id_usuario_crea']);
			$sql->bindParam(':fecha_denegado', $datos['fecha']);
			$sql->bindParam(':id_usuario_deniega', $datos['id_usuario_crea']);

			$sql->execute();

			return $sql;

		}

		protected function mdlConsultaUltimoProceso(){

			$query = "SELECT MAX(id) AS ultimo_proceso FROM sie_procesos";

			$sql = ModeloConexion::conectardb()->prepare($query);

			$sql->execute();

			$resultado = $sql->fetch(PDO::FETCH_ASSOC);

			return $resultado['ultimo_proceso'];

		}

		 

		protected function mdlRegistraProceso($datos){

			$query = "INSERT INTO sie_procesos(descripcion, id_macro_proceso, estado, id_responsable, objetivo, fecha_creacion, id_usuario_crea, proceso_sie, id_usuario_inactiva, icono, href)VALUES(:descripcion, :id_macro_proceso, :estado, :id_responsable, :objetivo, :fecha_creacion, :id_usuario_crea, :proceso_sie, :id_usuario_inactiva, :icono, :href)";

			$sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':descripcion', $datos['descripcion_proceso']);
		    $sql->bindParam(':id_macro_proceso', $datos['macro_proceso']);
		    $sql->bindParam(':estado', $datos['estado_proceso']);
		    $sql->bindParam(':id_responsable', $datos['responsable_proceso']);
		    $sql->bindParam(':objetivo', $datos['objetivo']);
		    $sql->bindParam(':fecha_creacion', $datos['fecha']);
		    $sql->bindParam(':id_usuario_crea', $datos['id_usuario_crea']);
		    $sql->bindParam(':proceso_sie', $datos['proceso_sie']);
		    $sql->bindParam(':id_usuario_inactiva', $datos['id_usuario_inactiva']);
		    $sql->bindParam(':href', $datos['href']);
		    $sql->bindParam(':icono', $datos['icono']);

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'INSERT INTO sie_procesos(descripcion, id_macro_proceso, estado, id_responsable, objetivo, fecha_creacion, id_usuario_crea, proceso_sie, id_usuario_inactiva, href, icono)VALUES(|'.$datos['descripcion_proceso'].'|, '.$datos['macro_proceso'].', '.$datos['estado_proceso'].', '.$datos['responsable_proceso'].', |'.$datos['objetivo'].'|, |'.$datos['fecha'].'|, '.$datos['id_usuario_crea'].', '.$datos['proceso_sie'].', '.$datos['id_usuario_crea'].', |'.$datos['href'].'|)';

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestion de procesos'), $query_log, $datos['id_usuario_crea'], $datos['fecha']);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		CONSULTA PROCESO ID
		==================================================================================*/
		protected function mdlConsultaDatosProceso($id){

			$query = "SELECT * FROM sie_procesos WHERE id = '$id'";

			$sql = ModeloConexion::conectardb()->prepare($query);

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROCESO descripción
		==================================================================================*/
		protected function mdlConsultaDatosProcesoDescripcion($descripcion){

			$query = "SELECT * FROM sie_procesos WHERE descripcion = '$descripcion'";

			$sql = ModeloConexion::conectardb()->prepare($query);

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA USUARIO MEDIANTE EL CORREO ELECTRONICO
		==================================================================================*/
		protected function mdlConsultaUsuarioCorreo($correo){

			$query = "SELECT * FROM sie_usuarios WHERE correo = :correo_";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':correo_', $correo);

		    $sql->execute();

		    return $sql;	

		}

		/*=================================================================================
		CONSULTA USUARIO
		==================================================================================*/
		protected function mdlConsultaUsuario($nombre){

			$query = "SELECT * FROM sie_usuarios WHERE nombres LIKE '%$nombre%'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		}


		protected function mdlActualizaProceso($datos){

			if($datos['admin_estado_proceso'] == 0){

				$query = "UPDATE sie_procesos SET id_macro_proceso = :id_macro_proceso, objetivo = :objetivo, estado = :estado, id_responsable = :id_responsable, fecha_inactivacion = :fecha_inactivacion, id_usuario_inactiva = :id_usuario_inactiva, icono = :icono WHERE id = :proceso";	

				$sql = ModeloConexion::conectardb()->prepare($query);

				$sql->bindParam(":id_macro_proceso", $datos['id_macro_proceso']);
				$sql->bindParam(":objetivo", $datos['objetivo']);
				$sql->bindParam(":estado", $datos['estado']);
				$sql->bindParam(":id_responsable", $datos['id_responsable']);
				$sql->bindParam(":fecha_inactivacion", $datos['fecha']);
				$sql->bindParam(":id_usuario_inactiva", $datos['id_usuario']);
				$sql->bindParam(":proceso", $datos['proceso']);
				$sql->bindParam(":icono", $datos['icono']);
			
			}else{

				$query = "UPDATE sie_procesos SET id_macro_proceso = :id_macro_proceso, objetivo = :objetivo, estado = :estado, id_responsable = :id_responsable WHERE id = :proceso";	

				$sql = ModeloConexion::conectardb()->prepare($query);

				$sql->bindParam(":id_macro_proceso", $datos['id_macro_proceso']);
				$sql->bindParam(":objetivo", $datos['objetivo']);
				$sql->bindParam(":estado", $datos['estado']);
				$sql->bindParam(":id_responsable", $datos['id_responsable']);
				$sql->bindParam(":proceso", $datos['proceso']);
				$sql->bindParam(":icono", $datos['icono']);
			}

			// El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'UPDATE sie_procesos SET id_macro_proceso = |'.$datos['id_macro_proceso'].'|, objetivo = |'.$datos['objetivo'].'|, estado = |'.$datos['estado'].'|, id_responsable = |'.$datos['id_responsable'].'| WHERE id = '.$datos['proceso'];

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestion de zonas'), $query_log, $datos['id_usuario'], $datos['fecha']);

		    $sql->execute();

		    return $sql;	

		}


		/*=================================================================================
		CONSULTA INDICADORES
		==================================================================================*/
		protected function mdlConsultaIndicadoresActivos(){

			$query = "SELECT * FROM sie_indicadores /*WHERE estado = 1*/ ORDER BY nombre ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA INDICADOR (nombre)
		==================================================================================*/
		protected function mdlConsultaKPI($nombre_indicador){

			$query = "SELECT * FROM sie_indicadores WHERE nombre = '$nombre_indicador' AND estado = 1";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA INDICADOR (id)
		==================================================================================*/
		protected function mdlConsultaIndicador($id_indicador){

			$query = "SELECT * FROM sie_indicadores WHERE id = '$id_indicador'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA INDICADOR RESULTADOS
		==================================================================================*/
		protected function mdlConsultaIndicadorResultado($id_indicador){
			
			$query = "SELECT * FROM sie_indicadores i LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id WHERE i.id = '$id_indicador' AND pin.ano = YEAR(NOW())";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		}
		
		/*=================================================================================
		ELIMINA PERIODOS DE UN INDICADOR
		==================================================================================*/
		protected function mdlEliminaPeriodicidad($id_indicador, $id_usuario){

			$query = "DELETE FROM sie_periodos_indicadores WHERE id_indicador = '$id_indicador' AND ano = YEAR(NOW())";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'DELETE FROM sie_periodos_indicadores WHERE id_indicador = '.$id_indicador.' AND ano = YEAR(NOW())';

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestión de KPI - Crear-Editar KPI'), $query_log, $id_usuario, date('Y-m-d H:i:s'));


		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		CONSULTA TIPOS DE INDICADOR ACTIVOS
		==================================================================================*/
		protected function mdlConsultaTiposIndicadorActivos(){

			$query = "SELECT * FROM sie_tipo_indicadores ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA PERIODICIDAD DE INDICADORES
		==================================================================================*/
		protected function mdlConsultaPeriodicidadIndicadores(){

			$query = "SELECT * FROM sie_periodicidad_indicadores ORDER BY periodicidad ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		REGISTRA INDICADOR
		==================================================================================*/
		protected function mdlRegistraIndicador($datos){

			$query = "INSERT INTO sie_indicadores(nombre, formula, id_proceso, id_responsable, id_tipo, id_periodicidad, meta, gestion_alto, gestion_medio, gestion_bajo, estado, fecha_creacion, usuario_crea)VALUES(:v_nombre, :v_formula, :v_id_proceso, :v_id_responsable, :v_id_tipo, :v_id_periodicidad, :v_meta, :v_gestion_alto, :v_gestion_medio, :v_gestion_bajo, :v_estado, :v_fecha_creacion, :v_usuario_crea)";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':v_nombre', $datos['m_indicador']);
		    $sql->bindParam(':v_formula', $datos['m_formula']);
		    $sql->bindParam(':v_id_proceso', $datos['m_id_proceso']);
		    $sql->bindParam(':v_id_responsable', $datos['m_id_responsable']);
		    $sql->bindParam(':v_id_tipo', $datos['m_tipo_indicador']);
		    $sql->bindParam(':v_id_periodicidad', $datos['m_periodicidad']);
		    $sql->bindParam(':v_meta', $datos['m_meta']);
		    $sql->bindParam(':v_gestion_alto', $datos['m_gestion_alto']);
		    $sql->bindParam(':v_gestion_medio', $datos['m_gestion_medio']);
		    $sql->bindParam(':v_gestion_bajo', $datos['m_gestion_bajo']);
		    $sql->bindParam(':v_estado', $datos['m_estado']);
		    $sql->bindParam(':v_fecha_creacion', $datos['fecha']);
		    $sql->bindParam(':v_usuario_crea', $datos['id_usuario_crea']);

		    $sql->execute();

		    return $sql;	

		}

		/*=================================================================================
		CONSULTA ULTIMO INDICADOR REGISTRADO
		==================================================================================*/
		protected function mdlConsultaUltimoIndicador(){

			$query = "SELECT MAX(id) AS ultimo_indicador FROM sie_indicadores";

			$sql = ModeloConexion::conectardb()->prepare($query);

			$sql->execute();

			$resultado = $sql->fetch(PDO::FETCH_ASSOC);

			return $resultado['ultimo_indicador'];

		}

		protected function registraPeriodoIndicador($datos, $ultimoIndicador, $periodo, $mes, $ano){

			$query = "INSERT INTO sie_periodos_indicadores(id_indicador, id_periodicidad, periodo, ano, mes, id_usuario_registro_resultado, meta) VALUES (:id_indicador, :id_periodicidad, :periodo, :ano, :mes, :id_usuario_registro_resultado, :meta)";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':id_indicador', $ultimoIndicador);
		    $sql->bindParam(':id_periodicidad', $datos['m_periodicidad']);
		    $sql->bindParam(':periodo', $periodo);
		    $sql->bindParam(':ano', $ano);
		    $sql->bindParam(':mes', $mes);
		    // $sql->bindParam(':fecha_registro_resultado', $datos['fecha']);
		    $sql->bindParam(':id_usuario_registro_resultado', $datos['id_usuario_crea']);
		    $sql->bindParam(':meta', $datos['m_meta']);

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'INSERT INTO sie_periodos_indicadores(id_indicador, id_periodicidad, periodo, ano, id_usuario_registro_resultado, meta) VALUES ('.$ultimoIndicador.', '.$datos['m_periodicidad'].', '.$periodo.', '.$ano.', '.$mes.', '.$datos['id_usuario_crea'].', '.$datos['m_meta'].')';

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestión de zonas'), $query_log, $datos['id_usuario'], $datos['fecha']);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		EDITAR INDICADOR
		==================================================================================*/
		protected function mdlEditaIndicador($datos){

			if($datos['estado'] == 0){
				// Si el estado recibido es 0 (inactivo), tomamos en cuenta la fecha_inactiva y el usuario que inactiva

				$query = "UPDATE sie_indicadores SET formula = :v_formula, id_proceso = :v_id_proceso, id_responsable = :v_id_responsable, id_tipo = :v_id_tipo, id_periodicidad = :v_id_periodicidad, meta = :v_meta, gestion_alto = :v_gestion_alto, gestion_medio = :v_gestion_medio, gestion_bajo = :v_gestion_bajo, estado = :v_estado, fecha_inactiva = :v_fecha_inactiva, usuario_inactiva = :v_usuario_inactiva WHERE id = :v_indicador";

			    $sql = ModeloConexion::conectardb()->prepare($query);

			    $sql->bindParam(':v_indicador', $datos['indicador']);
			    $sql->bindParam(':v_formula', $datos['formula']);
			    $sql->bindParam(':v_id_proceso', $datos['id_proceso']);
			    $sql->bindParam(':v_id_responsable', $datos['admin_id_responsable_indicador']);
			    $sql->bindParam(':v_id_tipo', $datos['tipo_indicador']);
			    $sql->bindParam(':v_id_periodicidad', $datos['m_periodicidad']);
			    $sql->bindParam(':v_meta', $datos['m_meta']);
			    $sql->bindParam(':v_gestion_alto', $datos['gestion_alto']);
			    $sql->bindParam(':v_gestion_medio', $datos['gestion_medio']);
			    $sql->bindParam(':v_gestion_bajo', $datos['gestion_bajo']);
			    $sql->bindParam(':v_estado', $datos['estado']);
			    $sql->bindParam(':v_fecha_inactiva', $datos['fecha']);
			    $sql->bindParam(':v_usuario_inactiva', $datos['id_usuario_crea']);

			}else{
				// Si el estado recibido es 1 (activo), no es necesario actualizar fecha_inactiva y usuario inactiva

				$query = "UPDATE sie_indicadores SET formula = :v_formula, id_proceso = :v_id_proceso, id_responsable = :v_id_responsable, id_tipo = :v_id_tipo, id_periodicidad = :v_id_periodicidad, meta = :v_meta, gestion_alto = :v_gestion_alto, gestion_medio = :v_gestion_medio, gestion_bajo = :v_gestion_bajo, estado = :v_estado WHERE id = :v_indicador";

			    $sql = ModeloConexion::conectardb()->prepare($query);

			    $sql->bindParam(':v_indicador', $datos['indicador']);
			    $sql->bindParam(':v_formula', $datos['formula']);
			    $sql->bindParam(':v_id_proceso', $datos['id_proceso']);
			    $sql->bindParam(':v_id_responsable', $datos['admin_id_responsable_indicador']);
			    $sql->bindParam(':v_id_tipo', $datos['tipo_indicador']);
			    $sql->bindParam(':v_id_periodicidad', $datos['m_periodicidad']);
			    $sql->bindParam(':v_meta', $datos['m_meta']);
			    $sql->bindParam(':v_gestion_alto', $datos['gestion_alto']);
			    $sql->bindParam(':v_gestion_medio', $datos['gestion_medio']);
			    $sql->bindParam(':v_gestion_bajo', $datos['gestion_bajo']);
			    $sql->bindParam(':v_estado', $datos['estado']);
			    // $sql->bindParam(':v_fecha_inactiva', $datos['fecha']);
			    // $sql->bindParam(':v_usuario_inactiva', $datos['id_usuario_crea']);

			}

		    $sql->execute();

		    return $sql;	


		}

		/*=================================================================================
		CONSULTA TIPOS DE ZONA
		==================================================================================*/
		protected function mdlConsultaTiposzona(){

			$query = "SELECT * FROM sie_tipo_zonas ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		CONSULTA ZONAS
		==================================================================================*/
		protected function mdlConsultaZona(){

			$query = "SELECT * FROM sie_zonas WHERE estado = 1 ORDER BY descripcion ASC";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;	

		} 

		/*=================================================================================
		REGISTRA ZONAS
		==================================================================================*/
		protected function mdlRegistraZona($datos){

			$query = "INSERT INTO sie_zonas(descripcion, id_tipo, latitud, longitud, estado)VALUES(:v_descripcion, :v_id_tipo, :v_latitud, :v_longitud, :v_estado)";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':v_descripcion', $datos['descripcionzona']);
		    $sql->bindParam(':v_id_tipo', $datos['tipozona']);
		    $sql->bindParam(':v_latitud', $datos['latitud']);
		    $sql->bindParam(':v_longitud', $datos['longitud']);
		    $sql->bindParam(':v_estado', $datos['estado']);

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'INSERT INTO sie_zonas(descripcion, id_tipo, latitud, longitud, estado)VALUES(|'.$datos['descripcionzona'].'|, '.$datos['tipozona'].', |'.$datos['latitud'].'|, |'.$datos['longitud'].'|, |'.$datos['estado'].'|)';

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestión de zonas'), $query_log, $datos['id_usuario'], $datos['fecha']);

		    $sql->execute();

		    return $sql;	

		}

		/*=================================================================================
		CONSULTA UNA ZONA EN ESPECIFICO DE A CUERDO AL A IDENTIFICADOR DE ZONA  QUE RECIBE. 
		==================================================================================*/
		protected function mdlConsultaZonaId($id_zona){

			$query = "SELECT * FROM sie_zonas WHERE id = '$id_zona'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		ACTUALIZA ZONA 
		==================================================================================*/
		protected function mdlEditaZona($datos){

			$query = "UPDATE sie_zonas SET descripcion = :v_descripcion, id_tipo = :v_id_tipo, latitud = :v_latitud, longitud = :v_longitud, estado = :v_estado WHERE id = :v_id_zona";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':v_id_zona', $datos['id_zona']);
		    $sql->bindParam(':v_descripcion', $datos['descripcionzona']);
		    $sql->bindParam(':v_id_tipo', $datos['tipozona']);
		    $sql->bindParam(':v_latitud', $datos['latitud']);
		    $sql->bindParam(':v_longitud', $datos['longitud']);
		    $sql->bindParam(':v_estado', $datos['estado']);
		    $sql->execute();

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'UPDATE sie_zonas SET descripcion = |'.$datos['descripcionzona'].'|, id_tipo = '.$datos['tipozona'].', latitud = |'.$datos['latitud'].'|, longitud = |'.$datos['longitud'].'|, estado = |'.$datos['estado'].'| WHERE id = '.$datos['id_zona'];

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestión de zonas'), $query_log, $datos['id_usuario'], $datos['fecha']);

		    return $sql;

		}

		/*=================================================================================
		CONSULTA KPI QUE COINCIDAN CON LA DESCRIPCIÓN RECIBIDA 
		==================================================================================*/
		protected function mdlConsultaIndicadorDescripcion($descripcion, $id_proceso, $id_perfil){

			if($id_perfil == 11 || $id_perfil == 16){

				$query = "SELECT * FROM sie_indicadores WHERE nombre LIKE '%".$descripcion."%'";				

			}else if(trim($descripcion) != ""){

				$query = "SELECT * FROM sie_indicadores WHERE id_proceso = '$id_proceso' AND nombre LIKE '%".$descripcion."%'";
			
			}else{

				$query = "SELECT * FROM sie_indicadores WHERE id_proceso = '$id_proceso'";

			}

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		CONSULTA DATOS DE UN INDICADOR MEDIANTE EL ID QUE RECIBE
		==================================================================================*/
		protected function mdlConsultaIndicadorId($id){

			$query = "SELECT * FROM sie_indicadores WHERE id = '$id'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		CONSULTA KPI QUE COINCIDAN CON LA DESCRIPCIÓN RECIBIDA 
		==================================================================================*/
		protected function mdlConsultaResultadosIndicador($id, $fecha_desde, $fecha_hasta){

			$query = "SELECT i.id AS id_indicador, i.nombre, p.descripcion AS desc_proceso, pin.id AS id_periodo_indicador, pin.periodo, pin.resultado, pin.id_usuario_registro_resultado, pin.fecha_registro_resultado, i.estado, i.meta, i.gestion_alto, i.gestion_medio, i.gestion_bajo FROM sie_indicadores i 
				LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id
				LEFT JOIN sie_procesos p ON p.id = i.id_proceso
				LEFT JOIN sie_periodicidad_indicadores per ON per.id = i.id_periodicidad
				WHERE i.id = '$id' AND i.fecha_creacion >= '2021-01-01' AND i.fecha_creacion <= '2021-05-05'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}

		/*=================================================================================
		REGISTRA RESULTADO DE UN INDICADOR
		==================================================================================*/
		protected function mdlRegistraResultadosIndicador($datos){

			$query = "UPDATE sie_periodos_indicadores SET fecha_registro_resultado = :v_fecha_registro_resultado, id_usuario_registro_resultado = :v_id_usuario_registro_resultado, resultado = :v_resultado WHERE id = :v_id_result";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->bindParam(':v_id_usuario_registro_resultado', $datos['id_usuario']);
		    $sql->bindParam(':v_resultado', $datos['resultado']);
		    $sql->bindParam(':v_id_result', $datos['id_result']);
		    $sql->bindParam(':v_fecha_registro_resultado', $datos['fecha']);

		    // El siguinte $query_log es utilizado para registrar auditoria en la tabla sie_log_transacciones.
			$query_log = 'UPDATE sie_periodos_indicadores SET fecha_registro_resultado = |'.$datos['fecha'].'|, id_usuario_registro_resultado = '.$datos['id_usuario'].', resultado = '.$datos['resultado'].' WHERE id = '.$datos['id_result'];

			$registraAuditoria = ModeloConexion::registraAuditoria(utf8_decode('Gestión de KPI - Registrar resultados'), $query_log, $datos['id_usuario'], $datos['fecha']);


		    $sql->execute();

		    return $sql;

		}


		/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
		==================================================================================*/
		protected function mdlAgrupaIndicadorGrafica($fecha_desde, $fecha_hasta, $id_proceso, $id_proceso_actual, $id_perfil){

			$ano_desde = substr($fecha_desde, 0, 4);

			$mes_desde = substr($fecha_desde, 5, 7);

			$ano_hasta = substr($fecha_hasta, 0, 4);

			$mes_hasta = substr($fecha_hasta, 5, 7);

			$query = "SELECT i.id AS id_indicador, i.nombre, i.meta, pin.periodo, pin.resultado, p.id AS id_proceso FROM sie_indicadores i
						LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id 
						LEFT JOIN sie_procesos p ON p.id = i.id_proceso
						WHERE pin.ano >= '$ano_desde' AND pin.ano <= '$ano_hasta' AND pin.mes >= '$mes_desde' AND pin.mes <= '$mes_hasta' AND p.id = '$id_proceso' AND per.id_perfil = '$id_perfil' GROUP BY i.id";

			// if($fecha_desde != "" && $fecha_hasta != "" && $id_proceso != ""){
				
			// 	$query = "SELECT i.id AS id_indicador, i.nombre, i.meta, pin.periodo, pin.resultado, p.id AS id_proceso FROM sie_indicadores i
			// 		  LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id 
			// 		  LEFT JOIN sie_procesos p ON p.id = i.id_proceso
			// 		  LEFT JOIN sie_permisos per ON per.id_proceso = p.id 
			// 		  WHERE pin.ano >= '$ano_desde' AND pin.ano <= '$ano_hasta' AND pin.mes >= '$mes_desde' AND pin.mes <= '$mes_hasta' AND p.id = '$id_proceso' 
			// 		  AND per.id_perfil = '$id_perfil' GROUP BY i.id";

			// }else{

			// 	$query = "SELECT i.id AS id_indicador, i.nombre, i.meta, pin.periodo, pin.resultado, p.id AS id_proceso FROM sie_indicadores i
			// 		  LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id 
			// 		  LEFT JOIN sie_procesos p ON p.id = i.id_proceso
			// 		  LEFT JOIN sie_permisos per ON per.id_proceso = p.id 
			// 		  WHERE pin.ano >= '$ano_desde' AND pin.ano <= '$ano_hasta' AND pin.mes >= '$mes_desde' AND pin.mes <= '$mes_hasta' AND p.id = '$id_proceso' 
			// 		  AND per.id_perfil = '$id_perfil' GROUP BY i.id";
				
			// }

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}

				/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
		==================================================================================*/
		protected function mdlConsultaIndicadorGrafica($fecha_desde, $fecha_hasta, $id_proceso){

			$ano_desde = substr($fecha_desde, 0, 4);

			$mes_desde = substr($fecha_desde, 5, 7);

			$ano_hasta = substr($fecha_hasta, 0, 4);

			$mes_hasta = substr($fecha_hasta, 5, 7);

			$query = "SELECT i.id AS id_indicador, i.nombre, i.meta, pin.periodo, pin.resultado, p.id AS id_proceso FROM sie_indicadores i
						LEFT JOIN sie_periodos_indicadores pin ON pin.id_indicador = i.id 
						LEFT JOIN sie_procesos p ON p.id = i.id_proceso
						WHERE pin.ano >= '$ano_desde' AND pin.ano <= '$ano_hasta' AND pin.mes >= '$mes_desde' AND pin.mes <= '$mes_hasta' AND i.id = '$id_proceso'";

		    $sql = ModeloConexion::conectardb()->prepare($query);

		    $sql->execute();

		    return $sql;

		}


		
		


	}	

 ?>