123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- <?php
- /* AJAX
- * Selecciona los datos de la carrera
- * Recibe:
- * id - ID de grupo,
- * json
- * Return:
- * resultado o cadena de error
- */
- require_once("../../include/nocache.php");
- require_once("../../include/constantes.php");
- require_once("../../include/bd_pdo.php");
- require_once("../../include/util.php");
- require_once("../../classes/ValidaSesion.php");
- require_once("../classes/LogActividad.php");//die on error
- function validaHorarios(& $arr){
- $erroresArr = array();
- for($i = 0; $i < count($arr)-1; $i++){
- for($j = $i+1; $j < count($arr); $j++){
- if($arr[$i]["Dia_id"] == $arr[$j]["Dia_id"] && !($arr[$i]["TipoHorario_id"] == 3 && $arr[$i]["TipoHorario_id"] == $arr[$j]["TipoHorario_id"])){
- if( (date('H:i', strtotime($arr[$i]["Hora_inicio"])) <= date('H:i', strtotime($arr[$j]["Hora_inicio"])) && date('H:i', strtotime($arr[$i]["Hora_final"])) > date('H:i', strtotime($arr[$j]["Hora_inicio"])) )
- || (date('H:i', strtotime($arr[$j]["Hora_inicio"])) <= date('H:i', strtotime($arr[$i]["Hora_inicio"])) && date('H:i', strtotime($arr[$j]["Hora_final"])) > date('H:i', strtotime($arr[$i]["Hora_inicio"])) )
- ){
- if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){
- $erroresArr[] = array('id'=> $arr[$i]["Horario_id"], 'nombre'=>$arr[$i]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$i]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$i]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$i]["Hora_final"])));
- $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60;
- if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1);
-
- }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"])
- $erroresArr[] = array('id'=> $arr[$j]["Horario_id"], 'nombre'=>$arr[$j]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$j]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$j]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$j]["Hora_final"])));
- $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60;
- if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1);
- }
- }
- }
- }
- }
- return $erroresArr;
- }
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 20, APSA);
- if(!$objSesion->tieneAcceso()){
- $return["error"] = "Error! No tienes permisos para realizar esta acción.";
- }else if(!isset($_POST["orig"]) || !isset($_POST["dest"])){
- $return["error"] = "Error! No se recibió la información del horario.";
- }else{
- $orig = filter_input(INPUT_POST, "orig", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $dest = filter_input(INPUT_POST, "dest", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
-
- $return["error"] = "";
- $error = false;
-
- if($orig <= 0 || $orig >=3 || $dest <= 0 || $dest >=3){
- $return["error"] = "Error! Los parámetros del horario son incorrectos.";
- $error = true;
- }
-
- try {
- $pdo->beginTransaction();
- if(!$error){
- $stmt = $pdo->prepare('Select COUNT("Horario_id") AS total from "HorarioAdministrativo" WHERE "Usuario_id" = :usr AND "TipoAutorizacionHorario_id" = :tipoauto');//Obtiene todo el calendario
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $stmt->bindParam(":tipoauto", $orig);
- if(!$stmt->execute()){
- //$t = $stmt->errorInfo();
- $return["error"] .= "No existen bloques de horario para guardar.";
- $error = true;
- }else{
- $rs = $stmt->fetch();
- if($rs["total"] == 0){
- $return["error"] .= "No existen bloques de horario para guardar.";
- $error = true;
- }
- }
- }
- //Valida que el horario no tenga errores, si tiene errores borra los horarios con conflicto
- if(!$error && intval($orig) == 1){
-
- $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, 1)');//Obtiene todo el calendario
- $stmt->bindParam(":fecha", $filter_fecha);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al obtener los horarios.";
- $error = true;
- echo "Ocurrió un error al obtener los horarios ".$t; exit();
- }
- $horario_rs = $stmt->fetchAll();
-
- $erroresArr = validaHorarios($horario_rs);
- $return["conflictoCount"] = count($erroresArr);
- if(count($erroresArr) > 0){
- //$return["errorArr"] = $erroresArr;
- foreach($erroresArr as $horario_err){
- $stmt = $pdo->prepare('Select * from fd_mihorario(:id, :usr)');
- $stmt->bindParam(":id", $horario_err["id"]);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- if(!$stmt->execute()){
- //$t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al borrar el horario duplicado.";
- $error = true;
- }
- }
- }
- }
- if(!$error){
- //---- Actualiza ----------
- $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, :orig, :dest)');
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $stmt->bindParam(":orig", $orig);
- $stmt->bindParam(":dest", $dest);
- if(!$stmt->execute()){
- //$t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario.";
- $error = true;
- }else{
- $pdo->commit();
- unset($return["error"]);
- switch($dest){
- case 1: $return["ok"] = "Se canceló el envío de aprobación."; break;
- case 2: $return["ok"] = "El horario se envió a aprobación."; break;
- //case 3: $return["ok"] = "El horario se aprobó correctamente."; break;
- }
- //Inserta Log
- $log = new LogActividad();
- $desc_log = "Actualiza aprobación de horario De tipo[".$orig."] A [".$dest."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
-
-
- $stmt = $pdo->prepare('Select * from fs_director()');
- if(!$stmt->execute()){
- $return["error"] .= "Ocurrió un error al obtener datos del director.";
- $error = true;
- }
- $director_rs = $stmt->fetch();
- $stmt->closeCursor();
-
- //Es director, autoriza horario por default
- if(!$error && $director_rs["Usuario_id"] == $_SESSION["usuario_id"]){
- $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, 2, 3)');//autorizado
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- if(!$stmt->execute()){
- //$t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario.";
- $error = true;
- }
- }
- }
- if($error){
- $pdo->rollBack();
- }
- $stmt = null; // cierra conexion
- } catch(PDOException $e) {
- $pdo->rollBack();
- $return["error"] = "Ocurrió un error al actualizar el estado de aprobación del horario.".$e->getMessage();
- }
- }
- $return["json"] = json_encode($return);
- echo json_encode($return);
- ?>
|