var _drag = false; var _editable = false;//permite editar horario o no //Obtiene el data elegido del primer Li function getDatalistFirstLiData(selector, data){ var index=1; var elementRoot = $(selector).parents('.datalist'); var num = elementRoot.find('ul li:not(.not-selectable)').length; if(index < num){ while(elementRoot.find('ul li:nth-child('+index+')').hasClass("not-selectable") && index <= num){ index++; } var element = elementRoot.find('ul li:nth-child('+index+')'); return element.data(data); } } $(document).on( "change", "#todo_dia", function(event){ if($(this).prop('checked')){//materia $('#divHoras').hide(); }else{ $('#divHoras').show(); } }); $(document).ready(function(){ $('.clock').clockpicker(); $(".date-picker" ).datepicker(datepickerOptions); $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] ); cambiaRepeticion($("#repetir").val()); setDatalistFirst('#categoria'); $("#categoria_color").css("color", getDatalistFirstLiData('#categoria', 'color') ); loadCalendario(); $('#cat_col').colpick({ layout: 'hex', submitText: '', onChange:function(hsb,hex,rgb,el,bySetColor) { $(el).val('#'+hex); }, onSubmit:function(hsb,hex,rgb,el,bySetColor) { $(el).val('#'+hex); $(el).colpickHide(); }, onBeforeShow:function(el){ $(this).colpickSetColor($(this).val(), true); } }); $(".dias").change(function(){ if ($(this).is(':checked')){ $(this).next("label").addClass("bg-secondary text-white").removeClass("bg-info text-dark"); }else { $(this).next("label").removeClass("bg-secondary text-white").addClass("bg-info text-dark"); } if($("#modal").find(".dias:checked").length == 0){ $("#dias_error").removeClass("d-none"); }else{ $("#dias_error").addClass("d-none"); } }); $('#dlRepetir ul li').click(function(){//cambia datalist var cid = $(this).data('id'); cambiaRepeticion(cid); }); $('#dlCategoria ul li').click(function(){//cambia datalist var color = $(this).data('color'); $("#categoria_color").css("color", color); }); $('#submitBtn').click(function(){//enviar evento nuevo var tipo = $(this).data("nuevo"); if(tipo == 1) insertaEvento(); else actualizaEvento(); }); $('#submitBtn_cat').click(function(){//enviar evento nuevo var nuevo = $(this).data("nuevo"); if(trim($("#cat_desc").val()) == ""){ $("#cat_desc").addClass("is-invalid"); }else{ $.ajax({ url: './action/calendariocategoria_insert.php', type: 'POST', dataType: 'json', data: {nuevo: nuevo, id: $("#cat_id").val(), desc:$("#cat_desc").val(), col:$("#cat_col").val()}, success: function(result) { if(result["error"]!= "" && result["error"] !== undefined){ $('#modal_categoria').modal("hide"); $("#errorBox").collapse('show'); $("#errorBox_text").html(result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ window.location.reload(); } }, error: function(jqXHR, textStatus, errorThrown ){ $('#modal_categoria').modal("hide"); $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar la categoría"); $('#messageBox')[0].scrollIntoView({ block: "end" }); } });//ajax _editable = true; } }); //editar fecha de repetición $('input[type=radio][name=cambio_fecha]').change(function() { if (this.value == 0) {//revalida $("#fecha_nueva").attr("disabled", true).addClass("input-info").removeClass("hasDatepicker"); $("#hora_inicial_nueva").attr("disabled", true).addClass("input-info").removeClass("clock"); $("#hora_final_nueva").attr("disabled", true).addClass("input-info").removeClass("clock"); $("#fecha_nueva").parents(".form-group").find("label").addClass("disabled"); $("#hora_inicial_nueva").parents(".form-group").find("label").addClass("disabled"); $("#hora_inicial_nueva").parents(".form-group").addClass("text-info"); }else { $("#fecha_nueva").attr("disabled", false).removeClass("input-info").addClass("hasDatepicker"); $("#hora_inicial_nueva").attr("disabled", false).removeClass("input-info").addClass("clock"); $("#hora_final_nueva").attr("disabled", false).removeClass("input-info").addClass("clock"); $("#fecha_nueva").parents(".form-group").find("label").removeClass("disabled"); $("#hora_inicial_nueva").parents(".form-group").find("label").removeClass("disabled"); $("#hora_inicial_nueva").parents(".form-group").removeClass("text-info"); } }); $('#modal_confirm').on('show.bs.modal', function (event) { var button = $(event.relatedTarget); // Button that triggered the modal var id = button.parents(".bloque-evento").data("id_obj"); if(clasesObj[id].fechas_total > 1){ $("#btn-borra-todos").show(); }else{ $("#btn-borra-todos").hide(); } $("#id_borrar").val(id); }); $('.bloque-borra').click(function(e){//enviar evento nuevo var thisIndex = getIndexClase($("#id_borrar").val()); var fecha = ""; var hora = ""; var borra_todos = $(this).data("todos"); if(!borra_todos){//solo un evento fecha = clasesObj[thisIndex].fecha_orig; hora = clasesObj[thisIndex].hora_ini_orig; } $.ajax({ url: './action/calendario_delete.php', type: 'POST', dataType: 'json', async: false, data: {id:clasesObj[thisIndex].id_db, fecha: fecha, hora:hora, fechas_total:clasesObj[thisIndex].fechas_total}, 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);*/ if(clasesObj[thisIndex].fechas_total == 1){//si no son todos, o solo hay 1 borra bloque $('#bloque_'+$("#id_borrar").val()).remove(); clasesObj.splice(thisIndex, 1); }else{//recarga loadCalendario(); } //actualizaPosiciones(); } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html(errorThrown); $('#messageBox')[0].scrollIntoView({ block: "end" }); } });//ajax $('#modal_confirm').modal("hide"); }); //Categorías $(".categoria_edita").click(function(e){ console.log($(this).data("color")); $("#cat_id").val($(this).data("id")); $("#cat_col").val($(this).data("color")); $("#cat_desc").val($(this).data("desc")); $("#submitBtn_cat").data("nuevo", 0); $('#modal_categoria').modal('show'); }); //Abre modal para insertar $(".calendario_nuevo").click(function(e){ //$("#repetir").val(0).change(); //setDatalistFirst('#frecuencia'); $("#submitBtn").data("nuevo", 1); setDatalistFirst('#repetir'); cambiaRepeticion($('#repetir').val()); setDatalistFirst('#de_semana'); $("#modal .dias").prop("checked", false).change(); $("#modal").find("input[type=text]").val(""); $("#modal").find("textarea").val(""); $("#programacion").show(); if($(this).data("fecha") != "" && $(this).data("fecha") !== undefined){ if(validaFecha($(this).data("fecha"))){ $("#fecha_inicial").val($(this).data("fecha")); } } $("#fecha_cambio").hide(); $("#errorBox").collapse('hide'); $('#modal').modal('show'); }); $(".editable").droppable({ accept: ".bloque-draggable", drop: function( event, ui ) { var left = Math.ceil($(this).position().left); var top = Math.ceil($(this).position().top); var dia = getDia(left, top); console.log(left+", "+top); console.log("dia actual "+dia); var error = false; var thisIndex = ui.draggable.data("id_obj"); var fecha_nuevaArr = clasesObj[thisIndex].fecha.split("/"); var fecha_nuevaStr; if(dia < 10) fecha_nuevaArr[0] = "0"+dia; else fecha_nuevaArr[0] = dia; fecha_nuevaStr = fecha_nuevaArr.join("/"); if(ui.draggable.parents(".cell").data("fecha") != fecha_nuevaStr ){ for(var i=0; i < clasesObj.length; i++){ if(clasesObj[i].id_obj != ui.draggable.data("id_obj")){ //valida si se sobreponen if(clasesObj[i].dia == dia){ //mismo evento mismo día no se puede if(clasesObj[i].id_db == clasesObj[thisIndex].id_db){ $("#errorBox").collapse('show'); $("#errorBox_text").html("El mismo evento no puede estar 2 veces en el mismo día."); $('#messageBox')[0].scrollIntoView({ block: "end" }); ui.draggable.draggable( "option", "revert", true ); error = true; break; console.log("Mismo evento"); } } } } if(!error){ ui.draggable.appendTo("#dia"+dia+" .calendario_eventos"); $("#dia"+dia).find(".bloque-evento").sort(function (a, b) { var contentA =parseInt( $(a).data('sort')); var contentB =parseInt( $(b).data('sort')); return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0; }).appendTo($("#dia"+dia).find(".calendario_eventos")); var eventoObj = { id_db: clasesObj[thisIndex].id_db, fecha_orig: clasesObj[thisIndex].fecha_orig, fecha_nueva: fecha_nuevaStr, todo_dia: clasesObj[thisIndex].todo_dia, hora_ini: clasesObj[thisIndex].hora_ini, hora_fin: clasesObj[thisIndex].hora_fin }; //Edita base de datos var page = './action/calendariodia_update.php'; console.log("Call ajax update"); $.ajax({ url: page, type: 'POST', dataType: 'json', async: false, data: {json: JSON.stringify(eventoObj)}, 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 evento.
"+result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); }else{ clasesObj[thisIndex].dia = dia; clasesObj[thisIndex].fecha = fecha_nuevaStr $("#errorBox").collapse('hide'); } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar el evento"); $('#messageBox')[0].scrollIntoView({ block: "end" }); } });//ajax }//fin no error }//fin fechas diferentes } }); }); $(document).on( "click", ".calendario_edita", function(event){ $("#submitBtn").data("nuevo", 0); $("#programacion").hide(); //Carga datos previos para edición var btn = $(event.target); var thisIndex = getIndexClase(btn.parents('.bloque-evento').data("id_obj")); $('#id_db').val(clasesObj[thisIndex].id_db); $('#titulo').val(clasesObj[thisIndex].titulo); $('#desc').val(clasesObj[thisIndex].desc); setDatalist("#categoria", clasesObj[thisIndex].categoria); $("#categoria_color").css("color", clasesObj[thisIndex].color ); $("#modal .perfil").prop("checked", false); var perfiles = clasesObj[thisIndex].perfiles; console.log("perfiles"); console.log(perfiles); for(var i=0; i=0){ $("#bloque_"+id).find(".title").text(eventoObj.titulo); if( eventoObj.todo_dia == true || eventoObj.todo_dia == "true" ){ $("#bloque_"+id).css({"background-color":eventoObj.color}); }else{ $("#bloque_"+id).find(".cat_ico .ing-bullet").css({"color":eventoObj.color}); } } var index = getIndexClase(id); clasesObj[index].titulo = eventoObj.titulo; clasesObj[index].desc = eventoObj.desc; clasesObj[index].color = eventoObj.color; clasesObj[index].periodo = eventoObj.periodo; clasesObj[index].perfiles = []; $.each($('#modal .perfil'), function(){ if($(this).prop("checked")){ clasesObj[index].perfiles.push({id:$(this).val(), desc: $(this).siblings("label").text()}); } }); } } $('#modal').modal('hide'); } } function validaEvento(nuevo){ var error = false; $("#modal").find(".is-invalid").removeClass("is-invalid"); if(trim($("#titulo").val()) == ""){ error = true; $("#titulo").addClass("is-invalid"); } if(nuevo){ if(!validaFecha($("#fecha_inicial").val())){ error = true; $("#fecha_inicial").addClass("is-invalid"); } if(!($("#todo_dia").prop("checked"))){ if( trim($("#hora_inicial").val()) == "") { error = true; $("#hora_inicial").addClass("is-invalid"); } if(trim($("#hora_final").val()) == "" ) { error = true; $("#hora_final").addClass("is-invalid"); } if(!error && cuentaMinutosStr( trim($("#hora_inicial").val()), trim($("#hora_final").val()) ) <= 0 ){ error = true; //$("#hora_inicial").addClass("is-invalid"); $("#hora_final").addClass("is-invalid"); } } if($("#repetir").val() > 0){//no diario if(!validaFecha($("#fecha_final").val())){ error = true; $("#fecha_final").addClass("is-invalid"); } if(!error && fechaMayor($('#fecha_inicial').val(), $('#fecha_final').val()) >= 0){ error = true; $("#fecha_final").addClass("is-invalid"); } } if($("#repetir").val() >= 2){//semanal o mensual if($("#modal").find(".dias:checked").length == 0){ error = true; $("#dias_error").removeClass("d-none"); }else{ $("#dias_error").addClass("d-none"); } } } if($("#modal").find(".perfil:checked").length == 0){ error = true; $("#modal .perfil").addClass("is-invalid"); $("#perfil_error").removeClass("d-none"); }else{ $("#perfil_error").addClass("d-none"); } return !error; } function getDiasStr(){ var str = ""; $.each($('#dias_block .dias'), function(){ if($(this).prop("checked")){ str+=$(this).val()+","; } }); if(str.length > 0){ str = str.substr(0, str.length-1) } return str; } //funcion para guardar por ajax información function insertEvento(objClase, insert){ _editable = false; //console.log(objClase); var page = './action/calendario_insert.php'; if(!insert) page = './action/calendario_update.php'; var state = false; $.ajax({ url: page, type: 'POST', dataType: 'json', async: false, data: {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 evento.
"+result["error"]); $('#messageBox')[0].scrollIntoView({ block: "end" }); state = false; }else{ state = true; //objClase.id_db = result["id"]; $("#errorBox").collapse('hide'); } }, error: function(jqXHR, textStatus, errorThrown ){ $("#errorBox").collapse('show'); $("#errorBox_text").html("Error al guardar el evento"); $('#messageBox')[0].scrollIntoView({ block: "end" }); state = false; } });//ajax _editable = true; return state; } function makeDraggable() { $(".bloque-draggable").draggable({ cursor: "move", containment:".area-horario", scroll:false, grid: [_w, _h], revert : true, helper: "clone", revertDuration: 0, start: function( event, ui ) { _drag = true; $(this).css("opacity", "0.35"); }, stop: function( event, ui ) { $(this).css("opacity", ""); _drag = false; } }); } function loadCalendario(){ $('.bloque-evento').remove(); clasesObj = []; id_obj = 0; loadHorario();//carga horarios editables del grupo } function loadHorario(){ //carga horarios y crea bloques} //console.log("loadHorario"); $.ajax({ url: './action/calendario_select.php', type: 'POST', dataType: 'json', data: { mes: $("#mes").val(), anho: $("#anho").val(), perfiles: _perfiles}, 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; for(i = 0; i< result["eventos"].length; i++){ var evento = { id_obj: id_obj, id_db: parseInt(result["eventos"][i]["id_db"]), titulo: result["eventos"][i]["titulo"], desc: result["eventos"][i]["desc"], categoria: parseInt(result["eventos"][i]["categoria"]), categoria_desc: result["eventos"][i]["categoria_desc"], color: result["eventos"][i]["color"], dia: parseInt(result["eventos"][i]["dia"]), dia_orig: parseInt(result["eventos"][i]["dia"]), fechas_total: result["eventos"][i]["fechas_total"], fecha_orig: result["eventos"][i]["fecha_orig"], fecha: result["eventos"][i]["fecha"], todo_dia: result["eventos"][i]["todo_dia"], hora_ini_orig: result["eventos"][i]["hora_ini_orig"], hora_ini: result["eventos"][i]["hora_ini"], hora_fin: result["eventos"][i]["hora_fin"], editable: result["eventos"][i]["editable"], inscripciones: result["eventos"][i]["inscripciones"], periodo: result["eventos"][i]["periodo"], perfiles: result["eventos"][i]["perfiles"], }; clasesObj.push(evento); var editable = true; if(evento.inscripciones || !evento.editable){ editable = false; } //creaEventoHTML(id_obj, getX(evento.dia), getY(evento.dia), evento.color, evento.titulo, evento.todo_dia, editable, evento.fechas_total); var eventoHTML = creaEventoHTML(id_obj, getX(evento.dia), getY(evento.dia), evento.color, evento.titulo, evento.todo_dia, editable, evento.fechas_total, evento.hora_ini); $("#dia"+evento.dia).find(".calendario_eventos").append(eventoHTML); id_obj++; $("#dia"+evento.dia).find(".bloque-evento").sort(function (a, b) { var contentA =parseInt( $(a).data('sort')); var contentB =parseInt( $(b).data('sort')); return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0; }).appendTo($("#dia"+evento.dia).find(".calendario_eventos")); } makeDraggable(); }//fin else }, 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 }