mihorario_select.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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/util.php");
  13. require_once("../../include/bd_pdo.php");
  14. require_once("../../classes/ValidaSesion.php");
  15. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  16. $objSesion = new ValidaSesion($pdo, 20, APSA);
  17. if(!$objSesion->tieneAcceso()){
  18. $return["error"] = "No tienes permisos para realizar esta acción.";
  19. }else if(!isset($_POST["autorizacion"]) || !isset($_POST["fecha"]) || $_POST["fecha"] == ""){
  20. $return["error"] = "No se recibió la información del horario.";
  21. }else if(!isset($_SESSION["periodo_id"]) || $_SESSION["periodo_id"] ==""){
  22. $return["error"] = "Necesitas seleccionar un periodo.";
  23. }else{
  24. $autorizacion = filter_input(INPUT_POST, "autorizacion", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  25. $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  26. $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, :tipoauto)');//Obtiene todo el calendario
  27. $stmt->bindParam(":fecha", $filter_fecha);
  28. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  29. $stmt->bindParam(":tipoauto", $autorizacion);
  30. if(!$stmt->execute()){
  31. $t = $stmt->errorInfo();
  32. $return["error"] = "Ocurrió un error al obtener los horarios ".$t[2];
  33. $error = true;
  34. }else{
  35. $horario_rs = $stmt->fetchAll();
  36. $stmt->closeCursor();
  37. $json = array();
  38. $erroresArr = validaHorarios($horario_rs);
  39. if(count($erroresArr) > 0){
  40. $return["errorArr"] = $erroresArr;
  41. }
  42. foreach($horario_rs as $horario){//crea objeto json
  43. $horario_tmp =array();
  44. $horario_tmp["id"] = $horario["Horario_id"];
  45. $horario_tmp["dia"] = $horario["Dia_id"];
  46. $horario_tmp["hora"] = substr($horario["Hora_inicio"], 0, 5);//hh:mm
  47. $horario_tmp["duracion"] = $horario["Duracion"];
  48. $horario_tmp["tipo"] = $horario["TipoHorario_id"];
  49. $horario_tmp["tipo_nombre"] = $horario["TipoHorario_desc"];
  50. if($autorizacion == 1)//Si es crear, depende del tipo de horario
  51. $horario_tmp["editable"] = $horario["TipoHorario_isAsignable"];
  52. else//es en espera de aprobacoin, no se edita
  53. $horario_tmp["editable"] = false;
  54. $horario_tmp["color"] = $horario["TipoHorario_color"];
  55. if(!horarioRepetido($json, $horario_tmp["dia"], $horario_tmp["hora"]))
  56. $json[] = $horario_tmp;
  57. }//fin foreach
  58. }//fin tiene datos
  59. $return["horario"] = $json;
  60. $return["ok"] = "El horario se cargó correctamente";
  61. }
  62. $return["json"] = json_encode($return);
  63. echo json_encode($return);
  64. function validaHorarios(& $arr){
  65. $erroresArr = array();
  66. for($i = 0; $i < count($arr)-1; $i++){
  67. for($j = $i+1; $j < count($arr); $j++){
  68. if($arr[$i]["Dia_id"] == $arr[$j]["Dia_id"] && !($arr[$i]["TipoHorario_id"] == 3 && $arr[$i]["TipoHorario_id"] == $arr[$j]["TipoHorario_id"])){
  69. 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"])) )
  70. || (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"])) )
  71. ){
  72. if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){
  73. $erroresArr[] = array('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"])));
  74. $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60;
  75. if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1);
  76. }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"])
  77. $erroresArr[] = array('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"])));
  78. $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60;
  79. if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1);
  80. }
  81. }
  82. }
  83. }
  84. }
  85. return $erroresArr;
  86. }
  87. function horarioRepetido($arreglo, $dia, $hora){
  88. foreach($arreglo as $horario){
  89. if($dia == $horario["dia"] && $hora == $horario["hora"])
  90. return true;
  91. }
  92. return false;
  93. }
  94. ?>