calendario_edicion.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. var _drag = false;
  2. var _editable = false;//permite editar horario o no
  3. //Obtiene el data elegido del primer Li
  4. function getDatalistFirstLiData(selector, data){
  5. var index=1;
  6. var elementRoot = $(selector).parents('.datalist');
  7. var num = elementRoot.find('ul li:not(.not-selectable)').length;
  8. if(index < num){
  9. while(elementRoot.find('ul li:nth-child('+index+')').hasClass("not-selectable") && index <= num){
  10. index++;
  11. }
  12. var element = elementRoot.find('ul li:nth-child('+index+')');
  13. return element.data(data);
  14. }
  15. }
  16. $(document).on( "change", "#todo_dia", function(event){
  17. if($(this).prop('checked')){//materia
  18. $('#divHoras').hide();
  19. }else{
  20. $('#divHoras').show();
  21. }
  22. });
  23. $(document).ready(function(){
  24. $('.clock').clockpicker();
  25. $(".date-picker" ).datepicker(datepickerOptions);
  26. $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] );
  27. cambiaRepeticion($("#repetir").val());
  28. setDatalistFirst('#categoria');
  29. $("#categoria_color").css("color", getDatalistFirstLiData('#categoria', 'color') );
  30. loadCalendario();
  31. $('#cat_col').colpick({
  32. layout: 'hex',
  33. submitText: '<span class="ing-aceptar ing-fw"></span>',
  34. onChange:function(hsb,hex,rgb,el,bySetColor) {
  35. $(el).val('#'+hex);
  36. },
  37. onSubmit:function(hsb,hex,rgb,el,bySetColor) {
  38. $(el).val('#'+hex);
  39. $(el).colpickHide();
  40. },
  41. onBeforeShow:function(el){
  42. $(this).colpickSetColor($(this).val(), true);
  43. }
  44. });
  45. $(".dias").change(function(){
  46. if ($(this).is(':checked')){
  47. $(this).next("label").addClass("bg-secondary text-white").removeClass("bg-info text-dark");
  48. }else {
  49. $(this).next("label").removeClass("bg-secondary text-white").addClass("bg-info text-dark");
  50. }
  51. if($("#modal").find(".dias:checked").length == 0){
  52. $("#dias_error").removeClass("d-none");
  53. }else{
  54. $("#dias_error").addClass("d-none");
  55. }
  56. });
  57. $('#dlRepetir ul li').click(function(){//cambia datalist
  58. var cid = $(this).data('id');
  59. cambiaRepeticion(cid);
  60. });
  61. $('#dlCategoria ul li').click(function(){//cambia datalist
  62. var color = $(this).data('color');
  63. $("#categoria_color").css("color", color);
  64. });
  65. $('#submitBtn').click(function(){//enviar evento nuevo
  66. var tipo = $(this).data("nuevo");
  67. if(tipo == 1)
  68. insertaEvento();
  69. else
  70. actualizaEvento();
  71. });
  72. $('#submitBtn_cat').click(function(){//enviar evento nuevo
  73. var nuevo = $(this).data("nuevo");
  74. if(trim($("#cat_desc").val()) == ""){
  75. $("#cat_desc").addClass("is-invalid");
  76. }else{
  77. $.ajax({
  78. url: './action/calendariocategoria_insert.php',
  79. type: 'POST',
  80. dataType: 'json',
  81. data: {nuevo: nuevo, id: $("#cat_id").val(), desc:$("#cat_desc").val(), col:$("#cat_col").val()},
  82. success: function(result) {
  83. if(result["error"]!= "" && result["error"] !== undefined){
  84. $('#modal_categoria').modal("hide");
  85. $("#errorBox").collapse('show');
  86. $("#errorBox_text").html(result["error"]);
  87. $('#messageBox')[0].scrollIntoView({ block: "end" });
  88. }else{
  89. window.location.reload();
  90. }
  91. },
  92. error: function(jqXHR, textStatus, errorThrown ){
  93. $('#modal_categoria').modal("hide");
  94. $("#errorBox").collapse('show');
  95. $("#errorBox_text").html("Error al guardar la categoría");
  96. $('#messageBox')[0].scrollIntoView({ block: "end" });
  97. }
  98. });//ajax
  99. _editable = true;
  100. }
  101. });
  102. //editar fecha de repetición
  103. $('input[type=radio][name=cambio_fecha]').change(function() {
  104. if (this.value == 0) {//revalida
  105. $("#fecha_nueva").attr("disabled", true).addClass("input-info").removeClass("hasDatepicker");
  106. $("#hora_inicial_nueva").attr("disabled", true).addClass("input-info").removeClass("clock");
  107. $("#hora_final_nueva").attr("disabled", true).addClass("input-info").removeClass("clock");
  108. $("#fecha_nueva").parents(".form-group").find("label").addClass("disabled");
  109. $("#hora_inicial_nueva").parents(".form-group").find("label").addClass("disabled");
  110. $("#hora_inicial_nueva").parents(".form-group").addClass("text-info");
  111. }else {
  112. $("#fecha_nueva").attr("disabled", false).removeClass("input-info").addClass("hasDatepicker");
  113. $("#hora_inicial_nueva").attr("disabled", false).removeClass("input-info").addClass("clock");
  114. $("#hora_final_nueva").attr("disabled", false).removeClass("input-info").addClass("clock");
  115. $("#fecha_nueva").parents(".form-group").find("label").removeClass("disabled");
  116. $("#hora_inicial_nueva").parents(".form-group").find("label").removeClass("disabled");
  117. $("#hora_inicial_nueva").parents(".form-group").removeClass("text-info");
  118. }
  119. });
  120. $('#modal_confirm').on('show.bs.modal', function (event) {
  121. var button = $(event.relatedTarget); // Button that triggered the modal
  122. var id = button.parents(".bloque-evento").data("id_obj");
  123. if(clasesObj[id].fechas_total > 1){
  124. $("#btn-borra-todos").show();
  125. }else{
  126. $("#btn-borra-todos").hide();
  127. }
  128. $("#id_borrar").val(id);
  129. });
  130. $('.bloque-borra').click(function(e){//enviar evento nuevo
  131. var thisIndex = getIndexClase($("#id_borrar").val());
  132. var fecha = "";
  133. var hora = "";
  134. var borra_todos = $(this).data("todos");
  135. if(!borra_todos){//solo un evento
  136. fecha = clasesObj[thisIndex].fecha_orig;
  137. hora = clasesObj[thisIndex].hora_ini_orig;
  138. }
  139. $.ajax({
  140. url: './action/calendario_delete.php',
  141. type: 'POST',
  142. dataType: 'json',
  143. async: false,
  144. data: {id:clasesObj[thisIndex].id_db, fecha: fecha, hora:hora, fechas_total:clasesObj[thisIndex].fechas_total},
  145. success: function(result) {
  146. if(result["error"]!= "" && result["error"] !== undefined){
  147. $("#errorBox").collapse('show');
  148. $("#errorBox_text").html("Error al borrar el horario.<br>"+result["error"]);
  149. $('#messageBox')[0].scrollIntoView({ block: "end" });
  150. }else{
  151. /*var mat = clasesObj[thisIndex].materia;
  152. $('#bloque_'+$("#id_borrar").val()).remove();
  153. clasesObj.splice(thisIndex, 1);*/
  154. if(clasesObj[thisIndex].fechas_total == 1){//si no son todos, o solo hay 1 borra bloque
  155. $('#bloque_'+$("#id_borrar").val()).remove();
  156. clasesObj.splice(thisIndex, 1);
  157. }else{//recarga
  158. loadCalendario();
  159. }
  160. //actualizaPosiciones();
  161. }
  162. },
  163. error: function(jqXHR, textStatus, errorThrown ){
  164. $("#errorBox").collapse('show');
  165. $("#errorBox_text").html(errorThrown);
  166. $('#messageBox')[0].scrollIntoView({ block: "end" });
  167. }
  168. });//ajax
  169. $('#modal_confirm').modal("hide");
  170. });
  171. //Categorías
  172. $(".categoria_edita").click(function(e){
  173. console.log($(this).data("color"));
  174. $("#cat_id").val($(this).data("id"));
  175. $("#cat_col").val($(this).data("color"));
  176. $("#cat_desc").val($(this).data("desc"));
  177. $("#submitBtn_cat").data("nuevo", 0);
  178. $('#modal_categoria').modal('show');
  179. });
  180. //Abre modal para insertar
  181. $(".calendario_nuevo").click(function(e){
  182. //$("#repetir").val(0).change();
  183. //setDatalistFirst('#frecuencia');
  184. $("#submitBtn").data("nuevo", 1);
  185. setDatalistFirst('#repetir');
  186. cambiaRepeticion($('#repetir').val());
  187. setDatalistFirst('#de_semana');
  188. $("#modal .dias").prop("checked", false).change();
  189. $("#modal").find("input[type=text]").val("");
  190. $("#modal").find("textarea").val("");
  191. $("#programacion").show();
  192. if($(this).data("fecha") != "" && $(this).data("fecha") !== undefined){
  193. if(validaFecha($(this).data("fecha"))){
  194. $("#fecha_inicial").val($(this).data("fecha"));
  195. }
  196. }
  197. $("#fecha_cambio").hide();
  198. $("#errorBox").collapse('hide');
  199. $('#modal').modal('show');
  200. });
  201. $(".editable").droppable({
  202. accept: ".bloque-draggable",
  203. drop: function( event, ui ) {
  204. var left = Math.ceil($(this).position().left);
  205. var top = Math.ceil($(this).position().top);
  206. var dia = getDia(left, top);
  207. console.log(left+", "+top);
  208. console.log("dia actual "+dia);
  209. var error = false;
  210. var thisIndex = ui.draggable.data("id_obj");
  211. var fecha_nuevaArr = clasesObj[thisIndex].fecha.split("/");
  212. var fecha_nuevaStr;
  213. if(dia < 10)
  214. fecha_nuevaArr[0] = "0"+dia;
  215. else
  216. fecha_nuevaArr[0] = dia;
  217. fecha_nuevaStr = fecha_nuevaArr.join("/");
  218. if(ui.draggable.parents(".cell").data("fecha") != fecha_nuevaStr ){
  219. for(var i=0; i < clasesObj.length; i++){
  220. if(clasesObj[i].id_obj != ui.draggable.data("id_obj")){
  221. //valida si se sobreponen
  222. if(clasesObj[i].dia == dia){
  223. //mismo evento mismo día no se puede
  224. if(clasesObj[i].id_db == clasesObj[thisIndex].id_db){
  225. $("#errorBox").collapse('show');
  226. $("#errorBox_text").html("El mismo evento no puede estar 2 veces en el mismo día.");
  227. $('#messageBox')[0].scrollIntoView({ block: "end" });
  228. ui.draggable.draggable( "option", "revert", true );
  229. error = true;
  230. break;
  231. console.log("Mismo evento");
  232. }
  233. }
  234. }
  235. }
  236. if(!error){
  237. ui.draggable.appendTo("#dia"+dia+" .calendario_eventos");
  238. $("#dia"+dia).find(".bloque-evento").sort(function (a, b) {
  239. var contentA =parseInt( $(a).data('sort'));
  240. var contentB =parseInt( $(b).data('sort'));
  241. return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
  242. }).appendTo($("#dia"+dia).find(".calendario_eventos"));
  243. var eventoObj = {
  244. id_db: clasesObj[thisIndex].id_db,
  245. fecha_orig: clasesObj[thisIndex].fecha_orig,
  246. fecha_nueva: fecha_nuevaStr,
  247. todo_dia: clasesObj[thisIndex].todo_dia,
  248. hora_ini: clasesObj[thisIndex].hora_ini,
  249. hora_fin: clasesObj[thisIndex].hora_fin
  250. };
  251. //Edita base de datos
  252. var page = './action/calendariodia_update.php';
  253. console.log("Call ajax update");
  254. $.ajax({
  255. url: page,
  256. type: 'POST',
  257. dataType: 'json',
  258. async: false,
  259. data: {json: JSON.stringify(eventoObj)},
  260. beforeSend: function(x) {
  261. if (x && x.overrideMimeType) {
  262. x.overrideMimeType("application/j-son;charset=UTF-8");
  263. }
  264. },
  265. success: function(result) {
  266. if(result["error"]!= "" && result["error"] !== undefined){
  267. $("#errorBox").collapse('show');
  268. $("#errorBox_text").html("Error al guardar el evento.<br>"+result["error"]);
  269. $('#messageBox')[0].scrollIntoView({ block: "end" });
  270. }else{
  271. clasesObj[thisIndex].dia = dia;
  272. clasesObj[thisIndex].fecha = fecha_nuevaStr
  273. $("#errorBox").collapse('hide');
  274. }
  275. },
  276. error: function(jqXHR, textStatus, errorThrown ){
  277. $("#errorBox").collapse('show');
  278. $("#errorBox_text").html("Error al guardar el evento");
  279. $('#messageBox')[0].scrollIntoView({ block: "end" });
  280. }
  281. });//ajax
  282. }//fin no error
  283. }//fin fechas diferentes
  284. }
  285. });
  286. });
  287. $(document).on( "click", ".calendario_edita", function(event){
  288. $("#submitBtn").data("nuevo", 0);
  289. $("#programacion").hide();
  290. //Carga datos previos para edición
  291. var btn = $(event.target);
  292. var thisIndex = getIndexClase(btn.parents('.bloque-evento').data("id_obj"));
  293. $('#id_db').val(clasesObj[thisIndex].id_db);
  294. $('#titulo').val(clasesObj[thisIndex].titulo);
  295. $('#desc').val(clasesObj[thisIndex].desc);
  296. setDatalist("#categoria", clasesObj[thisIndex].categoria);
  297. $("#categoria_color").css("color", clasesObj[thisIndex].color );
  298. $("#modal .perfil").prop("checked", false);
  299. var perfiles = clasesObj[thisIndex].perfiles;
  300. console.log("perfiles");
  301. console.log(perfiles);
  302. for(var i=0; i<perfiles.length; i++){
  303. $("#perfil_"+perfiles[i].id).prop("checked", true);
  304. }
  305. if(clasesObj[thisIndex].periodo === null || clasesObj[thisIndex].periodo == ""){
  306. $("#periodo_no").prop("checked", true);
  307. }else{
  308. $("#periodo_actual").prop("checked", true);
  309. }
  310. $("#fecha_original").val(clasesObj[thisIndex].fecha_orig);
  311. $("#fecha_nueva").val(clasesObj[thisIndex].fecha);
  312. $("#todo_dia_nueva").val(clasesObj[thisIndex].todo_dia);
  313. if(clasesObj[thisIndex].todo_dia){
  314. $("#divHoras_nueva").hide();
  315. }else{
  316. $("#divHoras_nueva").show();
  317. $("#hora_inicial_nueva").val(clasesObj[thisIndex].hora_ini);
  318. $("#hora_final_nueva").val(clasesObj[thisIndex].hora_fin);
  319. }
  320. $("#fecha_cambio").show();
  321. $("#cambio_fecha_no").prop("checked", true).change();
  322. $("#errorBox").collapse('hide');
  323. $('#modal').modal('show');
  324. });
  325. function cambiaRepeticion(val){
  326. switch(parseInt(val)){
  327. case 0://unico
  328. $(".rep-diario").hide();
  329. $(".rep-semana").hide();
  330. $(".rep-mes").hide();
  331. break;
  332. case 1://diario
  333. $(".rep-semana").hide();
  334. $(".rep-mes").hide();
  335. $(".rep-diario").show();
  336. //$("#cada_texto").html("Día(s)");
  337. break;
  338. case 2://semanal
  339. $(".rep-diario").hide();
  340. $(".rep-mes").hide();
  341. $(".rep-semana").show();
  342. //$("#cada_texto").html("Semana(s)");
  343. break;
  344. case 3://mensual
  345. $(".rep-diario").hide();
  346. $(".rep-semana").hide();
  347. $(".rep-mes").show();
  348. //$("#cada_texto").html("Mes(es)");
  349. break;
  350. }
  351. }
  352. function insertaEvento(){
  353. if(validaEvento(true)){
  354. //Carga la información a un objeto de JS
  355. var rruleObj = {
  356. rep: $("#repetir").val(),
  357. intervalo: 1,
  358. dias: getDiasStr(),
  359. semana: $("#de_semana").val(),
  360. fecha_fin: $("#fecha_final").val()
  361. };
  362. var perfilesArr = [];
  363. $.each($('#modal .perfil'), function(){
  364. if($(this).prop("checked")){
  365. perfilesArr.push($(this).val());
  366. }
  367. });
  368. var periodo = 0;
  369. if($("#periodo_actual").prop("checked")){
  370. periodo = parseInt($("#periodo_actual").val());
  371. }
  372. var eventoObj = {
  373. id_obj: id_obj,
  374. id_db: 0,
  375. periodo: periodo,
  376. cat: parseInt($("#categoria").val()),
  377. titulo: trim($("#titulo").val()),
  378. desc: trim($("#desc").val()),
  379. fecha_ini: $("#fecha_inicial").val(),
  380. todo_dia: $("#todo_dia").prop("checked"),
  381. hora_ini: $("#hora_inicial").val(),
  382. hora_fin: $("#hora_final").val(),
  383. icono: "",
  384. perfiles: perfilesArr
  385. };
  386. if(parseInt($("#repetir").val()) != 0){
  387. eventoObj.rrule = rruleObj;
  388. }
  389. //Manda objeto JS por ajax a insertar
  390. if(insertEvento(eventoObj, true)){
  391. //id_obj++;
  392. loadCalendario();//recarga todo
  393. }
  394. $('#modal').modal('hide');
  395. }
  396. }
  397. function actualizaEvento(){
  398. if(validaEvento(false)){
  399. //Carga la información a un objeto de JS
  400. var perfilesArr = [];
  401. $.each($('#modal .perfil'), function(){
  402. if($(this).prop("checked")){
  403. perfilesArr.push($(this).val());
  404. }
  405. });
  406. var periodo = 0;
  407. if($("#periodo_actual").prop("checked")){
  408. periodo = parseInt($("#periodo_actual").val());
  409. }
  410. var eventoObj = {
  411. id_db: parseInt($("#id_db").val()),
  412. periodo: periodo,
  413. cat: parseInt($("#categoria").val()),
  414. titulo: trim($("#titulo").val()),
  415. desc: trim($("#desc").val()),
  416. cambio_fecha: $("#cambio_fecha_si").prop("checked"),
  417. fecha_nueva: $("#fecha_nueva").val(),
  418. fecha_orig: $("#fecha_original").val(),
  419. todo_dia: $("#todo_dia_nueva").val(),
  420. hora_ini: $("#hora_inicial_nueva").val(),
  421. hora_fin: $("#hora_final_nueva").val(),
  422. color: $("#categoria_color").css("color"),
  423. icono: "",
  424. perfiles: perfilesArr
  425. };
  426. //Manda objeto JS por ajax a insertar
  427. if(insertEvento(eventoObj, false)){
  428. if(eventoObj.cambio_fecha)
  429. loadCalendario();//recarga todo
  430. else{
  431. var id = getObjID(eventoObj.id_db);
  432. if(id>=0){
  433. $("#bloque_"+id).find(".title").text(eventoObj.titulo);
  434. if( eventoObj.todo_dia == true || eventoObj.todo_dia == "true" ){
  435. $("#bloque_"+id).css({"background-color":eventoObj.color});
  436. }else{
  437. $("#bloque_"+id).find(".cat_ico .ing-bullet").css({"color":eventoObj.color});
  438. }
  439. }
  440. var index = getIndexClase(id);
  441. clasesObj[index].titulo = eventoObj.titulo;
  442. clasesObj[index].desc = eventoObj.desc;
  443. clasesObj[index].color = eventoObj.color;
  444. clasesObj[index].periodo = eventoObj.periodo;
  445. clasesObj[index].perfiles = [];
  446. $.each($('#modal .perfil'), function(){
  447. if($(this).prop("checked")){
  448. clasesObj[index].perfiles.push({id:$(this).val(), desc: $(this).siblings("label").text()});
  449. }
  450. });
  451. }
  452. }
  453. $('#modal').modal('hide');
  454. }
  455. }
  456. function validaEvento(nuevo){
  457. var error = false;
  458. $("#modal").find(".is-invalid").removeClass("is-invalid");
  459. if(trim($("#titulo").val()) == ""){
  460. error = true;
  461. $("#titulo").addClass("is-invalid");
  462. }
  463. if(nuevo){
  464. if(!validaFecha($("#fecha_inicial").val())){
  465. error = true;
  466. $("#fecha_inicial").addClass("is-invalid");
  467. }
  468. if(!($("#todo_dia").prop("checked"))){
  469. if( trim($("#hora_inicial").val()) == "") {
  470. error = true;
  471. $("#hora_inicial").addClass("is-invalid");
  472. }
  473. if(trim($("#hora_final").val()) == "" ) {
  474. error = true;
  475. $("#hora_final").addClass("is-invalid");
  476. }
  477. if(!error && cuentaMinutosStr( trim($("#hora_inicial").val()), trim($("#hora_final").val()) ) <= 0 ){
  478. error = true;
  479. //$("#hora_inicial").addClass("is-invalid");
  480. $("#hora_final").addClass("is-invalid");
  481. }
  482. }
  483. if($("#repetir").val() > 0){//no diario
  484. if(!validaFecha($("#fecha_final").val())){
  485. error = true;
  486. $("#fecha_final").addClass("is-invalid");
  487. }
  488. if(!error && fechaMayor($('#fecha_inicial').val(), $('#fecha_final').val()) >= 0){
  489. error = true;
  490. $("#fecha_final").addClass("is-invalid");
  491. }
  492. }
  493. if($("#repetir").val() >= 2){//semanal o mensual
  494. if($("#modal").find(".dias:checked").length == 0){
  495. error = true;
  496. $("#dias_error").removeClass("d-none");
  497. }else{
  498. $("#dias_error").addClass("d-none");
  499. }
  500. }
  501. }
  502. if($("#modal").find(".perfil:checked").length == 0){
  503. error = true;
  504. $("#modal .perfil").addClass("is-invalid");
  505. $("#perfil_error").removeClass("d-none");
  506. }else{
  507. $("#perfil_error").addClass("d-none");
  508. }
  509. return !error;
  510. }
  511. function getDiasStr(){
  512. var str = "";
  513. $.each($('#dias_block .dias'), function(){
  514. if($(this).prop("checked")){
  515. str+=$(this).val()+",";
  516. }
  517. });
  518. if(str.length > 0){
  519. str = str.substr(0, str.length-1)
  520. }
  521. return str;
  522. }
  523. //funcion para guardar por ajax información
  524. function insertEvento(objClase, insert){
  525. _editable = false;
  526. //console.log(objClase);
  527. var page = './action/calendario_insert.php';
  528. if(!insert)
  529. page = './action/calendario_update.php';
  530. var state = false;
  531. $.ajax({
  532. url: page,
  533. type: 'POST',
  534. dataType: 'json',
  535. async: false,
  536. data: {json: JSON.stringify(objClase)},
  537. beforeSend: function(x) {
  538. if (x && x.overrideMimeType) {
  539. x.overrideMimeType("application/j-son;charset=UTF-8");
  540. }
  541. },
  542. success: function(result) {
  543. if(result["error"]!= "" && result["error"] !== undefined){
  544. $("#errorBox").collapse('show');
  545. $("#errorBox_text").html("Error al guardar el evento.<br>"+result["error"]);
  546. $('#messageBox')[0].scrollIntoView({ block: "end" });
  547. state = false;
  548. }else{
  549. state = true;
  550. //objClase.id_db = result["id"];
  551. $("#errorBox").collapse('hide');
  552. }
  553. },
  554. error: function(jqXHR, textStatus, errorThrown ){
  555. $("#errorBox").collapse('show');
  556. $("#errorBox_text").html("Error al guardar el evento");
  557. $('#messageBox')[0].scrollIntoView({ block: "end" });
  558. state = false;
  559. }
  560. });//ajax
  561. _editable = true;
  562. return state;
  563. }
  564. function makeDraggable() {
  565. $(".bloque-draggable").draggable({
  566. cursor: "move",
  567. containment:".area-horario",
  568. scroll:false,
  569. grid: [_w, _h],
  570. revert : true,
  571. helper: "clone",
  572. revertDuration: 0,
  573. start: function( event, ui ) {
  574. _drag = true;
  575. $(this).css("opacity", "0.35");
  576. },
  577. stop: function( event, ui ) {
  578. $(this).css("opacity", "");
  579. _drag = false;
  580. }
  581. });
  582. }
  583. function loadCalendario(){
  584. $('.bloque-evento').remove();
  585. clasesObj = [];
  586. id_obj = 0;
  587. loadHorario();//carga horarios editables del grupo
  588. }
  589. function loadHorario(){
  590. //carga horarios y crea bloques}
  591. //console.log("loadHorario");
  592. $.ajax({
  593. url: './action/calendario_select.php',
  594. type: 'POST',
  595. dataType: 'json',
  596. data: { mes: $("#mes").val(), anho: $("#anho").val(), perfiles: _perfiles},
  597. success: function(result) {
  598. if(result["error"]!= "" && result["error"] !== undefined){
  599. //console.log("Ocurrió un error de load");
  600. $("#errorBox").collapse('show');
  601. $("#errorBox_text").html(result["error"]);
  602. $('#messageBox')[0].scrollIntoView({ block: "end" });
  603. }else{
  604. var i;
  605. for(i = 0; i< result["eventos"].length; i++){
  606. var evento = {
  607. id_obj: id_obj,
  608. id_db: parseInt(result["eventos"][i]["id_db"]),
  609. titulo: result["eventos"][i]["titulo"],
  610. desc: result["eventos"][i]["desc"],
  611. categoria: parseInt(result["eventos"][i]["categoria"]),
  612. categoria_desc: result["eventos"][i]["categoria_desc"],
  613. color: result["eventos"][i]["color"],
  614. dia: parseInt(result["eventos"][i]["dia"]),
  615. dia_orig: parseInt(result["eventos"][i]["dia"]),
  616. fechas_total: result["eventos"][i]["fechas_total"],
  617. fecha_orig: result["eventos"][i]["fecha_orig"],
  618. fecha: result["eventos"][i]["fecha"],
  619. todo_dia: result["eventos"][i]["todo_dia"],
  620. hora_ini_orig: result["eventos"][i]["hora_ini_orig"],
  621. hora_ini: result["eventos"][i]["hora_ini"],
  622. hora_fin: result["eventos"][i]["hora_fin"],
  623. editable: result["eventos"][i]["editable"],
  624. inscripciones: result["eventos"][i]["inscripciones"],
  625. periodo: result["eventos"][i]["periodo"],
  626. perfiles: result["eventos"][i]["perfiles"],
  627. };
  628. clasesObj.push(evento);
  629. var editable = true;
  630. if(evento.inscripciones || !evento.editable){
  631. editable = false;
  632. }
  633. //creaEventoHTML(id_obj, getX(evento.dia), getY(evento.dia), evento.color, evento.titulo, evento.todo_dia, editable, evento.fechas_total);
  634. 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);
  635. $("#dia"+evento.dia).find(".calendario_eventos").append(eventoHTML);
  636. id_obj++;
  637. $("#dia"+evento.dia).find(".bloque-evento").sort(function (a, b) {
  638. var contentA =parseInt( $(a).data('sort'));
  639. var contentB =parseInt( $(b).data('sort'));
  640. return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
  641. }).appendTo($("#dia"+evento.dia).find(".calendario_eventos"));
  642. }
  643. makeDraggable();
  644. }//fin else
  645. },
  646. error: function(jqXHR, textStatus, errorThrown ){
  647. $("#errorBox").collapse('show');
  648. $("#errorBox_text").html("Error al cargar horario.<br>"+errorThrown);
  649. $('#messageBox')[0].scrollIntoView({ block: "end" });
  650. //alert("ERROR! " + textStatus+ " - "+errorThrown);
  651. _editable = true;
  652. }
  653. });//ajax
  654. }