reporte_horariogrupo.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/util.php");
  4. require_once("../include/bd_pdo.php");
  5. require_once("../classes/ValidaSesion.php");
  6. require_once("../classes/MainMenu.php");
  7. $menu = 27;
  8. $submenu = 272;
  9. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  10. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  11. if(!$objSesion->tieneAcceso()){
  12. $objSesion->terminaSesion();
  13. }
  14. $objSesion->validaPeriodoUsuario();//si no tiene periodo manda a main
  15. //Obtiene grupos del periodo
  16. $stmt = $pdo->prepare('Select * from fs_grupo(NULL, :periodo)');
  17. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  18. if(!$stmt->execute()){
  19. header("Location: grupos.php?error=4");
  20. exit();
  21. }else{
  22. $grupos_rs = $stmt->fetchAll();
  23. }
  24. $stmt->closeCursor();
  25. if(!is_array($grupos_rs) || count($grupos_rs) == 0){
  26. header("Location: grupos.php?error=5");
  27. exit();
  28. }
  29. $pendiente = "<em>Pendiente</em>";
  30. if(isset($_POST["grupo"]) && is_numeric($_POST["grupo"]) && $_POST["grupo"] != ""){
  31. $filter_grupo = filter_input(INPUT_POST, "grupo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  32. if(isset($_POST["filter_fecha"]) && $_POST["filter_fecha"]!= "")
  33. $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "filter_fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  34. $stmt = $pdo->prepare('Select * from fs_grupo(:grupo, :periodo)');
  35. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  36. $stmt->bindParam(":grupo", $filter_grupo);
  37. if(!$stmt->execute()){
  38. $errorDesc = "Ocurrió un error al cargar el grupo.";
  39. }else{
  40. $grupo_actual_rs = $stmt->fetch();
  41. if(!is_array($grupo_actual_rs) || count($grupo_actual_rs) == 0){
  42. $stmt->closeCursor();
  43. header("Location: grupos.php?error=6");
  44. exit();
  45. }
  46. }
  47. $stmt->closeCursor();
  48. //Obtiene horario del grupo
  49. $stmt = $pdo->prepare('Select * from fs_horariogrupo(:gpo, NULL, false)');
  50. $stmt->bindParam(":gpo", $filter_grupo);
  51. if(!$stmt->execute()){
  52. //header("Location: materias.php?error=2");
  53. $errorDesc = "Error al cargar el horario del grupo";
  54. print_r($stmt->errorInfo());
  55. exit();
  56. }else{
  57. $horario_rs = $stmt->fetchAll();
  58. $horaMin = horaMin($horario_rs);
  59. $horaMax = horaMax($horario_rs);
  60. }
  61. $stmt->closeCursor();
  62. }
  63. function enBloqueClase($pdo, $hora, $frac, $nivel){
  64. $stmt = $pdo->prepare('Select * from fs_horaclase(:nivel, NULL)');
  65. $stmt->bindParam(":nivel", $nivel);
  66. $stmt->execute();
  67. $bloque_rs = $stmt->fetchAll();
  68. $horaFracc = $hora .":". (60/FRACCION_HORA*$frac).":00";
  69. foreach($bloque_rs as $bloque){
  70. if(strtotime($horaFracc) >= strtotime($bloque["HoraClase_inicio"]) && strtotime($horaFracc) < strtotime($bloque["HoraClase_final"]))
  71. return "fraccion-sugerida";
  72. }
  73. return "";
  74. }
  75. ?>
  76. <!DOCTYPE html>
  77. <html lang="es" prefix="og: http://ogp.me/ns#">
  78. <head>
  79. <title>APSA - Facultad de Ingeniería</title>
  80. <meta charset="utf-8">
  81. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  82. <link rel="icon" type="image/png" href="../img/favicon.png" />
  83. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  84. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  85. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  86. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  87. <link rel="stylesheet" href="./css/horario_alumnos.css" type="text/css">
  88. <script src="../js/util.js"></script>
  89. </head>
  90. <body>
  91. <div>
  92. <div class="d-none d-print-block"><img id="logo" src="../img/logo_lasalle.png" border="0" class="img-fluid mb-4"></div>
  93. <div class="d-print-none">
  94. <?php
  95. //--- Objeto que pinta menu
  96. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, "Horario de grupos");//usr, menu, pdo, sist
  97. $menuObj->printMenu();
  98. ?>
  99. </div>
  100. <?php
  101. //Obtiene fechas de periodo
  102. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
  103. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  104. if(!$stmt->execute()){
  105. $errorDesc = "Ocurrió un error al cargar las fechas del periodo";
  106. }else{
  107. $periodo_rs = $stmt->fetch();
  108. }
  109. $stmt->closeCursor();
  110. $stmt = null;
  111. //--Manejo de errores y mensajes de exito
  112. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  113. switch ($_GET["error"]){
  114. case 0: $errorDesc = "No se reciberon los datos del grupo."; break;
  115. case 1: $errorDesc = "Ocurrió un error al insertar los datos del grupo."; break;
  116. case 2: $errorDesc = "Ocurrió un error al actualizar los datos del grupo."; break;
  117. case 3: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  118. }
  119. }
  120. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  121. switch ($_GET["ok"]){
  122. case 0: $successDesc = "El grupo se guardó correctamente."; break;
  123. case 1: $successDesc = "El grupo se actualizó correctamente."; break;
  124. }
  125. }
  126. ?>
  127. <main class="container-fluid marco pt-3">
  128. <?php include_once("../include/errorMessage.php"); ?>
  129. <?php include("../include/periodoCambio.php");?>
  130. <!-- Filtro -->
  131. <div class="row d-print-none">
  132. <div class="col-12">
  133. <form action="reporte_horariogrupo.php" method="post" id="formaFiltro">
  134. <div class="form-box form-box-info">
  135. <div class="form-group row">
  136. <label for="filter_grupo" class="col-4 col-form-label">Grupo</label>
  137. <div class="col-8 col-sm-4">
  138. <!--<select id="filter_grupo" name="grupo" class="form-control">
  139. <option value="">Selecciona un grupo</option>
  140. <?php foreach($grupos_rs as $grupo) {
  141. $nombre = "";
  142. //if($_SESSION["nivel_id"] == 1)
  143. $nombre = $grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"];
  144. /*else
  145. $nombre = $grupo["Grupo_desc"];*/
  146. ?>
  147. <option value="<?php echo $grupo["Grupo_id"];?>" <?php if(isset($filter_grupo) && $filter_grupo == $grupo["Grupo_id"]){echo "selected='selected'";}?> ><?php echo $nombre;?></option>
  148. <?php } ?>
  149. </select>-->
  150. <div class="datalist datalist-select mb-1 w-100">
  151. <div class="datalist-input">Selecciona un grupo</div>
  152. <span class="ing-buscar icono"></span>
  153. <ul style="display:none">
  154. <?php foreach($grupos_rs as $grupo) {
  155. $nombre = "";
  156. $nombre = $grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"];
  157. ?>
  158. <li data-id="<?php echo $grupo["Grupo_id"];?>" <?php if(isset($filter_grupo) && $filter_grupo == $grupo["Grupo_id"]){echo "class='selected'";}?> ><?php echo $nombre;?></li>
  159. <?php }?>
  160. </ul>
  161. <input type="hidden" id="filter_grupo" name="grupo" value="">
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. <div class="form-group row">
  167. <div class="col-12 text-center">
  168. <button type="submit" class="btn btn-outline-primary" id="cambia-grupo"><?php echo $ICO["buscar"]; ?> Ver horario</button>
  169. </div>
  170. </div>
  171. </form>
  172. </div>
  173. </div>
  174. <?php
  175. if(isset($grupo_actual_rs) && isset($horario_rs)){//Si existe grupo seleccionado carga horario
  176. ?>
  177. <h3 class="mb-2">Grupo <?php echo $grupo_actual_rs["Grupo_desc"]." ".$grupo_actual_rs["Carrera_prefijo"];?></h3>
  178. <?php
  179. $stmt = $pdo->prepare('Select * from fs_dia(NULL)');
  180. if(!$stmt->execute()){
  181. echo "Error al obtener los días";
  182. print_r($stmt->errorInfo());
  183. }
  184. $dias_rs = $stmt->fetchAll();
  185. $stmt->closeCursor();
  186. $stmt = null;
  187. $horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin)));
  188. $hora_ini = date('H', strtotime($horaMin));
  189. $hora_fin = date('H', strtotime($horaMax));
  190. if(intval(date('i', strtotime($horaMax))) != 0)
  191. $hora_fin++;
  192. /* Definidas en constantes.php
  193. HORA_INICIO = 7;
  194. HORA_FINAL = 22;
  195. FRACCION_HORA = 4;*/
  196. //print_r($horario_rs);
  197. ?>
  198. <p class="text-right m-0">
  199. <a href="#" class="btn btn-outline-secondary d-print-none" data-toggle="modal" data-target="#modal" title="Ver detalle"><?php echo $ICO["descargar"];?> Descargar horarios</a>
  200. <button type="button" class="btn btn-outline-secondary d-print-none" onclick="imprime()"><i class="ing-imprimir"></i> Imprimir</button>
  201. </p>
  202. </main>
  203. <div class="container-fluid content marco-wide">
  204. <ul class="nav nav-tabs d-print-none mb-4" id="myTab" role="tablist">
  205. <li class="nav-item">
  206. <a class="nav-link active" id="tab1-tab" data-toggle="tab" href="#tab1" role="tab" aria-controls="calendario" aria-selected="true">Calendario</a>
  207. </li>
  208. <li class="nav-item">
  209. <a class="nav-link" id="tab2-tab" data-toggle="tab" href="#tab2" role="tab" aria-controls="lista" aria-selected="false">Listado por materia</a>
  210. </li>
  211. </ul>
  212. <div class="tab-content" id="horariosTabContent">
  213. <div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">
  214. <?php // ---- Como horario ---- ?>
  215. <div class="row">
  216. <div class="col-12 px-0 no-gutters">
  217. <table class="table table-sm table-responsive table-borderless calendario" id="tabla-horario" data-hora-inicio="<?php echo $hora_ini;?>" data-fracciones = "<?php echo FRACCION_HORA; ?>">
  218. <thead class="thead-dark">
  219. <tr>
  220. <th>Hora</th>
  221. <?php foreach($dias_rs as $dia){
  222. echo "<th data='dia_".$dia["Dia_id"]."'>".$dia["Dia_desc"]."</th>";
  223. } ?>
  224. </tr>
  225. </thead>
  226. <tbody id="calendario-body">
  227. <?php
  228. $biccell = false;
  229. //for($h = HORA_INICIO, $i=0; $h < HORA_FINAL; $h++, $i++){
  230. for($h = $hora_ini, $i=0; $h < $hora_fin; $h++, $i++){
  231. ?>
  232. <tr>
  233. <td data-hora="<?php echo $h;?>" data-index="<?php echo $i;?>" class="hora" ><?php echo $h;?>:00 </td>
  234. <?php
  235. if(!$biccell){
  236. $biccell = true;
  237. ?>
  238. <td colspan='<?php echo count($dias_rs); ?>' rowspan='<?php echo ($hora_fin-$hora_ini)+1; ?>'>
  239. <div class='area-horario'>
  240. <table class="table table-borderless ">
  241. <tbody>
  242. <?php
  243. for($h2 = $hora_ini; $h2 < $hora_fin; $h2++){
  244. for($f = 0; $f < FRACCION_HORA; $f++){
  245. echo "<tr class='dia'>";
  246. foreach($dias_rs as $dia){
  247. echo "<td title='".$h2.":".sprintf("%02d", ($f*(60/FRACCION_HORA)))."' data-dia='".$dia["Dia_id"]."' data-hora='".$h2."' data-fraccion='".($f*(60/FRACCION_HORA))."' class='crea-horario fraccion '></td>";
  248. }
  249. echo "</tr>";
  250. }
  251. }
  252. ?>
  253. </tbody>
  254. </table>
  255. <div id="bloque-horarios"></div>
  256. </div>
  257. </td>
  258. <?php
  259. } ?>
  260. </tr>
  261. <?php } ?>
  262. </tbody>
  263. </table>
  264. </div>
  265. </div>
  266. </div>
  267. <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="tab2-tab">
  268. <?php
  269. // --- Como listado ----
  270. $stmt = $pdo->prepare('Select * from fs_horariogrupo(:gpo, NULL, false) order by "Materia_desc", "Dia_id", "Horario_hora"');
  271. $stmt->bindParam(":gpo", $filter_grupo);
  272. if(!$stmt->execute()){
  273. //header("Location: materias.php?error=2");
  274. $errorDesc = "Error al cargar el horario del grupo";
  275. print_r($stmt->errorInfo());
  276. exit();
  277. }
  278. $horario_materia_rs = $stmt->fetchAll();
  279. $stmt->closeCursor();
  280. $materia_old = -1;
  281. $xtpl = new XTemplate('./tpl/horariolista_reporte.tpl.html');
  282. foreach($horario_materia_rs as $horario){
  283. if(intval($horario["Materia_id"]) != $materia_old && $materia_old != -1){
  284. if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario["fecha_inicial"]) && strtotime($filter_fecha) <= strtotime($horario["fecha_final"]) ) || !isset($filter_fecha)){
  285. $xtpl->parse("main.table");
  286. }
  287. }
  288. $materia_old = intval($horario["Materia_id"]);
  289. $xtpl->assign("MATERIA", $horario["Materia_desc"]);
  290. $xtpl->assign("CLAVE", $horario["Materia_clave"]);
  291. //----- Carga profesores ----
  292. if($horario["TipoSubmateria_id"] == 0){
  293. $stmt = $pdo->prepare('Select * from fs_profesorhorariogrupo(:id)');
  294. $stmt->bindParam(":id", $horario["HorarioGrupo_id"]);
  295. if(!$stmt->execute()){
  296. $t = $stmt->errorInfo();
  297. $errorDesc = "Ocurrió un error al obtener los datos de los profesores ".$t[2];
  298. break;
  299. }
  300. $profesores_rs = $stmt->fetchAll();
  301. $stmt->closeCursor();
  302. $prof_nombre = "";
  303. if(isset($profesores_rs) && count($profesores_rs) > 0){
  304. $profesores_all = "";
  305. foreach($profesores_rs as $profesor){
  306. $prof_clave = '<span class="font-weight-bold mr-2">'.$profesor["Usuario_claveULSA"].'</span> ';
  307. $prof_nombre = $profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"];
  308. $profesores_all .= $prof_clave.$prof_nombre."<br>";
  309. }
  310. }else{
  311. $profesores_all = $pendiente;
  312. }
  313. $xtpl->assign("PROFESOR", $profesores_all);
  314. }else{//Con submaterias
  315. //----- Carga submaterias ----
  316. $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupo(:id)');
  317. $stmt->bindParam(":id", $horario["HorarioGrupo_id"]);
  318. if(!$stmt->execute()){
  319. $t = $stmt->errorInfo();
  320. $errorDesc = "Ocurrió un error al obtener los datos de los profesores ".$t[2];
  321. break;
  322. }
  323. $submaterias_rs = $stmt->fetchAll();
  324. $stmt->closeCursor();
  325. $sub_prof_num = 0;
  326. $profesores_all = "";
  327. if(count($submaterias_rs) > 0){
  328. foreach($submaterias_rs as $submateria){
  329. //---
  330. $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupoprofesor(:id,:sub)');
  331. $stmt->bindParam(":id", $horario["HorarioGrupo_id"]);
  332. $stmt->bindParam(":sub", $submateria["Submateria_id"]);
  333. if(!$stmt->execute()){
  334. $t = $stmt->errorInfo();
  335. $errorDesc = "Ocurrió un error al obtener los datos de los profesores ".$t[2];
  336. break;
  337. }
  338. $profesores_rs = $stmt->fetchAll();
  339. $stmt->closeCursor();
  340. $sub_prof_num += count($profesores_rs);
  341. if(isset($profesores_rs) && count($profesores_rs) > 0){
  342. foreach($profesores_rs as $profesor){
  343. $prof_clave = '<span class="font-weight-bold mr-2">'.$profesor["Usuario_claveULSA"].'</span> ';
  344. $prof_nombre = $profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"];
  345. $profesores_all .= $prof_clave.$prof_nombre."<br>";
  346. }
  347. //$xtpl->assign("PROFESOR", $profesores_all);
  348. }/*else{
  349. $xtpl->assign("PROFESOR", $pendiente);
  350. }*/
  351. }
  352. if($sub_prof_num > 0)
  353. $xtpl->assign("PROFESOR", $profesores_all);
  354. else
  355. $xtpl->assign("PROFESOR", $pendiente);
  356. }
  357. unset($profesores_rs);
  358. }//fin con submaterias
  359. $xtpl->assign("DIA", ucfirst(diaNombre($horario["Dia_id"])));
  360. $xtpl->assign("HORAI", date('H:i', strtotime($horario["Horario_hora"])));
  361. $xtpl->assign("HORAF", date('H:i', strtotime($horario["Horario_hora_final"])));
  362. if($horario["TipoSubmateria_id"] == 0){
  363. if($horario["Salon_desc"]!= ""){
  364. if($horario["Salon_desc_larga"] != "")
  365. $xtpl->assign("SALON", $horario["Salon_desc"]." (".$horario["Salon_desc_larga"].")");
  366. else
  367. $xtpl->assign("SALON", $horario["Salon_desc"]);
  368. }else
  369. $xtpl->assign("SALON", $pendiente);
  370. }else{
  371. $xtpl->assign("SALON", "<em>*Revisa la tabla de materias electivas</em>");
  372. }
  373. $xtpl->parse("main.table.row");
  374. }//for each materias
  375. if($materia_old != -1){
  376. if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario["fecha_inicial"]) && strtotime($filter_fecha) <= strtotime($horario["fecha_final"]) ) || !isset($filter_fecha))
  377. $xtpl->parse("main.table");
  378. }
  379. $xtpl->parse("main");
  380. $xtpl->out("main");
  381. ?>
  382. </div>
  383. </div><!-- End tabs-->
  384. <div class="row justify-content-md-center mt-4" id="electivasBlock">
  385. <div class="col-md-auto">
  386. <h3>Electivas</h3>
  387. <table class="table table-sm table-striped table-white table-responsive text-80" id="tabla-horario" data-hora-inicio="<?php echo $hora_ini;?>" data-fracciones = "<?php echo FRACCION_HORA; ?>">
  388. <thead class="thead-dark">
  389. <tr><th scope="col">Materia</th><th scope="col">Horario</th><th scope="col">Salón</th><th scope="col">Profesores</th></tr>
  390. </thead>
  391. <tbody>
  392. <?php
  393. $tabla_electivas = array();
  394. foreach($horario_rs as $horario){
  395. if($horario["TipoSubmateria_id"] != 0){
  396. //----- Carga submaterias ----
  397. $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupo(:id)');
  398. $stmt->bindParam(":id", $horario["HorarioGrupo_id"]);
  399. if(!$stmt->execute()){
  400. $t = $stmt->errorInfo();
  401. $errorDesc = "Ocurrió un error al obtener los datos de los profesores ".$t[2];
  402. break;
  403. }
  404. $submaterias_rs = $stmt->fetchAll();
  405. $stmt->closeCursor();
  406. $sub_prof_num = 0;
  407. $nombre_impreso = false;
  408. if(count($submaterias_rs) > 0){
  409. $tiene_submaterias = true;
  410. foreach($submaterias_rs as $submateria){
  411. $submateria_text = $submateria["Submateria_desc"];
  412. $dia_hora_text = ucfirst(diaNombre($horario["Dia_id"]))." ".date('H:i', strtotime($horario["Horario_hora"]));
  413. $profesores_all = "";
  414. $salon_text = "";
  415. /*$xtpl->assign("SUBMATERIA", $submateria["Submateria_desc"]);
  416. $xtpl->assign("DIA", diaNombre($submateria["Dia_id"]));*/
  417. //---
  418. $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupoprofesor(:id,:sub)');
  419. $stmt->bindParam(":id",$horario["HorarioGrupo_id"]);
  420. $stmt->bindParam(":sub", $submateria["Submateria_id"]);
  421. if(!$stmt->execute()){
  422. $t = $stmt->errorInfo();
  423. $errorDesc = "Ocurrió un error al obtener los datos de los profesores ".$t[2];
  424. break;
  425. }
  426. $profesores_rs = $stmt->fetchAll();
  427. $stmt->closeCursor();
  428. $sub_prof_num += count($profesores_rs);
  429. if(isset($profesores_rs) && count($profesores_rs) > 0){
  430. foreach($profesores_rs as $profesor){
  431. $prof_nombre = '<span class="ing-formacion ing-fw mx-1"></span> '.$profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"];
  432. $profesores_all .= $prof_nombre."<br>";
  433. if($profesor["Salon_desc"]){
  434. $salon_text .= $profesor["Salon_desc"]."<br>";
  435. }else{
  436. $salon_text .= $pendiente."<br>";
  437. }
  438. }
  439. //$xtpl->assign("PROFESOR_SUB", $profesores_all);
  440. //$xtpl->parse("main.submaterias_block.row.submateria");
  441. /*if(!$nombre_impreso){
  442. $nombre_impreso = true;
  443. $xtpl->assign("MAT_ROWSPAN", count($submaterias_rs));
  444. $xtpl->parse("main.submaterias_block.row.materia");
  445. }*/
  446. $row = array();
  447. $row["id"] = $submateria["Submateria_id"];
  448. $row["materia"] = $submateria_text;
  449. $row["dia"] = $dia_hora_text;
  450. $row["profesores"] = $profesores_all;
  451. $row["salon"] = $salon_text;
  452. $tabla_electivas[] = $row;
  453. //$xtpl->parse("main.submaterias_block.row");
  454. }//se pinta sólo si tiene profesor
  455. }
  456. }//hay submaterias
  457. }//fin if
  458. }
  459. if(count($tabla_electivas) > 0){
  460. //Ordena arreglo asociativo
  461. usort($tabla_electivas, function($a, $b) {
  462. return $a['materia'] <=> $b['materia'];
  463. });
  464. //Pinta arreglo ordenado
  465. foreach($tabla_electivas as $row){
  466. ?>
  467. <tr>
  468. <td class="align-middle"><?php echo $row["materia"];?> </td>
  469. <td class="text-center align-middle"><?php echo $row["dia"];?></td>
  470. <td class="text-center align-middle"><?php echo $row["salon"];?></td>
  471. <td class="align-middle"><?php echo $row["profesores"];?></td>
  472. </tr>
  473. <?php
  474. }
  475. }
  476. unset($profesores_rs);
  477. ?>
  478. </tbody>
  479. </table>
  480. </div>
  481. </div>
  482. <?php }//end if existe grupo_actual_rs ?>
  483. </div>
  484. <!--- FOOTER--->
  485. <div class="d-print-none">
  486. <?php require_once("../include/footer.php"); ?>
  487. </div>
  488. <!-- Modal -->
  489. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  490. <div class="modal-dialog modal-dialog-centered" role="document">
  491. <div class="modal-content">
  492. <div class="modal-header">
  493. <h4 class="col-12 modal-title text-center" id="modalLabel">Descargar horarios
  494. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  495. <span aria-hidden="true">×</span>
  496. </button>
  497. </h4>
  498. </div>
  499. <div class="modal-body pb-0">
  500. <form action="./export/xls_horariogrupo.php" method="post" onsubmit="bloquea()">
  501. <div class="form-box">
  502. <div class="form-group row">
  503. <label for="edo-old" class="col-4 col-form-label">Grupo</label>
  504. <div class="col-8">
  505. <?php
  506. $stmt = $pdo->prepare('Select * from fs_subestadoalumno_activo(false)');
  507. $stmt->execute();
  508. ?>
  509. <div class="datalist datalist-select mb-1 w-100" id="dlModal">
  510. <div class="datalist-input">Todos los grupos</div>
  511. <span class="ing-buscar icono"></span>
  512. <ul style="display:none">
  513. <li data-id="0">Todos los grupos</li>
  514. <?php foreach($grupos_rs as $grupo) {
  515. $nombre = $grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"];
  516. ?>
  517. <li data-id="<?php echo $grupo["Grupo_id"];?>" <?php if(isset($filter_grupo) && $filter_grupo == $grupo["Grupo_id"]){echo "class='selected'";}?> ><?php echo $nombre;?></li>
  518. <?php }?>
  519. </ul>
  520. <input type="hidden" id="modal_grupo" name="grupo" value="0">
  521. </div>
  522. </div>
  523. </div>
  524. </div>
  525. <div class="form-group row">
  526. <div class="offset-4 col-8">
  527. <button type="submit" class="btn btn-outline-primary" id="btn-descargar"><?php echo $ICO["descargar"];?> Descargar xls</button>
  528. <button type="button" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cancelar</button>
  529. </div>
  530. </div>
  531. </form>
  532. </div>
  533. </div>
  534. </div>
  535. </div>
  536. </div>
  537. <script src="../js/jquery.min.js"></script>
  538. <script src="../js/jquery-ui.js"></script>
  539. <script src="../js/datepicker-es.js"></script>
  540. <script src="../js/bootstrap/popper.min.js"></script>
  541. <script src="../js/bootstrap/bootstrap.min.js"></script>
  542. <script src="../js/fechas.js"></script>
  543. <script src="../js/sidebarmenu.js"></script>
  544. <script src="../js/datalist.js"></script>
  545. <script>
  546. setDatalist("#periodo", <?php echo $_SESSION["periodo_id"]; ?>);
  547. $(document).on('click', '#dlPeriodo ul li' ,function(){
  548. $("#formaPeriodo").submit();
  549. });
  550. $(document).on('click', '#dlModal ul li' ,function(){
  551. $("#btn-descargar").attr("disabled", false);
  552. });
  553. function bloquea(){
  554. $("#btn-descargar").attr("disabled", true);
  555. }
  556. $('#modal').on('shown.bs.modal', function (event) {
  557. $("#btn-descargar").attr("disabled", false);
  558. });
  559. </script>
  560. <?php if(isset($grupo_actual_rs)){ ?>
  561. <script>
  562. var _periodo_fecha_inicial = "<?php echo fechaSlash($periodo_rs["Periodo_fecha_inicial"]); ?>";
  563. var _periodo_fecha_final = "<?php echo fechaSlash($periodo_rs["Periodo_fecha_final"]); ?>";
  564. var _w = 208, _h = 25;//tamaño de bloques
  565. var _tab_size = 25; //espaciado por cada elemento que colisiona
  566. var _frac = parseInt($('#tabla-horario').data('fracciones'));
  567. var _reloadOnClose = false;
  568. var id_obj = 0; //id de objeto actual
  569. var _hora_min = parseInt($('#tabla-horario').data('hora-inicio'));
  570. var clasesObj = [];
  571. //al imprimir pone horarios lado a lado, sólo soporta 2
  572. function imprime(){
  573. _tab_size = _w/2;
  574. loadHorario();
  575. setTimeout(function() {
  576. window.print()
  577. console.log("Fin print");
  578. setTimeout(function() {
  579. _tab_size = 25;
  580. loadHorario();
  581. console.log("Reajustado");
  582. }, 1000);
  583. }, 1000);
  584. //window.print();
  585. }
  586. </script>
  587. <script src="./js/horario.js"></script>
  588. <script src="./js/horario_alumnos.js"></script>
  589. <?php } ?>
  590. </body>
  591. </html>