var _drag = false; var _editable = false;//permite editar horario o no $(document).ready(function(){ ajustaTabla(); hideBorraProfesor(); hideBorraVinculo(); loadCalendario(); timer(_reloadTime); $('#materia').change(function(){ ajustaTabla(); }); $('#modal_confirm').on('show.bs.modal', function (event) { var button = $(event.relatedTarget); // Button that triggered the modal var id = button.parents(".bloque-clase").data("id_obj"); if(clasesObj[id].vinculos.length > 0){ $("#confirm-vinculada").show(); }else{ $("#confirm-vinculada").hide(); } $("#id_borrar").val(id); }); $(".date-picker" ).datepicker(datepickerOptions); $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] ); $(".date-picker").blur(function(){ var fechaObj = fechaObjeto($(this).val()); if( fechaObj !== false ){ if(Date.parse(fechaObj) < Date.parse(fechaObjeto(_periodo_fecha_inicial))){ $(this).val(_periodo_fecha_inicial); }else if(Date.parse(fechaObj) > Date.parse(fechaObjeto(_periodo_fecha_final))){ $(this).val(_periodo_fecha_final); } } }); $('.crea-horario').click(function(){//abre modal para crear $("#submitBtn").attr("disabled", false); if(_editable){ if(!horarioCompleto()){ $("#errorBox").collapse('hide'); $("#errorBox_text").html(""); $("#avanzadoBox").collapse('hide'); $("#submitBtn").data('tipo', 1); $("#modalLabel").html("Crear Horario de materia"); //modal.find("input[type=text]").val(""); //$('.profesor').get(0).selectedIndex = 0; //$('.profesor-submateria').get(0).selectedIndex = 0; //$('.submateria-salon').get(0).selectedIndex = 0; $("#duracion").val(_grupo_duracion).change(); $('#fecha_inicial').val(_periodo_fecha_inicial); $('#fecha_final').val(_periodo_fecha_final); var dia = getDiaNombre($(this).data("dia")); var hora = $(this).data("hora"); if(hora < 10) hora = "0"+hora; var min = $(this).data("fraccion"); if(min < 10) min = "0"+min; $('#dia').val($(this).data("dia")); $('#hora').val(hora+":"+min); $('#fecha_horario').html(dia+" - "+hora+":"+min+" hrs."); $('#duracion').removeClass('is-invalid'); //desbloquea vinculos $("#vinculadas-block").find("button").attr("disabled", false); $("#vinculadas-block").find("select").attr("disabled", false); $('#modal').modal('show'); } }//fin editable }); $('#modal').on('hide.bs.modal', function (event) {//al cerrar verifica si se tiene que recargar if(_reloadOnClose){ loadCalendario(); _reloadOnClose = false; timer(_reloadTime); } }); $('#modal_ver').on('hide.bs.modal', function (event) {//al cerrar verifica si se tiene que recargar if(_reloadOnClose){ loadCalendario(); _reloadOnClose = false; timer(_reloadTime); } }); $("#agrega-profesor").click(function(){ $("#profesor-list >tr:first-child").find('.date-picker.hasDatepicker').removeClass('hasDatepicker'); var cloned = $("#profesor-list >tr:first-child").clone(true).appendTo("#profesor-list"); cloned.find("input").val(""); cloned.find("input.date-picker").prop("id", ""); cloned.find(".date-picker" ).datepicker(datepickerOptions); cloned.find(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] ); $("#profesor-list >tr:first-child").find('.date-picker').datepicker(datepickerOptions); $("#profesor-list >tr:first-child").find('.date-picker').datepicker($.datepicker.regional[ "es" ]); cloned.find('select').get(0).selectedIndex = 0; var tipo = $('#materia').find(':selected').data('tipo'); if(tipo == 1){ cloned.find('.profesor-salon').val($("#profesor-list >tr:first-child").find('.profesor-salon').val()).change(); } //cloned.datepicker(); hideBorraProfesor(); }); $(".borra-profesor").click(function(){//quita profesor $(this).parents("tr").remove(); hideBorraProfesor(); }); $("#agrega-vinculo").click(function(){ var cloned = $("#vinculo-list >tr:first-child").clone(true).appendTo("#vinculo-list"); cloned.find('select').get(0).selectedIndex = 0; hideBorraVinculo(); }); $(".borra-vinculo").click(function(){//quita profesor $(this).parents("tr").remove(); hideBorraVinculo(); }); function enVinculo(arreglo, objBuscar){ for(var i =0; i 2){ salon_nombre+= submateria.salon_nombre+", "; }*/ if(submateria.submateria != "" && submateria != 0) submateriaArr.push(submateria); }); /*if(salon_nombre.length > 2) salon_nombre = salon_nombre.substring(0, salon_nombre.length-2);*/ } var profesorArr = []; $.each($('#profesor-list tr'), function(){ if($(this).find('.profesor').val() != ""){ var profesor = { profesor: $(this).find('.profesor').val(), profesor_nombre: $(this).find('.profesor option:selected').text(), submateria: $(this).find('.profesor-submateria').val(), salon: parseInt($(this).find('.profesor-salon').val()), salon_nombre: $(this).find('.profesor-salon option:selected').data("desc").toString(), salon_nombre_completo: $(this).find('.profesor-salon option:selected').text() } console.log("Profesor:"); console.log(profesor); if(profesor.salon_nombre.length > 2){ salon_nombre+= profesor.salon_nombre+", "; } if(submateriaArr.length>0){ if(profesor.submateria != null && profesor.submateria != "" && profesor.submateria != 0)//Se seleccionó profesor profesorArr.push(profesor); }else{ profesorArr.push(profesor); } } }); if(salon_nombre.length > 2) salon_nombre = salon_nombre.substring(0, salon_nombre.length-2); var vinculadasArr = []; $.each($('#vinculo-list tr'), function(){ if(parseInt($(this).find('.grupo_vinculo').val()) != 0 && parseInt($(this).find('.grupo_vinculo').val()) != ""){ var vinculo = { id_db: parseInt($(this).find('.grupo_vinculo option:selected').data("id_db")), grupo: parseInt($(this).find('.grupo_vinculo option:selected').data("gpo")), //grupo_nombre: $(this).find('.grupo_vinculo option:selected').text(), materia: parseInt($(this).find('.grupo_vinculo option:selected').data("mat")), materia_nombre: $(this).find('.grupo_vinculo option:selected').text(), } if(vinculo.materia_nombre != "" && !enVinculo(vinculadasArr, vinculo)){ vinculadasArr.push(vinculo); } } }); var completo = 0; if( Date.parse(fechaGuion(_periodo_fecha_inicial)) == Date.parse(fechaGuion($('#fecha_inicial').val())) && Date.parse(fechaGuion(_periodo_fecha_final)) == Date.parse(fechaGuion($('#fecha_final').val())) ){ completo = 1; } var clase = { id_obj: id_obj, id_db:0, grupo: _grupo_id, dia: parseInt($('#dia').val()), hora: $('#hora').val(), duracion: parseInt($('#duracion').val()), materia: parseInt($('#materia').val()), materia_nombre: $('#materia option:selected').text(), tipo: $('#materia').find(':selected').data('tipo'), salon: parseInt($('#salon').val()), salon_nombre: $('#salon option:selected').data("desc").toString(), salon_nombre_completo: $('#salon option:selected').text(), fecha_inicial: $('#fecha_inicial').val(), fecha_final: $('#fecha_final').val(), periodo_completo: completo, submaterias: submateriaArr, profesores: profesorArr, vinculos: vinculadasArr, color: $('#materia').find(':selected').data('color') }; if(clase.tipo == 0){ salon_nombre = clase.salon_nombre; if(clase.salon == 0 || clase.salon == "" || clase.salon === null || isNaN(clase.salon) || clase.salon === undefined){ salon_nombre = "-Pendiente-"; } } //Si está dentro de rango y no choca con materia siguiente if(validaFechasBloque(thisIndex, $('#dia').val(), $('#fecha_inicial').val(), $('#fecha_final').val(), $('#hora').val(), $('#duracion').val(), completo )){ if($(this).data("tipo") == 1){//alta if(guardaHorario(1, clase, 0)){ clase.dia_orig = clase.dia; clase.hora_orig = clase.hora; clase.materia_orig = clase.materia; clasesObj.push(clase); loadCalendario(); } }else{//edición clase.dia_orig = clasesObj[thisIndex].dia_orig; clase.hora_orig = clasesObj[thisIndex].hora_orig; clase.materia_orig = clasesObj[thisIndex].materia_orig; clase.id_db = parseInt($('#id_db').val()); clase.id_obj = parseInt($('#id').val()); if(guardaHorario(0, clase, 0)){ loadCalendario(); } } //actualiza horas de materia actualizaHoras(clase.materia); $('#modal').modal('hide'); }else{//chocan fechas $("#avanzadoBox").collapse('show'); $('#fecha_inicial').addClass('is-invalid'); $('#fecha_final').addClass('is-invalid'); }//fin choque de fechas }//fin duración valida else{ $("#avanzadoBox").collapse('show'); $('#duracion').addClass('is-invalid'); } }//fin editable }); $('.btn-reload').click(function(){//recarga página para perder cambios if(confirm('¿Estás seguro de querer volver a cargar el horario?\nSe perderán los cambios que no estén guardados.')){ $(this).parents("form").submit(); } }); }); function creaHorarioHTML(id, posX, posY, alto, color, texto, salon, numProf, completo, link, editable, fini, ffin){//crea bloque HTML var completoClass = ""; var linked = ""; var edit_class = ""; var fechaHTML = ""; if(parseInt(completo) == 1){ completoClass = " d-none"; }//si está completo el horario no pone signo + else{ fechaHTML = '
'+fini+' a '+ffin+''; } if(parseInt(link) == 0){linked = " d-none"; } if(editable === true ){edit_class = "bloque-draggable ui-draggable ui-draggable-handle";} var nuevoHorario = '
\ \
'; $(nuevoHorario).appendTo("#bloque-horarios"); makeDraggable(); } function hideBorraProfesor(){ var total = $("#profesor-list >tr").length;//cuenta renglones actuales if(total == 1){ $('.borra-profesor').hide(); }else{ $('.borra-profesor').show(); } } function hideBorraVinculo(){ var total = $("#vinculo-list >tr").length;//cuenta renglones actuales if(total == 1){ $('.borra-vinculo').hide(); }else{ $('.borra-vinculo').show(); } } function hideBorraVinculo(){ var total = $("#vinculo-list >tr").length;//cuenta renglones actuales if(total == 1){ $('.borra-vinculo').hide(); }else{ $('.borra-vinculo').show(); } } function ajustaTabla(){ var tipo = $('#materia').find(':selected').data('tipo'); loadProfesores(); loadSubmaterias(); loadRelacionadas(); switch(parseInt(tipo)){ case 0: $('#salon').attr("disabled", false); $('.col-profesor-submateria').hide(); $('.col-profesor-salon').hide(); $('.profesor-submateria').parents('td').hide(); $('#submaterias-block').hide(); $(".profesor-submateria").attr("disabled", true); $(".submateria-inicial").attr("disabled", true); $(".submateria-final").attr("disabled", true); $('#btn-tipo-text').text("profesor");//Agrega __profesor__ break; case 1://secuencial $('#salon').attr("disabled", true); $('.col-profesor-submateria').show(); $('.col-profesor-salon').show(); $('#submaterias-block').show(); $('.col-submateria-inicial').show(); $('.col-submateria-final').show(); $('.submateria-inicial').parents('td').show(); $('.submateria-final').parents('td').show(); $('.profesor-submateria').parents('td').show(); $(".profesor-submateria").attr("disabled", false); $(".submateria-inicial").attr("disabled", false); $(".submateria-final").attr("disabled", false); $('#salon').get(0).selectedIndex = 0; $('#btn-tipo-text').text("submateria");//Agrega __submateria__ break; case 2://electiva $('#salon').attr("disabled", true); $('.col-profesor-submateria').show(); $('.col-profesor-salon').show(); $('#submaterias-block').show(); $('.col-submateria-inicial').hide(); $('.col-submateria-final').hide(); $('.submateria-inicial').parents('td').hide(); $('.submateria-final').parents('td').hide(); $('.profesor-submateria').parents('td').show(); $(".profesor-submateria").attr("disabled", false); $(".submateria-inicial").attr("disabled", true); $(".submateria-final").attr("disabled", true); $('#salon').get(0).selectedIndex = 0; $('#btn-tipo-text').text("profesor");//Agrega __submateria__ break; } } function loadProfesores(){ modal = $("#modal"); $.ajax({ url: './action/profesoresarea_select.php', type: 'POST', dataType: 'json', async: false, data: { id: $('#materia').val() }, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ console.log("Ocurrió un error de load"); modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html(result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ $.each($(".profesor"), function(){ $(this).children('option:not(:first)').remove();//quita todas las opciones menos la 1ra }); if(result["profesorArr"] !== undefined){ for(var i = 0; i < result["profesorArr"].length; i++){ $('.profesor') .append($("") .attr("value", result["profesorArr"][i]["id"]) .text(result["profesorArr"][i]["nombre"])); } } } }, error: function(jqXHR, textStatus, errorThrown ){ modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al obtener profesores.
"+errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); //alert("ERROR! " + textStatus+ " - "+errorThrown); } });//ajax } function loadSubmaterias(){ modal = $("#modal"); $.ajax({ url: './action/submateria_select.php', type: 'POST', dataType: 'json', async: false, data: { id: $('#materia').val() }, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ console.log("Ocurrió un error de load"); modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html(result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ $.each($(".profesor-submateria"), function(){ //$(this).children('option:not(:first)').remove();//quita todas las opciones menos la 1ra $(this).children('option').remove();//quita todas las opciones }); if(result["submateriaArr"] !== undefined){ var rows = $("#submateria-list > tr").length;//cuenta renglones actuales if(rows > result["submateriaArr"].length){//sobran //borrar renglones extra pero dejar al menos 1 while(rows > result["submateriaArr"].length && rows > 1){ $("#submateria-list >tr:last-child").remove(); rows--; } }else{//faltan // clone more copies of the row for(var i=rows; i < result["submateriaArr"].length; i++){ var cloned = $("#submateria-list >tr:first-child").clone(true).appendTo("#submateria-list"); cloned.find("input").val(""); cloned.find("input.date-picker").prop("id", ""); cloned.find(".date-picker" ).datepicker(datepickerOptions); cloned.find(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] ); $("#submateria-list >tr:first-child").find('.date-picker').datepicker(datepickerOptions); $("#submateria-list >tr:first-child").find('.date-picker').datepicker($.datepicker.regional[ "es" ]); } } //actualiza datos $("#submateria-list").children().each(function(index) { if(index < result["submateriaArr"].length){//llenar info $(this).find(".submateria-nombre").text(result["submateriaArr"][index]["nombre"]); $(this).find(".submateria-nombre").data('id', result["submateriaArr"][index]["id"]); $(this).find(".submateria-inicial").val(''); $(this).find(".submateria-final").val(''); $(this).find(".submateria-activa").data("id", result["submateriaArr"][index]["id"]).data("nombre", result["submateriaArr"][index]["nombre"]); //console.log(result["submateriaArr"][index]["id"]); //console.log($(this).find(".submateria-nombre").data('id')); } }); /* Ya no se cargan todas por default for(var i = 0; i < result["submateriaArr"].length; i++){ $('.profesor-submateria') .append($("") .attr("value", result["submateriaArr"][i]["id"]) .text(result["submateriaArr"][i]["nombre"])); }*/ } } }, error: function(jqXHR, textStatus, errorThrown ){ modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al obtener submaterias.
"+errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); //alert("ERROR! " + textStatus+ " - "+errorThrown); } });//ajax } function loadRelacionadas(){ modal = $("#modal"); if(parseInt($('#materia').val()) != 0){ $(".grupo_vinculo").parents("#vinculo-list tr:not(:first)").remove(); $.ajax({ url: './action/materiarelacionada_select.php', type: 'POST', dataType: 'json', async: false, data: { mat: $('#materia').val(), gpo: _grupo_id }, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ console.log("Ocurrió un error de load"); modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html(result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ $(".grupo_vinculo option:not(:first)").remove();//quita todas las opciones menos la 1ra if(result["vinculadaArr"] !== undefined && result["vinculadaArr"].length > 0){ for(var i = 0; i < result["vinculadaArr"].length; i++){ $(".grupo_vinculo").append($("") .attr("value", result["vinculadaArr"][i]["id_gpo"]) .text(result["vinculadaArr"][i]["nombre"]) .data("gpo", result["vinculadaArr"][i]["id_gpo"]) .data("mat", result["vinculadaArr"][i]["id_mat"]) .data("id", result["vinculadaArr"][i]["id_db"]) ); } $("#vinculadas-block").removeClass("d-none"); $("#no-vinculadas-block").addClass("d-none"); }else{ $("#vinculadas-block").addClass("d-none"); $("#no-vinculadas-block").removeClass("d-none"); } } }, error: function(jqXHR, textStatus, errorThrown ){ modal.modal('hide'); $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al obtener materias relacionadas.
"+errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); //alert("ERROR! " + textStatus+ " - "+errorThrown); } });//ajax }else{ $.each(selectObj.parents("tr").find(".grupo_vinculo"), function(){ $(this).children('option:not(:first)').remove();//quita todas las opciones menos la 1ra }); } } function makeDraggable() { $(".bloque-draggable").draggable({ cursor: "move", containment:".area-horario", grid: [_w, _h], stack: "#bloque-horarios div", revert : true, revertDuration: 0, start: function( event, ui ) { _drag = true;}, stop: function( event, ui ) { //Valida que no colisione con otro objeto _drag = false; var error = false; var fechaObj = new Date(); var horaArr; var objetoOrigen =[0,0,0];//x, y1, y2 (this) var objetoDestino =[0,0,0];//x, y1, y2 var thisIndex = getIndexClase($(this).data("id_obj")); var top = ui.position.top; var left = ui.position.left; //Obtiene coordenadas de objeto actual objetoOrigen[0] = left; objetoOrigen[1] = top; objetoOrigen[2] = top + getAlto(clasesObj[thisIndex].duracion); for(var i=0; i < clasesObj.length; i++){ if(clasesObj[i].id_obj != $(this).data("id_obj")){ fechaObj = new Date(); //no es el objeto actual, obtiene coordenadas objetoDestino[0] = getX(clasesObj[i].dia); objetoDestino[1] = getY(clasesObj[i].hora); horaArr = clasesObj[i].hora.split(":"); fechaObj.setHours(horaArr[0]); fechaObj.setMinutes(horaArr[1]); fechaObj.setMinutes(fechaObj.getMinutes() + parseInt(clasesObj[i].duracion)); objetoDestino[2] = getY(fechaObj.getHours()+":"+fechaObj.getMinutes()); //valida si se sobreponen if(objetoOrigen[0] == objetoDestino[0]){ if( (objetoOrigen[1] >= objetoDestino[1] && objetoOrigen[1] < objetoDestino[2]) || (objetoDestino[1] >= objetoOrigen[1] && objetoDestino[1] < objetoOrigen[2]) ){//si se sobreponen, lo regresa a su posición anterior if((clasesObj[thisIndex].periodo_completo == 1 || clasesObj[i].periodo_completo == 1) || ( (Date.parse(fechaGuion(clasesObj[thisIndex].fecha_inicial)) <= Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) && Date.parse(fechaGuion(clasesObj[thisIndex].fecha_final)) >= Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) ) || (Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) <= Date.parse(fechaGuion(clasesObj[thisIndex].fecha_inicial)) && Date.parse(fechaGuion(clasesObj[i].fecha_final)) >= Date.parse(fechaGuion(clasesObj[thisIndex].fecha_inicial)) ) ) ){ //si son horario completo o si se enciman las fechas $(this).draggable( "option", "revert", true ); error = true; //alert("No se puede mover la materia a ese horario."); $("#errorBox").collapse('show'); $("#errorBox_text").html("No se puede mover la materia a ese horario."); $('#messageBox')[0].scrollIntoView({ block: "end" }); console.log("Drag Revert"); } } } } } if(!error){//no se sobreponen //Valida cuadricula top = Math.floor(top / _h)*_h; if(top < 0) top = 0; left = Math.floor(left / _w)*_w; if(left < 0) left = 0; //Actualiza objeto clasesObj[thisIndex].dia = getDia(left); clasesObj[thisIndex].hora = getHora(top)+":"+getMinutos(top); if(guardaHorario(0, clasesObj[thisIndex], 1)){ $(this).css({top: top + "px", left: left + "px"}); clasesObj[thisIndex].dia_orig = clasesObj[thisIndex].dia; clasesObj[thisIndex].hora_orig = clasesObj[thisIndex].hora; if(!clasesObj[thisIndex].periodo_completo){ _reloadOnClose = true; } }else{ $(this).draggable( "option", "revert", true ); clasesObj[thisIndex].dia = clasesObj[thisIndex].dia_orig; clasesObj[thisIndex].hora = clasesObj[thisIndex].hora_orig; } } if(_reloadOnClose){ _reloadOnClose = false; loadCalendario(); } } }); } $(document).on( "click", ".bloque-borra", function(event){ var thisIndex = getIndexClase($("#id_borrar").val()); $.ajax({ url: './action/horariogrupo_delete.php', type: 'POST', dataType: 'json', async: false, data: { json: JSON.stringify(clasesObj[thisIndex])}, beforeSend: function(x) { if (x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al borrar el horario.
"+result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ var mat = clasesObj[thisIndex].materia; $('#bloque_'+$("#id_borrar").val()).remove(); clasesObj.splice(thisIndex, 1); actualizaHoras(mat); actualizaEditables(); loadCalendario(); } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html(errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); } });//ajax $('#modal_confirm').modal("hide"); }); $(document).on( "click", ".bloque-edita", function(event){ var btn = $(event.target); var thisIndex = getIndexClase(btn.parents('.bloque-clase').data("id_obj")); var dia = getDiaNombre(clasesObj[thisIndex].dia); $('#id').val(clasesObj[thisIndex].id_obj); $('#dia').val(clasesObj[thisIndex].dia); $('#hora').val(clasesObj[thisIndex].hora); $('#fecha_horario').html(dia+" - "+clasesObj[thisIndex].hora+" hrs."); $("#materia").find("option[value='"+clasesObj[thisIndex].materia+"']").prop("disabled",false); $("#materia").val(clasesObj[thisIndex].materia).change(); var tipoMat = $('#materia').find(':selected').data('tipo'); if(tipoMat == 0){ if(isNaN(clasesObj[thisIndex].salon)){ $('#salon').get(0).selectedIndex = 0; }else{ $("#salon").val(clasesObj[thisIndex].salon).change(); } } $("#duracion").val(clasesObj[thisIndex].duracion).change(); $("#fecha_inicial").val(clasesObj[thisIndex].fecha_inicial); $("#fecha_final").val(clasesObj[thisIndex].fecha_final); $("#submitBtn").data('tipo', 2); $("#modalLabel").html("Editar Horario de materia"); ajustaTabla();//ajusta columnas, carga submaterias //actualiza datos rows = $("#submateria-list > tr").length;//cuenta renglones actuales var i = 0; $("#submateria-list").children().each(function(index) { for(i=0; i < clasesObj[thisIndex].submaterias.length; i++){ //console.log(parseInt(clasesObj[thisIndex].submaterias[i].submateria) +"=="+ parseInt($(this).find(".submateria-nombre").data('id'))); if(parseInt(clasesObj[thisIndex].submaterias[i].submateria) == parseInt($(this).find(".submateria-nombre").data('id')) ){ //$(this).find(".submateria-nombre").text(clasesObj[thisIndex].submaterias[index].submateria_nombre); //$(this).find(".submateria-nombre").data('id', clasesObj[thisIndex].submaterias[index].submateria); $(this).find(".submateria-inicial").val(clasesObj[thisIndex].submaterias[i].fecha_inicial); $(this).find(".submateria-final").val(clasesObj[thisIndex].submaterias[i].fecha_final); $(this).find(".submateria-activa").prop("checked", clasesObj[thisIndex].submaterias[i].activa); if(clasesObj[thisIndex].submaterias[i].activa){ $('#profesor-list .profesor-submateria') .append($("") .attr("value", clasesObj[thisIndex].submaterias[i].submateria) .text(clasesObj[thisIndex].submaterias[i].submateria_nombre)); } } } }); //carga renglones de profesor var rows = $("#profesor-list > tr").length;//cuenta renglones actuales if(rows > clasesObj[thisIndex].profesores.length){//sobran //borrar renglones extra pero dejar al menos 1 while(rows > clasesObj[thisIndex].profesores.length && rows > 1){ $("#profesor-list >tr:last-child").remove(); rows--; } }else{//faltan // clone more copies of the row for(var i=rows; i < clasesObj[thisIndex].profesores.length; i++){ var cloned = $("#profesor-list >tr:first-child").clone(true).appendTo("#profesor-list"); cloned.find("input").val(""); } } //actualiza datos $("#profesor-list").children().each(function(index) { if(index < clasesObj[thisIndex].profesores.length){//llenar info $(this).find(".profesor").val(clasesObj[thisIndex].profesores[index].profesor); $(this).find(".profesor-submateria").val(parseInt(clasesObj[thisIndex].profesores[index].submateria)); if(clasesObj[thisIndex].profesores[index].salon != "" && clasesObj[thisIndex].profesores[index].salon !== undefined && !isNaN(clasesObj[thisIndex].profesores[index].salon)) $(this).find(".profesor-salon").val(clasesObj[thisIndex].profesores[index].salon); else $(this).find(".profesor-salon").get(0).selectedIndex = 0; i++; } }); //carga renglones de vinculos var rows = $("#vinculo-list > tr").length;//cuenta renglones actuales if(rows > clasesObj[thisIndex].vinculos.length){//sobran //borrar renglones extra pero dejar al menos 1 while(rows > clasesObj[thisIndex].vinculos.length && rows > 1){ $("#vinculo-list >tr:last-child").remove(); rows--; } }else{//faltan // clone more copies of the row for(var i=rows; i < clasesObj[thisIndex].vinculos.length; i++){ var cloned = $("#vinculo-list >tr:first-child").clone(true).appendTo("#vinculo-list"); } } //actualiza datos $("#vinculo-list").children().each(function(index) { if(index < clasesObj[thisIndex].vinculos.length){//llenar info //$(this).find(".").val(clasesObj[thisIndex].vinculos[index].profesor); $(this).find(".grupo_vinculo").val(parseInt(clasesObj[thisIndex].vinculos[index].grupo)); $(this).find('.grupo_vinculo option:selected').data("id_db", clasesObj[thisIndex].vinculos[index].id_db); //console.log("Data "+$(this).find('.grupo_vinculo option:selected').data("id_db")); } }); //bloquea vinculos $("#vinculadas-block").find("button").attr("disabled", true); $("#vinculadas-block").find("select").attr("disabled", true); hideBorraProfesor(); hideBorraVinculo(); $('#modal').modal('show'); }); $(document).on( "click", ".bloque-agrega", function(event){//agregar materia en mismo horario var btn = $(event.target); var thisIndex = getIndexClase(btn.parents('.bloque-clase').data("id_obj")); if(_editable){ $("#errorBox").collapse('hide'); $("#errorBox_text").html(""); $("#avanzadoBox").collapse('hide'); $("#submitBtn").data('tipo', 1); $("#modalLabel").html("Crear Horario de materia"); //modal.find("input[type=text]").val(""); //$('.profesor').get(0).selectedIndex = 0; //$('.profesor-submateria').get(0).selectedIndex = 0; //$('.profesor-salon').get(0).selectedIndex = 0; $("#duracion").val(_grupo_duracion).change(); //$('#nivel').prop("disabled", false); //$('#nivel').get(0).selectedIndex = 0; $('#fecha_inicial').val(_periodo_fecha_inicial); $('#fecha_final').val(_periodo_fecha_final); var dia = getDiaNombre(clasesObj[thisIndex].dia); $('#dia').val(clasesObj[thisIndex].dia); $('#hora').val(clasesObj[thisIndex].hora); $('#fecha_horario').html(dia+" - de "+clasesObj[thisIndex].hora+" hrs."); $('#duracion').removeClass('is-invalid'); //desbloquea vinculos $("#vinculadas-block").find("button").attr("disabled", false); $("#vinculadas-block").find("select").attr("disabled", false); $('#modal').modal('show'); }//fin editable }); $('#modal').on('hidden.bs.modal', function () { actualizaHoras($("#materia").val()); }) $('#modal').on('show.bs.modal', function () { $("#submitBtn").attr("disabled", false); }) function validaFechasBloque(pos, dia, fecha_ini, fecha_fin, hora_ini, duracion, periodo_completo){ var horaObjIni = new Date(); var horaObjFin; var horaArr = hora_ini.split(":"); horaObjIni.setHours(horaArr[0]); horaObjIni.setMinutes(horaArr[1]); horaObjIni.setSeconds(0); horaObjFin = new Date(horaObjIni.getTime()); horaObjFin.setMinutes(horaObjFin.getMinutes() + parseInt(duracion)); for(var i=0; i < clasesObj.length; i++){ var horaArr = clasesObj[i].hora.split(":"); var horaClaseInicio = new Date(); var horaClaseFin = new Date(); horaClaseInicio.setHours(horaArr[0]); horaClaseInicio.setMinutes(horaArr[1]); horaClaseInicio.setSeconds(0); horaClaseFin = new Date(horaClaseInicio.getTime()); horaClaseFin.setMinutes(horaClaseFin.getMinutes() + clasesObj[i].duracion); if(pos != i){ //Objeto leído mismo día, hora de fin del objeto actual choca con hora de inicio objeto anterior if(parseInt(clasesObj[i].dia) == parseInt(dia) && (( Date.parse(horaClaseInicio) < Date.parse(horaObjFin) && Date.parse(horaClaseInicio) >= Date.parse(horaObjIni)) || ( Date.parse(horaObjIni) < Date.parse(horaClaseFin) && Date.parse(horaObjIni) >= Date.parse(horaClaseInicio)) ) ){ if( ((Date.parse(fechaGuion(fecha_ini)) <= Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) && Date.parse(fechaGuion(fecha_fin)) >= Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) ) || (Date.parse(fechaGuion(clasesObj[i].fecha_inicial)) <= Date.parse(fechaGuion(fecha_ini)) && Date.parse(fechaGuion(clasesObj[i].fecha_final)) >= Date.parse(fechaGuion(fecha_ini)) ) )){ return false;//Si existe, no es válido } } } } return true;//no existe, es válido } function validaHorasBloque(pos, dia, horaObjIni, horaObjFin){ for(var i=0; i < clasesObj.length; i++){ var horaArr = clasesObj[i].hora.split(":"); var horaClaseInicio = new Date(); horaClaseInicio.setHours(horaArr[0]); horaClaseInicio.setMinutes(horaArr[1]); horaClaseInicio.setSeconds(0); //Objeto leído no es el objeto actual, mismo día, hora de fin del objeto actual choca con hora de inicio objeto anterior if(pos != i && parseInt(clasesObj[i].dia) == parseInt(dia) && Date.parse(horaClaseInicio) < Date.parse(horaObjFin) && Date.parse(horaClaseInicio) > Date.parse(horaObjIni)){ return false;//Si existe, no es válido } } return true;//no existe, es válido } function validaDuracion(pos, dia, hora_ini, duracion){//valida que la materia no tenga conflictos con la siguiente y que esté dentro del límite del horario var horaObjIni = new Date(); var horaObjFin; var horaArr = hora_ini.split(":"); horaObjIni.setHours(horaArr[0]); horaObjIni.setMinutes(horaArr[1]); horaObjIni.setSeconds(0); horaObjFin = new Date(horaObjIni.getTime()); horaObjFin.setMinutes(horaObjFin.getMinutes() + parseInt(duracion)); //Obtiene última hora de clase var fechaLimite = new Date(); fechaLimite.setHours(parseInt($('.hora').last().data('hora')) + 1); fechaLimite.setMinutes(0); fechaLimite.setSeconds(0); if( Date.parse(horaObjFin) > Date.parse(fechaLimite)){ return false; } return validaHorasBloque(pos, dia, horaObjIni, horaObjFin);//valida si choca con el siguiente } function loadCalendario(){ $('.bloque-clase').remove(); clasesObj = []; id_obj = 0; loadHorario(false);//carga horarios no editables del grupo loadHorario(true);//carga horarios editables del grupo } function loadHorario(editable){ //carga horarios y crea bloques} //console.log("loadHorario"); $.ajax({ url: './action/horariogrupo_select.php', type: 'POST', dataType: 'json', data: { id: _grupo_id, puesto:true, editable: editable}, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ //console.log("Ocurrió un error de load"); $("#errorBox").collapse('show'); $("#errorBox_text").html(result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ var i, j; for(i = 0; i< result["horario"].length; i++){ var salon_nombre = ""; var submateriaArr = []; var sinSalon_sub = false; var sinProfSubmateria = []; //console.log("salon_nombre:"+salon_nombre); if(result["horario"][i]["submaterias"].length > 0){ for(j = 0; j < result["horario"][i]["submaterias"].length; j++){ var submateria = { submateria: result["horario"][i]["submaterias"][j]["submateria"], submateria_nombre: result["horario"][i]["submaterias"][j]["submateria_nombre"], fecha_inicial: result["horario"][i]["submaterias"][j]["fecha_inicial"], fecha_final: result["horario"][i]["submaterias"][j]["fecha_final"], /*salon: result["horario"][i]["submaterias"][j]["salon"], salon_nombre: result["horario"][i]["submaterias"][j]["salon_nombre"], salon_nombre_completo: result["horario"][i]["submaterias"][j]["salon_nombre_completo"]*/ activa: result["horario"][i]["submaterias"][j]["activa"], } sinProfSubmateria[submateria.submateria] = false; /*if(result["horario"][i]["submaterias"][j]["salon"] == ""){ sinSalon_sub = true; }else{ salon_nombre+= submateria.salon_nombre+", "; }*/ if(submateria.submateria != "" && submateria != 0) submateriaArr.push(submateria); }; /*if(salon_nombre.length > 2) salon_nombre = salon_nombre.substring(0, salon_nombre.length-2);*/ } var profesorArr = []; for(j = 0; j < result["horario"][i]["profesores"].length; j++){ var profesor = { profesor: result["horario"][i]["profesores"][j]["profesor"], profesor_nombre: result["horario"][i]["profesores"][j]["profesor_nombre"], submateria: result["horario"][i]["profesores"][j]["submateria"], salon: result["horario"][i]["profesores"][j]["salon"], salon_nombre: result["horario"][i]["profesores"][j]["salon_nombre"], salon_nombre_completo: result["horario"][i]["profesores"][j]["salon_nombre_completo"] } if(result["horario"][i]["profesores"][j]["salon"] != ""){ salon_nombre+= profesor.salon_nombre+", "; } profesorArr.push(profesor); if(profesor.profesor === undefined || profesor.profesor == "" ) sinProfSubmateria[profesor.submateria] = true; } if(salon_nombre == ""){ sinSalon_sub = true; } if(salon_nombre.length > 2) salon_nombre = salon_nombre.substring(0, salon_nombre.length-2); var vinculadasArr = []; for(j = 0; j < result["horario"][i]["vinculada"].length; j++){ var vinculo = { id_db: result["horario"][i]["vinculada"][j]["id_db"],/*horario*/ grupo: result["horario"][i]["vinculada"][j]["id_gpo"], //grupo_nombre: result["horario"][i]["vinculada"][j]["grupo_vinculo_nombre"], materia: result["horario"][i]["vinculada"][j]["id_mat"], materia_nombre: result["horario"][i]["vinculada"][j]["nombre"], } vinculadasArr.push(vinculo); }; var clase = { id_obj: id_obj, id_db: parseInt(result["horario"][i]["id"]), grupo: _grupo_id, dia: parseInt(result["horario"][i]["dia"]), dia_orig: parseInt(result["horario"][i]["dia"]), hora: result["horario"][i]["hora"], hora_orig: result["horario"][i]["hora"], duracion: parseInt(result["horario"][i]["duracion"]), materia: parseInt(result["horario"][i]["materia"]), materia_orig: parseInt(result["horario"][i]["materia"]), materia_nombre: result["horario"][i]["materia_nombre"], tipo: parseInt(result["horario"][i]["tipo"]), salon: parseInt(result["horario"][i]["salon"]), salon_nombre: result["horario"][i]["salon_nombre"], salon_nombre_completo: result["horario"][i]["salon_nombre_completo"], fecha_inicial: result["horario"][i]["fecha_inicial"], fecha_final: result["horario"][i]["fecha_final"], periodo_completo: result["horario"][i]["periodo_completo"], submaterias: submateriaArr, profesores: profesorArr, vinculos: vinculadasArr, color: result["horario"][i]["color"], colision: [] }; if(clase.tipo == 0){ salon_nombre = clase.salon_nombre; if(clase.salon == 0 || clase.salon == "" || clase.salon === null || isNaN(clase.salon) || clase.salon === undefined){ salon_nombre = "-Pendiente-"; } } clasesObj.push(clase); creaHorarioHTML(id_obj, getX(clase.dia), getY(clase.hora), getAlto(clase.duracion) , clase.color, clase.materia_nombre, salon_nombre, clase.profesores.length, clase.periodo_completo, vinculadasArr.length, editable, clase.fecha_inicial, clase.fecha_final); if(result["horario"][i]["alerta"]){ if(clase.tipo == 0){ if(clase.profesores.length == 0 || clase.salon == 0 || clase.salon == "" || clase.salon === null || isNaN(clase.salon) || clase.salon === undefined){ $("#bloque_"+id_obj+" .alerta").removeClass("d-none"); //console.log(clase.materia+" Tipo 0 sin prof o sin salon"); } }else{ if(sinSalon_sub){ $("#bloque_"+id_obj+" .alerta").removeClass("d-none"); //console.log(clase.materia+" Tipo 1 sin salon "+sinSalon_sub); } if(clase.profesores.length == 0){ $("#bloque_"+id_obj+" .alerta").removeClass("d-none"); } /*var prof_sub = true; sinProfSubmateria.forEach(function (arrayItem) { prof_sub = prof_sub && arrayItem; }); if(!prof_sub){ $("#bloque_"+id_obj+" .alerta").removeClass("d-none"); }*/ } } id_obj++; //Actualiza horas asignadas actualizaHoras(clase.materia); } }//fin for ordenaHorario(); actualizaLista(); actualizaEditables(); _editable = true; if(editable){ //Checa colisiones for(var i=0; i< clasesObj.length; i++){ var colision = colisionHorario(i, getX(clasesObj[i].dia), getY(clasesObj[i].hora), getAlto(clasesObj[i].duracion)); clasesObj[i].colision = colision.slice(); cambiaAncho(i, colision); } } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al cargar horario.
"+errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); //alert("ERROR! " + textStatus+ " - "+errorThrown); _editable = true; } });//ajax } //funcion para guardar por ajax información function guardaHorario(nuevo, objClase, justMove){ if(justMove != 1 && $("#materia").val() == null){ $("#errorBox").collapse('show'); $("#errorBox_text").html("El horario necesita una materia.
No existen materias de tu área académica para agregar."); $('#messageBox')[0].scrollIntoView({ block: "end" }); return false; } $("#materia").removeClass('is-invalid'); _editable = false; var url = './action/horariogrupo_insert.php'; if(nuevo != 1){ url = './action/horariogrupo_update.php'; } //console.log(objClase); var state = false; $.ajax({ url: url, type: 'POST', dataType: 'json', async: false, data: { move: justMove, json: JSON.stringify(objClase)}, beforeSend: function(x) { if (x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar el horario.
"+result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); state = false; }else{ state = true; if(nuevo == 1){ objClase.id_db = result["id"]; if( Array.isArray(result["vinculos"]) && result["vinculos"].length > 0 ){ for(var i=0; i < result["vinculos"].length; i++ ){ objClase.vinculos[i].id_db = result["vinculos"][i]; } } actualizaEditables(); } $("#errorBox").collapse('hide'); } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar el horario"); $('#messageBox')[0].scrollIntoView({ block: "end" }); state = false; } });//ajax _editable = true; return state; } function checaActualizaciones(){ if(!_reloadOnClose && !_drag && !(($("#modal").data('bs.modal') || {_isShown: false})._isShown) && !(($("#modal_ver").data('bs.modal') || {_isShown: false})._isShown)){ //console.log("check"); ordenaHorario(); var strCheck = ""; for(var i=0; i < clasesObj.length; i++){ strCheck += clasesObj[i].dia+""+clasesObj[i].hora+""+clasesObj[i].materia+""+clasesObj[i].duracion+""+clasesObj[i].fecha_inicial+""+clasesObj[i].fecha_final+""+clasesObj[i].tipo; } strCheck = MD5(strCheck); $.ajax({ url: './action/horariogrupo_validahash.php', type: 'POST', dataType: 'json', data: { id: _grupo_id, check: strCheck}, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar el horario.
"+result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ var reload = result["reload"]; if(reload){ if(!_drag && !(($("#modal").data('bs.modal') || {_isShown: false})._isShown) && !(($("#modal_ver").data('bs.modal') || {_isShown: false})._isShown) ){//no están abiertos los modales{ loadCalendario(); }else{ _reloadOnClose = true; } } } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html(errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); } });//ajax timer(_reloadTime); }else timer(2); } function timer(tiempo = 0){ if(tiempo > 0){ setTimeout(checaActualizaciones, tiempo * 1000); } } //revisa si se colocaron todas las horas function horarioCompleto(){ /*var total = 0; $.each($('#materiasBox').find('li .badge').find("span"), function(){ total+= parseFloat($(this).data("max")); }); for(var i=0; i < clasesObj.length; i++){ total -= (clasesObj[i].duracion/60) } if(total == 0) return true;*/ return false; } function actualizaEditables(){ /*if(!horarioCompleto()){ if($("#calendario-body .editable").length == 0){ $("#calendario-body .fraccion").removeClass("no-editable").addClass("editable"); } }else{ $("#calendario-body .fraccion").removeClass("editable").addClass("no-editable"); }*/ } function traeAlFrente(index){ var classI = getIndexClase(index); var posX = getX(clasesObj[classI].dia), posY = getY(clasesObj[classI].hora), alto = getAlto(clasesObj[classI].duracion); var i=0; for(i=0; i < clasesObj.length; i++){ if(posX == getX(clasesObj[i].dia) && i != classI){//mismo día, no es el horario actual 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)) ){ var id = (clasesObj[i].id_obj); $("#bloque_"+id).css({zIndex: i+10}); } } } if(clasesObj.length > 0)//había otros $("#bloque_"+index).css({zIndex: i+15}); } $(document).on( "click", ".bloque-clase", function(event){//manda al frente de todos var btn = $(event.target); //var thisIndex = getIndexClase(btn.parents('.bloque-clase').data("id_obj")); var thisIndex = btn.parents('.bloque-clase').data("id_obj"); traeAlFrente(thisIndex); }); $(document).on( "change", ".submateria-activa", function(event){//activa submateria en lista de progesores var check = $(event.target); if(check.prop("checked")){ $(".profesor-submateria").each(function(){ $(this).append($("") .attr("value", check.data("id")) .text(check.data("nombre"))); }); }else{ $(".profesor-submateria option").each(function(){ if($(this).attr("value") == check.data("id")) $(this).remove(); }); } }); /*se llama desde change function hideOption(listObj, thisObj){ var val = thisObj.val(); $.each($(listObj).find('tr'), function(){ if($(this) != thisObj.parents("tr") && val != ""){ $(this).find('select option[value="'+val+'"]').css('display', 'none'); } }); } function showOption(listObj, val){ $.each($(listObj).find('tr'), function(){ $(this).find('select option[value="'+val+'"]').css('display', 'block'); }); }*/