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
}