mihorarioestado_update.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /* AJAX
  3. * Selecciona los datos de la carrera
  4. * Recibe:
  5. * id - ID de grupo,
  6. * json
  7. * Return:
  8. * resultado o cadena de error
  9. */
  10. require_once("../../include/nocache.php");
  11. require_once("../../include/constantes.php");
  12. require_once("../../include/bd_pdo.php");
  13. require_once("../../include/util.php");
  14. require_once("../../classes/ValidaSesion.php");
  15. require_once("../classes/LogActividad.php");//die on error
  16. function validaHorarios(& $arr){
  17. $erroresArr = array();
  18. for($i = 0; $i < count($arr)-1; $i++){
  19. for($j = $i+1; $j < count($arr); $j++){
  20. if($arr[$i]["Dia_id"] == $arr[$j]["Dia_id"] && !($arr[$i]["TipoHorario_id"] == 3 && $arr[$i]["TipoHorario_id"] == $arr[$j]["TipoHorario_id"])){
  21. 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"])) )
  22. || (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"])) )
  23. ){
  24. if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){
  25. $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"])));
  26. $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60;
  27. if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1);
  28. }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"])
  29. $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"])));
  30. $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60;
  31. if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1);
  32. }
  33. }
  34. }
  35. }
  36. }
  37. return $erroresArr;
  38. }
  39. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  40. $objSesion = new ValidaSesion($pdo, 20, APSA);
  41. if(!$objSesion->tieneAcceso()){
  42. $return["error"] = "Error! No tienes permisos para realizar esta acción.";
  43. }else if(!isset($_POST["orig"]) || !isset($_POST["dest"])){
  44. $return["error"] = "Error! No se recibió la información del horario.";
  45. }else{
  46. $orig = filter_input(INPUT_POST, "orig", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  47. $dest = filter_input(INPUT_POST, "dest", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  48. $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  49. $return["error"] = "";
  50. $error = false;
  51. if($orig <= 0 || $orig >=3 || $dest <= 0 || $dest >=3){
  52. $return["error"] = "Error! Los parámetros del horario son incorrectos.";
  53. $error = true;
  54. }
  55. try {
  56. $pdo->beginTransaction();
  57. if(!$error){
  58. $stmt = $pdo->prepare('Select COUNT("Horario_id") AS total from "HorarioAdministrativo" WHERE "Usuario_id" = :usr AND "TipoAutorizacionHorario_id" = :tipoauto');//Obtiene todo el calendario
  59. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  60. $stmt->bindParam(":tipoauto", $orig);
  61. if(!$stmt->execute()){
  62. //$t = $stmt->errorInfo();
  63. $return["error"] .= "No existen bloques de horario para guardar.";
  64. $error = true;
  65. }else{
  66. $rs = $stmt->fetch();
  67. if($rs["total"] == 0){
  68. $return["error"] .= "No existen bloques de horario para guardar.";
  69. $error = true;
  70. }
  71. }
  72. }
  73. //Valida que el horario no tenga errores, si tiene errores borra los horarios con conflicto
  74. if(!$error && intval($orig) == 1){
  75. $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, 1)');//Obtiene todo el calendario
  76. $stmt->bindParam(":fecha", $filter_fecha);
  77. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  78. if(!$stmt->execute()){
  79. $t = $stmt->errorInfo();
  80. $return["error"] .= "Ocurrió un error al obtener los horarios.";
  81. $error = true;
  82. echo "Ocurrió un error al obtener los horarios ".$t; exit();
  83. }
  84. $horario_rs = $stmt->fetchAll();
  85. $erroresArr = validaHorarios($horario_rs);
  86. $return["conflictoCount"] = count($erroresArr);
  87. if(count($erroresArr) > 0){
  88. //$return["errorArr"] = $erroresArr;
  89. foreach($erroresArr as $horario_err){
  90. $stmt = $pdo->prepare('Select * from fd_mihorario(:id, :usr)');
  91. $stmt->bindParam(":id", $horario_err["id"]);
  92. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  93. if(!$stmt->execute()){
  94. //$t = $stmt->errorInfo();
  95. $return["error"] .= "Ocurrió un error al borrar el horario duplicado.";
  96. $error = true;
  97. }
  98. }
  99. }
  100. }
  101. if(!$error){
  102. //---- Actualiza ----------
  103. $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, :orig, :dest)');
  104. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  105. $stmt->bindParam(":orig", $orig);
  106. $stmt->bindParam(":dest", $dest);
  107. if(!$stmt->execute()){
  108. //$t = $stmt->errorInfo();
  109. $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario.";
  110. $error = true;
  111. }else{
  112. $pdo->commit();
  113. unset($return["error"]);
  114. switch($dest){
  115. case 1: $return["ok"] = "Se canceló el envío de aprobación."; break;
  116. case 2: $return["ok"] = "El horario se envió a aprobación."; break;
  117. //case 3: $return["ok"] = "El horario se aprobó correctamente."; break;
  118. }
  119. //Inserta Log
  120. $log = new LogActividad();
  121. $desc_log = "Actualiza aprobación de horario De tipo[".$orig."] A [".$dest."]";
  122. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  123. }
  124. $stmt = $pdo->prepare('Select * from fs_director()');
  125. if(!$stmt->execute()){
  126. $return["error"] .= "Ocurrió un error al obtener datos del director.";
  127. $error = true;
  128. }
  129. $director_rs = $stmt->fetch();
  130. $stmt->closeCursor();
  131. //Es director, autoriza horario por default
  132. if(!$error && $director_rs["Usuario_id"] == $_SESSION["usuario_id"]){
  133. $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, 2, 3)');//autorizado
  134. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  135. if(!$stmt->execute()){
  136. //$t = $stmt->errorInfo();
  137. $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario.";
  138. $error = true;
  139. }
  140. }
  141. }
  142. if($error){
  143. $pdo->rollBack();
  144. }
  145. $stmt = null; // cierra conexion
  146. } catch(PDOException $e) {
  147. $pdo->rollBack();
  148. $return["error"] = "Ocurrió un error al actualizar el estado de aprobación del horario.".$e->getMessage();
  149. }
  150. }
  151. $return["json"] = json_encode($return);
  152. echo json_encode($return);
  153. ?>