reporte.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. var click_in_process = [false,false];
  2. /********** CARGA INICIAL **********/
  3. $('#loading').show();
  4. $('#error').hide();
  5. $('#divTabs').hide();
  6. var tipo = 1;
  7. var actual = true;
  8. var cid = $('#actual').val();
  9. var etapa = $('#etapa').val();
  10. $('#excel').data('id', cid);
  11. $('#excel').data('etapa', etapa);
  12. var pestana = $('#pestana').val();
  13. cargaInfo(cid, etapa, tipo, actual, pestana);
  14. $('#mainTabs').show();
  15. $('#loading').fadeOut(5);
  16. /********** MODAL FALTANTES **********/
  17. $('#dlConcurso ul li').click(function() {
  18. $(this).parent('ul').siblings('span').removeClass('ing-cancelar iconoAzul pointer');
  19. $(this).parent('ul').hide();
  20. $('#mainTabs').fadeIn(50);
  21. $('#error').hide();
  22. $('#divTabs').hide();
  23. $('#nomConcurso').text('(' + $(this).text() + ' CIDIT)');
  24. $('#inputConcurso').val('');
  25. var actual;
  26. var tipo = 1;
  27. var cid = $(this).data('id');
  28. var etapa = $('#etapa').val();
  29. $('#excel').data('id', cid);
  30. $('#excel').data('etapa', etapa);
  31. var pestana = $('#pestana').val();
  32. if ($(this).data('id') == $('#actual').val()){
  33. actual = true;
  34. } else {
  35. $('#tabMomento').hide();
  36. $('#momento').hide();
  37. actual = false;
  38. }
  39. cargaInfo(cid, etapa, tipo, actual, pestana);
  40. });
  41. function cargaInfo(cid, etapa, tipo, actual, pestana){
  42. $.ajax({
  43. url: 'action/reporte_action.php',
  44. type: 'POST',
  45. dataType: 'json',
  46. data: { id: cid, etapa: etapa, tipo: tipo, actual: actual, pestana: pestana },
  47. success: function(result) {
  48. if(result['error']!= '' && result['error'] !== undefined){
  49. $('#mainTabs').fadeOut(5);
  50. $('#error').children('div').children('div.msg').text(result['error']);
  51. $('#error').show();
  52. $('#divTablas').hide();
  53. }else{
  54. if (actual)
  55. $('#momentoDiv').html(result['momento']);
  56. $('#divAsignaciones').html(result['asignaciones']);
  57. if (result['rubros'] != 'NO' && result['proyectos'] != 'NO'){
  58. /* Inicializa tabs contents */
  59. inicializaInfoInterna();
  60. /* Carga información */
  61. $('#rubros').html(result['rubros']);
  62. $('#leyenda').html(result['leyenda']);
  63. $('#ulProyecto').html(result['proyectos']);
  64. /* Agrega eventos */
  65. $('#dlProyecto ul li').mousedown({index: 1},mousedownDataList);
  66. $('#dlProyecto ul li').mouseup({elem: 'Proyecto', index: 1},mouseupDataList);
  67. $('#inputProyecto').click({elem: 'Proyecto'},clickDataList);
  68. $('#inputProyecto').blur({elem: 'Proyecto', index: 1},blurDataList);
  69. $('#inputProyecto').keyup({elem: 'Proyecto'},inputKeyUp);
  70. $('#iconProyecto').mousedown({index: 1},mousedownDataList);
  71. $('#iconProyecto').mouseup({elem: 'Proyecto', index: 1},mouseupDataList);
  72. $('#iconProyecto').mousedown({elem: 'Proyecto'},limpiaInputDL);
  73. $('#rubros .elem').click(grafica);
  74. $('#dlProyecto ul li').click(seleccionaProyecto);
  75. $("input[type=radio]").click(validaRB);
  76. if ($('#btnLimpiar').length > 0)
  77. $('#btnLimpiar').click(limpiarRBCBX);
  78. if($('#btnAsignar').length > 0)
  79. $('#btnAsignar').click(asignaSeleccionados);
  80. /* Muestra tabs */
  81. $('#bloqueExcel').show();
  82. $('#divTabs > ul > li > a').removeClass('active');
  83. $('#divTabs > div.tab-content > div.tab-pane').removeClass('show active');
  84. $('#tabProyectos').show();
  85. $('#tabGraficas').show();
  86. if (!actual) {
  87. $('#tabGraficas > a').addClass('active');
  88. $('#graficas').addClass('show active');
  89. } else {
  90. $('#tabMomento > a').addClass('active');
  91. $('#tabMomento').show();
  92. $('#momento').addClass('show active');
  93. $('#momento').show();
  94. }
  95. } else {
  96. $('#divTabs > ul > li > a').removeClass('active');
  97. $('#divTabs > div.tab-content > div.tab-pane').removeClass('show active');
  98. if (!actual) {
  99. $('#tabAsignaciones > a').addClass('active');
  100. $('#asignaciones').addClass('show active');
  101. } else {
  102. $('#tabMomento > a').addClass('active');
  103. $('#tabMomento').show();
  104. $('#momento').addClass('show active');
  105. $('#momento').show();
  106. }
  107. $('#tabProyectos').hide();
  108. $('#tabGraficas').hide();
  109. $('#bloqueExcel').hide();
  110. }
  111. $('#mainTabs').fadeOut(5);
  112. $('#divTabs').show();
  113. $('#error').hide();
  114. }
  115. },
  116. error: function(jqXHR, textStatus, errorThrown ){
  117. $('#mainTabs').fadeOut(5);
  118. $('#error').show();
  119. $('#divTablas').hide();
  120. }
  121. });
  122. }
  123. function inicializaInfoInterna(){
  124. $('#divCanvas').hide();
  125. $('#eligeRubro').show();
  126. $('#msgGrafica').text('Elige el rubro que deseas consultar');
  127. $('#iconGrafica').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-azul1 ing-mi-cartel');
  128. $('#divCanvas').hide();
  129. $('#titProyecto').hide();
  130. $('#datosProyecto').hide();
  131. $('#msgProyecto').text('Por favor selecciona el proyecto que deseas consultar');
  132. $('#iconMsgProyecto').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-azul1 ing-mi-cartel');
  133. $('#errorProyecto').show();
  134. }
  135. /********** MODAL FALTANTES **********/
  136. function faltantes(elem){
  137. if ($(elem).children('div.ing-aceptar').length == 0) {
  138. var tipo = 2;
  139. var cid = $(elem).data('id');
  140. var etapa = $('#etapa').val();
  141. $.ajax({
  142. url: 'action/reporte_action.php',
  143. type: 'POST',
  144. dataType: 'json',
  145. data: { id: cid, etapa: etapa, tipo: tipo },
  146. success: function(result) {
  147. if(result['faltan']!= ''){
  148. $('#userFaltante').text($(elem).siblings('div.nombres').text());
  149. $('#listaFaltantes').html(result['faltan']);
  150. $('#modalFaltantes').modal('show');
  151. }
  152. },
  153. });
  154. }
  155. }
  156. /********** GRÁFICA **********/
  157. Chart.defaults.global.defaultFontFamily = 'indivisa-text';
  158. Chart.defaults.global.defaultFontColor = 'rgba(0,29,104,1)';
  159. Chart.defaults.global.tooltips.enabled = false;
  160. Chart.defaults.global.aspectRatio = 2;
  161. Chart.defaults.global.legend.display = false;
  162. Chart.defaults.global.legend.labels.usePointStyle = true;
  163. Chart.defaults.global.legend.labels.fontColor = '#001D68';
  164. Chart.defaults.global.title.display = false;
  165. Chart.defaults.global.animation.animateRotate = true;
  166. Chart.defaults.global.animation.animateScale = true;
  167. Chart.helpers.merge(Chart.defaults.global.plugins.datalabels, {
  168. labels: {
  169. name: {
  170. align: 'top',
  171. font: function(context) {
  172. var w = context.chart.width;
  173. return {
  174. size: w < 512 ? 12 : 16,
  175. weight: 'bold',
  176. };
  177. },
  178. color: 'white',
  179. formatter: function(value, ctx) {
  180. return ctx.chart.data.labels[ctx.dataIndex];
  181. }
  182. },
  183. value: {
  184. align: 'bottom',
  185. backgroundColor: 'white',
  186. borderColor: 'white',
  187. borderWidth: 0,
  188. borderRadius: 4,
  189. font: function(context) {
  190. var w = context.chart.width;
  191. return {
  192. size: w < 512 ? 14 : 18,
  193. weight: 'bold',
  194. };
  195. },
  196. color: function(ctx) {
  197. return ctx.dataset.backgroundColor[ctx.dataIndex];
  198. },
  199. padding: 4
  200. },
  201. },
  202. offset: 0,
  203. padding: 0,
  204. });
  205. function grafica(event){
  206. var elem = event.currentTarget;
  207. var tipo = 3;
  208. var cid = $(elem).data('con');
  209. var etapa = $('#etapa').val();
  210. var preg = $(elem).data('id');
  211. $('#divCanvas').hide();
  212. $('#eligeRubro').hide();
  213. $('#loaderGrafica').fadeIn(50);
  214. $('.elem').removeClass('active');
  215. $(elem).addClass('active');
  216. $.ajax({
  217. url: 'action/reporte_action.php',
  218. type: 'POST',
  219. dataType: 'json',
  220. data: { id: cid, etapa: etapa, tipo: tipo, pregunta: preg },
  221. success: function(result) {
  222. if (result['error'] == 'error'){
  223. $('#divCanvas').hide();
  224. $('#msgGrafica').text('No es posible mostrar la grafica');
  225. $('#iconGrafica').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  226. $('#loaderGrafica').fadeOut(5);
  227. $('#eligeRubro').show();
  228. } else {
  229. if(result['datos']!= '') {
  230. var configcanvas = {type: result['tipo'],
  231. data: {
  232. labels: result['etiquetas'],
  233. datasets: [{
  234. data: result['datos'],
  235. backgroundColor: result['colores'],
  236. },],
  237. },
  238. };
  239. if ($('canvas'))
  240. $('canvas').remove();
  241. $('#divCanvas').append('<canvas id="canvas"></canvas>');
  242. new Chart($('#canvas'), configcanvas);
  243. $('#loaderGrafica').fadeOut(5);
  244. $('#divCanvas').show();
  245. $('#eligeRubro').hide();
  246. } else {
  247. $('#divCanvas').hide();
  248. $('#msgGrafica').text('No existen datos para graficar');
  249. $('#iconGrafica').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  250. $('#loaderGrafica').fadeOut(5);
  251. $('#eligeRubro').show();
  252. }
  253. }
  254. },
  255. });
  256. }
  257. /********** PROYECTOS ********/
  258. function seleccionaProyecto(event){
  259. var elem = event.currentTarget;
  260. $(elem).parent('ul').siblings('span').removeClass('ing-cancelar iconoAzul pointer');
  261. $(elem).parent('ul').hide();
  262. $('#errorProyecto').hide();
  263. $('#datosProyecto').hide();
  264. $('#loaderProyecto').fadeIn(50);
  265. var tipo = 4;
  266. var cid = $(elem).data('id');
  267. var etapa = $('#etapa').val();
  268. $('#titProyecto').text($(elem).text());
  269. $('#iconMsgProyecto').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  270. $.ajax({
  271. url: 'action/reporte_action.php',
  272. type: 'POST',
  273. dataType: 'json',
  274. data: { id: cid, etapa: etapa, tipo: tipo },
  275. success: function(result) {
  276. if (result['error'] == 'error'){
  277. $('#datosProyecto').hide();
  278. $('#msgProyecto').text('No es posible mostrar los resultados');
  279. $('#iconMsgProyecto').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  280. $('#loaderProyecto').fadeOut(5);
  281. $('#errorProyecto').show();
  282. } else {
  283. if(result['tablas']!= '') {
  284. $('#datosProyecto').html(result['tablas']);
  285. $('#errorProyecto').hide();
  286. $('#loaderProyecto').fadeOut(5);
  287. $('#datosProyecto').show();
  288. } else {
  289. $('#datosProyecto').hide();
  290. $('#msgProyecto').text('Aún no hay información del proyecto');
  291. $('#iconMsgProyecto').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  292. $('#loaderProyecto').fadeOut(5);
  293. $('#errorProyecto').show();
  294. }
  295. }
  296. },
  297. error: function(jqXHR, textStatus, errorThrown ){
  298. $('#datosProyecto').hide();
  299. $('#msgProyecto').text('No es posible mostrar los resultados');
  300. $('#iconMsgProyecto').removeClass('text-azul1 ing-mi-cartel text-danger ing-no-cargado').addClass('text-danger ing-no-cargado');
  301. $('#loaderProyecto').fadeOut(5);
  302. $('#errorProyecto').show();
  303. }
  304. });
  305. }
  306. /********** FINALISTAS Y GANADORES **********/
  307. var col=[], el=[];
  308. function validaRB(event) {
  309. var elem = event.currentTarget;
  310. var tabla = $(elem).data('table');
  311. el[tabla] = $(elem);
  312. col[tabla] = el[tabla].data("col");
  313. $("input[data-col=" + col[tabla] + "][data-table=" + tabla + "]").prop("checked", false);
  314. el[tabla].prop("checked", true);
  315. }
  316. function limpiarRBCBX(event){
  317. var btn = event.currentTarget;
  318. if ($('#oldSelecc').length > 0){
  319. var tipoSelec = $(btn).data('tipo');
  320. var seleccionados = $('#oldSelecc').val().split(',');
  321. switch(tipoSelec){
  322. case 1:
  323. $("input[type=checkbox]").prop("checked", false);
  324. $("input[type=checkbox]").each(function(index, elem){
  325. if (seleccionados.includes($(elem).val()))
  326. $(elem).prop('checked', true);
  327. else
  328. $(elem).addClass('disabledElem');
  329. });
  330. $("input[type=checkbox]").attr("disabled", true);
  331. break;
  332. case 2:
  333. seleccionados.forEach(arregla);
  334. function arregla (value, index, array){
  335. var temp = value.split('-');
  336. array[index] = [temp[0] + '-' + temp[1],temp[2]];
  337. }
  338. $("input[type=radio]").prop("checked", false);
  339. $("input[type=radio]").each(function(index, elem){
  340. var lugar = 0;
  341. var flag = false;
  342. for (var cont = 0; cont < seleccionados.length; cont++){
  343. if (seleccionados[cont][0] == $(elem).val()){
  344. flag = true;
  345. lugar = seleccionados[cont][1];
  346. cont = seleccionados.length;
  347. }
  348. }
  349. if (flag && lugar == $(elem).data('col'))
  350. $(elem).prop('checked', true);
  351. else
  352. $(elem).addClass('disabledElem');
  353. });
  354. $("input[type=radio]").attr("disabled", true);
  355. break;
  356. }
  357. $('#btnAsignar').text('Editar');
  358. } else {
  359. $("input[type=radio]").prop("checked", false);
  360. $("input[type=checkbox]").prop("checked", false);
  361. $('#btnAsignar').text('Publicar');
  362. }
  363. $(btn).hide();
  364. }
  365. function asignaSeleccionados (event){
  366. $('#errorLblAsignar').hide();
  367. var elem = event.currentTarget;
  368. var tipoSelec = $(elem).data('tipo');
  369. if ($(elem).text() === 'Editar'){
  370. $('#btnLimpiar').show();
  371. $('.elemSelec').removeClass('disabledElem');
  372. var elegidos = '';
  373. switch (tipoSelec){
  374. case 1:
  375. seleccionados = $("input[type=checkbox]:checked");
  376. $("input[type=checkbox]").removeAttr("disabled");
  377. break;
  378. case 2:
  379. seleccionados = $("input[type=radio]:checked");
  380. $("input[type=radio]").removeAttr("disabled");
  381. break;
  382. }
  383. $(seleccionados).each(function(index, elem){
  384. if ($(elem).data('col') !== undefined)
  385. elegidos += ',' + $(elem).val() + '-' + $(elem).data('col');
  386. else
  387. elegidos += ',' + $(elem).val();
  388. });
  389. if(elegidos.length > 0)
  390. elegidos = elegidos.substring(1);
  391. if ($('#oldSelecc').length == 0)
  392. $('#secBtns').append('<input type="hidden" id="oldSelecc" value="' + elegidos + '">');
  393. else
  394. $('#oldSelecc').val(elegidos);
  395. $(elem).text('Publicar');
  396. } else {
  397. var cid = $('#actual').val();
  398. var etapa = $('#etapa').val();
  399. var elegidos = '';
  400. var seleccionados;
  401. var old = '';
  402. if ($('#oldSelecc').length > 0)
  403. old = $('#oldSelecc').val();
  404. switch (tipoSelec){
  405. case 1: seleccionados = $("input[type=checkbox]:checked"); break;
  406. case 2: seleccionados = $("input[type=radio]:checked"); break;
  407. }
  408. if($(seleccionados).length > 0){
  409. if ($(seleccionados).length < (3*$('.catSelec').length) && tipoSelec == 2) {
  410. $('#errorLblAsignar').show();
  411. $('#errorLblAsignar').removeClass('text-primary text-danger').addClass('text-danger').text('Es necesario seleccionar a todos los ganadores');
  412. } else {
  413. $(seleccionados).each(function(index, elem){
  414. if ($(elem).data('col') !== undefined)
  415. elegidos += ',' + $(elem).val() + '-' + $(elem).data('col');
  416. else
  417. elegidos += ',' + $(elem).val();
  418. });
  419. if(elegidos.length > 0)
  420. elegidos = elegidos.substring(1);
  421. $.ajax({
  422. url: 'action/reporte_action.php',
  423. type: 'POST',
  424. dataType: 'json',
  425. data: { id: cid, etapa: etapa, tipo: 5, seleccionados: tipoSelec, elegidos: elegidos, old: old },
  426. success: function(result) {
  427. if(result['error']!= '' && result['error'] !== undefined){
  428. $('#errorLblAsignar').removeClass('text-primary text-danger').addClass('text-danger').text(result['error']);
  429. $('#btnLimpiar').click();
  430. }else{
  431. $('#msgPrincipal').html(result['titulo']);
  432. $('#errorLblAsignar').removeClass('text-primary text-danger').addClass('text-primary').text(result['msg']);
  433. $('#btnAsignar').text('Editar');
  434. $('#btnLimpiar').hide();
  435. }
  436. $('#errorLblAsignar').show();
  437. },
  438. error: function(jqXHR, textStatus, errorThrown ){
  439. $('#errorLblAsignar').show();
  440. $('#errorLblAsignar').removeClass('text-primary text-danger').addClass('text-danger').text('Se presentó un problema. Inténtalo nuevamente');
  441. $('#btnLimpiar').click();
  442. }
  443. });
  444. }
  445. } else {
  446. $('#errorLblAsignar').show();
  447. switch (tipo){
  448. case 1: $('#errorLblAsignar').children('div').children('div.msg').text('Es necesario seleccionar al menos un finalista.'); break;
  449. case 2: $('#errorLblAsignar').children('div').children('div.msg').text('Es necesario seleccionar a los ganadores.'); break;
  450. }
  451. }
  452. }
  453. }
  454. /********** EXCEL *********/
  455. $('#excel').click(function(){
  456. $('#modalArchivo').modal('show');
  457. $('#bodyArchivo').hide();
  458. $('#loaderArchivo').show();
  459. var cid = $('#excel').data('id');
  460. var etapa = $(this).data('etapa');
  461. $.ajax({
  462. type:'POST',
  463. url:"action/xls_reporte.php",
  464. data: {id: cid, etapa: etapa},
  465. dataType:'json',
  466. success: function(result) {
  467. if(result['error']!== '' && result['error'] !== undefined){
  468. $('#msgArchivo').text(result['error']);
  469. $('#loaderArchivo').hide();
  470. $('#bodyArchivo').fadeIn(50);
  471. } else
  472. $('#modalArchivo').modal('hide');
  473. },
  474. error: function(jqXHR, textStatus, errorThrown ){
  475. $('#msgArchivo').text('No fue posible generar el archivo');
  476. $('#loaderArchivo').hide();
  477. $('#bodyArchivo').fadeIn(50);
  478. }
  479. }).done(function(data){
  480. var $a = $('<a>');
  481. $a.attr('href',data.file);
  482. $('body').append($a);
  483. $a[0].click();
  484. $a.remove();
  485. });
  486. });