<?php 
	
	  include_once "../../modelo/gestiondocumental.modelo.php";
	
	  include_once "../modelo/gestiondocumental.modelo.php";
	
	class ControladorGestionDocumental extends ModeloGestionDocumental{
		
		/*=========================================================================
		CONSULTA PERFILES
		===========================================================================*/
		public function ctrConsultaOpcionesProceso($id_proceso){

			$resultadoOpcionesProceso = ModeloGestionDocumental::mdlConsultaOpcionesProceso($id_proceso);

			$opcionesProceso = $resultadoOpcionesProceso->fetchAll();

			return $opcionesProceso;

		}

		/*=========================================================================
		CONSULTA TIPOS DE DOCUMENTOS
		===========================================================================*/
		public function ctrConsultaTipoDocumento(){

			$resultadoTipoDocumento = ModeloGestionDocumental::mdlConsultaTipoDocumento('');

			$tipoDocumentos = $resultadoTipoDocumento->fetchAll();

			return $tipoDocumentos;

		}

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

			$resultadoProceso = ModeloGestionDocumental::mdlConsultaProcesos();

			$proceso = $resultadoProceso->fetchAll();

			return $proceso;

		}

		/*=========================================================================
		CONSULTA ESTADO DE DOCUMENTOS
		===========================================================================*/
		public function ctrlConsultaEstadoDocumentos(){

			$resultadoProceso = ModeloGestionDocumental::mdlConsultaEstadoDocumentos();

			$proceso = $resultadoProceso->fetchAll();

			return $proceso;

		}
		

		/*=========================================================================
		REGISTRA DOCUMENTOS
		===========================================================================*/
		public function ctrRegistraDocumento(){

			try {
				
				$datos = [

					'tipodocumento' 	   => $_POST['tipodocumento'],
					'nombredocumento'      => utf8_decode(trim(strtoupper($_POST['nombredocumento']))),
					'descripciondocumento' => utf8_decode($_POST['descripciondocumento']),
					'proceso_'             => $_POST['proceso_'],
					'estado'               => $_POST['estado'],
					'documentoadjunto'     => utf8_decode($_FILES['documentoadjunto']['name']),
					'usuario'              => $_POST['id_usuario'],
					'acceso'               => $_POST['acceso'],
					'fecha'                => date('Y-m-d H:i:s'),
					
				];

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

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

				}

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

					echo json_encode(array('error' => 'El campo <b>Nombre de documento</b> es requerido.'));				
					exit();
					
				}

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

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

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

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

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

					// El método explode permite disidir un string estableciendo un delimitador en este caso utilizamos el punto para a partir de este validar la extensión de un archivo.
					$adjunto = explode('.', trim($datos['documentoadjunto']));
					
					if ($adjunto[1] != "pdf" && $adjunto[1] != "PDF") {
					
						echo json_encode(array('error' => 'La extensión del documento es inválida. Extensiones permitidas: PDF.'));	
						exit();

					}

				}else if (trim($datos['documentoadjunto']) == "") {

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

				}

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

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

				// Consultamos documento para verificar que no esté registrado en el sistema.
				$consultaDocumento = ModeloGestionDocumental::mdlConsultaDocumentos($datos['nombredocumento']);
				if($consultaDocumento->rowcount() >= 1){

					echo json_encode(array('info' => 'El documento <b>'.$datos['nombredocumento'].'</b> ya se encuentra registrado en el sistema.'));

				}

				exit();

				$ruta = "../docs/";

				// Concateno el nombre de la documento al directorio $ruta 
				$documento = $ruta.$_FILES['documentoadjunto']['name'];

				// Sube documento al servidor 
				if(move_uploaded_file($_FILES['documentoadjunto']['tmp_name'], $documento)){

					$registraDocumento = ModeloGestionDocumental::mdlRegistraDocumentos($datos);
					if($registraDocumento->rowcount() == 1){

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

					}else{

						echo json_encode(array('error' => $datos));					

					}

				}

				


			} catch (Exception $e) {
				
				$error = $e->getMessage();

				echo json_encode(array('error' => $error));

			}	

		}


		/*=========================================================================
		CONSULTA DOCUMENTOS
		===========================================================================*/
		public function ctrConsultaDocumentos(){
			
			$resultadoDocumentos = ModeloGestionDocumental::mdlConsultaDocumentos('');

			$documentos = $resultadoDocumentos->fetchAll();

			return $documentos;

		}

		/*=========================================================================
		ACTUALIZA DOCUMENTOS
		===========================================================================*/
		public function ctrActualizaDocumento(){

			try {

				$datos = [
					'id_documento'   => $_POST['id_documento'],
					'desc_documento' => utf8_decode(strtoupper($_POST['desc_documento'])),
					'tipo_documento' => $_POST['tipo_documento'],
					'proceso'        => $_POST['proceso'],
					'estado'         => $_POST['estado'],
					'acceso'         => $_POST['acceso'],
					'id_usuario'     => $_POST['id_usuario'],
					'fecha'          => date('Y-m-d H:i:S'),
				];

				// Validación de datos recibidos
				if(trim($datos['tipo_documento']) == ""){
					
					echo 'El campo <b>Tipo de documento</b> es requerido.';
					exit();	
				}

				 
				if(trim($datos['proceso']) == ""){
					
					echo 'El campo <b>Proceso</b> es requerido.';
					exit();	
				}

				if(trim($datos['estado']) == ""){
					
					echo 'El campo <b>Estado</b> es requerido.';
					exit();	
				}

				if(trim($datos['acceso']) == ""){
					
					echo 'El campo <b>Acceso global</b> es requerido.';
					exit();	
				}

				// validación de descripción
				
				if(trim($datos['desc_documento']) == "" ){
					
					echo 'El campo <b>Descripción</b> es requerido.';
					
				}else{

					// Ejecución de la función modelo mdlActuaalizaDocumentos($datos) encargada de actualizar un documento
					$resultadoDocumentos = ModeloGestionDocumental::mdlActuaalizaDocumentos($datos);

					// Condicional para validar la cantidad de filas afectadas en la base de datos.
					if($resultadoDocumentos->rowcount() == 1){

						echo 'Actualización exitosa';
					
					}else{

						echo 'No se encontraron cambios';

					}

				}

			} catch (Exception $e) {
				
				echo $e->getMessage();

			}
			


		}

		/*=========================================================================
		CONSULTA USUARIOS
		===========================================================================*/
		public function ctrlConsultaUsuarios(){

			try {
				
				$resultadoUsuarios = ModeloGestionDocumental::mdlConsultaUsuarios();

				$usuarios = $resultadoUsuarios->fetchAll();

				return $usuarios;

			} catch (Exception $e) {
				
				echo $e->getMessage();

			}

			

		}


		/*=========================================================================
		CONSULTA DOCUMENTOS E INFORMACIÓN RELACIONADA A ESTOS
		===========================================================================*/
		public function ctrConsultaDocumentos_($nombre, $tipo_documento, $creador, $id_proceso, $id_perfil){

			try {
				
				$resultadoDocumentos = ModeloGestionDocumental::mdlConsultaDocumentos_($nombre, $tipo_documento, $creador, $id_proceso, $id_perfil);

				$documentos = $resultadoDocumentos->fetchAll();

				return $documentos;

			} catch (Exception $e) {
				
				echo $e->getMessage();

			}

			

		}
	

		/*=========================================================================
		REGISTRA TIPO DE DOCUMENTO
		===========================================================================*/
		public function ctrRegistraTipoDocumento(){

			try {
				
				$datos = [

					'desc_tipo_documento' => trim(strtoupper($_POST['ctd_desc_tipo_documento'])), 
				
				];

				// Valindo el 
				if(trim($datos['desc_tipo_documento']) == ""){

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

				}

				// Consultamos tipo de documento con la intención de validar si este ya se encuentra registrado en el sistema
				$consultaTipoDocumento = ModeloGestionDocumental::mdlConsultaTipoDocumento($datos['desc_tipo_documento']);
				if($consultaTipoDocumento->rowcount() >= 1){

					echo json_encode(array('info' => 'El tipo de documento <b>'.$datos['desc_tipo_documento'].'</b> ya se encuentra registrado en el sistema.'));
					exit();

				}

				// Registramos tipo de documento.
				$registraTipoDocumento = ModeloGestionDocumental::mdlRegistraTipoDocumento($datos);
				if($registraTipoDocumento->rowcount() == 1){

					echo json_encode(array('success' => 'Registro exitoso.'));

				}else{

					echo json_encode(array('error' => 'Ocurrió un error al intentar registra un nuevo tipo de documento.'));

				}

			} catch (Exception $e) {
				
				$error = $e->getMessage();

				echo json_encode(array('error' => $error));

			}

		}

		/*=========================================================================
		ACTUALIZA TIPO DE DOCUMENTO
		===========================================================================*/
		public function ctrActualizaTipoDocumento(){

			try {
				
				// Condicional para validar el estado recibido
				if($_POST['estado'] == 'on'){

					$_POST['estado'] = 1;

				}else{

					$_POST['estado'] = 0;

				}


				$datos = [

					'id_tipo_documento'   => $_POST['id_tipo_documento'],
					'desc_tipo_documento' => strtoupper($_POST['desc_tipo_documento']), 
					'estado'              => $_POST['estado'],
					'id_usuario'          => $_POST['id_usuario'],
					'fecha'               => date('Y-m-d H:i:s'),
				
				];

				// Valindo el 
				if(trim($datos['desc_tipo_documento']) == ""){

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

				}

				$actualizaTipoDocumento = ModeloGestionDocumental::mdlActualizaTipoDocumento($datos);
				if($actualizaTipoDocumento->rowcount() == 1){

					echo 'Actualización exitosa';

				}else{

					echo 'No se encontraron cambios.';

				}

			} catch (Exception $e) {
				
				$error = $e->getMessage();

				echo json_encode(array('error' => $error));

			}

		}

	}



	if(isset($_POST['accion'])){

		$objGestionDocumental = new ControladorGestionDocumental();

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

			$objGestionDocumental->ctrRegistraDocumento();
		
		}

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

			$objGestionDocumental->ctrActualizaDocumento();
			
		}

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

			$objGestionDocumental->ctrRegistraTipoDocumento();

		}

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

			$objGestionDocumental->ctrActualizaTipoDocumento();
			// echo json_encode(array('error' => 'prueba_xx_c'));

		}

	}

 ?>