<?php 

if(@$_POST['peticion'] == 'ajax'){
	require_once "../modelo/administracion.modelo.php";
}else{
	require_once "../../modelo/administracion.modelo.php";
}

// echo "*******";

class Controladoradministracion extends ModeloAdministracion{
	
		/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
	==================================================================================*/
	public function ctrConsultaIndicadorGraficaExcel($id_proceso, $fecha_desde, $fecha_hasta, $id_perfil, $id_proceso_actual){

		try {
			
			$datos = [

				'fecha_desde'       => $fecha_desde,
				'fecha_hasta'       => $fecha_hasta,
				'id_proceso'        => $id_proceso,
				'id_proceso_actual' => $id_proceso_actual,
				'id_perfil'         => $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),
			
			];

			$agrupaIndicadores = ModeloAdministracion::mdlAgrupaIndicadorGrafica($fecha_desde, $fecha_hasta, $id_proceso, $id_proceso_actual, $id_perfil);
			$datosResultado = $agrupaIndicadores->fetchAll();

			$i = 0;
			foreach ($datosResultado as $value) {

				$consultaIndicador = ModeloAdministracion::mdlConsultaIndicadorGrafica($fecha_desde, $fecha_hasta, $value['id_indicador']);
				$resultadoIndicador = $consultaIndicador->fetchAll();

				$x=0;
				foreach ($resultadoIndicador as $key => $value) {

					$datosIndicador[$x] = array('id_proceso' => $value['id_proceso'], 'desc_proceso' => utf8_encode($value['desc_proceso']), 'id_indicador' => $value['id_indicador'], 'ano_desde' => $datos['ano_desde'], 'mes_desde' => $datos['mes_desde'], 'ano_hasta' => $datos['ano_hasta'], 'mes_hasta' => $datos['mes_hasta'], 'nombre' => utf8_encode($value['nombre']), 'periodicidad' => $value['periodicidad'], 'periodo' => $value['periodo'], 'meta' => $value['meta'], 'resultado' => $value['resultado']);
					$x++;

				}

				$datosfinales[$i] = $datosIndicador;

				$i++;

			}

			return $datosfinales;

		}catch (Throwable $t){
			// Capturamos errores de ejecución.
			echo 'Error: '.$t;
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.
			echo 'Error: '.$e->getMessage();
		
		}

	}

	/*=================================================================================
	CONSULTA USUARIOS (Responsables)
	==================================================================================*/
	public function ctrConsultaUsuarios(){

		$resultaoUsuarios = ModeloAdministracion::mdlConsultaUsuarios();

		$usuarios = $resultaoUsuarios->fetchAll();

		return $usuarios;

	}

	/*=================================================================================
	CONSULTA PROCESOS
	==================================================================================*/
	public function ctrConsultaProcesos(){

		$resultaoProcesos = ModeloAdministracion::mdlConsultaProcesos();

		$proceos = $resultaoProcesos->fetchAll();

		return $proceos;

	}

	/*=================================================================================
	CONSULTA ICONOS
	==================================================================================*/
	public function ctrConsultaIconos(){

		$resultaoIconos = ModeloAdministracion::mdlConsultaIconos();

		$iconos = $resultaoIconos->fetchAll();

		return $iconos;

	}

	/*=================================================================================
	CONSULTA MACRO PROCESOS
	==================================================================================*/
	public function ctrConsultaMacroProcesos(){

		$resultadoMacroProceso = ModeloAdministracion::mdlConsultaMacroProcesos();

		$macroProcesos = $resultadoMacroProceso->fetchAll();

		return $macroProcesos;

	}

	public function elimina_tilde($cadena) {
		
		$no_permitidas = array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú");
		$permitidas=     array ("a","e","i","o","u","A","E","I","O","U");
		// // $texto = str_ireplace($no_permitidas, $permitidas, $cadena);

		for($i=0; $i < count($no_permitidas); $i++){

			$texto = str_ireplace($no_permitidas, $permitidas, $cadena);

		}

		return $texto;

	}

	/*=================================================================================
	REGISTRA PROCESO
	==================================================================================*/
	public function ctrRegistraProceso(){

		try {

			$bandera = false;
			
			// Remplazo los espacios de la cadena descripcion_proceso por un guión bajo.
			$href = str_ireplace(" ", "_", trim(strtolower($_POST['descripcion_proceso'])));
			// Función utilizada para eliminar tildes de una cadena de tezto.
			$href = self::elimina_tilde($href);

			$datos = [

				'id_usuario_crea'     => $_POST['id_usuario'],
				'descripcion_proceso' => utf8_decode(trim(ucfirst(strtolower($_POST['descripcion_proceso'])))),
				'macro_proceso'       => $_POST['macro_proceso'],
				'estado_proceso'      => $_POST['estado_proceso'],
				'responsable_proceso' => $_POST['responsable_proceso'],
				'objetivo'            => $_POST['objetivo'],
				'fecha'               => date('Y-m-d H:i:s'),
				'proceso_sie'         => 1,
				'objetivo'            => $_POST['objetivo'],
				'id_usuario_inactiva' => $_POST['id_usuario'],
				'href'                => $href,
				'activo'              => 0,
				'icono'               => 'fa fa-'.$_POST['icono_modal'],

			];

			// Validación de campos
			if (trim($datos['descripcion_proceso']) == "") {

				echo json_encode(array('error' => 'El campo <b>Proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['macro_proceso']) == "") {

				echo json_encode(array('error' => 'El campo <b>Macro proceso</b> es requerido.', 'href' => $datos['href'], 'desc' => $datos['descripcion_proceso']));	
				exit();

			}

			if (trim($datos['objetivo']) == "") {

				echo json_encode(array('error' => 'El campo <b>Objetivo</b> es requerido.'));	
				exit();

			}


			if (trim($datos['estado_proceso']) == "") {

				echo json_encode(array('error' => 'El campo <b>Estado proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['responsable_proceso']) == "") {

				echo json_encode(array('error' => 'El campo <b>Responsable</b> es requerido.'));	
				exit();

			}

			if (trim($datos['icono']) == "") {

				echo json_encode(array('error' => 'Asegurate de seleccionar un icono.'));	
				exit();

			}

			// Consultamos proceso de a cuerdo a la descripción recibida $datos['descripcion_proceso'] pa validar su existencia
			$consultaProcesoDescripcion = ModeloAdministracion::mdlConsultaDatosProcesoDescripcion($datos['descripcion_proceso']);

			if($consultaProcesoDescripcion->rowcount() >= 1){
				
				echo json_encode(array('error' => 'El proceso que ingresaste ya se encuentra registrado en el sistema.'));				
			
			}else{


				// Registramos proceso
				$resultadoProceso = ModeloAdministracion::mdlRegistraProceso($datos);
				if($resultadoProceso->rowcount() == 1){

					// Consultamos ultimo proceso registrado 
					$consultaUltimoProceso = ModeloAdministracion::mdlConsultaUltimoProceso();

					// Consulta perfiles
					$consultaPerfiles = ModeloAdministracion::mdlConsultaPerfiles();
					$datosPerfil = $consultaPerfiles->fetchAll();

					// Recorremos los perfiles consultados
					foreach ($datosPerfil as $key => $value) {
						
						// Reistramos permiso.
						$registraSiePermiso = ModeloAdministracion::mdlRegistraSiePermiso($datos, $value['id'], $consultaUltimoProceso);
						if($registraSiePermiso->rowcount() == 1){

							$bandera = true;
						
						}else{

							$bandera = false;
						
						}
					}


					// Consultamos opciones de proceso para relacionar todas las opciones de proceso al nuevo proceso.
					$consultaOpcionesProceso = ModeloAdministracion::mdlConsultaOpcionesProcesos();
					$datosOpcion = $consultaOpcionesProceso->fetchAll();

					foreach ($datosOpcion as $key => $opcion) {
						
						// Relacionamos el nuevo proceso a la opción iterada.
						$registraOpcionProceso = ModeloAdministracion::mdlRegistraOpcionProceso($opcion['descripcion'], $consultaUltimoProceso, 1, $datos['id_usuario_crea'], $opcion['icono'], $opcion['href']);
						
					}

					// Si la variable bandera es true, significa que el proceso se relacionó correctamente con cada perfil.
					if($bandera == true){

						// header('Content-Type: text/html; charset=utf-8');
						// $fp = fopen("../vista/modulos/".$datos['href'].".php", "w+"); 

						// Consultamos macro proceso con la intención de conocer su nombre.
						// $descripcionMacroProceso = ModeloAdministracion::mdlConsultaMacroProceso($_POST['macro_proceso']);
						// $resultadoMacroPro = $descripcionMacroProceso->fetch();

						// $contentFile = '
						// 			header("Content-Type: text/html; charset=utf-8");  
						// 			<div class="content-wrapper">
						// 			    <!-- Content Header (Page header) -->
						// 			    <section class="content-header">
						// 			      <div class="container-fluid">
						// 			        <div class="row mb-2">
						// 			          <div class="col-sm-6">
						// 			            <h1>'.$datos['descripcion_proceso'].'</h1>
						// 			          </div>
						// 			          <div class="col-sm-6">
						// 			            <ol class="breadcrumb float-sm-right">
						// 			              <li class="breadcrumb-item"><a href="#">Home</a></li>
						// 			              <li class="breadcrumb-item"><a href="#">'.$resultadoMacroPro['descripcion'].'</a></li>
						// 			              <li class="breadcrumb-item"><a href="#">'.$datos['descripcion_proceso'].'</a></li>
						// 			              <li class="breadcrumb-item active">Opción</li>
						// 			            </ol>
						// 			          </div>
						// 			        </div>
						// 			      </div><!-- /.container-fluid -->
						// 			    </section>

						// 			    <!-- Main content -->
						// 			    <section class="content">

						// 			      <div class="container-fluid">
						// 			        <div class="row">
						// 			          <div class="col-12">
						// 			            <!-- Default box -->
						// 			            <div class="card">
						// 			              <div class="card-header">
						// 			                <h3 class="card-title">Opción no disponible</h3>

						// 			                <div class="card-tools">
						// 			                  <button type="button" class="btn btn-tool" data-card-widget="collapse" data-toggle="tooltip" title="Collapse">
						// 			                    <i class="fas fa-minus"></i></button>
						// 			                  <button type="button" class="btn btn-tool" data-card-widget="remove" data-toggle="tooltip" title="Remove">
						// 			                    <i class="fas fa-times"></i></button>
						// 			                </div>
						// 			              </div>
						// 			              <div class="card-body">
						// 			                Esta opción aún no se encuentra disponible. Consulta con el administrador del sistema a partir de qué fecha podrás usarla.
						// 			              </div>
						// 			              <!-- /.card-body -->
						// 			              <div class="card-footer">
									                
						// 			              </div>
						// 			              <!-- /.card-footer-->
						// 			            </div>
						// 			            <!-- /.card -->
						// 			          </div>
						// 			        </div>
						// 			      </div>
						// 			    </section>
						// 			    <!-- /.content -->
						// 			  </div>';

						// file_put_contents("../vista/modulos/".$datos['href'].".php", utf8_encode($contentFile));

						echo json_encode(array('success' => 'Proceso registrado exitosamente', 'sss' => $bandera));
	
					}else{
					
						echo json_encode(array('error' => 'Ocurrió un error al intentar relacionas procesos y perfiles.', 'sss' => $bandera));
					
					}
						

				}else{

					echo json_encode(array('error' => $datosPerfil['descripcion']));	
					
				}
				

			}

		} catch (Exception $e) {
			
			echo json_encode(array('error' => $e->getMessage()));

		}

	}

	/*=================================================================================
	CONSULTA DATOS DE PROCESO
	==================================================================================*/
	public function ctrConsultaDatosProceso(){

		$consultaProceso = ModeloAdministracion::mdlConsultaDatosProceso($_POST['id_proceso']);
		if ($consultaProceso->rowcount() >=1 ) {
			
			$datos = $consultaProceso->fetch();

			$resultado = array('id' => $datos['id'], 'descripcion' => utf8_encode($datos['descripcion']), 'estado' => $datos['estado'], 'id_macro_proceso' => $datos['id_macro_proceso'], 'id_responsable' => $datos['id_responsable'], 'objetivo' => $datos['objetivo'], 'icono' => $datos['icono']);

			echo json_encode($resultado);

		}else{

			echo "No se encontaron información relacionada";
		}

	}

	/*=================================================================================
	ACTUALIZA PROCESOS
	==================================================================================*/
	public function ctrActualizaProceso(){

		try {
			
			// Recibiendo datos
			$datos = [

				'id_usuario'       => $_POST['id_usuario'],
				'proceso'          => $_POST['proceso'],
				'id_macro_proceso' => $_POST['admin_id_macro_proceso'],
				'objetivo'         => $_POST['admin_objetivo'],
				'estado'           => $_POST['admin_estado_proceso'],
				'id_responsable'   => $_POST['admin_id_responsable_proceso'],
				'fecha'            => date('Y-m-d H:i:s'),
				'icono'            => 'fa fa-'.$_POST['icono'],

			];

			// Validación de campos
			if (trim($datos['proceso']) == "" && trim($datos['proceso']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['id_macro_proceso']) == "" && trim($datos['id_macro_proceso']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Macro proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['objetivo']) == "") {

				echo json_encode(array('error' => 'El campo <b>Objetivo</b> es requerido.'));	
				exit();

			}

			if (trim($datos['estado']) == "" && trim($datos['estado']) == 10) {

				echo json_encode(array('error' => 'El campo <b>Estado</b> es requerido.'));	
				exit();

			}

			if (trim($datos['id_responsable']) == "" && trim($datos['id_responsable']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Responsable</b> es requerido.'));	
				exit();

			}

			if (trim($datos['icono']) == "" && trim($datos['icono']) == 0) {

				echo json_encode(array('error' => 'Asegurate de seleccionar un icono.'));	
				exit();

			}

			$actualizaProceso = ModeloAdministracion::mdlActualizaProceso($datos);
			if($actualizaProceso->rowcount() == 1){

				echo json_encode(array('success' => 'Proceso actualizado exitosamente'));

			}else{

				echo json_encode(array('error' => 'Ocurrió un error al intentar actualizar el proceso.'));

			}

		} catch (Exception $e) {

			echo json_encode(array('error' => $e->getMessage()));
		
		}

	}

	/*=================================================================================
	CONSULTA INDICADORES ACTIVOS
	==================================================================================*/
	public function ctrConsultaIndicadoresActivos(){

		$consultaIndicadores = ModeloAdministracion::mdlConsultaIndicadoresActivos();
			
		$datos = $consultaIndicadores->fetchAll();

		return $datos;

	}

	/*=================================================================================
	CONSULTA TIPOS DE INDICADORES ACTIVOS
	==================================================================================*/
	public function ctrConsultaTiposIndicadorActivos(){

		$consultaTipoIndicadores = ModeloAdministracion::mdlConsultaTiposIndicadorActivos();
			
		$datos = $consultaTipoIndicadores->fetchAll();

		return $datos;

	}

	/*=================================================================================
	CONSULTA PERIODICIDAD DE INDICADORES
	==================================================================================*/
	public function ctrConsultaPeriodicidadIndicadores(){

		$consultaPeriodicidadIndicadores = ModeloAdministracion::mdlConsultaPeriodicidadIndicadores();
			
		$datos = $consultaPeriodicidadIndicadores->fetchAll();

		return $datos;

	}

	/*=================================================================================
	REGISTRA KPI
	==================================================================================*/
	public function ctrRegistraKPI(){

		try {

			$bandera = false;
			
			$datos = [

				'id_usuario_crea'  => $_POST['id_usuario'],
				'm_indicador'      => self::limpiaString(utf8_decode(strtoupper(trim($_POST['m_indicador'])))),
				'm_formula'        => self::limpiaString(utf8_decode($_POST['m_formula'])),
				'm_id_proceso'     => $_POST['m_id_proceso'],
				'm_id_responsable' => $_POST['m_id_responsable'],
				'm_tipo_indicador' => $_POST['m_tipo_indicador'],
				'm_periodicidad'   => $_POST['m_periodicidad'],
				'm_meta'           => $_POST['m_meta'],
				'm_estado'         => $_POST['m_estado'],
				'm_gestion_alto'   => $_POST['m_gestion_alto'],
				'm_gestion_medio'  => $_POST['m_gestion_medio'],
				'm_gestion_bajo'   => $_POST['m_gestion_bajo'],
				'fecha'            => date('Y-m-d H:i:s'),

			];

			// Validación de campos
			if (trim($datos['m_indicador']) == "") {

				echo json_encode(array('error' => 'El campo <b>Indicador</b> es requerido.'));	
				exit();

			}

			// Comentado por que el campo es opcional
			// if (trim($datos['m_formula']) == "") {

			// 	echo json_encode(array('error' => 'El campo <b>Fórmula</b> es requerido.'));	
			// 	exit();

			// }

			if (trim($datos['m_id_proceso']) == "" || trim($datos['m_id_proceso']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['m_id_responsable']) == "" || trim($datos['m_id_responsable']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Responsable</b> es requerido.'));	
				exit();

			}

			if (trim($datos['m_tipo_indicador']) == "" || trim($datos['m_tipo_indicador']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Tipo indicador</b> es requerido.'));	
				exit();

			}

			if (trim($datos['m_periodicidad']) == "" || trim($datos['m_periodicidad']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Periodicidad</b> es requerido.'));	
				exit();

			}

			if (trim($datos['m_meta']) == "" || trim($datos['m_meta']) <= 0) {

				echo json_encode(array('error' => 'El valor ingresado en el campo <b>Meta</b> debe ser mayor a cero.'));	
				exit();

			}

			if (trim($datos['m_estado']) == "" || trim($datos['m_estado']) == 10) {

				echo json_encode(array('error' => 'El campo <b>Estado</b> es requerido.'));	
				exit();

			}

			if (trim($datos['m_gestion_bajo']) == "" || trim($datos['m_gestion_bajo']) <= 0 || trim($datos['m_gestion_bajo']) >= trim($datos['m_gestion_medio'])) {

				echo json_encode(array('error' => 'El valor ingresado en la franja roja debe ser mayor a cero y menor que el valor ingresado en la franja naranjada. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion1.png" style="width: 95%;">'));	
				exit();//rango_gestion1.png

			}

			if (trim($datos['m_gestion_medio']) <= 0 || trim($datos['m_gestion_medio']) <= trim($datos['m_gestion_bajo']) || trim($datos['m_gestion_medio']) >= trim($datos['m_gestion_alto'])) {

				echo json_encode(array('error' => 'El valor ingresado en la franja naranjada debe ser mayor a cero,  debe ser mayor que el valor ingresado en la franja roja y menor que el valor ingresado en la franja verde. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion2.png" style="width: 100%; height: 60px;">'));	
				exit();//rango_gestion1.png

			}	

			if (trim($datos['m_gestion_alto']) <= 0 || trim($datos['m_gestion_alto']) <= trim($datos['m_gestion_medio']) || trim($datos['m_gestion_alto']) > 100) {

				echo json_encode(array('error' => 'El valor ingresado en la franja verde debe ser mayor a cero,  debe ser mayor que el valor ingresado en la franja naranjada y menor que 100. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion2.png" style="width: 100%; height: 60px;">'));	
				exit();

			}	

			// Consultamos indicador de a cuerdo al nombre recibido $datos['m_indicador'] pa validar su existencia
			$consultaKPI = ModeloAdministracion::mdlConsultaKPI($datos['m_indicador']);

			if($consultaKPI->rowcount() >= 1){

				// Convertimos en un array asociativo la información consultada del indicador

				$datoskpi = $consultaKPI->fetch(); 
				
				echo json_encode(array('error' => 'El indicador <b>'.$datoskpi['nombre'].'</b> ya se encuentra registrado en el sistema.'));				
			
			}else{

				// Registramos indicador
				$registraIndicador = ModeloAdministracion::mdlRegistraIndicador($datos);
				if($registraIndicador->rowcount() == 1){

					if($datos['m_periodicidad'] == 1){
						// Registrar periodicidad mensual
						$periodos = 'MES ';
						$aumento = 1;
					}else if($datos['m_periodicidad'] == 2){
						// Registrar periodicidad bimestral
						$periodos = 'BIMESTRE ';
						$aumento = 2;
					}else if($datos['m_periodicidad'] == 3){
						// Registrar periodicidad trimestral
						$periodos = 'TRIMESTRE ';
						$aumento = 3;
					}else if($datos['m_periodicidad'] == 4){
						// Registrar periodicidad semestral
						$periodos = 'SEMESTRE ';
						$aumento = 6;
					}else if($datos['m_periodicidad'] == 5){
						// Registrar periodicidad anual
						$periodos = 'AÑO ';
						$aumento = 12;
					}

					$i=$aumento;
					$x = 1;
					while ($i <= 12){
						// Recorremos la cantidad de periodos
						
						if($aumento != 12){

							$periodo = $periodos.$x;
						
						}else{

							$periodo = utf8_decode('AÑO '.date('Y'));	

						}

						// Consultamos el ultimo indicador registrado
						$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

						$registraPeriodoIndicador = ModeloAdministracion::registraPeriodoIndicador($datos, $ultimoIndicador, $periodo, $i, date('Y'));
						
						$i = $i+$aumento;
						$x++;
					
					}

					// Consultamos zonas con la intención de crearle una periodicidad a cada zona de a cuerdo a la periodicidad seleccionada para el indicador.
					$consultaZona = ModeloAdministracion::mdlConsultaZona();
					$datosZona = $consultaZona->fetchAll();

					
					foreach ($datosZona as $zona) {
						
						$i=$aumento;
						$x = 1;
						while ($i <= 12){
							// Recorremos la cantidad de periodos
							
							if($aumento != 12){

								$periodo = $periodos.$x;
							
							}else{

								$periodo = utf8_decode('AÑO '.date('Y'));	

							}

							// Consultamos el ultimo indicador registrado
							$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

							$registraPeriodoIndicador = ModeloAdministracion::mdlRegistraPeriodoZona($datos, $ultimoIndicador, $periodo, $i, date('Y'), $zona['id']);
							
							$i = $i+$aumento;
							$x++;
						
						}						

					}

					echo json_encode(array('success' => 'Indicador registrado exitosamente.'));

				}else{

					echo json_encode(array('error' => 'Ocurrió un error al intentar registrar el indicador.'));	
					
				}
				
			}

		} catch (Exception $e) {
			
			echo json_encode(array('error' => $e->getMessage()));

		}

	}

	/*=================================================================================
	CONSULTA DICADOR
	==================================================================================*/
	public function ctrConsultaIndicador(){

		try {
			
			$consultaIndicador = ModeloAdministracion::mdlConsultaIndicador($_POST['id_indicador']);

			$datosIndicador = $consultaIndicador->fetch();

			echo json_encode(array_map("utf8_encode", $datosIndicador));

		} catch (Exception $e) {
			
			echo json_encode(array('error' => $e->getMessage()));

		}

	}

	/*=================================================================================
	ACTUALIZA INDICADOR
	==================================================================================*/
	public function ctrEditaIndicador(){

		try {
			
			$datos = [

				'indicador'                      => $_POST['indicador'],
				'id_usuario_crea'                => $_POST['id_usuario'],
				'formula'                        => $formula = self::limpiaString(utf8_decode($_POST['formula'])),
				'id_proceso'                     => $_POST['id_proceso'],
				'admin_id_responsable_indicador' => $_POST['admin_id_responsable_indicador'],
				'tipo_indicador'                 => $_POST['tipo_indicador'],
				'm_periodicidad'                 => $_POST['periodicidad'],
				'm_meta'                         => $_POST['meta'],
				'estado'                         => $_POST['estado'],
				'gestion_bajo'                   => $_POST['gestion_bajo'],
				'gestion_medio'                  => $_POST['gestion_medio'],
				'gestion_alto' 					 => $_POST['gestion_alto'],
				'fecha' 					     => date('Y-m-d H:i:s'),
			
			];

			// Validación de campos
			if(trim($datos['indicador']) == "" /*|| trim($datos['indicador']) == 0*/){

				echo json_encode(array('info' => 'El campo <b>Indicador</b> es requerido.'));
				exit();

			}

			// Comentado por que el campo formula es opcional
			// if(trim($datos['formula']) == "" || trim($datos['formula']) == 0){

			// 	echo json_encode(array('info' => 'El campo <b>Indicador</b> es requerido.'));
			// 	exit();

			// }

			if(trim($datos['id_proceso']) == "" || trim($datos['id_proceso']) == 0){

				echo json_encode(array('info' => 'El campo <b>Proceso</b> es requerido.'));
				exit();

			}

			if(trim($datos['admin_id_responsable_indicador']) == "" || trim($datos['admin_id_responsable_indicador']) == 0){

				echo json_encode(array('info' => 'El campo <b>Responsable</b> es requerido.'));
				exit();

			}

			if(trim($datos['tipo_indicador']) == "" || trim($datos['tipo_indicador']) == 0){

				echo json_encode(array('info' => 'El campo <b>Tipo indicador</b> es requerido.'));
				exit();

			}

			if(trim($datos['m_periodicidad']) == "" || trim($datos['m_periodicidad']) == 0){

				echo json_encode(array('info' => 'El campo <b>Periodicidad</b> es requerido.'));
				exit();

			}

			if(trim($datos['m_meta']) == "" || trim($datos['m_meta']) <= 0){

				echo json_encode(array('info' => 'El valor ingresado en el campo <b>Meta</b> debe ser mayor a cero.'));
				exit();

			}

			if(trim($datos['estado']) == "" || trim($datos['estado']) == 10){

				echo json_encode(array('info' => 'El campo <b>Estado</b> es requerido.'));
				exit();

			}

			if (trim($datos['gestion_bajo']) == "" || trim($datos['gestion_bajo']) <= 0 || trim($datos['gestion_bajo']) >= trim($datos['gestion_medio'])) {

				echo json_encode(array('error' => 'El valor ingresado en la franja roja debe ser mayor a cero y menor que el valor ingresado en la franja naranjada. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion1.png" style="width: 95%;">'));	
				exit();

			}

			if (trim($datos['gestion_medio']) <= 0 || trim($datos['gestion_medio']) <= trim($datos['gestion_bajo']) || trim($datos['gestion_medio']) >= trim($datos['gestion_alto'])) {

				echo json_encode(array('error' => 'El valor ingresado en la franja naranjada debe ser mayor a cero,  debe ser mayor que el valor ingresado en la franja roja y menor que el valor ingresado en la franja verde. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion2.png" style="width: 100%; height: 60px;">'));	
				exit();

			}	

			if (trim($datos['gestion_alto']) <= 0 || trim($datos['gestion_alto']) <= trim($datos['gestion_medio']) || trim($datos['gestion_alto']) > 100) {

				echo json_encode(array('error' => 'El valor ingresado en la franja verde debe ser mayor a cero,  debe ser mayor que el valor ingresado en la franja naranjada y menor que 100. Ejemplo:<br><img src="http://alejoposada.info/sie/vista/lib/dist/img/rango_gestion2.png" style="width: 100%; height: 60px;">'));	
				exit();

			}	

			// Consultamos indicador con la intención de validar si ya hay resultados registrados para dicho indicado.
			$consultaIndicador = ModeloAdministracion::mdlConsultaIndicadorResultado($datos['indicador']);
			$datosIndicador = $consultaIndicador->fetchAll();

			// Variable booleana para definir si uno de los periodos consultados tiene resultado.
			$resultadoregistrado = false;
			foreach ($datosIndicador as $key => $value) {
			 	// Analizamos los periodos consultados con la finalidad de validar si alguno tiene resultados registrados.
				if($value['resultado'] != 0){
					
					$resultadoregistrado = true;

				}

			} 

			// Si la variable $resultadoregistrado es igual a false, significa que al menos uno de los periodos ya tiene registrado un resultado;
			if($resultadoregistrado == true){

				echo json_encode(array('info' => 'No es posible actualizar la periodicidad de este indicador. Ya hay periodos que tienen registrado un resultado.')); 

			}else{

				// Función modelo utilizada para editar un indicador
				$registraIndicador = ModeloAdministracion::mdlEditaIndicador($datos);
				if($registraIndicador->rowcount() == 1){

					// Eliminamos la periodicidad actual de un indicador
					$eliminamosPeriodicidad = ModeloAdministracion::mdlEliminaPeriodicidad($datos['indicador'], $datos['id_usuario_crea']);

					// Eliminamos periodicidad actual de las zonas relacionadas al indicador que se intenta actualizar
					$eliminaPeriodicidadZona = ModeloAdministracion::mdlEliminaPeriodicidadZona($datos['indicador'], $datos['id_usuario_crea']);

					if($eliminamosPeriodicidad->rowcount() >= 1 && $eliminaPeriodicidadZona->rowcount() >= 1){

						if($datos['m_periodicidad'] == 1){
							// Registrar periodicidad mensual
							$periodos = 'MES ';
							$aumento = 1;
						}else if($datos['m_periodicidad'] == 2){
							// Registrar periodicidad bimestral
							$periodos = 'BIMESTRE ';
							$aumento = 2;
						}else if($datos['m_periodicidad'] == 3){
							// Registrar periodicidad trimestral
							$periodos = 'TRIMESTRE ';
							$aumento = 3;
						}else if($datos['m_periodicidad'] == 4){
							// Registrar periodicidad semestral
							$periodos = 'SEMESTRE ';
							$aumento = 6;
						}else if($datos['m_periodicidad'] == 5){
							// Registrar periodicidad anual
							$periodos = 'AÑO ';
							$aumento = 12;
						}

						$registro = false;
						$i=$aumento;
						$x = 1;
						while ($i <= 12){
							// Recorremos la cantidad de periodos

							if($aumento != 12){

								$periodo = $periodos.$x;
							
							}else{

								$periodo = utf8_decode('AÑO '.date('Y'));	

							}

							$registraPeriodoIndicador = ModeloAdministracion::registraPeriodoIndicador($datos, $datos['indicador'], $periodo, $i, date('Y'));
							if($registraPeriodoIndicador->rowcount() >= 1){
								// validamos registro de periodo
								$registro = true;
							}	

							$i = $i+$aumento;

							$x++;
						
						}


						// Consultamos zonas con la intención de crearle una periodicidad a cada zona de a cuerdo a la periodicidad seleccionada para el indicador.
						$consultaZona = ModeloAdministracion::mdlConsultaZona();
						$datosZona = $consultaZona->fetchAll();

						foreach ($datosZona as $zona) {
							// Recorremos las zonas consultadas

							$registro = false;
							$i=$aumento;
							$x = 1;
							while ($i <= 12){
								// Recorremos la cantidad de periodos

								if($aumento != 12){

									$periodo = $periodos.$x;
								
								}else{

									$periodo = utf8_decode('AÑO '.date('Y'));	

								}

								$registraPeriodoIndicador = ModeloAdministracion::mdlRegistraPeriodoZona($datos, $datos['indicador'], $periodo, $i, date('Y'), $zona['id']);
								if($registraPeriodoIndicador->rowcount() >= 1){
									// validamos registro de periodo
									$registro = true;
								}	

								$i = $i+$aumento;

								$x++;
							
							}						

						}
						// echo json_encode(array('success' => $datosZona));
						// exit();

						if($registro == true){
							// Si la variable $registro es true significa que el registro es exitoso.

							echo json_encode(array('success' => 'Indicador actualizado exitosamente.'));

						}else{
							
							echo json_encode(array('error' => 'Error al intentar registrar periodos.'));

						}

					}else{

						echo json_encode(array('info' => 'Ocurrió un error al intentar eliminar la periodicidad anterior.')); 

					}

				}else{

					echo json_encode(array('info' => 'No se encontraron cambios.'));

				}

			}	

		} catch (Exception $e) {	
			
			echo json_encode(array('error' => $e->getMessage()));
		
		}

	
	}

	/*=================================================================================
	CONSULTA TIPOS DE ZONA
	==================================================================================*/
	public function ctrConsultaTiposzona(){

		$consultaTipozona = ModeloAdministracion::mdlConsultaTiposzona();

		$datosTipoZona = $consultaTipozona->fetchAll();

		return $datosTipoZona;

	}

	/*=================================================================================
	CONSULTA ZONA
	==================================================================================*/
	public function ctrConsultaZona(){

		$consultaZona = ModeloAdministracion::mdlConsultaZona();

		$datosZona = $consultaZona->fetchAll();

		return $datosZona;

	}

	/*=================================================================================
	REGISTRA ZONA
	==================================================================================*/
	public function ctrRegistraZona(){

		try {
			
			$datos = [

				'id_usuario'      => $_POST['id_usuario'],
				'descripcionzona' => utf8_encode(strtoupper(trim($_POST['m_descripcion_zona']))),
				'tipozona'        => $_POST['m_tipozona'],
				'latitud'         => $_POST['m_latitud'],
				'longitud'        => $_POST['m_longitud'],
				'estado'          => 1,
				'fecha'           => date('Y-m-d H:i:s'),

			];

			// Validación de campos
			if($datos['descripcionzona'] == ""){

				echo json_encode(array('info' => 'El campo <b>Descripción</b> es requerido.'));
				exit();
			
			}

			if($datos['tipozona'] == "" || $datos['tipozona'] == 0){

				echo json_encode(array('info' => 'Asegurate de seleccionar un tipo de zona.'));
				exit();
			
			}

			// Las validaciones a continuación son comentadas porque los campo Longitud y Latitud son opcionales.
			// if($datos['latitud'] == ""){

			// 	echo json_encode(array('info' => 'El campo <b>Latitud</b> es requerido.'));
			// 	exit();
			
			// }

			// if($datos['longitud'] == ""){

			// 	echo json_encode(array('info' => 'El campo <b>Longitud</b> es requerido.'));
			// 	exit();
			
			// }

			$registrazona = ModeloAdministracion::mdlRegistraZona($datos);
			if($registrazona->rowcount() == 1){

				echo json_encode(array('success' => 'Zona registrada exitosamente'));

			}else{

				echo json_encode(array('error' => 'Ocurrió un error al intentar registrar la zona <b>'.$datos['descripcionzona'].'<b>'));

			}

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al registrar zona: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al registrar zona: '.$e->getMessage()));
		
		}

	}

	/*=================================================================================
	CONSULTA SONA MEDIANTE ID
	==================================================================================*/
	public function ctrConsultaZonaId(){

		try {
			
			$consultaZona = ModeloAdministracion::mdlConsultaZonaId($_POST['id_zona']);

			$datosZona = $consultaZona->fetch();

			echo json_encode($datosZona);

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al consultar la zona: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al consultar la zona: '.$e->getMessage()));
		
		}

	}

	/*=================================================================================
	EDICIÓN DE ZONA
	==================================================================================*/
	public function ctrEditaZona(){

		try {
			
			// Datos recibidos mediante el método POST.
			$datos = [

				'id_usuario'      => $_POST['id_usuario'],
				'id_zona'         => $_POST['id_zona'],
				'descripcionzona' => utf8_encode(strtoupper(trim($_POST['descripcion_zona']))),
				'tipozona'        => $_POST['id_tipozona'],
				'latitud'         => $_POST['latitud'],
				'longitud'        => $_POST['longitud'],
				'estado'          => $_POST['estado'],
				'fecha'           => date('Y-m-d H:i:s'),

			];

			// Validación de campos
			if($datos['id_zona'] == "" || $datos['id_zona'] == 0){

				echo json_encode(array('info' => 'Asegurate de seleccionar una zona en el campo <b>Seleccionar zona</b>.'));
				exit();
			
			}	

			if($datos['descripcionzona'] == ""){

				echo json_encode(array('info' => 'El campo <b>Descripción</b> es requerido.'));
				exit();
			
			}

			if($datos['tipozona'] == "" || $datos['tipozona'] == 0){

				echo json_encode(array('info' => 'Asegurate de seleccionar un tipo de zona en el campo <b>Tipo de zona</b>.'));
				exit();
			
			}

			if($datos['estado'] == "" || $datos['estado'] == 10){

				echo json_encode(array('info' => 'Asegurate de seleccionar un estado en el campo <b>Estado</b>.'));
				exit();
			
			}

			// Las validaciones a continuación son comentadas porque los campo Longitud y Latitud son opcionales.
			// if($datos['latitud'] == ""){

			// 	echo json_encode(array('info' => 'El campo <b>Latitud</b> es requerido.'));
			// 	exit();
			
			// }

			// if($datos['longitud'] == ""){

			// 	echo json_encode(array('info' => 'El campo <b>Longitud</b> es requerido.'));
			// 	exit();
			
			// }

			// Ejecutamos función modelo encargada de actualizar la información de una zona en base de datos.
			$actualizaZona = ModeloAdministracion::mdlEditaZona($datos);
			if($actualizaZona->rowcount() == 1){
				// Validamos la cantidad de filas afectadas.

				echo json_encode(array('success' => 'Zona actualizada exitosamente'));

			}else{

				echo json_encode(array('error' => 'Ocurrió un error al intentar actualizar la zona <b>'.$datos['descripcionzona'].'<b>'));

			}

				// echo json_encode(array('data' => $datos));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al actualizar la zona: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al actualizar la zona: '.$e->getMessage()));
		
		}

	}


	/*=================================================================================
	CONSULTA GRUPOS DE ZONA
	==================================================================================*/
	public function ctrConsultaGrupoZona(){

		try{

			$resultado = ModeloAdministracion::mdlConsultaGrupoZona();

			$grupos = $resultado->fetchAll();

			return $grupos;

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al consultar grupos de zona: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al consultar grupos de zona: '.$e->getMessage()));
		
		}	

	}

	/*=================================================================================
	CONSULTA INDICADORES QUE COINCIDAN CON LA DESCRIPCIÓN QUE RECIBE
	==================================================================================*/
	public function ctrConsultaIndicadorDescripcion(){

		try {

			$consultaKPI = ModeloAdministracion::mdlConsultaIndicadorDescripcion($_POST['descripcion_kpi'], $_POST['id_proceso'], $_POST['id_perfil']);

			$datoskpi = $consultaKPI->fetchAll();

			$i=0;	
			foreach ($datoskpi as $value) {
				// Recorro los elementos para decodificar los acentos
				
				$datoskp[$i] = array('id'=> $value['id'], 'nombre' => utf8_encode($value['nombre'])); 
				$i++;

			}

			echo json_encode(array('datoskpi' => $datoskp));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al consultar indicador: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al consultar indicador: '.$e->getMessage()));
		
		}

	}

	public function ctrConsultaIndicadorId(){

		try {
			
			$consultaKPI = ModeloAdministracion::mdlConsultaIndicadorId($_POST['id']);

			$datoskpi = $consultaKPI->fetch();

			echo json_encode(array_map('utf8_encode', $datoskpi));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al error al consultar indicador: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al error al consultar indicador: '.$e->getMessage()));
		
		}

	}


	public function ctrConsultaResultadosIndicador(){

		try {
				
			$anio_anterior = date('Y')-1;
			// Consultamos indicador para validar si tiene una periodicidad definida para el año en curso. Si no la tiene la crearemos.
			$consultaPeriodicidadIndicador = ModeloAdministracion::mdlConsultaPeriodicidadIndicadorAnioEnCurso($_POST['id_kpi'], date('Y'));

			if($consultaPeriodicidadIndicador->rowcount() >= 1){
				// Si el indicador tiene periodicidad creada para el año en curso, los consultamos.

				$consultaResultadosIndicador = ModeloAdministracion::mdlConsultaResultadosIndicador($_POST['id_kpi'], $_POST['fecha_desde'], $_POST['fecha_hasta'], $_POST['id_zona']);

				$mes_desde = substr($_POST['fecha_desde'], 5, 7);
				$ano_desde = substr($_POST['fecha_desde'], 0, 4);

				$resultados = $consultaResultadosIndicador->fetchAll();
				$i = 0;
				foreach ($resultados as $value) {
					// Recorremos los resultados para codificar en utf8 los acentos o tildes encontradas en los textos.

					$resultadoIndicador = ModeloAdministracion::mdlConsultaResultadosIndicadorUnico($_POST['id_kpi'], $value['periodo'], $ano_desde);
					$resultadoIndicador = $resultadoIndicador->fetch();

					
					// Si tenemos todas las zonas seleccionadas y la suma de estas es cero consultamos el resultado del indicador.
					if($_POST['id_zona'] == 9999 && $value['resultado'] != 0){		

						// Consultamos la cantodad de zonas que tienen registrado un resultado.
						$cantidadzonasResultado = ModeloAdministracion::mdlConsultaCantidadResultadosIndicadorVeredas($_POST['id_kpi'], $value['periodo'], $ano_desde);
						$cantidadzonasResultado = $cantidadzonasResultado->fetch();				

						$resultado  = round($value['resultado'] / $cantidadzonasResultado['cantidad']);
						$fecha_registro = $cantidadzonasResultado['fecha_registro_resultado'];
						$id_usuario_obtenido = $cantidadzonasResultado['id_usuario_registro_resultado'];


					}else{

						$cantidadzonasResultado = ModeloAdministracion::mdlConsultaCantidadResultadosIndicadorVeredas($_POST['id_kpi'], $value['periodo'], $ano_desde);
						$cantidadzonasResultado = $cantidadzonasResultado->fetch();
						if($_POST['id_zona'] == 9999 && $cantidadzonasResultado['cantidad'] >= 0){

							$resultado = $resultadoIndicador['resultado'];
							$fecha_registro = $resultadoIndicador['fecha_registro_resultado'];
							$id_usuario_obtenido = $resultadoIndicador['id_usuario_registro_resultado'];

						}else{

							$resultado = $value['resultado'];
							$fecha_registro = $value['fecha_registro_resultado'];	
							$fecha_registro = $value['fecha_registro_resultado'];	
							$id_usuario_obtenido = $resultadoIndicador['id_usuario_registro_resultado'];
						
						}


					}

					// Consultamos nombre del usuario que registró el resultado iterado de acuerdo al id_usuario_registro_resultado iterado.
					$consultaNombreUsuario = ModeloAdministracion::mdlConsultaUsuariosId($id_usuario_obtenido);
					// Convertimos en un arreglo asociativo el resultado eobtenido al consultar un usuario.
					$resultadoUsuario = $consultaNombreUsuario->fetch();

					// Calclamos valor para determinar el estado del periodo.
					// El método round es utilizado para redondear un número.fecha_registro_resultado
					$porcentaje = $resultado;
					$datos[$i] = array('id_indicador' => $value['id_indicador'], 'nombre' => utf8_encode($value['nombre']), 'desc_proceso' => utf8_encode($value['desc_proceso']), 'periodo' => $value['periodo'], 'resultado' => $resultado, 'id_usuario_registro_resultado' => $value['id_usuario_registro_resultado'], 'nombre_usuario_registra_resultado' => $resultadoUsuario['nombres'].' '.$resultadoUsuario['apellidos'], 'fecha_registro_resultado' => trim($fecha_registro), 'meta' => $value['meta'], 'gestion_alto' => $value['gestion_alto'], 'gestion_medio' => $value['gestion_medio'], 'gestion_bajo' => $value['gestion_bajo'], 'porcentaje' => $porcentaje, 'id_perfil' => $resultadoUsuario['id_perfil'], 'id_periodo_indicador' => $value['id_periodo_indicador'], 'mes' => $value['mes']);
							
					$i++;
							
				}

				echo json_encode($datos);

			}else{

				// Consultamos periodicidad del año anterior
				$consultaPeriodicidadIndicador = ModeloAdministracion::mdlConsultaPeriodicidadIndicadorAnioEnCurso($_POST['id_kpi'], $anio_anterior);

				if($consultaPeriodicidadIndicador->rowcount() >= 1){
					$consultaPeriodicidadIndicador = $consultaPeriodicidadIndicador->fetch();

					$datosIperiodo = [
						'm_periodicidad'  => $consultaPeriodicidadIndicador['id_periodicidad'],
						'id_usuario_crea' => $consultaPeriodicidadIndicador['id_usuario_registro_resultado'],
						'm_meta'          => $consultaPeriodicidadIndicador['meta'],
					];

					// Validando Periodicidad
					if($datosIperiodo['m_periodicidad'] == 1){
						// Registrar periodicidad mensual
						$periodos = 'MES ';
						$aumento = 1;
					}else if($datosIperiodo['m_periodicidad'] == 2){
						// Registrar periodicidad bimestral
						$periodos = 'BIMESTRE ';
						$aumento = 2;
					}else if($datosIperiodo['m_periodicidad'] == 3){
						// Registrar periodicidad trimestral
						$periodos = 'TRIMESTRE ';
						$aumento = 3;
					}else if($datosIperiodo['m_periodicidad'] == 4){
						// Registrar periodicidad semestral
						$periodos = 'SEMESTRE ';
						$aumento = 6;
					}else if($datosIperiodo['m_periodicidad'] == 5){
						// Registrar periodicidad anual
						$periodos = 'AÑO ';
						$aumento = 12;
					}

					$i=$aumento;
					$x = 1;
					while ($i <= 12){
						// Recorremos la cantidad de periodos
						
						if($aumento != 12){

							$periodo = $periodos.$x;
						
						}else{

							$periodo = utf8_decode('AÑO '.date('Y'));	

						}

						// Consultamos el ultimo indicador registrado
						$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

						$registraPeriodoIndicador = ModeloAdministracion::registraPeriodoIndicador($datosIperiodo, $_POST['id_kpi'], $periodo, $i, date('Y'));
						
						$i = $i+$aumento;
						$x++;
					
					}

					// Consultamos zonas con la intención de crearle una periodicidad a cada zona de a cuerdo a la periodicidad seleccionada para el indicador.
					$consultaZona = ModeloAdministracion::mdlConsultaZona();
					$datosZona = $consultaZona->fetchAll();

					
					foreach ($datosZona as $zona) {
						
						$i=$aumento;
						$x = 1;
						while ($i <= 12){
							// Recorremos la cantidad de periodos
							
							if($aumento != 12){

								$periodo = $periodos.$x;
							
							}else{

								$periodo = utf8_decode('AÑO '.date('Y'));

							}

							// Consultamos el ultimo indicador registrado
							$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

							$registraPeriodoIndicador = ModeloAdministracion::mdlRegistraPeriodoZona($datosIperiodo, $ultimoIndicador, $periodo, $i, date('Y'), $zona['id']);
							if($registraPeriodoIndicador->rowcount() >= 1){
								$registrado = true;
							}		

							$i = $i+$aumento;
							$x++;
						
						}						

					}

					
					if($registrado == true){

						$consultaResultadosIndicador = ModeloAdministracion::mdlConsultaResultadosIndicador($_POST['id_kpi'], $_POST['fecha_desde'], $_POST['fecha_hasta'], $_POST['id_zona']);

						$ano_desde = substr($_POST['fecha_desde'], 5, 7);
						$mes_desde = substr($_POST['fecha_desde'], 0, 4);

						$resultados = $consultaResultadosIndicador->fetchAll();

						$i = 0;
						foreach ($resultados as $value) {
							// Recorremos los resultados para codificar en utf8 los acentos o tildes encontradas en los textos.

							// Consultamos nombre del usuario que registró el resultado iterado de acuerdo al id_usuario_registro_resultado iterado.
							$consultaNombreUsuario = ModeloAdministracion::mdlConsultaUsuariosId($value['id_usuario_registro_resultado']);
							// Convertimos en un arreglo asociativo el resultado eobtenido al consultar un usuario.
							$resultadoUsuario = $consultaNombreUsuario->fetch();

							// Validamos fecha recibida, la definimos como vacía.
							if($value['fecha_registro_resultado'] == ''){
								$value = array_replace($value, array('fecha_registro_resultado' => ''));
							}
							// Calclamos valor para determinar el estado del periodo.
							// El método round es utilizado para redondear un número.
							$porcentaje = round((($value['resultado'] * 100) / $value['meta']));
							$datos[$i] = array('id_indicador' => $value['id_indicador'], 'nombre' => utf8_encode($value['nombre']), 'desc_proceso' => utf8_encode($value['desc_proceso']), 'periodo' => $value['periodo'], 'resultado' => $value['resultado'], 'id_usuario_registro_resultado' => $value['id_usuario_registro_resultado'], 'nombre_usuario_registra_resultado' => $resultadoUsuario['nombres'].' '.$resultadoUsuario['apellidos'].' '.$mes_desde, 'fecha_registro_resultado' => $value['fecha_registro_resultado'], 'meta' => $value['meta'], 'gestion_alto' => $value['gestion_alto'], 'gestion_medio' => $value['gestion_medio'], 'gestion_bajo' => $value['gestion_bajo'], 'porcentaje' => $porcentaje, 'id_perfil' => $resultadoUsuario['id_perfil'], 'id_periodo_indicador' => $value['id_periodo_indicador'], 'mes' => $value['mes']);
							
							$i++;
							
						}

						echo json_encode($datos);

					}else{

						echo json_encode(array('error' => 'Lo sentimos'));

					}
				}else{

					echo json_encode(array('error' => 'El anó anterior no tiene una periodicidad registrada para tomarla como referencia y crear las periodicidades para el año actual'));	

				}



				// exit();

				// Validando Periodicidad
					// if($datos['m_periodicidad'] == 1){
					// 	// Registrar periodicidad mensual
					// 	$periodos = 'MES ';
					// 	$aumento = 1;
					// }else if($datos['m_periodicidad'] == 2){
					// 	// Registrar periodicidad bimestral
					// 	$periodos = 'BIMESTRE ';
					// 	$aumento = 2;
					// }else if($datos['m_periodicidad'] == 3){
					// 	// Registrar periodicidad trimestral
					// 	$periodos = 'TRIMESTRE ';
					// 	$aumento = 3;
					// }else if($datos['m_periodicidad'] == 4){
					// 	// Registrar periodicidad semestral
					// 	$periodos = 'SEMESTRE ';
					// 	$aumento = 6;
					// }else if($datos['m_periodicidad'] == 5){
					// 	// Registrar periodicidad anual
					// 	$periodos = 'AÑO ';
					// 	$aumento = 12;
					// }

					// $i=$aumento;
					// $x = 1;
					// while ($i <= 12){
					// 	// Recorremos la cantidad de periodos
						
					// 	if($aumento != 12){

					// 		$periodo = $periodos.$x;
						
					// 	}else{

					// 		$periodo = utf8_decode('AÑO '.date('Y'));	

					// 	}

					// 	// Consultamos el ultimo indicador registrado
					// 	$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

					// 	$registraPeriodoIndicador = ModeloAdministracion::registraPeriodoIndicador($datos, $ultimoIndicador, $periodo, $i, date('Y'));
						
					// 	$i = $i+$aumento;
					// 	$x++;
					
					// }

					// // Consultamos zonas con la intención de crearle una periodicidad a cada zona de a cuerdo a la periodicidad seleccionada para el indicador.
					// $consultaZona = ModeloAdministracion::mdlConsultaZona();
					// $datosZona = $consultaZona->fetchAll();

					// $registrado = false;
					// foreach ($datosZona as $zona) {
						
					// 	$i=$aumento;
					// 	$x = 1;
					// 	while ($i <= 12){
					// 		// Recorremos la cantidad de periodos
							
					// 		if($aumento != 12){

					// 			$periodo = $periodos.$x;
							
					// 		}else{

					// 			$periodo = utf8_decode('AÑO '.date('Y'));	

					// 		}

					// 		// Consultamos el ultimo indicador registrado
					// 		$ultimoIndicador = ModeloAdministracion::mdlConsultaUltimoIndicador();

					// 		$registraPeriodoIndicador = ModeloAdministracion::mdlRegistraPeriodoZona($datos, $ultimoIndicador, $periodo, $i, date('Y'), $zona['id']);
					// 		if($registraPeriodoIndicador->rowcount() >= 1){
					// 			$registrado = true;
					// 		}	

					// 		$i = $i+$aumento;
					// 		$x++;
						
					// 	}						

					// }



			}


			// $consultaResultadosIndicador = ModeloAdministracion::mdlConsultaResultadosIndicador($_POST['id_kpi'], $_POST['fecha_desde'], $_POST['fecha_hasta'], $_POST['id_zona']);

			// $ano_desde = substr($_POST['fecha_desde'], 5, 7);
			// $mes_desde = substr($_POST['fecha_desde'], 0, 4);

			// $resultados = $consultaResultadosIndicador->fetchAll();

			// $i = 0;
			// foreach ($resultados as $value) {
			// 	// Recorremos los resultados para codificar en utf8 los acentos o tildes encontradas en los textos.

			// 	// Consultamos nombre del usuario que registró el resultado iterado de acuerdo al id_usuario_registro_resultado iterado.
			// 	$consultaNombreUsuario = ModeloAdministracion::mdlConsultaUsuariosId($value['id_usuario_registro_resultado']);
			// 	// Convertimos en un arreglo asociativo el resultado eobtenido al consultar un usuario.
			// 	$resultadoUsuario = $consultaNombreUsuario->fetch();

			// 	// Calclamos valor para determinar el estado del periodo.
			// 	// El método round es utilizado para redondear un número.
			// 	$porcentaje = round((($value['resultado'] * 100) / $value['meta']));
			// 	$datos[$i] = array('id_indicador' => $value['id_indicador'], 'nombre' => utf8_encode($value['nombre']), 'desc_proceso' => utf8_encode($value['desc_proceso']), 'periodo' => $value['periodo'], 'resultado' => $value['resultado'], 'id_usuario_registro_resultado' => $value['id_usuario_registro_resultado'], 'nombre_usuario_registra_resultado' => $resultadoUsuario['nombres'].' '.$resultadoUsuario['apellidos'].' '.$mes_desde, 'fecha_registro_resultado' => $value['fecha_registro_resultado'], 'meta' => $value['meta'], 'gestion_alto' => $value['gestion_alto'], 'gestion_medio' => $value['gestion_medio'], 'gestion_bajo' => $value['gestion_bajo'], 'porcentaje' => $porcentaje, 'id_perfil' => $resultadoUsuario['id_perfil'], 'id_periodo_indicador' => $value['id_periodo_indicador'], 'mes' => $value['mes']);
				
			// 	$i++;
				
			// }

			// echo json_encode($datos);

			// echo json_encode(array('error' => 'Error al error al consultar los resultados de un indicador: '));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al error al consultar los resultados de un indicador: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al error al consultar los resultados de un indicador: '.$e->getMessage()));
		
		}

	}

	/*=================================================================================
	REGISTRA RESULTADOS DE UN INDICADOR
	==================================================================================*/
	public function ctrRegistraResultadosIndicador(){

		try {
			
			$datos = [

				'id_usuario'   => $_POST['id_usuario'], 
				'id_result'    => $_POST['id_result'], // id del registro de la tabla: sie_periodos_indicadores_veredas
				'id_indicador' => $_POST['id_indicador'],
				'resultado'    => $_POST['resultado'],
				'periodo'      => $_POST['periodo'],
				'c'            => $_POST['c'],
				'mes'          => $_POST['mes'],
				'fecha'        => date('Y-m-d H:i:s'),
				'mes'          => $_POST['mes'],
				'fecha_desde'  => $_POST['fecha_desde'],
				'fecha_hasta'  => $_POST['fecha_hasta'],
				'id_zona'      => $_POST['id_zona'],
				'anio'         => substr($_POST['fecha_desde'], 0, 4),
			];

			if(trim($datos['resultado']) == "" || trim($datos['resultado']) == 0){

				echo json_encode(array('info' => 'Asegurate de ingresar un resultado.'));
				exit();

			}

			// Consultamos periodo indicador
			$consultaPeriodoIndicador = ModeloAdministracion::mdlConsultaPeriodoIndicador($datos['id_indicador'], $datos['mes']);
			$datosPeriodoIndicador = $consultaPeriodoIndicador->fetch();

			$datosPeriodoIndicador = array_map("utf8_encode", $datosPeriodoIndicador);
			
			// if($datosPeriodoIndicador['resultado'] > 0 && $datos['c'] == 0){
			//     // Validamos si el periodo indicador tiene registrado un resultado.

			// 	echo json_encode(array('confirm' => '<p style="text-align: left;">Se dispone a registrar un resultado para el indicador <b>'.$datosPeriodoIndicador['nombre'].'</b> para el <b>'.$datosPeriodoIndicador['periodo'].'</b>, este indicador ya tiene un resultado registrado para algunas zonas, si continúa con el registro, los resultados serán reemplazados por el nuevo resultado. ¿Desea continuar?</p>'));
			// 	exit();

			// }else{

				// Condicional para determinar si los resultado se registrarán a un periodo
				if($datos['id_zona'] == 0 || $datos['id_zona'] == 9999){

					// Eliminamos resultado actual de cada una de las zonas relacionadas al indicador.
					$eliminaResultadoZonas = ModeloAdministracion::mdlEliminaResultadozonas($datos['id_result'], $datos['id_indicador'], $datos['periodo'], $datos['anio']);

					$registraResultado = ModeloAdministracion::mdlRegistraResultadosIndicador($datos, '');
					if($registraResultado->rowcount() >=1 ){
				
						echo json_encode(array('success' => 'Resultado registrado exitosamente', 'data' => $datos));
						
					}else{

						echo json_encode(array('error' => 'Ocurrió un error en el servidor al intentar registrar el resultado_', 'data' => $datos));
						// echo json_encode(array('Suma_Resultados' => $suma_resultados, 'cantidad_zonas' => $cantidad_zonas, 'promedio' => $promedio));
					
					}

				}else{

					// Registramos resultado de periodo para una vereda.
					$registraResultadoVereda = ModeloAdministracion::mdlRegistraResultadosIndicadorVereda($datos);
					if($registraResultadoVereda->rowcount() >=1 ){
						
						// Consultamos cantidad de zonas con una periodicidad similar y la suma de sus resultados. 
						$consultaZona = ModeloAdministracion::mdlConsultaSumaResultadosZona($datos['id_indicador'], $datos['periodo']);
						$datosZona = $consultaZona->fetch();

						// Cantidad de zonas y suma de resultados
						$suma_resultados = $datosZona['suma_resultados'];
						$cantidad_zonas  = $datosZona['cantidad_zonas'];
						// Resultado promedio
						$promedio = $suma_resultados / $cantidad_zonas;

						// Registramos resultado promedio.
						$registraResultado = ModeloAdministracion::mdlRegistraResultadosIndicador($datos, $promedio);
						if($registraResultado->rowcount() >=1 ){
							// Validamos registro

							echo json_encode(array('success' => 'Registro exitoso'));
							exit();
						}else{

							echo json_encode(array('error' => 'Ocurrió un error en el servidor al intentar registrar el resultado de indicador.'));
							// echo json_encode(array('Suma_Resultados' => $suma_resultados, 'cantidad_zonas' => $cantidad_zonas, 'promedio' => $promedio));
						
						}
						
					}else{

						echo json_encode(array('error' => 'Ocurrió un error en el servidor al intentar registrar el resultado'));
						echo json_encode(array('error' => $datos));
					
					}
				}

			// }

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al error al registrar el resultado del indicador: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al error al registrar el resultado del indicador: '.$e->getMessage()));
		
		}

	}

	/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
	==================================================================================*/
	public function ctrConsultaIndicadorGrafica(){

		try {
			
			$datos = [

				'id_usuario'        => $_POST['id_usuario'],
				'fecha_desde'       => $_POST['fecha_desde'],
				'fecha_hasta'       => $_POST['fecha_hasta'],
				'id_proceso'        => $_POST['id_proceso'],
				'id_proceso_actual' => $_POST['id_proceso_actual'],
				'id_perfil'         => $_POST['id_perfil'],
				'ano_desde'         => substr($_POST['fecha_desde'], 0, 4),
				'mes_desde'         => substr($_POST['fecha_desde'], 5, 7),
				'ano_hasta'         => substr($_POST['fecha_hasta'], 0, 4),
				'mes_hasta'         => substr($_POST['fecha_hasta'], 5, 7),
			
			];


			$agrupaIndicadores = ModeloAdministracion::mdlAgrupaIndicadorGrafica($_POST['fecha_desde'], $_POST['fecha_hasta'], $_POST['id_proceso'], $_POST['id_proceso_actual'], $_POST['id_perfil']);
			$datosResultado = $agrupaIndicadores->fetchAll();

			$i = 0;
			foreach ($datosResultado as $value) {

				$consultaIndicador = ModeloAdministracion::mdlConsultaIndicadorGrafica($_POST['fecha_desde'], $_POST['fecha_hasta'], $value['id_indicador']);
				$resultadoIndicador = $consultaIndicador->fetchAll();

				$x=0;
				foreach ($resultadoIndicador as $key => $value) {

					$datosIndicador[$x] = array('id_proceso' => $value['id_proceso'], 'id_indicador' => $value['id_indicador'], 'ano_desde' => $datos['ano_desde'], 'mes_desde' => $datos['mes_desde'], 'ano_hasta' => $datos['ano_hasta'], 'mes_hasta' => $datos['mes_hasta'], 'nombre' => utf8_encode($value['nombre']), 'periodicidad' => $value['periodicidad'], 'periodo' => $value['periodo'], 'meta' => $value['meta'], 'resultado' => $value['resultado']);
					$x++;

				}

				$datosr[$i] = $datosIndicador;

				$i++;

			}
			// $datosr[$i] = $datos;
			echo json_encode(array('datos' => $datosr));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error: '.$e->getMessage()));
		
		}

	}

	/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
	==================================================================================*/
	public function ctrConsultaIndicadorGraficaVereda(){

		try {
			
			$datos = [

				'id_usuario'   => $_POST['id_usuario'],
				'fecha_desde'  => $_POST['fecha_desde_modal'],
				'fecha_hasta'  => $_POST['fecha_hasta_modal'],
				'id_proceso'   => $_POST['id_proceso_modal'],
				// 'id_proceso_actual' => $_POST['id_proceso_actual'],
				'id_grupo'     => $_POST['id_grupo_zona'],
				'id_indicador' => $_POST['id_indicador_modal'],
				'ano_desde'    => substr($_POST['fecha_desde_modal'], 0, 4),
				'mes_desde'    => substr($_POST['fecha_desde_modal'], 5, 7),
				'ano_hasta'    => substr($_POST['fecha_hasta_modal'], 0, 4),
				'mes_hasta'    => substr($_POST['fecha_hasta_modal'], 5, 7),
				'vereda1'      => strtoupper(utf8_decode($_POST['vereda1'])),
				'vereda2'      => strtoupper(utf8_decode($_POST['vereda2'])),
				'vereda3'      => strtoupper(utf8_decode($_POST['vereda3'])),
			
			];


			$agrupaIndicadores = ModeloAdministracion::mdlAgrupaIndicadorGraficaVereda($datos['ano_desde'], $datos['mes_desde'], $datos['ano_hasta'], $datos['mes_hasta'], $datos['id_indicador'], $datos['id_proceso'], $datos['id_grupo'], $datos['vereda1'], $datos['vereda2'], $datos['vereda3']);
			$datosResultado = $agrupaIndicadores->fetchAll();

			$i = 0;
			foreach ($datosResultado as $value) {

				$consultaIndicador = ModeloAdministracion::mdlConsultaIndicadorGraficaVereda($datos['ano_desde'], $datos['mes_desde'], $datos['ano_hasta'], $datos['mes_hasta'], $value['id_zona'], $value['id_indicador'], $value['id_proceso']);
				$resultadoIndicador = $consultaIndicador->fetchAll();

				$x=0;
				foreach ($resultadoIndicador as $key => $value) {

					$datosIndicador[$x] = array('descripcion' => utf8_encode($value['descripcion']), 'id_proceso' => $value['id_proceso'], 'id_indicador' => $value['id_indicador'], 'ano_desde' => $datos['ano_desde'], 'mes_desde' => $datos['mes_desde'], 'ano_hasta' => $datos['ano_hasta'], 'mes_hasta' => $datos['mes_hasta'], 'nombre' => utf8_encode($value['nombre']), 'periodo' => $value['periodo'], 'meta' => $value['meta'], 'resultado' => $value['resultado'], 'id_zona' => $value['id_zona'], 'id_grupo_zona' => $value['id_grupo']);
					$x++;

				}

				$datosr[$i] = $datosIndicador;

				$i++;

			}
			// $datosr[$i] = $datos;
			echo json_encode(array('datos' => $datosr));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error al error al registrar el resultado del indicador: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error al error al registrar el resultado del indicador: '.$e->getMessage()));
		
		}

	}

		/*=================================================================================
		CONSULTA INDICADORES (Puebla graficas)
	==================================================================================*/
	public function ctrConsultaIndicadorGraficaComparaVereda(){

		try {
			
			$datos = [
				
				'id_usuario'   => $_POST['id_usuario'],
				'fecha_desde'  => $_POST['fecha_desde_modal_compara_vereda'],
				'fecha_hasta'  => $_POST['fecha_hasta_modal_compara_vereda'],
				'id_proceso'   => $_POST['id_proceso_modal_compara_vereda'],
				'id_grupo_zona'=> $_POST['id_grupo_zona_compara_vereda'],
				'periodicidad' => $_POST['periodicidad_modal_compara_vereda'],

				// 'id_proceso_actual' => $_POST['id_proceso_actual'],
				'id_indicador' => $_POST['id_indicador_modal_compara_vereda'],
				'ano_desde'    => substr($_POST['fecha_desde_modal_compara_vereda'], 0, 4),
				'mes_desde'    => substr($_POST['fecha_desde_modal_compara_vereda'], 5, 7),
				'ano_hasta'    => substr($_POST['fecha_hasta_modal_compara_vereda'], 0, 4),
				'mes_hasta'    => substr($_POST['fecha_hasta_modal_compara_vereda'], 5, 7),
			
			];

			// Validamos la periodicidad recibida y de a cuerdo aesta definimos cuanto aumentará $i en cada iteración del ciclo. 

			$y = 0; // Aumento de mes
			$mes = $datos['mes_desde']; // Mes de inicio
			if ($datos['periodicidad']=="MENSUAL") {
				
				$y = 1; 

			}else if ($datos['periodicidad']=="BIMESTRAL") {
				
				$y = 2; 

			}else if ($datos['periodicidad']=="TRIMESTRAL") {
				
				$y = 3; 

			}else if ($datos['periodicidad']=="SEMESTRAL") {
				
				$y = 6; 

			}else if ($datos['periodicidad']=="ANUAL") {
				
				$y = 12; 

			}

			$i=0;
			while ( $mes <= $datos['mes_hasta']) {

				if($datos['periodicidad']=="TRIMESTRAL" && ($mes == 1 || $mes == 2)){
					$mes = 3;
				}else if($datos['periodicidad']=="TRIMESTRAL" && ($mes == 4 || $mes == 5)){
					$mes = 6;
				}else if($datos['periodicidad']=="TRIMESTRAL" && ($mes == 7 || $mes == 8)){
					$mes = 9;
				}else if($datos['periodicidad']=="TRIMESTRAL" && ($mes == 10 || $mes == 11)){
					$mes = 12;
				}


				if($datos['periodicidad']=="BIMESTRAL" && $mes == 1){
					$mes = 2;
				}else if($datos['periodicidad']=="BIMESTRAL" && $mes == 3){
					$mes = 4;
				}else if($datos['periodicidad']=="BIMESTRAL" && $mes == 5 ){
					$mes = 6;
				}else if($datos['periodicidad']=="BIMESTRAL" && $mes == 7 ){
					$mes = 8;
				}else if($datos['periodicidad']=="BIMESTRAL" && $mes == 9 ){
					$mes = 10;
				}else if($datos['periodicidad']=="BIMESTRAL" && $mes == 11 ){
					$mes = 12;
				}

				if($datos['periodicidad']=="SEMESTRAL" && ($mes == 1 || $mes == 2 || $mes == 3 || $mes == 4 || $mes == 5)){
					$mes = 6;
				}else if($datos['periodicidad']=="SEMESTRAL" && ($mes == 7 || $mes == 8 || $mes == 9 || $mes == 10 || $mes == 11)){
					$mes = 12;
				}


				$agrupaIndicadores = ModeloAdministracion::mdlConsultaIndicadorGraficaComparaVereda($datos['ano_desde'], $datos['mes_desde'], $datos['ano_hasta'], $datos['mes_hasta'], $datos['id_indicador'], $datos['id_proceso'], $mes, $datos['id_grupo_zona']);
				$datosResultado = $agrupaIndicadores->fetchAll();

				$x = 0;
				foreach ($datosResultado as $value) {

						$datosIndicador[$x] = array('descripcion' => utf8_encode($value['descripcion']), 'id_proceso' => $value['id_proceso'], 'id_indicador' => $value['id_indicador'], 'ano_desde' => $datos['ano_desde'], 'mes_desde' => $datos['mes_desde'], 'ano_hasta' => $datos['ano_hasta'], 'mes_hasta' => $datos['mes_hasta'], 'nombre' => utf8_encode($value['nombre']), 'periodo' => $value['periodo'], 'meta' => $value['meta'], 'resultado' => $value['resultado'], 'id_grupo_zona' => $value['id_grupo'],'id_zona' => $value['id_zona'], 'mes' => $mes);

				   $x++;
				   		
				}

				$mes = $mes+$y;

				$datosr[$i] = $datosIndicador;

				$i++;

			}
			// $datosr[$i] = $datos;
			echo json_encode(array('datos' => $datosr));

		}catch (Throwable $t){
			// Capturamos errores de ejecución.

			echo json_encode(array('error' => 'Error: '.$t));
		
		}catch (Exception $e){
			// Captura excepciones relacionadas con la base de datos.

			echo json_encode(array('error' => 'Error: '.$e->getMessage()));
		
		}

	}



	

	/*=================================================================================
		CONSULTA INFORME INDICADOR
	==================================================================================*/
	public function ctrConsultaInformeIndicador($id_proceso, $id_indicador, $ano_desde, $ano_hasta, $mes_desde, $mes_hasta){

		try {

			$resultadoInforme = ModeloAdministracion::mdlConsultaInformeIndicador($id_proceso, $id_indicador, $ano_desde, $ano_hasta, $mes_desde, $mes_hasta);
			$resultadoInforme = $resultadoInforme->fetchAll();
			return $resultadoInforme;

		}catch (Throwable $t){ 
			echo "Error: ".$t;
		}catch (Exception $e) {
			echo "Error: ".$e->getMessage();
		}

	}

	/*=================================================================================
		CONSULTA INFORME VEREDA INDICADOR
	==================================================================================*/
	public function ctrConsultaInformeIndicadorVereda($id_proceso, $id_indicador, $ano_desde, $ano_hasta, $mes_desde, $mes_hasta, $id_zona){

		try {

			$resultadoInforme = ModeloAdministracion::mdlConsultaInformeIndicadorVereda($id_proceso, $id_indicador, $ano_desde, $ano_hasta, $mes_desde, $mes_hasta, $id_zona);
			$resultadoInforme = $resultadoInforme->fetchAll();
			return $resultadoInforme;

		}catch (Throwable $t){ 
			echo "Error: ".$t;
		}catch (Exception $e) {
			echo "Error: ".$e->getMessage();
		}

	}

	/*=================================================================================
		CONSULTA INFORME COMPARA VEREDA INDICADOR
	==================================================================================*/
	public function ctrConsultaInformeIndicadorComparaVereda($id_proceso, $id_indicador, $mes,  $id_grupo_zona){

		try {

			$resultadoInforme = ModeloAdministracion::mdlConsultaInformeIndicadorComparaVereda($id_proceso, $id_indicador, $mes,  $id_grupo_zona);
			$resultadoInforme = $resultadoInforme->fetchAll();
			return $resultadoInforme;

		}catch (Throwable $t){ 
			echo "Error: ".$t;
		}catch (Exception $e) {
			echo "Error: ".$e->getMessage();
		}

	}
	

}

	// En el siguiente código se ejecutan funciones controladoras de a cuerdo a las peticiones ajax realizadas.
	if(isset($_POST['accion'])) {

		$objadministracion = new Controladoradministracion();
		
		if($_POST['accion'] == "registrar_usuario"){

			$objadministracion->ctrRegistraUsuario();
		
		}

		if($_POST['accion'] == "consultar_usuario"){

			$objadministracion->ctrConsultaUsuario();
		
		}

		if($_POST['accion'] == "registrar_proceso"){

			$objadministracion->ctrRegistraProceso();
		
		}

		if($_POST['accion'] == "consulta_proceso"){

			$objadministracion->ctrConsultaDatosProceso();

		}

		if($_POST['accion'] == "edita_proceso"){

			$objadministracion->ctrActualizaProceso();
		
		}


		// ---------------------------------------------- Ejecuta funciones controladoras gestión de kpi -----------------------------------------------------

		if($_POST['accion'] == "registrar_kpi"){

			$objadministracion->ctrRegistraKPI();
		
		}

		if($_POST['accion'] == "consulta_indicador"){

			$objadministracion->ctrConsultaIndicador();
		
		}

		if($_POST['accion'] == "edita_indicador"){

			$objadministracion->ctrEditaIndicador();

			// echo json_encode(array('info' => 'Esta opción se encuentra en desarrollo.'));

		}

		// ------------------------------------------------ Ejecuta funciones controladoras gestión de zonas ------------------------------------------------

		if($_POST['accion'] == "registrar_zona"){

			$objadministracion->ctrRegistraZona();

			// echo json_encode(array('info' => 'Esta opción se encuentra en desarrollo XXX.'));

		}	

		if($_POST['accion'] == "consulta_zona"){

			$objadministracion->ctrConsultaZonaId();		

		}

		if($_POST['accion'] == "edita_zona"){

			$objadministracion->ctrEditaZona();		

		}

		if($_POST['accion'] == "consulta_indicador_descripcion"){

			$objadministracion->ctrConsultaIndicadorDescripcion();		

		}

		if($_POST['accion'] == "consulta_indicador_id"){

			$objadministracion->ctrConsultaIndicadorId();		

		}	


		if($_POST['accion'] == "consulta_resultados_indicador"){

			$objadministracion->ctrConsultaResultadosIndicador();		

		}		

		if($_POST['accion'] == "registrar_resultado_indicador"){

			$objadministracion->ctrRegistraResultadosIndicador();		

		}

		// ------------------------------------------------------ Informe indicadores -----------------------------------------------------
		if($_POST['accion'] == 'informe_meta_resultado'){

			$objadministracion->ctrConsultaIndicadorGrafica();

		}

		if($_POST['accion'] == 'informe_indicadores_veredas'){

			$objadministracion->ctrConsultaIndicadorGraficaVereda();

		}

		if($_POST['accion'] == 'informe_indicadores_compara_veredas'){

			$objadministracion->ctrConsultaIndicadorGraficaComparaVereda();

		}

	}

?>