horarios_historicos.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>
  7. Histórico de horarios
  8. </title>
  9. <?php
  10. include 'import/html_css_files.php';
  11. ?>
  12. <style>
  13. [v-cloak] {
  14. display: none;
  15. }
  16. </style>
  17. <script src="js/jquery.min.js"></script>
  18. <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
  19. integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
  20. crossorigin="anonymous"></script>
  21. <script src="js/bootstrap/bootstrap.min.js"></script>
  22. </head>
  23. <body>
  24. <?
  25. $redirect = $_SERVER['PHP_SELF'];
  26. include "import/html_header.php";
  27. global $user;
  28. html_header(
  29. "Histórico de horarios",
  30. "Sistema de gestión de checador",
  31. );
  32. if (!$user->periodo_id) { ?>
  33. <script defer src="js/jquery.min.js"></script>
  34. <script src="js/bootstrap/bootstrap.min.js"></script>
  35. <div class="modal" id="seleccionar-periodo" tabindex="-1">
  36. <div class="modal-dialog modal-dialog-centered modal-xl">
  37. <div class="modal-content">
  38. <div class="modal-header">
  39. <h2 class="modal-title">Seleccionar periodo</h2>
  40. </div>
  41. <div class="modal-body container">
  42. <? include 'import/periodo.php' ?>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <script>
  48. $('#seleccionar-periodo').modal({
  49. backdrop: 'static',
  50. keyboard: false,
  51. });
  52. $('#seleccionar-periodo').modal('show');
  53. </script>
  54. <? exit;
  55. } ?>
  56. <main class="container-fluid px-4 mt-4" id="app" v-cloak @vue:mounted="mounted" style="min-height: 60vh;"
  57. v-scope="">
  58. <?php include "import/periodo.php" ?>
  59. <form class="marco" v-scope="{profesor: null}">
  60. <!-- datalist profesores -->
  61. <div class="row">
  62. <div class="col-12">
  63. <div class="form-box">
  64. <div class="form-group row">
  65. <label for="profesor" class="col-form-label col-4">Profesor</label>
  66. <input list="profesores" class="form-control col-6 mx-3" id="profesor" v-model="profesor"
  67. @input="buscarHorarios(profesor)">
  68. <datalist id="profesores">
  69. <option v-for="profesor in profesores" :value="profesor.profesor_clave">
  70. {{profesor.profesor_nombre}}
  71. </option>
  72. </datalist>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </form>
  78. <div class="table-responsive marco" v-if="horarios.length > 0" v-scope="">
  79. <table class="table table-hover table-striped table-bordered table-sm">
  80. <thead class="thead-dark">
  81. <tr>
  82. <th scope="col" class="text-center align-middle px-2">
  83. Carrera
  84. </th>
  85. <th scope="col" class="text-center align-middle px-2">
  86. Materia
  87. </th>
  88. <th scope="col" class="text-center align-middle px-2">
  89. Grupo
  90. </th>
  91. <th scope="col" class="text-center align-middle px-2">
  92. Horario
  93. </th>
  94. <th scope="col" class="text-center align-middle px-2">
  95. Alta
  96. </th>
  97. <th scope="col" class="text-center align-middle px-2">
  98. Baja
  99. </th>
  100. </tr>
  101. </thead>
  102. <tbody>
  103. <tr v-for="horario in horarios" :key="`horario-${horario.horario_id}`">
  104. <td class="align-middle px-2">
  105. <small>
  106. <strong>{{horario.facultad_nombre}}</strong>
  107. </small>
  108. {{horario.carrera_nombre}}
  109. </td>
  110. <td class="align-middle px-2 text-center">
  111. {{horario.materia_nombre}}
  112. </td>
  113. <td class="align-middle px-2 text-center">
  114. {{horario.horario_grupo}}
  115. </td>
  116. <td class="align-middle px-2 text-center"
  117. v-scope="{días: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado']}">
  118. {{días[horario.horario_dia]}} - {{horario.horario_hora}} - {{horario.horario_fin}}
  119. </td>
  120. <td class="align-middle px-2 text-center">
  121. {{horario.horario_fecha_inicio}}
  122. </td>
  123. <td class="align-middle px-2 text-center">
  124. {{horario.horario_fecha_fin}}
  125. </td>
  126. </tr>
  127. </tbody>
  128. </table>
  129. </div>
  130. <div class="modal" tabindex="-1" id="cargando" data-backdrop="static" data-keyboard="false">
  131. <div class="modal-dialog modal-dialog-centered">
  132. <div class="modal-content">
  133. <div class="modal-header">
  134. <h4 class="modal-title">Cargando datos...</h4>
  135. </div>
  136. <div class="modal-body container">
  137. <div class="row">
  138. <div class="col-12 text-center">
  139. <span class="spinner-border spinner-border-lg"></span>
  140. </div>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. <div class="modal" tabindex="-1" id="mensaje">
  147. <div class="modal-dialog modal-dialog-centered">
  148. <div class="modal-content">
  149. <div class="modal-header">
  150. <h4 class="modal-title">{{mensaje.titulo}}</h4>
  151. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  152. <span aria-hidden="true">&times;</span>
  153. </button>
  154. </div>
  155. <div class="modal-body container">
  156. <div class="row">
  157. <div class="col-12 text-center">
  158. {{mensaje.texto}}
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. </main>
  166. <!-- <script src=" js/datalist.js"></script> -->
  167. <script type="module">
  168. import { createApp } from 'https://unpkg.com/petite-vue?module'
  169. createApp({
  170. horarios: [],
  171. profesores: [],
  172. async buscarHorarios(profesor_clave) {
  173. // if existe la clave del profesor
  174. if (!this.profesores.find(profesor => profesor.profesor_clave === profesor_clave)) {
  175. this.horarios = []
  176. return
  177. }
  178. const horarios = await fetch(`/action/horario_profesor.php?profesor=${profesor_clave}`)
  179. this.horarios = await horarios.json()
  180. },
  181. async mounted() {
  182. const profesores = await fetch('/action/action_profesor.php')
  183. this.profesores = await profesores.json()
  184. },
  185. }).mount('#app')
  186. </script>
  187. <script src="js/scrollables.js"></script>
  188. </body>
  189. </html>