/*
* Para crear horario de administrativos
*/
$(document).ready(function(){
loadHorarioEdicion();
$('#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");
$("#id_borrar").val(id);
});
$('.editable').click(function(){//abre modal para crear
$("#errorBox").collapse('hide');
$("#errorBox_text").html("");
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.");
$("#submitBtn").data('tipo', 1);
$("#modalLabel").html("Crear Horario");
$('#duracion').removeClass('is-invalid');
$('#modal').modal('show');
});
$('#submitBtn').click(function(){
//Crea Obj JSON y elemento HTML
if(validaDuracion(-1, $('#dia').val(), $('#hora').val(), parseInt($('#duracion').val())*60)){
var horario = {
id_obj: id_obj,
id_db:0,
dia: parseInt($('#dia').val()),
dia_orig: parseInt($('#dia').val()),
hora: $('#hora').val(),
duracion: parseInt($('#duracion').val())*60,
tipo: parseInt($('#tipo').find(':selected').val()),
tipo_nombre: $('#tipo').find(':selected').text(),
editable: true,
color: $('#tipo').find(':selected').data('color')
};
if(guardaHorario(1, horario)){
horariosObj.push(horario);
//Crea horario HMTL
calculaTotalDia(horario.dia);
calculaTotalTipo(horario.tipo);
creaHorarioHTML(id_obj, getX(horario.dia), getY(horario.hora), getAlto(horario.duracion) ,horario.color, horario.tipo_nombre, horario.editable, "#bloque-horarios");
id_obj++;
calculaTotalHorarios();
}
$('#modal').modal('hide');
}//fin duración valida
else{
$("#avanzadoBox").collapse('show');
$('#duracion').addClass('is-invalid');
}
});
});
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 validaHorasBloque(pos, dia, horaObjIni, horaObjFin){
for(var i=0; i < horariosObj.length; i++){
var horaArr = horariosObj[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(horariosObj[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
}
//funcion para guardar por ajax información
function guardaHorario(nuevo, objClase){
console.log("Guardar");
_editable = false;
var url = './action/mihorario_insert.php';
if(nuevo != 1){
url = './action/mihorario_update.php';
}
var state = false;
$.ajax({
url: url,
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 horario.
"+result["error"]);
$('#messageBox')[0].scrollIntoView({ block: "end" });
state = false;
}else{
state = true;
if(nuevo == 1){
objClase.id_db = result["id"];
}
}
},
error: function(jqXHR, textStatus, errorThrown ){
$("#errorBox").collapse('show');
$("#errorBox_text").html(errorThrown);
$('#messageBox')[0].scrollIntoView({ block: "end" });
state = false;
}
});//ajax
_editable = true;
return state;
}
function loadHorarioEdicion(){
$('.bloque-clase').remove();
horariosObj = [];
id_obj = 0;
//carga horarios y crea bloques
$.ajax({
url: './action/mihorario_select.php',
type: 'POST',
dataType: 'json',
data: { autorizacion: _horarioEstado, fecha: $("#filter_fecha").val()},
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{
if(result["errorArr"] !== undefined){
$("#errorBox").collapse('show');
$("#errorBox_text").html("Hay bloques en el horario propuesto que tienen conflicto, crea uno nuevo");
$('#messageBox')[0].scrollIntoView({ block: "end" });
}
var i, j;
for(i = 0; i< result["horario"].length; i++){
var horario = {
id_obj: id_obj,
id_db: parseInt(result["horario"][i]["id"]),
dia: parseInt(result["horario"][i]["dia"]),
dia_orig: parseInt(result["horario"][i]["dia"]),
hora: result["horario"][i]["hora"],
duracion: parseInt(result["horario"][i]["duracion"]),
tipo: parseInt(result["horario"][i]["tipo"]),
tipo_nombre: result["horario"][i]["tipo_nombre"],
editable: result["horario"][i]["editable"],
color: result["horario"][i]["color"]
};
horariosObj.push(horario);
calculaTotalDia(horario.dia);
calculaTotalTipo(horario.tipo);
creaHorarioHTML(id_obj, getX(horario.dia), getY(horario.hora), getAlto(horario.duracion) ,horario.color, horario.tipo_nombre, horario.editable, "#bloque-horarios");
id_obj++;
}//fin for
calculaTotalHorarios();
}
_editable = true;
},
error: function(jqXHR, textStatus, errorThrown ){
$("#errorBox").collapse('show');
$("#errorBox_text").html("Error al cargar horario.
"+errorThrown);
$('#messageBox')[0].scrollIntoView({ block: "end" });
_editable = true;
}
});//ajax
}
function creaHorarioHTML(id, posX, posY, alto, color, texto, editable, parentBox){//crea bloque HTML
var edit_class = "";
var zindex = "";
if(editable === true ){
edit_class = "bloque-draggable ui-draggable ui-draggable-handle bloque-resizable";
zindex = "3";
}else{
zindex = "1";
}
var nuevoHorario = '