<?php 
	
	// Archivo de conexión a la base de datos
	require_once "conexion.php";
	class ModeloGestionRiesgo 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($id_perfil, $id_proceso){

			if($id_perfil == 16 || $id_proceso == 57){
				// El id proceso 57 es el identificador del proceso: Gestión de riesgos	

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

			}else{

				$query = "SELECT * FROM sie_procesos WHERE id = '$id_proceso' AND 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 IMPACTOS 
		==================================================================================*/
		protected function mdlConsultaImpacto($tipo, $id){

			if($tipo == 'unico'){
				$query = "SELECT * FROM sie_riesgos_impacto WHERE id = '$id' AND estado = 1 ORDER BY valor ASC";
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_impacto WHERE estado = 1 ORDER BY valor ASC";				
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROBABILIDAD
		==================================================================================*/
		protected function mdlConsultaProbabilidad($tipo, $id){

			if($tipo == 'unica'){
				$query = "SELECT * FROM sie_riesgos_probabilidad WHERE id = '$id' AND estado = 1 ORDER BY valor ASC";
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_probabilidad WHERE estado = 1 ORDER BY valor ASC";				
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROBABILIDAD ORDENADA DESCENDENTE MENTE
		==================================================================================*/
		protected function mdlConsultaProbabilidaddesc($tipo, $id){

			if($tipo == 'unica'){
				$query = "SELECT * FROM sie_riesgos_probabilidad WHERE id = '$id' AND estado = 1 ORDER BY valor DESC";
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_probabilidad WHERE estado = 1 ORDER BY valor DESC";				
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA RIESGOS
		==================================================================================*/
		protected function mdlConsultaRiesgo($tipo, $id, $titulo, $id_proceso){

			if($tipo == 'unico' && $id != ''){
				$query = "SELECT * FROM sie_riesgos WHERE id = '$id'";	
			}else if($tipo == 'unico' && $titulo != ''){
				$query = "SELECT * FROM sie_riesgos WHERE titulo = '$titulo' AND id_proceso = '$id_proceso'";	
			}else if($tipo == 'general' && $id_proceso == 57){
				$query = "SELECT * FROM sie_riesgos ORDER BY titulo ASC";	
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos WHERE id_proceso = '$id_proceso'";	
			}		

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

			$sql->execute();

			return $sql;

		}


		/*=================================================================================
		CONSULTA CAUSAS
		==================================================================================*/
		protected function mdlConsultaCausa($tipo){

			if($tipo == 'unica'){
				$query = "SELECT * FROM sie_riesgos_tipo_causa WHERE estado = 1";	
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_tipo_causa WHERE estado = 1";	
			}	

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

			$sql->execute();

			return $sql;

		}


		/*=================================================================================
		CONSULTA CONSECUENCIAS
		==================================================================================*/
		protected function mdlConsultaConsecuencia($tipo){

			if($tipo == 'unica'){
				$query = "SELECT * FROM sie_riesgos_tipo_consecuencia WHERE estado = 1";	
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_tipo_consecuencia WHERE estado = 1";	
			}	

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA CLASIFICACIÓN
		==================================================================================*/
		protected function mdlConsultaClaseRiesgo($tipo){

			if($tipo == 'unica'){
				$query = "SELECT * FROM sie_riesgos_clase WHERE estado = 1";	
			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_clase WHERE estado = 1";	
			}	

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

			$sql->execute();

			return $sql;

		}


		/*=================================================================================
		CONSULTA NIVEL CONSECUENCIA
		==================================================================================*/
		protected function mdlConsultaNivelConsecuencia($tipo, $id, $valor){

			if($tipo == 'unico' && $id != ""){
				$query = "SELECT * FROM sie_riesgos_nivel_consecuencias WHERE id = '$id' AND estado = 1";
			}else if($tipo == 'unico' && $valor != ""){
				
				$query = "SELECT * FROM sie_riesgos_nivel_consecuencias WHERE '$valor' >= limite_inferior AND '$valor' <= limite_superior AND estado = 1";

			}else if($tipo == 'general'){
				$query = "SELECT * FROM sie_riesgos_nivel_consecuencias WHERE estado = 1";	
			}	

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		REGISTRA RIESGO
		==================================================================================*/
		protected function mdlRegistraRiesgo($datos){

			$query = "INSERT INTO sie_riesgos (titulo, descripcion, estado, id_proceso, id_clase, id_probabilidad, id_impacto, id_nivel_consecuencia, id_usuario_crea, fecha_creacion, id_probabilidad_residual, id_impacto_residual, id_nivel_consecuencia_residual)VALUES(:v_titulo, :v_descripcion, :v_estado, :v_id_proceso, :v_id_clase, :v_id_probabilidad, :v_id_impacto, :v_id_nivel_consecuencia, :v_id_usuario_crea, :v_fecha_creacion, :v_id_probabilidad_residual, :v_id_impacto_residual, :v_id_nivel_consecuencia_residual)";

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

			$sql->bindParam(':v_titulo', $datos['titulo']);
			$sql->bindParam(':v_descripcion', $datos['descripcion']);
			$sql->bindParam(':v_estado', $datos['estado']);
			$sql->bindParam(':v_id_proceso', $datos['id_proceso']);
			$sql->bindParam(':v_id_clase', $datos['clasificacion']);
			$sql->bindParam(':v_id_probabilidad', $datos['id_probabilidad']);
			$sql->bindParam(':v_id_impacto', $datos['id_impacto']);
			$sql->bindParam(':v_id_nivel_consecuencia', $datos['id_nivel_consecuencia']);
			$sql->bindParam(':v_id_probabilidad_residual', $datos['id_probabilidad']);
			$sql->bindParam(':v_id_impacto_residual', $datos['id_impacto']);
			$sql->bindParam(':v_id_nivel_consecuencia_residual', $datos['id_nivel_consecuencia']);
			$sql->bindParam(':v_id_usuario_crea', $datos['id_usuario']);
			$sql->bindParam(':v_fecha_creacion', $datos['fecha']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "INSERT INTO sie_riesgos (titulo, descripcion, estado, id_proceso, id_clase, id_probabilidad, id_impacto, id_nivel_consecuencia, id_usuario_crea, fecha_creacion)VALUES(|".$datos['titulo']."|, |".$datos['descripcion']."|, ".$datos['estado'].", ".$datos['id_proceso'].", ".$datos['clasificacion'].", ".$datos['id_probabilidad'].", ".$datos['id_impacto'].", ".$datos['id_nivel_consecuencia'].", ".$datos['id_usuario'].", |".$datos['fecha']."|)";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		ACTUALIZA RIESGO
		==================================================================================*/
		protected function mdlActualizaRiesgo($datos){

			if($datos['estado'] == 1){

				$query = "UPDATE sie_riesgos SET estado = :v_estado WHERE id = :v_id_riesgo";
				
				// Query utilizado para registrar auditoria
				$query_log = "UPDATE sie_riesgos SET estado = ".$datos['estado']." WHERE id = ".$datos['id_riesgo']."";

				$sql = ModeloConexion::conectardb()->prepare($query);	
				
				$sql->bindParam(':v_estado', $datos['estado']);	
				$sql->bindParam(':v_id_riesgo', $datos['id_riesgo']);	
			
			}else if($datos['estado'] == 0 && $datos['estado'] != ""){
				
				$query = "UPDATE sie_riesgos SET estado = :v_estado, id_usuario_inactiva = :v_id_usuario, fecha_inactivacion = :v_fecha WHERE id = :v_id_riesgo";
				
				// Query utilizado para registrar auditoria
				$query_log = "UPDATE sie_riesgos SET estado = ".$datos['estado'].", id_usuario_inactiva = ".$datos['id_usuario'].", fecha_inactivacion = |".$datos['fecha']."| WHERE id = ".$datos['id_riesgo']."";

				$sql = ModeloConexion::conectardb()->prepare($query);
				
				$sql->bindParam(':v_estado', $datos['estado']);	
				$sql->bindParam(':v_id_usuario', $datos['id_usuario']);
				$sql->bindParam(':v_fecha', $datos['fecha']);
				$sql->bindParam(':v_id_riesgo', $datos['id_riesgo']);

			}else{

				$query = "UPDATE sie_riesgos SET id_probabilidad_residual = :v_id_probabilidad, id_impacto_residual = :v_id_impacto, id_nivel_consecuencia_residual = :v_id_nivel_consecuencia  WHERE id = :v_id_riesgo";
				
				// Query utilizado para registrar auditoria
				$query_log = "UPDATE sie_riesgos SET id_probabilidad_residual = ".$datos['id_probabilidad'].", id_impacto_residual = ".$datos['id_impacto'].", id_nivel_consecuencia_residual = ".$datos['id_nivel_consecuencia']." WHERE id = ".$datos['id_riesgo']."";

				$sql = ModeloConexion::conectardb()->prepare($query);
				
				$sql->bindParam(':v_id_riesgo', $datos['id_riesgo']);
				$sql->bindParam(':v_id_probabilidad', $datos['id_probabilidad']);	
				$sql->bindParam(':v_id_impacto', $datos['id_impacto']);
				$sql->bindParam(':v_id_nivel_consecuencia', $datos['id_nivel_consecuencia']);

			}

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		REGISTRA CAUSA Y CONSECUENCIA DE UN RIESGO
		==================================================================================*/
		protected function mdlRegistraCausa($datos){

			$query = "INSERT INTO sie_riesgos_causas_consecuencias (id_riesgo, id_tipo_causa, descripcion_causa, id_tipo_consecuencia, descripcion_consecuancia)VALUES(:v_id_riesgo, :v_id_tipo_causa, :v_descripcion_causa, :v_id_tipo_consecuencia, :v_descripcion_consecuancia)";

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

			$sql->bindParam(':v_id_riesgo', $datos['id_riesgo']);
			$sql->bindParam(':v_id_tipo_causa', $datos['id_causa']);
			$sql->bindParam(':v_descripcion_causa', $datos['descripcion_causa']);
			$sql->bindParam(':v_id_tipo_consecuencia', $datos['id_consecuencia']);
			$sql->bindParam(':v_descripcion_consecuancia', $datos['descripcion_consecuencia']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "INSERT INTO sie_riesgos_causas_consecuencias (id_riesgo, id_tipo_causa, descripcion_causa, id_tipo_consecuencia, descripcion_consecuancia)VALUES(".$datos['id_riesgo'].", ".$datos['id_causa'].", |".$datos['descripcion_causa']."|, ".$datos['id_consecuencia'].", |".$datos['descripcion_consecuencia']."|)";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		CONSULTA CAUSAS Y CONSECUENCIAS DE UN RIESGO
		==================================================================================*/
		protected function mdlConsultaCausaConsecuencia($id, $id_riesgo, $tipo, $descripcion){

			if($id_riesgo != '' && $tipo == 'unica'){

				$query = "SELECT r.id_proceso, r.estado, r.id_clase, r.descripcion AS desc_riesgo, r.id_probabilidad, r.id_impacto, cc.id, r.id AS id_riesgo,  tc.id AS id_causa, rtc.id AS id_consecuencia, r.titulo AS titulo_riesgo, tc.descripcion AS descripcion_tipo_causa, rtc.descripcion AS descripcion_tipo_consecuencia, cc.descripcion_causa, cc.descripcion_consecuancia 
						  FROM sie_riesgos_causas_consecuencias cc
						  LEFT JOIN sie_riesgos r ON r.id = cc.id_riesgo
						  LEFT JOIN sie_riesgos_tipo_causa tc ON tc.id = cc.id_tipo_causa
						  LEFT JOIN sie_riesgos_tipo_consecuencia rtc ON rtc.id = cc.id_tipo_consecuencia
						  WHERE id_riesgo = '$id_riesgo' ORDER BY id_riesgo ASC";

			}else if($id != '' && $tipo == 'unica'){

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

			}else{

				$query = "SELECT * FROM sie_riesgos_causas_consecuencias ORDER BY id_riesgo ASC";

			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		ACTUALIZA CAUSA
		==================================================================================*/
		protected function mdlActualizaCausa($datos){

			$query = "UPDATE sie_riesgos_causas_consecuencias SET descripcion_causa = :v_descripcion_causa, descripcion_consecuancia = :v_descripcion_consecuancia WHERE id = :v_id_causa_consecuencia";

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

			$sql->bindParam(':v_id_causa_consecuencia', $datos['id_causa_consecuencia']);
			// $sql->bindParam(':v_id_tipo_causa', $datos['id_causa']);
			$sql->bindParam(':v_descripcion_causa', $datos['descripcion_causa']);
			// $sql->bindParam(':v_id_tipo_consecuencia', $datos['id_consecuencia']);
			$sql->bindParam(':v_descripcion_consecuancia', $datos['descripcion_consecuencia']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "UPDATE sie_riesgos_causas_consecuencias SET descripcion_causa = |".$datos['descripcion_causa']."|, descripcion_consecuancia = |".$datos['descripcion_consecuencia']."| WHERE id = ".$datos['id_causa_consecuencia']."";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		CONSULTA CASIFICACIÓN DE CONTROLES
		==================================================================================*/
		protected function mdlConsultaClasificacionControl($id, $tipo, $descripcion){

			if($tipo == 'unica' && $id != ''){

				$query = "SELECT * FROM sie_riesgos_clasificacion_controles WHERE estado = 1 AND id = '$id' ORDER BY id ASC";

			}else if($tipo == 'unica' && $descripcion != ''){

				$query = "SELECT * FROM sie_riesgos_clasificacion_controles WHERE estado = 1 AND descripcion = $descripcion ORDER BY id ASC";

			}else if($tipo=='general'){

				$query = "SELECT * FROM sie_riesgos_clasificacion_controles WHERE estado = 1 ORDER BY id ASC";
			
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA NIVEL EVALUACIÓN
		==================================================================================*/
		protected function mdlConsultaNivelEvaluacion($id, $tipo, $descripcion){

			if($tipo == 'unica' && $id != ''){

				$query = "SELECT * FROM sie_riesgos_nivel_evaluacion WHERE estado = 1 AND id = '$id' ORDER BY id ASC";

			}else if($tipo == 'unica' && $descripcion != ''){

				$query = "SELECT * FROM sie_riesgos_nivel_evaluacion WHERE estado = 1 AND descripcion = $descripcion ORDER BY id ASC";

			}else if($tipo=='general'){

				$query = "SELECT * FROM sie_riesgos_nivel_evaluacion WHERE estado = 1 ORDER BY id ASC";
			
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA NIVEL VERIFICACIÓN
		==================================================================================*/
		protected function mdlConsultaNivelVerificacion($id, $tipo, $descripcion){

			if($tipo=='unica' && $id['id1'] == 'on' && $id['id2'] == 'on' && $id['id3'] == 'on' && $id['id4'] == 'on' && $id['id5'] == 'on'){

				$query = "SELECT SUM(puntaje) AS puntaje, (SELECT casillas FROM sie_riesgos_nivel_verificacion WHERE id = 5) AS casilla FROM sie_riesgos_nivel_verificacion WHERE id IN (1,2,3,4,5) AND estado = 1 ORDER BY id ASC";
			
			}else if($tipo=='unica' && $id['id1'] == 'on' && $id['id2'] == 'on' && $id['id3'] == 'on' && $id['id4'] == 'on'){

				$query = "SELECT SUM(puntaje) AS puntaje, (SELECT casillas FROM sie_riesgos_nivel_verificacion WHERE id = 4) AS casilla FROM sie_riesgos_nivel_verificacion WHERE id IN (1,2,3,4) AND estado = 1 ORDER BY id ASC";
			
			}else if($tipo=='unica' && $id['id1'] == 'on' && $id['id2'] == 'on' && $id['id3'] == 'on'){

				$query = "SELECT SUM(puntaje) AS puntaje, (SELECT casillas FROM sie_riesgos_nivel_verificacion WHERE id = 3) AS casilla FROM sie_riesgos_nivel_verificacion WHERE id IN (1,2,3) AND estado = 1 ORDER BY id ASC";
			
			}else if($tipo=='unica' && $id['id1'] == 'on' && $id['id2'] == 'on'){

				$query = "SELECT SUM(puntaje) AS puntaje, (SELECT casillas FROM sie_riesgos_nivel_verificacion WHERE id = 2) AS casilla FROM sie_riesgos_nivel_verificacion WHERE id IN (1,2) AND estado = 1 ORDER BY id ASC";
			
			}else if($tipo=='unica' && $id['id1'] == 'on'){

				$query = "SELECT SUM(puntaje) AS puntaje, (SELECT casillas FROM sie_riesgos_nivel_verificacion WHERE id = 1) AS casilla FROM sie_riesgos_nivel_verificacion WHERE id = 1 AND estado = 1 ORDER BY id ASC";
			
			}else if($tipo == 'unica' && $id != ''){

				$query = "SELECT * FROM sie_riesgos_nivel_verificacion WHERE estado = 1 AND id = '$id' ORDER BY id ASC";

			}else if($tipo == 'unica' && $descripcion != ''){

				$query = "SELECT * FROM sie_riesgos_nivel_verificacion WHERE estado = 1 AND descripcion = $descripcion ORDER BY id ASC";

			}else if($tipo=='general'){

				$query = "SELECT * FROM sie_riesgos_nivel_verificacion WHERE estado = 1 ORDER BY id ASC";
			
			}

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

			$sql->execute();

			return $sql;

		}	

		/*=================================================================================
		CONSULTA NIVEL VERIFICACIÓN
		==================================================================================*/
		protected function mdlRegistraControl($datos){

			$query = "INSERT INTO sie_riesgos_controles (descripcion, estado, id_causa, id_clasificacion, id_usuario_crea, fecha_creacion, id_tipo_control)VALUES(:v_descripcion, :v_estado, :v_id_causa, :v_id_clasificacion, :v_id_usuario_crea, :v_fecha_creacion, :v_id_tipo_control)";

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

			$sql->bindParam(':v_descripcion', $datos['descripcion_control']);
			$sql->bindParam(':v_id_causa', $datos['id_causa']);
			$sql->bindParam(':v_estado', $datos['estado']);
			$sql->bindParam(':v_id_clasificacion', $datos['id_clasificacion']);
			$sql->bindParam(':v_id_usuario_crea', $datos['id_usuario']);
			$sql->bindParam(':v_fecha_creacion', $datos['fecha']);
			$sql->bindParam(':v_id_tipo_control', $datos['id_tipo_control']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "INSERT INTO sie_riesgos_controles (descripcion, estado, id_causa, id_clasificacion, id_usuario_crea, fecha_creacion)VALUES(|".$datos['descripcion_control']."|, ".$datos['estado'].", ".$datos['id_causa'].", ".$datos['id_clasificacion'].", ".$datos['id_usuario'].", |".$datos['fecha']."|)";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		REGISTRA EVALUACIÓN CONTROLES
		==================================================================================*/
		protected function mdlRegistraEvaluacionControl($datos){

			$query = "INSERT INTO sie_riesgos_evaluacion_controles (id_control, id_nivel_efectividad, id_nivel_evaluacion, casillas_valoracion, id_probabilidad, id_impacto, id_nivel_consecuencia, id_usuario_crea, fecha_creacion, id_nivel_verificacion_definido, id_nivel_verificacion_documentado, id_nivel_verificacion_implementado, id_nivel_verificacion_socializado, id_nivel_verificacion_evaluado, puntaje)VALUES(:v_id_control, :v_id_nivel_efectividad, :v_id_nivel_evaluacion, :v_casillas_valoracion, :v_id_probabilidad, :v_id_impacto, :v_id_nivel_consecuencia, :v_id_usuario_crea, :v_fecha_creacion, :v_id_nivel_verificacion_definido, :v_id_nivel_verificacion_documentado, :v_id_nivel_verificacion_implementado, :v_id_nivel_verificacion_socializado, :v_id_nivel_verificacion_evaluado, :v_puntaje_evaluacion)";

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

			$sql->bindParam(':v_id_control', $datos['id_control']);
			$sql->bindParam(':v_id_nivel_efectividad', $datos['nivel_efectividad']);
			$sql->bindParam(':v_id_nivel_evaluacion', $datos['id_evaluacion']);
			$sql->bindParam(':v_casillas_valoracion', $datos['casilla_valoracion']);
			$sql->bindParam(':v_id_probabilidad', $datos['id_probabilidad']);
			$sql->bindParam(':v_id_impacto', $datos['id_impacto']);
			$sql->bindParam(':v_id_nivel_consecuencia', $datos['id_nivel_consecuencia']);
			$sql->bindParam(':v_id_usuario_crea', $datos['id_usuario']);
			$sql->bindParam(':v_fecha_creacion', $datos['fecha']);
			$sql->bindParam(':v_id_nivel_verificacion_definido', $datos['id_nivel_verificacion_definido']);
			$sql->bindParam(':v_id_nivel_verificacion_documentado', $datos['id_nivel_verificacion_documentado']);
			$sql->bindParam(':v_id_nivel_verificacion_implementado', $datos['id_nivel_verificacion_implementado']);
			$sql->bindParam(':v_id_nivel_verificacion_socializado', $datos['id_nivel_verificacion_socializado']);
			$sql->bindParam(':v_id_nivel_verificacion_evaluado', $datos['id_nivel_verificacion_evaluado']);
			$sql->bindParam(':v_puntaje_evaluacion', $datos['puntaje_evaluacion']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "INSERT INTO sie_riesgos_evaluacion_controles (id_control, id_nivel_efectividad, id_nivel_evaluacion, casillas_valoracion, id_probabilidad, id_impacto, id_nivel_consecuencia, id_usuario_crea, fecha_creacion)VALUES(".$datos['id_control'].", ".$datos['nivel_efectividad'].", ".$datos['id_evaluacion'].", ".$datos['casilla_valoracion'].", ".$datos['id_probabilidad'].", ".$datos['id_impacto'].", ".$datos['id_nivel_consecuencia'].", ".$datos['id_usuario'].", |".$datos['fecha']."|)";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		REGISTRA EVALUACIÓN CONTROLES
		==================================================================================*/
		protected function mdlActualizaEvaluacionControl($datos){
			
			$query = "UPDATE sie_riesgos_evaluacion_controles SET id_nivel_efectividad = :v_id_nivel_efectividad, id_nivel_evaluacion = :v_id_nivel_evaluacion,  casillas_valoracion = :v_casillas_valoracion, id_probabilidad = :v_id_probabilidad, id_impacto = :v_id_impacto, id_nivel_consecuencia = :v_id_nivel_consecuencia, id_nivel_verificacion_definido = :v_id_nivel_verificacion_definido, id_nivel_verificacion_documentado = :v_id_nivel_verificacion_documentado, id_nivel_verificacion_implementado = :v_id_nivel_verificacion_implementado, id_nivel_verificacion_socializado= :v_id_nivel_verificacion_socializado, id_nivel_verificacion_evaluado =:v_id_nivel_verificacion_evaluado, puntaje = :v_puntaje_evaluacion WHERE id_control = :v_id_control";

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

			$sql->bindParam(':v_id_control', $datos['id_control']);
			$sql->bindParam(':v_id_nivel_efectividad', $datos['nivel_efectividad']);
			$sql->bindParam(':v_id_nivel_evaluacion', $datos['id_evaluacion']);
			$sql->bindParam(':v_casillas_valoracion', $datos['casilla_valoracion']);
			$sql->bindParam(':v_id_probabilidad', $datos['id_probabilidad']);
			$sql->bindParam(':v_id_impacto', $datos['id_impacto']);
			$sql->bindParam(':v_id_nivel_consecuencia', $datos['id_nivel_consecuencia']);
			$sql->bindParam(':v_id_nivel_verificacion_definido', $datos['id_nivel_verificacion_definido']);
			$sql->bindParam(':v_id_nivel_verificacion_documentado', $datos['id_nivel_verificacion_documentado']);
			$sql->bindParam(':v_id_nivel_verificacion_implementado', $datos['id_nivel_verificacion_implementado']);
			$sql->bindParam(':v_id_nivel_verificacion_socializado', $datos['id_nivel_verificacion_socializado']);
			$sql->bindParam(':v_id_nivel_verificacion_evaluado', $datos['id_nivel_verificacion_evaluado']);
			$sql->bindParam(':v_puntaje_evaluacion', $datos['puntaje_evaluacion']);

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				$query_log = "UPDATE sie_riesgos_evaluacion_controles SET id_nivel_efectividad = ".$datos['nivel_efectividad'].", id_nivel_evaluacion = ".$datos['id_evaluacion'].",  casillas_valoracion = ".$datos['casilla_valoracion'].", id_probabilidad = ".$datos['id_probabilidad'].", id_impacto = ".$datos['id_impacto'].", id_nivel_consecuencia = ".$datos['id_nivel_consecuencia'].", id_nivel_verificacion_definido = ".$datos['id_nivel_verificacion_definido'].", id_nivel_verificacion_documentado = ".$datos['id_nivel_verificacion_documentado'].", id_nivel_verificacion_implementado = ".$datos['id_nivel_verificacion_implementado'].", id_nivel_verificacion_socializado= ".$datos['id_nivel_verificacion_socializado'].", id_nivel_verificacion_evaluado =".$datos['id_nivel_verificacion_evaluado'].", puntaje = ".$datos['puntaje_evaluacion']." WHERE id_control = ".$datos['id_control']."";

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*=================================================================================
		CONSULTA EVALUACIÓN DE UN CONTROL
		==================================================================================*/
		protected function mdlEvaluacionControl($id, $tipo, $otro){

			if($id != '' && $tipo = 'unica'){

				$query = "SELECT * FROM sie_riesgos_evaluacion_controles ec 
						  LEFT JOIN sie_riesgos_nivel_evaluacion ne ON ne.id = ec.id_nivel_evaluacion WHERE id_control = '$id'";
			
			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA CONTROL
		==================================================================================*/
		protected function mdlConsultaControl($id, $tipo, $otro){

			if($id != '' && $tipo == 'unico'){

				$query = "SELECT * FROM sie_riesgos_controles WHERE id = '$id'";
			
			}else if($otro != '' && $tipo == 'general'){

				$query = "SELECT co.id AS id_control, co.descripcion AS desc_control, co.estado AS estado_control, co.id_causa, co.id_tipo_control, tc.descripcion AS desc_tipo_control, co.fecha_creacion,
						  c.id AS id_clase, c.descripcion AS desc_clase, cl.descripcion AS desc_clasificacon, c.detalle, c.estado AS estado_clase, co.id_tipo_control
						  FROM sie_riesgos_controles co 
						  LEFT JOIN sie_riesgos_clase c ON c.id = co.id_clasificacion
						  LEFT JOIN sie_riesgos_tipo_controles tc ON tc.id = co.id_tipo_control
						  LEFT JOIN sie_riesgos_clasificacion_controles cl ON cl.id = co.id_clasificacion WHERE id_causa = '$otro'";

			}else if($otro != '' && $tipo == 'unico'){

				$query = "SELECT * FROM sie_riesgos_controles WHERE descripcion = '$otro'";

			}else if($tipo == 'ultimoid'){

				$query = "SELECT MAX(id) AS id_control FROM sie_riesgos_controles";

			}

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		Actualiza control
		==================================================================================*/
		protected function mdlActualizaControl($datos){

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

				$query = "UPDATE sie_riesgos_controles SET descripcion = :v_descripcion, id_usuario_inactiva = :v_id_usuario_inactiva, fecha_inactivacion = :v_fecha_inactivacion WHERE id_causa = :v_id_causa AND id = :v_id_control";

				$query_log = "UPDATE sie_riesgos_controles SET descripcion = ".$datos['descripcion_control'].", id_usuario_inactiva = ".$datos['id_usuario'].", fecha_inactivacion = ".$datos['fecha']." WHERE id_causa = ".$datos['id_causa']." AND id_control = ".$datos['id_control'];

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

				$sql->bindParam(':v_id_causa', $datos['id_causa']);
				$sql->bindParam(':v_id_control', $datos['id_control']);
				$sql->bindParam(':v_descripcion', $datos['descripcion_control']);
				$sql->bindParam(':v_id_usuario_inactiva', $datos['id_usuario']);
				$sql->bindParam(':v_fecha_inactivacion', $datos['fecha']);

			}else if($datos['estado'] == 1){

				$query = "UPDATE sie_riesgos_controles SET descripcion = :v_descripcion WHERE id_causa = :v_id_causa AND id = :v_id_control";

				$query_log = "UPDATE sie_riesgos_controles SET descripcion = ".$datos['descripcion_control']." WHERE id_causa = ".$datos['id_causa']." AND id_control = ".$datos['id_control'];

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

				$sql->bindParam(':v_id_causa', $datos['id_causa']);
				$sql->bindParam(':v_id_control', $datos['id_control']);
				$sql->bindParam(':v_descripcion', $datos['descripcion_control']);

			}

			$sql->execute();

			if($sql->rowcount() ==1 ){
				// Si el riesgo se registra correctamente dejamos registro en la tabla log transacciones del query utilizado.

				// Función encargada de registrar auditoria en base de datos.
				$registraauditoria = ModeloConexion::registraAuditoria('sie/vista/modulos/gestion_de_riesgo.php', $query_log, $datos['id_usuario'], $datos['fecha']);
			
			}

			return $sql;

		}

		/*===================================================== Funciones relacionadas al dasboard =============================================================*/

		/*=================================================================================
		CONSULTA LAS CANTIDAD DE PROCESOS QUE SE ENCUENTRAN EN LOS DIFERENTES NIVELES DE CONSECUENCIAS. 
		==================================================================================*/
		protected function mdlConsultaNivelConsecuenciaProceso(){

			$query = "SELECT p.objetivo, nc.id AS id_nivel_consecuencia, nc.descripcion AS desc_nivel_consecuencia, COUNT(r.id) AS cantidad FROM sie_riesgos r
					  LEFT JOIN sie_procesos p ON p.id = r.id_proceso
					  LEFT JOIN sie_riesgos_nivel_consecuencias nc ON nc.id = r.id_nivel_consecuencia GROUP BY nc.id ORDER BY desc_nivel_consecuencia asc";

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA CANTIDAD DE RIESGOS POR PROCESO 
		==================================================================================*/
		protected function mdlConsultaCantidadRiesgosProceso(){

			$query = "SELECT p.id AS id_proceso, p.descripcion AS desc_proceso, COUNT(r.id)AS cantidad FROM sie_riesgos r
					  LEFT JOIN sie_procesos p ON p.id = r.id_proceso GROUP BY p.id";

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA CANTIDAD DE RIESGOS RESIDUALES POR ZONA DE RIESGO. 
		==================================================================================*/
		protected function mdlConsultaCantidadRiesgosResidualesZona(){

			$query = "SELECT COUNT(r.id) AS cantidad, nc.descripcion AS desc_nivel_consecuencia FROM sie_riesgos r
					  LEFT JOIN sie_riesgos_nivel_consecuencias nc ON nc.id = r.id_nivel_consecuencia_residual GROUP BY nc.id ORDER BY desc_nivel_consecuencia ASC";

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROMEDIO DE NIVEL DE CONSECUENCIA POR PROCESO
		==================================================================================*/
		protected function mdlConsultaPromedioNivelConsecuenciaProceso(){

			$query = "SELECT p.id AS id_proceso, p.descripcion AS desc_proceso, AVG(r.id_probabilidad_residual * r.id_impacto_residual)AS promedio  FROM sie_riesgos r
					  LEFT JOIN sie_procesos p ON p.id = r.id_proceso
					  LEFT JOIN sie_riesgos_nivel_consecuencias nc ON nc.id = r.id_nivel_consecuencia_residual GROUP BY p.id";

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROMEDIO DE NIVEL DE CONSECUENCIA POR PROCESO
		==================================================================================*/
		protected function mdlConsultaCantidadRiesgosPorNiveConsecuencia($valor_probabilidad, $valor_impacto){

			$query = "SELECT COUNT(id) AS cantidad_riesgos FROM sie_riesgos WHERE id_probabilidad_residual = '$valor_probabilidad' AND id_impacto_residual = '$valor_impacto'";

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

			$sql->execute();

			return $sql;

		}

		/*=================================================================================
		CONSULTA PROMEDIO DE NIVEL DE CONSECUENCIA POR PROCESO
		==================================================================================*/
		protected function mdlConsultaRiesgosPorNiveConsecuencia($valor_probabilidad, $valor_impacto){

			$query = "SELECT descripcion FROM sie_riesgos WHERE id_nivel_consecuencia_residual = (SELECT id FROM sie_riesgos_nivel_consecuencias
					  WHERE ('$valor_probabilidad' * '$valor_impacto') == limite_inferior OR ('$valor_probabilidad' * '$valor_impacto') == limite_superior)";

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

			$sql->execute();

			return $sql;

		}

	}	

 ?>