123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359 |
- 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<arreglo.length; i++){
- if(arreglo[i].grupo == objBuscar.grupo && arreglo[i].materia == objBuscar.materia)
- return true;
- }
- return false;
- }
- $('#submitBtn').click(function(){
- //Crea Obj JSON y elemento HTML
- $(this).attr("disabled", true);
- if(_editable){
- $('#duracion').removeClass('is-invalid');
- $('#fecha_inicial').removeClass('is-invalid');
- $('#fecha_final').removeClass('is-invalid');
- var thisIndex;
- if($(this).data("tipo") == 1){//alta
- thisIndex = -1;
- }else{
- thisIndex = getIndexClase($('#id').val());
- $('#id_db').val(clasesObj[thisIndex].id_db);
- }
-
- if(validaDuracion(thisIndex, $('#dia').val(), $('#hora').val(), $('#duracion').val())){
- var salon_nombre = "";
- var submateriaArr = [];
- if($('#materia').find(':selected').data('tipo') != 0){
- $.each($('#submateria-list tr'), function(){
- var submateria = {
- submateria: $(this).find('.submateria-nombre').data('id'),
- submateria_nombre: $(this).find('.submateria-nombre').text(),
- fecha_inicial: $(this).find('.submateria-inicial').val(),
- fecha_final: $(this).find('.submateria-final').val(),
- /*salon: parseInt($(this).find('.submateria-salon').val()),
- salon_nombre: $(this).find('.submateria-salon option:selected').data("desc").toString(),
- salon_nombre_completo: $(this).find('.submateria-salon option:selected').text()*/
- activa: $(this).find('.submateria-activa').prop("checked"),
- }
- /*if(submateria.salon_nombre.length > 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 = '<br><span class="text-80"><span class="ing-importante2 mr-1"></span> '+fini+' a '+ffin+'</span>'; }
- if(parseInt(link) == 0){linked = " d-none"; }
- if(editable === true ){edit_class = "bloque-draggable ui-draggable ui-draggable-handle";}
- var nuevoHorario = '<div class="bloque-clase '+edit_class+'" id="bloque_'+id+'" data-id_obj="'+id+'"\
- style="top:'+posY+'px; left:'+posX+'px; background-color:'+color+'; height:'+alto+'px" >\
- <div class="menu-wrapper">\
- <p><span class="ing-importante ing-fw alerta d-none mr-1"></span> <span class="title">'+texto+'</span> <span class="ing-link ing-fw bloque-vinculada '+linked+'"></span> '+fechaHTML+'</p>\
- <div class="d-flex justify-content-between w-100">\
- <p class="salon my-0">'+salon+'</p> <p class="text-right my-0"><span class="ing-formacion mx-1"></span> <span class="profesores">'+numProf+'</span></p>\
- </div>\
- <div class="menu-flotante d-none">\
- <span class="float-left iconos">\
- <span class="ing-mas ing-fw bloque-agrega mx-1 '+completoClass+'" aria-hidden="true" title="Agregar materia en mismo horario"></span>\
- </span>\
- <span class="float-right iconos" >\
- <span class="ing-buscar ing-fw bloque-ver mx-1" aria-hidden="true" title="Ver detalle"></span>';
- if(editable === true ){
- nuevoHorario +='<span class="ing-editar ing-fw bloque-edita mx-1" aria-hidden="true" title="Editar materia"></span>\
- <span class="ing-basura ing-fw mx-1" aria-hidden="true" data-toggle="modal" data-target="#modal_confirm" title="Borrar materia"></span>';
- }
- nuevoHorario +='</span>\
- </div>\
- </div>\
- </div>';
- $(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($("<option></option>")
- .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.<br>"+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($("<option></option>")
- .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.<br>"+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($("<option></option>")
- .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.<br>"+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.<br>"+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($("<option></option>")
- .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.<br>"+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.<br>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.<br>"+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.<br>"+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($("<option></option>")
- .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');
- });
- }*/
|