horario_alumnos.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*
  2. * Carga calendario sin permitir edicion
  3. */
  4. $(document).ready(function(){
  5. loadHorario();
  6. });
  7. function loadHorario(){
  8. $('.bloque-clase').remove();
  9. clasesObj = [];
  10. id_obj = 0;
  11. //carga horarios y crea bloques
  12. $.ajax({
  13. url: './action/horariogrupo_select.php',
  14. type: 'POST',
  15. dataType: 'json',
  16. async:false,
  17. data: { id: $('#filter_grupo').val()},
  18. success: function(result) {
  19. if(result["error"]!= "" && result["error"] !== undefined){
  20. console.log("Ocurrió un error de load");
  21. $("#errorBox").collapse('show');
  22. $("#errorBox_text").html(result["error"]);
  23. $('#messageBox')[0].scrollIntoView({ block: "end" });
  24. }else{
  25. var i, j;
  26. for(i = 0; i< result["horario"].length; i++){
  27. var salon_nombre = "";
  28. var submateriaArr = [];
  29. var sinSalon_sub = false;
  30. var sinProfSubmateria = [];
  31. if(result["horario"][i]["submaterias"].length > 0){
  32. for(j = 0; j < result["horario"][i]["submaterias"].length; j++){
  33. var submateria = {
  34. submateria: result["horario"][i]["submaterias"][j]["submateria"],
  35. submateria_nombre: result["horario"][i]["submaterias"][j]["submateria_nombre"],
  36. fecha_inicial: result["horario"][i]["submaterias"][j]["fecha_inicial"],
  37. fecha_final: result["horario"][i]["submaterias"][j]["fecha_final"],
  38. /*salon: result["horario"][i]["submaterias"][j]["salon"],
  39. salon_nombre: result["horario"][i]["submaterias"][j]["salon_nombre"],
  40. salon_nombre_completo: result["horario"][i]["submaterias"][j]["salon_nombre_completo"]*/
  41. activa: result["horario"][i]["submaterias"][j]["activa"],
  42. }
  43. sinProfSubmateria[submateria.submateria] = false;
  44. /*if(result["horario"][i]["submaterias"][j]["salon"] == ""){
  45. sinSalon_sub = true;
  46. }else{
  47. salon_nombre+= submateria.salon_nombre+", ";
  48. }*/
  49. if(submateria.submateria != "" && submateria != 0)
  50. submateriaArr.push(submateria);
  51. };
  52. /*if(salon_nombre.length > 2)
  53. salon_nombre = salon_nombre.substring(0, salon_nombre.length-2);*/
  54. }
  55. var profesorArr = [];
  56. for(j = 0; j < result["horario"][i]["profesores"].length; j++){
  57. var profesor = {
  58. profesor: result["horario"][i]["profesores"][j]["profesor"],
  59. profesor_nombre: result["horario"][i]["profesores"][j]["profesor_nombre"],
  60. submateria: result["horario"][i]["profesores"][j]["submateria"],
  61. salon: result["horario"][i]["profesores"][j]["salon"],
  62. salon_nombre: result["horario"][i]["profesores"][j]["salon_nombre"],
  63. salon_nombre_completo: result["horario"][i]["profesores"][j]["salon_nombre_completo"]
  64. }
  65. if(result["horario"][i]["profesores"][j]["salon"] != ""){
  66. salon_nombre+= profesor.salon_nombre+", ";
  67. }
  68. profesorArr.push(profesor);
  69. sinProfSubmateria[profesor.submateria] = true;
  70. }
  71. if(salon_nombre == ""){
  72. sinSalon_sub = true;
  73. }
  74. if(salon_nombre.length > 2)
  75. salon_nombre = salon_nombre.substring(0, salon_nombre.length-2);
  76. var vinculadasArr = [];
  77. for(j = 0; j < result["horario"][i]["vinculada"].length; j++){
  78. var vinculo = {
  79. id_db: result["horario"][i]["vinculada"][j]["id_db"],
  80. grupo: result["horario"][i]["vinculada"][j]["id_gpo"],
  81. //grupo_nombre: result["horario"][i]["vinculada"][j]["grupo_vinculo_nombre"],
  82. materia: result["horario"][i]["vinculada"][j]["id_mat"],
  83. materia_nombre: result["horario"][i]["vinculada"][j]["nombre"],
  84. }
  85. vinculadasArr.push(vinculo);
  86. };
  87. var clase = {
  88. id_obj: id_obj,
  89. dia: parseInt(result["horario"][i]["dia"]),
  90. hora: result["horario"][i]["hora"],
  91. duracion: parseInt(result["horario"][i]["duracion"]),
  92. materia: parseInt(result["horario"][i]["materia"]),
  93. materia_nombre: result["horario"][i]["materia_nombre"],
  94. tipo: parseInt(result["horario"][i]["tipo"]),
  95. salon: parseInt(result["horario"][i]["salon"]),
  96. salon_nombre: result["horario"][i]["salon_nombre"],
  97. salon_nombre_completo: result["horario"][i]["salon_nombre_completo"],
  98. fecha_inicial: result["horario"][i]["fecha_inicial"],
  99. fecha_final: result["horario"][i]["fecha_final"],
  100. periodo_completo: result["horario"][i]["periodo_completo"],
  101. submaterias: submateriaArr,
  102. profesores: profesorArr,
  103. colision: []
  104. };
  105. if(clase.tipo == 0){
  106. salon_nombre = clase.salon_nombre;
  107. if(clase.salon == 0 || clase.salon == "" || clase.salon == null || isNaN(clase.salon) || clase.salon == undefined){
  108. salon_nombre = "-Pendiente-";
  109. }
  110. }
  111. clasesObj.push(clase);
  112. creaHorarioHTML(id_obj, getX(clase.dia), getY(clase.hora), getAlto(clase.duracion) , clase.materia_nombre, salon_nombre, clase.profesores, clase.periodo_completo, clase.fecha_inicial, clase.fecha_final, clase.hora);
  113. id_obj++;
  114. }//fin for
  115. //Checa colisiones
  116. for(var i=0; i< clasesObj.length; i++){
  117. var colision = colisionHorario(i, getX(clasesObj[i].dia), getY(clasesObj[i].hora), getAlto(clasesObj[i].duracion));
  118. clasesObj[i].colision = colision.slice();
  119. cambiaAncho(i, colision);
  120. }
  121. if(!tieneElectivas()){//si no hay, oculta electivasBlock
  122. $("#electivasBlock").addClass("d-none");
  123. }
  124. }
  125. },
  126. error: function(jqXHR, textStatus, errorThrown ){
  127. $("#errorBox").collapse('show');
  128. $("#errorBox_text").html("Error al cargar horario.<br>"+errorThrown);
  129. $('#messageBox')[0].scrollIntoView({ block: "end" });
  130. }
  131. });//ajax
  132. }
  133. function creaHorarioHTML(id, posX, posY, alto, texto, salon, profArr, completo, fini, ffin, hora){//crea bloque HTML
  134. var incompletoClass = "";
  135. var profHTML = "";
  136. var fechaHTML = "";
  137. for(i=0; i< profArr.length; i++){
  138. profHTML += '<span class="ing-formacion ing-fw mx-1"></span> <span class="profesores">'+profArr[i].profesor_nombre+'</span><br>';
  139. }
  140. if(parseInt(completo) != 1){//si on está completo pone fechas
  141. fechaHTML = '<br><span class="text-80"><span class="ing-importante2 mr-1"></span> '+fini+' a '+ffin+'</span>';
  142. incompletoClass = "incompleto";
  143. }
  144. var nuevoHorario = '<div class="bloque-clase overflow '+incompletoClass+'" id="bloque_'+id+'" data-id_obj="'+id+'" style="top:'+posY+'px; left:'+posX+'px; height:'+alto+'px;" >\
  145. <div class="menu-wrapper">\
  146. <p><sup>'+hora+'</sup> <span class="title">'+texto+'</span>'+fechaHTML+'</p>\
  147. <p class="mt-3">Salón: '+salon+'</p>\
  148. <p class="text-80 mt-2 mb-0">'+profHTML+'</p>\
  149. </div>\
  150. </div>';
  151. $(nuevoHorario).appendTo("#bloque-horarios");
  152. }
  153. function traeAlFrente(index){
  154. var classI = getIndexClase(index);
  155. var posX = getX(clasesObj[classI].dia), posY = getY(clasesObj[classI].hora), alto = getAlto(clasesObj[classI].duracion);
  156. var i=0;
  157. for(i=0; i < clasesObj.length; i++){
  158. if(posX == getX(clasesObj[i].dia) && i != classI){//mismo día, no es el horario actual
  159. if((posY >= getY(clasesObj[i].hora) && posY <= getY(clasesObj[i].hora)+getAlto(clasesObj[i].duracion)) || (posY+alto >= getY(clasesObj[i].hora) && posY+alto <= getY(clasesObj[i].hora)+getAlto(clasesObj[i].duracion)) ){
  160. var id = (clasesObj[i].id_obj);
  161. $("#bloque_"+id).css({zIndex: i+10});
  162. }
  163. }
  164. }
  165. if(clasesObj.length > 0)//había otros
  166. $("#bloque_"+index).css({zIndex: i+15});
  167. }
  168. $(document).on( "click", ".bloque-clase", function(event){//manda al frente de todos
  169. var btn = $(event.target);
  170. //var thisIndex = getIndexClase(btn.parents('.bloque-clase').data("id_obj"));
  171. var thisIndex = btn.parents('.bloque-clase').data("id_obj");
  172. traeAlFrente(thisIndex);
  173. });
  174. function tieneElectivas(){
  175. for(var i = 0; i < clasesObj.length; i++){
  176. if(clasesObj[i].submaterias.length > 0){
  177. return true;
  178. }
  179. }
  180. return false;
  181. }