horarios.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. $activo = false;
  2. let tab = 0;
  3. let id = 0;
  4. let datalist_click = [false, false, false, false]; //Grupos, Profesores, Planes, Semestres
  5. /***** GRUPOS *****/
  6. $('#dlGrupo ul li').mousedown({index: 0},mousedownDataList);
  7. $('#dlGrupo ul li').mouseup({elem: 'Grupo', index: 0},mouseupDataList);
  8. $('#inputGrupo').click({elem: 'Grupo'},clickDataList);
  9. $('#inputGrupo').blur({elem: 'Grupo', index: 0},blurDataList);
  10. $('#inputGrupo').keyup({elem: 'Grupo'},inputKeyUp);
  11. $('#iconGrupo').mousedown({index: 0},mousedownDataList);
  12. $('#iconGrupo').mouseup({elem: 'Grupo', index: 0},mouseupDataList);
  13. $('#iconGrupo').click({elem: 'Grupo'},limpiaInputDL);
  14. $('#dlGrupo ul li').click(function (){
  15. $('#dlGrupo span').removeClass('ing-borrar');
  16. $('#inputGrupo').val($(this).text());
  17. $(this).parent('ul').hide();
  18. id = $(this).data('id');
  19. tab = 1;
  20. cargaTabla();
  21. });
  22. /***** PROFESORES *****/
  23. $('#dlProfesor ul li').mousedown({index: 1},mousedownDataList);
  24. $('#dlProfesor ul li').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  25. $('#inputProfesor').click({elem: 'Profesor'},clickDataList);
  26. $('#inputProfesor').blur({elem: 'Profesor', index: 1},blurDataList);
  27. $('#inputProfesor').keyup({elem: 'Profesor'},inputKeyUp);
  28. $('#iconProfesor').mousedown({index: 1},mousedownDataList);
  29. $('#iconProfesor').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  30. $('#iconProfesor').click({elem: 'Profesor'},limpiaInputDL);
  31. $('#dlProfesor ul li').click(function (){
  32. $('#dlProfesor span').removeClass('ing-borrar');
  33. $('#inputProfesor').val($(this).text());
  34. $(this).parent('ul').hide();
  35. id = $(this).data('id');
  36. tab = 2;
  37. cargaTabla();
  38. });
  39. $('#dlProfesor ul li').mousedown({index: 1},mousedownDataList);
  40. $('#dlProfesor ul li').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  41. $('#inputProfesor').click({elem: 'Profesor'},clickDataList);
  42. $('#inputProfesor').blur({elem: 'Profesor', index: 1},blurDataList);
  43. $('#inputProfesor').keyup({elem: 'Profesor'},inputKeyUp);
  44. $('#iconProfesor').mousedown({index: 1},mousedownDataList);
  45. $('#iconProfesor').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  46. $('#iconProfesor').click({elem: 'Profesor'},limpiaInputDL);
  47. $('#dlProfesor ul li').click(function (){
  48. $('#dlProfesor span').removeClass('ing-borrar');
  49. $('#inputProfesor').val($(this).text());
  50. $(this).parent('ul').hide();
  51. id = $(this).data('id');
  52. tab = 2;
  53. cargaTabla();
  54. });
  55. $('#dlProfesor ul li').mousedown({index: 1},mousedownDataList);
  56. $('#dlProfesor ul li').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  57. $('#inputProfesor').click({elem: 'Profesor'},clickDataList);
  58. $('#inputProfesor').blur({elem: 'Profesor', index: 1},blurDataList);
  59. $('#inputProfesor').keyup({elem: 'Profesor'},inputKeyUp);
  60. $('#iconProfesor').mousedown({index: 1},mousedownDataList);
  61. $('#iconProfesor').mouseup({elem: 'Profesor', index: 1},mouseupDataList);
  62. $('#iconProfesor').click({elem: 'Profesor'},limpiaInputDL);
  63. $('#dlProfesor ul li').click(function (){
  64. $('#dlProfesor span').removeClass('ing-borrar');
  65. $('#inputProfesor').val($(this).text());
  66. $(this).parent('ul').hide();
  67. id = $(this).data('id');
  68. tab = 2;
  69. cargaTabla();
  70. });
  71. /***** EXTRAORDINARIOS *****/
  72. $('#dlPlan ul li').mousedown({index: 2},mousedownDataList);
  73. $('#dlPlan ul li').mouseup({elem: 'Plan', index: 2},mouseupDataList);
  74. $('#inputPlan').click({elem: 'Plan'},clickDataList);
  75. $('#inputPlan').blur({elem: 'Plan', index: 2},blurDataList);
  76. $('#inputPlan').keyup({elem: 'Plan'},inputKeyUp);
  77. $('#iconPlan').mousedown({index: 1},mousedownDataList);
  78. $('#iconPlan').mouseup({elem: 'Plan', index: 2},mouseupDataList);
  79. $('#iconPlan').click({elem: 'Plan'},limpiaInputDL);
  80. $('#dlPlan ul li').click({elem: 'Plan'},itemDataList);
  81. $('#dlSemestre ul li').mousedown({index: 3},mousedownDataList);
  82. $('#dlSemestre ul li').mouseup({elem: 'Semestre', index: 3},mouseupDataList);
  83. $('#inputSemestre').click({elem: 'Semestre'},clickDataList);
  84. $('#inputSemestre').blur({elem: 'Semestre', index: 3},blurDataList);
  85. $('#inputSemestre').keyup({elem: 'Semestre'},inputKeyUp);
  86. $('#iconSemestre').mousedown({index: 3},mousedownDataList);
  87. $('#iconSemestre').mouseup({elem: 'Semestre', index: 3},mouseupDataList);
  88. $('#iconSemestre').click({elem: 'Semestre'},limpiaInputDL);
  89. $('#dlSemestre ul li').click({elem: 'Semestre'}, itemDataList);
  90. $('#btnExtras').click(function(){
  91. $.ajax({
  92. url: 'action/horarios_action.php',
  93. type: 'POST',
  94. dataType: 'json',
  95. data: { id: 0, tipo: 3, periodo: '', plan: $('#dlPlan').data('id'), semestre: $('#dlSemestre').data('id') },
  96. success: function(result) {
  97. $('#tablaExtras').html(result['html']);
  98. },
  99. error: function(jqXHR, textStatus, errorThrown ){
  100. $('#tablaExtras').html(`<div class="marco">
  101. <div class='msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4'>
  102. <div class='iconAviso bg-warning d-flex justify-content-center align-items-center'><i class='display-3 ing-importante'></i></div>
  103. <div class='txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center'>
  104. <div class='display-5 indivisa-text-black mb-3'>¡Lo sentimos!</div>
  105. <div class='text-center'>Se presentó un error inesperado en el sistema.<br />Por favor inténtalo más tarde.</div>
  106. </div>
  107. </div>
  108. </div>`);
  109. }
  110. });
  111. });
  112. /***** GENERALES *****/
  113. $('.nav-tabs.tabGral button').on('show.bs.tab', function(event){
  114. $($(this).data('target')).find('input.busca').val('');
  115. $($(this).data('target')).find('.tabla').html('');
  116. $($(this).data('target')).find('.btns').addClass('oculto');
  117. });
  118. function cargaTabla(){
  119. let tabla = '';
  120. $.ajax({
  121. url: 'action/horarios_action.php',
  122. type: 'POST',
  123. dataType: 'json',
  124. data: { id: id, tipo: tab, periodo: $('#periodo').val() },
  125. success: function(result) {
  126. switch(tab){
  127. case 1: tabla = 'Grupo'; break;
  128. case 2: tabla = 'Profesor'; break;
  129. }
  130. $('#tabla' + tabla).html(result['html']);
  131. if (result['tabla']){
  132. if (!$activo) {
  133. $('#tabla' + tabla).siblings('.btns').removeClass('oculto');
  134. ajustaColumnas('#tabla' + tabla);
  135. } else
  136. $('#tabla' + tabla).siblings('.btns').addClass('oculto');
  137. } else {
  138. if (!$('#tabla' + tabla).siblings('.btns').hasClass('oculto'))
  139. $('#tabla' + tabla).siblings('.btns').addClass('oculto');
  140. }
  141. },
  142. error: function(jqXHR, textStatus, errorThrown ){
  143. $('#tabla').html(`<div class="marco">
  144. <div class='msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4'>
  145. <div class='iconAviso bg-warning d-flex justify-content-center align-items-center'><i class='display-3 ing-importante'></i></div>
  146. <div class='txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center'>
  147. <div class='display-5 indivisa-text-black mb-3'>¡Lo sentimos!</div>
  148. <div class='text-center'>Se presentó un error inesperado en el sistema.<br />Por favor inténtalo más tarde.</div>
  149. </div>
  150. </div>
  151. </div>`);
  152. }
  153. });
  154. }
  155. $('.prev').click(function(){
  156. if (!$(this).hasClass('inactivo')){
  157. $(this).siblings('.next').removeClass('inactivo');
  158. if (screen375.matches){
  159. if ((columnas - 1) >= min){
  160. $('.dia' + columnas).addClass('oculto');
  161. columnas--;
  162. $('.dia' + columnas).removeClass('oculto');
  163. if(columnas == min)
  164. $(this).addClass('inactivo');
  165. }
  166. } else {
  167. if (screen576.matches){
  168. if ((columnas[0] - 1) >= min){
  169. $('.dia' + columnas[1]).addClass('oculto');
  170. columnas[1] = columnas[0];
  171. columnas[0]--;
  172. $('.dia' + columnas[0]).removeClass('oculto');
  173. if(columnas[0] == min)
  174. $(this).addClass('inactivo');
  175. }
  176. } else {
  177. if (screen768.matches){
  178. if ((columnas[0] - 1) >= min){
  179. $('.dia' + columnas[2]).addClass('oculto');
  180. columnas[2] = columnas[1];
  181. columnas[1] = columnas[0];
  182. columnas[0]--;
  183. $('.dia' + columnas[0]).removeClass('oculto');
  184. if(columnas[0] == min)
  185. $(this).addClass('inactivo');
  186. }
  187. }
  188. }
  189. }
  190. }
  191. });
  192. $('.next').click(function(){
  193. if (!$(this).hasClass('inactivo')){
  194. $(this).siblings('.prev').removeClass('inactivo');
  195. if (screen375.matches){
  196. if ((columnas + 1) <= max){
  197. $('.dia' + columnas).addClass('oculto');
  198. columnas++;
  199. $('.dia' + columnas).removeClass('oculto');
  200. if(columnas == max)
  201. $(this).addClass('inactivo');
  202. }
  203. } else {
  204. if (screen576.matches){
  205. if ((columnas[1] + 1) <= max){
  206. $('.dia' + columnas[0]).addClass('oculto');
  207. columnas[0] = columnas[1];
  208. columnas[1]++;
  209. $('.dia' + columnas[1]).removeClass('oculto');
  210. if(columnas[1] == max)
  211. $(this).addClass('inactivo');
  212. }
  213. } else {
  214. if (screen768.matches){
  215. if ((columnas[2] + 1) <= max){
  216. $('.dia' + columnas[0]).addClass('oculto');
  217. columnas[0] = columnas[1];
  218. columnas[1] = columnas[2];
  219. columnas[2]++;
  220. $('.dia' + columnas[2]).removeClass('oculto');
  221. if(columnas[2] == max)
  222. $(this).addClass('inactivo');
  223. }
  224. }
  225. }
  226. }
  227. }
  228. });
  229. /***** RESOLUCIONES *****/
  230. let screen768 = window.matchMedia("(max-width: 768px)");
  231. let screen576 = window.matchMedia("(max-width: 576px)");
  232. let screen375 = window.matchMedia("(max-width: 375px)");
  233. let min = 1;
  234. let max = 6;
  235. let columnas;
  236. function ajustaColumnas(tabla) {
  237. if (!$(tabla).siblings('.prev').hasClass('inactivo')){
  238. $(tabla).siblings('.prev').addClass('inactivo');
  239. $(tabla).siblings('.next').removeClass('inactivo');
  240. }
  241. if (screen375.matches){
  242. muestraHorario(1);
  243. columnas = 1;
  244. } else {
  245. if (screen576.matches){
  246. muestraHorario(2);
  247. columnas = [1,2];
  248. } else {
  249. if (screen768.matches){
  250. muestraHorario(3);
  251. columnas = [1,2,3];
  252. } else {
  253. muestraHorario(0);
  254. }
  255. }
  256. }
  257. }
  258. function muestraHorario(cols){
  259. switch(cols){
  260. case 1:
  261. $('.dia2').addClass('oculto');
  262. $('.dia3').addClass('oculto');
  263. $('.dia4').addClass('oculto');
  264. $('.dia5').addClass('oculto');
  265. $('.dia6').addClass('oculto');
  266. break;
  267. case 2:
  268. $('.dia3').addClass('oculto');
  269. $('.dia4').addClass('oculto');
  270. $('.dia5').addClass('oculto');
  271. $('.dia6').addClass('oculto');
  272. break;
  273. case 3:
  274. $('.dia4').addClass('oculto');
  275. $('.dia5').addClass('oculto');
  276. $('.dia6').addClass('oculto');
  277. break;
  278. }
  279. }
  280. $(window).on( "orientationchange", function(event) {
  281. cargaTabla();
  282. });