prepare('Select * from fs_periodo(:id, NULL, NULL, NULL)'); $stmt->bindParam(":id", $_SESSION["periodo_id"]); if(!$stmt->execute()){ //print_r($stmt->errorInfo()); header("Location: ../index.php?error=2"); exit(); } $periodo_rs = $stmt->fetch();//Devuelve sólo 1 resultado $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion //--- Objeto para validar usuario. El id de usuario lo lee desde sesión $objSesion = new ValidaSesion($pdo, $submenu, APSA); if(!$objSesion->tieneAcceso()){ $objSesion->terminaSesion(); } if(!$objSesion->puedeEditar()){ $errorDesc = "No puedes editar el horario."; } if(!$_SESSION["administrativo"]){ header("Location: perfil.php"); exit(); } //$fecha_ini = date("Y-m-d"); $fecha_ini = $periodo_rs["Periodo_fecha_inicial"]; if(isset($_POST["filter_fecha"])){ $fecha_ini = $_POST["filter_fecha"]; } //Dias $stmt = $pdo->prepare('Select * from fs_dia(NULL)'); if(!$stmt->execute()){ $errorDesc = "Error al obtener los días"; print_r($stmt->errorInfo()); }else $dias_rs = $stmt->fetchAll(); $stmt->closeCursor(); // Tipos de horario $stmt = $pdo->prepare('Select * from fs_tipohorario(NULL, true)'); if(!$stmt->execute()){ $errorDesc = "Error al obtener los tipos de horario"; print_r($stmt->errorInfo()); }else $tipohorario_rs = $stmt->fetchAll(); $stmt->closeCursor(); //Estado de horario (edicion/nuevo) $stmt = $pdo->prepare('Select * from fs_mihorarioestado(:usr)'); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); if(!$stmt->execute()){ $errorDesc = "Error al cargar el horario"; print_r($stmt->errorInfo()); }else{ $rs = $stmt->fetch(); $horario_estado = $rs["fs_mihorarioestado"]; unset($rs); } $stmt->closeCursor(); $stmt = null; function enBloqueClase($pdo, $hora, $frac, $nivel){ $stmt = $pdo->prepare('Select * from fs_horaclase(:nivel, NULL)'); $stmt->bindParam(":nivel", $nivel); $stmt->execute(); $bloque_rs = $stmt->fetchAll(); $horaFracc = $hora .":". (60/FRACCION_HORA*$frac).":00"; foreach($bloque_rs as $bloque){ if(strtotime($horaFracc) >= strtotime($bloque["HoraClase_inicio"]) && strtotime($horaFracc) < strtotime($bloque["HoraClase_final"])) return "fraccion-sugerida"; } return ""; } 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('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('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[$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; } ?> APSA - Facultad de Ingeniería
printMenu(); //--Manejo de errores y mensajes de exito if(isset($_GET["error"]) && is_numeric($_GET["error"])){ switch ($_GET["error"]){ case 0: $errorDesc = "No se reciberon los datos del horario."; break; case 1: $errorDesc = "Ocurrió un error al insertar los datos del horario."; break; case 2: $errorDesc = "Ocurrió un error al actualizar los datos del horario."; break; case 3: $errorDesc = "No tienes permisos para realizar esa acción."; break; case 4: $errorDesc = "Ocurrió un error al cancelar el horario."; break; case 5: $errorDesc = "Hay horarios con conflicto que se borraron al realizar el envío."; break; } } if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){ switch ($_GET["ok"]){ case 0: $successDesc = "El estado del envío del horario se guardó correctamente."; break; case 1: $successDesc = "El horario se canceló correctamente."; break; } } ?>

Descargar plantilla de horario

Necesitas seleccionar un periodo.

"; exit(); } ?>
prepare('Select * from fs_mihorario(:usr, :per, 3)');//Obtiene todo el calendario $stmt->bindParam(":per", $_SESSION["periodo_id"]); }else $stmt = $pdo->prepare('Select * from fs_mihorario(:usr, 0, 3)');//Obtiene todo el calendario $stmt->bindParam(":usr", $_SESSION["usuario_id"]);*/ $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, 3)');//Obtiene todo el calendario $stmt->bindParam(":fecha", $fecha_ini); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); if(!$stmt->execute()){ //$t = $stmt->errorInfo(); echo "Ocurrió un error al obtener el horario"; }else $horario_rs = $stmt->fetchAll(); if(isset($horario_rs) && count($horario_rs) > 0){ $horaMin = horaMin($horario_rs, "Hora_inicio"); $horaMax = horaMax($horario_rs, "Hora_final"); $stmt->closeCursor(); $rs_i = 0; $spacerArr = array(1=>0,0,0,0,0,0); $total_tipo = array(1=>0,0,0); $erroresArr = validaHorarios($horario_rs); if(count($erroresArr) > 0){ foreach($erroresArr as $err){ echo '

'.$ICO["alerta"].' El horario administrativo actual se sobrepone con el bloque '.$err['nombre'].' ( '.$err['dia'].' '.$err['hora_i'].' - '.$err['hora_f'].' ) y no se puede mostrar correctamente.

'; } echo '

Crea un horario administrativo nuevo o cancela el actual.

'; }else{ ?>
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(); if($director_rs["Usuario_id"] != $_SESSION["usuario_id"]){ ?> ">
assign("DIA", $dia["Dia_desc"]); $xtpl->parse("main.header"); } //$horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin))); for($h = date('H', strtotime($horaMin)); $h <= date('H', strtotime($horaMax)) && $h < HORA_FINAL; $h++){ $xtpl->assign("HORA", date('H', strtotime($h.":00"))); $xtpl->assign("FRACCIONES", FRACCION_HORA); $xtpl->parse("main.hora_row.hora"); for($f = 0; $f < FRACCION_HORA; $f++){ foreach($dias_rs as $dia){ if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]["Hora_inicio"])) == date('H:i', strtotime($h.":".($f * (60/FRACCION_HORA)))) && $horario_rs[$rs_i]["Dia_id"] == $dia["Dia_id"]){ $size = $horario_rs[$rs_i]["Duracion"]/(60/FRACCION_HORA); $spacerArr[$dia["Dia_id"]] = $size -1; $xtpl->assign("DURACION_SIZE", $size); $xtpl->assign("COLOR", $horario_rs[$rs_i]["TipoHorario_color"]); $xtpl->assign("TIPO", $horario_rs[$rs_i]["TipoHorario_desc"]); $total_tipo[$horario_rs[$rs_i]["TipoHorario_id"]]+= $horario_rs[$rs_i]["Duracion"]/60; $salon = ""; do{ if($horario_rs[$rs_i]["Salon_desc"] != "") $salon = "Salón: ".$horario_rs[$rs_i]["Salon_desc"]; else if($horario_rs[$rs_i]["Materia_desc"] != "") $salon = "Pendiente"; $xtpl->assign("MATERIA", $horario_rs[$rs_i]["Materia_desc"]); $grupo = ""; //if($_SESSION["nivel_id"] == 1) $grupo = $horario_rs[$rs_i]["Grupo_desc"]." ".$horario_rs[$rs_i]["Carrera_prefijo"]; //else //$grupo = $horario_rs[$rs_i]["Grupo_desc"]; $xtpl->assign("GRUPO", $grupo); if($horario_rs[$rs_i]["Materia_desc"] != "") $xtpl->parse("main.hora_row.td.td_mihorario.texto"); $rs_i++; }while($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i-1]["Hora_inicio"])) == date('H:i', strtotime($horario_rs[$rs_i]["Hora_inicio"])) && $horario_rs[$rs_i]["Dia_id"] == $dia["Dia_id"]); $xtpl->assign("SALON", $salon); $min = $f*(60/FRACCION_HORA); if($min < 10) $min = "0".$min; $xtpl->assign("MIN", $min); $xtpl->parse("main.hora_row.td.td_mihorario"); }else{ if(!isset($spacerArr[$dia["Dia_id"]]) || $spacerArr[$dia["Dia_id"]] == 0) $xtpl->parse("main.hora_row.td.td_vacio"); else $spacerArr[$dia["Dia_id"]]--; } $xtpl->parse("main.hora_row.td"); } $xtpl->parse("main.hora_row"); } } $xtpl->parse("main"); $stmt = $pdo->prepare('Select * from fs_tipohorario(NULL, NULL)'); $stmt->execute(); $tipohorarioAll_rs = $stmt->fetchAll(); $stmt->closeCursor(); if(count($tipohorarioAll_rs)>0){ ?>
"> [ hrs] TOTAL [ hrs]
out("main"); ?>
No hay horarios aprobados"; }?>

Haz clic en el calendario para asignar un bloque de horario.
Puedes expandir los horarios arrastrando desde la base inferior.

El horario está en espera de aprobación

prepare('Select * from fs_tipohorario(NULL, NULL)'); $stmt->execute(); $tipohorarioAll_rs = $stmt->fetchAll(); $stmt->closeCursor(); if(count($tipohorarioAll_rs)>0){ ?>
"> [">0 hrs] TOTAL [0 hrs]
".$dia["Dia_desc"].""; } ?> 0 hrs"; } ?>
Hora
Total  
:00
"; foreach($dias_rs as $dia){ //echo "$h2, $f => ".enBloqueClase($h2, $f); $editable = ""; if($horario_estado == 1) $editable = "editable"; echo ""; } echo ""; } } ?>