reporte_action.php 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842
  1. <?php
  2. require_once '../classes/Concurso.php';
  3. require_once '../classes/Etapa.php';
  4. require_once '../classes/Proyecto.php';
  5. require_once '../classes/Fechas.php';
  6. require_once '../classes/Colores.php';
  7. require_once '../classes/Resultados.php';
  8. require_once '../include/bd_pdo.php';
  9. if(!isset($_POST['id']) && !isset($_POST['etapa']) && !isset($_POST['tipo'])){
  10. $return['error'] = 'error';
  11. } else {
  12. switch ($_POST['tipo']){
  13. case 1: //DataList Concursos
  14. $actual = false;
  15. if ($_POST['actual'] === 'true')
  16. $actual = true;
  17. $edicion = (bool)base64_decode($_POST['pestana']);
  18. $fueraPeriodo = false;
  19. if ($actual){
  20. date_default_timezone_set('America/Mexico_City');
  21. $hoy = strtotime(date('Y-m-d'));
  22. $fechas = Etapa::getFechasXEtapa($pdo, $_POST['id'],$_POST['etapa']);
  23. if (count($fechas) > 0) {
  24. $temp = str_replace('{', '', $fechas[0]['fecha']);
  25. $temp = str_replace('}', '', $temp);
  26. $temp = explode(',', $temp);
  27. if ($hoy < strtotime($temp[0]))
  28. $fueraPeriodo = true;
  29. } else
  30. $fueraPeriodo = true;
  31. }
  32. if (!$fueraPeriodo) {
  33. $etapa = Etapa::getClaveEtapaXID($pdo, $_POST['etapa']);
  34. $seccion = '';
  35. if ($actual){
  36. $seccion = alMomento($pdo, $_POST['id'],$_POST['etapa']);
  37. if ($seccion != 'error')
  38. $return['momento'] = $seccion;
  39. else
  40. $return['error'] = 'error';
  41. }
  42. switch (mb_strtoupper($etapa)){
  43. case 'REVISION':
  44. $etapaFinalistas = Etapa::buscaEtapaXClave($pdo, 'FINALISTAS');
  45. if (isset($etapaFinalistas))
  46. $fechasFinalistas = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaFinalistas);
  47. if (isset($fechasFinalistas))
  48. $seccion = finalistas($pdo, $_POST['id'], $fechasFinalistas, $actual, $edicion);
  49. else
  50. $seccion = 'error';
  51. if ($seccion != 'error')
  52. $return['asignaciones'] = $seccion;
  53. else
  54. $return['error'] = 'error';
  55. break;
  56. case 'EVALUACION':
  57. $etapaGanadores = Etapa::buscaEtapaXClave($pdo, 'GANADORES');
  58. if (isset($etapaGanadores))
  59. $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaGanadores);
  60. if (isset($fechasGanadores))
  61. $seccion = ganadores($pdo, $_POST['id'], $fechasGanadores, $actual, $edicion);
  62. else
  63. $seccion = 'error';
  64. if ($seccion != 'error')
  65. $return['asignaciones'] = $seccion;
  66. else
  67. $return['error'] = 'No podemos mostrar la información en éste momento';
  68. break;
  69. default :
  70. $return['error'] = 'No podemos mostrar la información en éste momento';
  71. }
  72. if (Concurso::tieneEvaluaciones($pdo, $_POST['etapa'], $_POST['id']))
  73. $flag = true;
  74. else
  75. $flag = false;
  76. if (!isset($return['error']) && $flag){
  77. $seccion = listadoProyectos($pdo, $_POST['id'],$_POST['etapa']);
  78. if ($seccion != 'error'){
  79. $return['proyectos'] = $seccion;
  80. $graficas = graficas($pdo, $_POST['id'],$_POST['etapa']);
  81. if (count($graficas) > 0){
  82. $return['rubros'] = $graficas['rubros'];
  83. $return['leyenda'] = $graficas['leyenda'];
  84. $concurso = Concurso::getCouncursoxId($pdo, $_POST['id']);
  85. } else
  86. $return['error'] = 'No podemos mostrar la información en éste momento';
  87. } else
  88. $return['error'] = 'No podemos mostrar la información en éste momento';
  89. } else {
  90. if (!$flag){
  91. $return['rubros'] = 'NO';
  92. $return['proyectos'] = 'NO';
  93. }
  94. }
  95. } else
  96. $return['error'] = 'Se encuentra fuera de período';
  97. break;
  98. case 2: //ModalFaltantes
  99. $faltante = '';
  100. $faltantes = Proyecto::obtenerProyectosFaltantes($pdo, $_POST['id'], $_POST['etapa']);
  101. $cont = 1;
  102. foreach ($faltantes as $proyecto){
  103. $faltante .= '<div class="elemento d-flex flex-row align-items-center justify-content-start p-2" ><div class="py-1 px-3 bg-azul' . $cont . '">' . $proyecto['clave'] . '</div><div class="pl-2">' . $proyecto['proyecto'] . '</div></div>';
  104. if ($cont ==5)
  105. $cont = 1;
  106. else
  107. $cont++;
  108. }
  109. $return['faltan'] = $faltante;
  110. break;
  111. case 3: //Rubros
  112. $datos = '';
  113. switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$_POST['etapa']))){
  114. case 'REVISION':
  115. $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['id'], 0, 'nombre');
  116. break;
  117. case 'EVALUACION':
  118. $proyectos = Proyecto::getProyectosFinalistas($pdo, $_POST['id'], 0, 'nombre');
  119. break;
  120. default :
  121. $proyectos = array();
  122. }
  123. if (count($proyectos) > 0){
  124. $valores = array();
  125. foreach ($proyectos as $proyecto)
  126. array_push ($valores,Resultados::valoresGraficaXPregunta($pdo, $_POST['pregunta'], $proyecto['idproyecto'], $_POST['etapa']));
  127. if(count($valores) > 0){
  128. $colores = obtenerColores($proyectos);
  129. $claves = array_column($proyectos, 'clave');
  130. $return['tipo'] = 'doughnut';
  131. $return['etiquetas'] = $claves;
  132. $return['colores'] = $colores;
  133. $return['datos'] = $valores;
  134. } else
  135. $return['datos'] = '';
  136. } else
  137. $return['error'] = 'error';
  138. break;
  139. case 4: //DataList Proyectos
  140. $seccion = Resultados::evaluacionesXProyecto($pdo, $_POST['id'], $_POST['etapa'],'HTML');
  141. if ($seccion != 'error')
  142. $return['tablas'] = $seccion;
  143. else
  144. $return['error'] = 'error';
  145. break;
  146. case 5: //Guarda Finalistas/Ganadores
  147. switch ($_POST['seleccionados']){
  148. case 1: //Finalistas
  149. $anteriores = false;
  150. if(!empty($_POST['old'])){
  151. $olds = explode(',',$_POST['old']);
  152. while ($temp = current($olds)){
  153. $index = key($olds);
  154. $temp = explode('-', $temp);
  155. $olds[$index] = $temp[1];
  156. next($olds);
  157. }
  158. $anteriores = true;
  159. }
  160. $finalistas = explode(',',$_POST['elegidos']);
  161. while ($temp = current($finalistas)){
  162. $index = key($finalistas);
  163. $temp = explode('-', $temp);
  164. $finalistas[$index] = $temp[1];
  165. next($finalistas);
  166. }
  167. $falsos = array();
  168. $verdaderos = array();
  169. if ($anteriores){
  170. $falsos = array_diff($olds,$finalistas);
  171. $verdaderos = array_diff($finalistas, $olds);
  172. } else
  173. $verdaderos = $finalistas;
  174. $cont = 0;
  175. foreach ($falsos as $falso){
  176. if (actualizaFinalista($pdo, $falso,(bool)false)){
  177. if ($cont == 0)
  178. $validaF = true;
  179. } else
  180. $validaF = false;
  181. $cont++;
  182. }
  183. $validaV = false;
  184. $cont = 0;
  185. foreach ($verdaderos as $verdadero){
  186. if (actualizaFinalista($pdo, $verdadero,(bool)true)){
  187. if ($cont == 0)
  188. $validaV = true;
  189. } else
  190. $validaV = false;
  191. $cont++;
  192. }
  193. if (count($falsos) == 0)
  194. $validaF = true;
  195. if (count($verdaderos) == 0)
  196. $validaV = true;
  197. if ($validaF && $validaV){
  198. $etapaFinalistas = Etapa::buscaEtapaXClave($pdo, 'GANADORES');
  199. if (isset($etapaFinalistas))
  200. $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaFinalistas);
  201. if (!isset($fechasFinalistas))
  202. $msg = ' la fecha de publicación';
  203. else
  204. $msg = 'l ' . Fechas::romanizaFecha($fechasFinalistas['fechas']);
  205. $return['titulo'] = 'Los finalistas del concurso ya han sido asignados<br><div class="small">(Pueden ser modificados únicamente antes de' . $msg . ')</div>';
  206. $return['msg'] = '¡Felicidades! Se asignaron exitosamente los finalistas';
  207. } else
  208. $return['error'] = 'No fue posible asignar correctamente todos los finalistas';
  209. break;
  210. case 2: //Ganadores
  211. $anteriores = false;
  212. if(!empty($_POST['old'])){
  213. $olds = explode(',',$_POST['old']);
  214. while ($temp = current($olds)){
  215. $index = key($olds);
  216. $temp = explode('-', $temp);
  217. $olds[$index] = array('categoria' => $temp[0],'proyecto' => $temp[1],'lugar' => $temp[2]);
  218. next($olds);
  219. }
  220. $cont = 0;
  221. foreach ($olds as $old){
  222. if(eliminaGanador($pdo, $old['categoria'], $old['proyecto'], $old['lugar'])){
  223. if ($cont == 0)
  224. $anteriores = true;
  225. } else
  226. $anteriores = false;
  227. $cont++;
  228. }
  229. } else
  230. $anteriores = true;
  231. if(isset($_POST['elegidos']) && $anteriores){
  232. $ganadores = explode(',',$_POST['elegidos']);
  233. while ($temp = current($ganadores)){
  234. $index = key($ganadores);
  235. $temp = explode('-', $temp);
  236. $ganadores[$index] = array('categoria' => $temp[0],'proyecto' => $temp[1],'lugar' => $temp[2]);
  237. next($ganadores);
  238. }
  239. $valida = false;
  240. $cont = 0;
  241. foreach ($ganadores as $ganador){
  242. if (agregaGanador($pdo, $ganador['categoria'], $ganador['proyecto'], $ganador['lugar'])){
  243. if ($cont == 0)
  244. $valida = true;
  245. } else
  246. $valida = false;
  247. $cont++;
  248. }
  249. if (!$valida) {
  250. foreach ($ganadores as $ganador){
  251. eliminaGanador($pdo, $ganador['categoria'], $ganador['proyecto'], $ganador['lugar']);
  252. }
  253. $return['error'] = 'No fue posible asignar los ganadores';
  254. } else{
  255. $etapaGanadores = Etapa::buscaEtapaXClave($pdo, 'GANADORES');
  256. if (isset($etapaGanadores))
  257. $fechasGanadores = Concurso::getFechaXEtapa($pdo, $_POST['id'], $etapaGanadores);
  258. if (!isset($fechasGanadores))
  259. $msg = ' la fecha de publicación';
  260. else
  261. $msg = 'l ' . Fechas::romanizaFecha($fechasGanadores['fechas']);
  262. $return['titulo'] = 'Los ganadores del concurso ya han sido asignados<br><div class="small">(Pueden ser modificados únicamente antes de' . $msg . ')</div>';
  263. $return['msg'] = '¡Felicidades! Se asignaron exitosamente los ganadores';
  264. }
  265. } else {
  266. $return['error'] = 'No fue posible asignar los ganadores';
  267. }
  268. break;
  269. }
  270. break;
  271. }
  272. }
  273. $return['json'] = json_encode($return);
  274. echo json_encode($return);
  275. /********** AL MOMENTO *********/
  276. function alMomento($pdo,$concurso,$etapa, $orden = 'apellidos'){
  277. $error = false;
  278. $divAlMomento = '';
  279. $titulo = array();
  280. switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){
  281. case 'REGISTRO':
  282. break;
  283. case 'REVISION':
  284. $titulo[] = 'Revisores';
  285. break;
  286. case 'EVALUACION':
  287. $titulo[] = 'Jurado Evaluador';
  288. $titulo[] = 'Docentes / Administrativos';
  289. break;
  290. default :
  291. $error = true;
  292. }
  293. if (!$error) {
  294. $divAlMomento .= '<div class="d-flex flex-column align-items-center mt-2 px-2">
  295. <h4 class="text-center">' . $titulo[0] . '</h4>
  296. <div class="pleca"></div>
  297. <div class="row justify-content-around w-100 px-4 mt-3">';
  298. $asignados = Etapa::getUsuariosAsignados($pdo, $concurso, $etapa, $orden);
  299. if (count($asignados) <= 10 )
  300. $numCol = count($asignados);
  301. else
  302. $numCol = ceil(count($asignados) / 2);
  303. $cont = 1;
  304. $cambiaColumna = true;
  305. if (count($asignados) > 0){
  306. foreach ($asignados as $asignado){
  307. switch (mb_strtoupper($orden)){
  308. case 'NOMBRE':
  309. $usuario = $asignado['nombre'] . ' ' . $asignado['apellidos'];
  310. break;
  311. case 'APELLIDOS':
  312. $usuario = $asignado['apellidos'] . ' ' . $asignado['nombre'];
  313. break;
  314. default:
  315. $usuario = '';
  316. }
  317. if($cambiaColumna){
  318. $divAlMomento .= '<div class="col-sm-6 justify-content-start mb-2">';
  319. $cambiaColumna = false;
  320. }
  321. $divAlMomento .= '<div class="d-flex flex-row justify-content-start align-items-center my-2">
  322. <div class="d-flex flex-column bg-primary text-white justify-content-center align-items-center mr-3 text-center faltantes" onclick="faltantes(this);" data-id="' . $asignado['idusuario'] . '">';
  323. $total = Etapa::totalFaltantes($pdo, $asignado['idusuario'], $etapa);
  324. if ($total > 0){
  325. $divAlMomento .= '<div class="w-100 small">Faltan</div>
  326. <div class="indivisa-text-bold">' . Fechas::dosDigitos($total) . '</div>
  327. <div class="w-100 small">proyectos</div>';
  328. } else
  329. $divAlMomento .= '<div class="ing-aceptar text-white"></div>';
  330. $divAlMomento .= '</div>
  331. <div class="nombres flex-fill">' . $usuario . '</div>
  332. </div>';
  333. $cont++;
  334. if ($cont > $numCol){
  335. $cambiaColumna = true;
  336. $cont = 1;
  337. }
  338. if($cambiaColumna)
  339. $divAlMomento .= '</div>';
  340. }
  341. if(!$cambiaColumna)
  342. $divAlMomento .= '</div>';
  343. }
  344. $divAlMomento .= '</div>
  345. </div>';
  346. if (isset($titulo[1])){
  347. $usuarios = Etapa::getUsuariosValoraciones($pdo, $concurso, $etapa, 'apellidos');
  348. if (count($usuarios) > 0){
  349. $divAlMomento .= '<div class="d-flex flex-column align-items-center mt-2 px-2">
  350. <h4 class="text-center">' . $titulo[1] . '</h4>
  351. <div class="pleca"></div>
  352. <div class="row justify-content-around w-100 px-4 mt-3">';
  353. if (count($asignados) <= 10 )
  354. $numCol = count($usuarios);
  355. else
  356. $numCol = ceil(count($usuarios) / 2);
  357. $cont = 1;
  358. $cambiaColumna = true;
  359. if (count($usuarios) > 0){
  360. foreach ($usuarios as $usr){
  361. switch (mb_strtoupper($orden)){
  362. case 'NOMBRE':
  363. $usuario = $usr['nombre'] . ' ' . $usr['apellidos'];
  364. break;
  365. case 'APELLIDOS':
  366. $usuario = $usr['apellidos'] . ' ' . $usr['nombre'];
  367. break;
  368. default:
  369. $usuario = '';
  370. }
  371. if($cambiaColumna){
  372. $divAlMomento .= '<div class="col-sm-6 justify-content-start mb-2">';
  373. $cambiaColumna = false;
  374. }
  375. $divAlMomento .= '<div class="d-flex flex-row justify-content-start align-items-center mb-2">
  376. <div class="ing-estrella1 mr-3"></div><div class="nombres">' . $usuario . '</div>
  377. </div>';
  378. $cont++;
  379. if ($cont > $numCol){
  380. $cambiaColumna = true;
  381. $cont = 1;
  382. }
  383. if($cambiaColumna)
  384. $divAlMomento .= '</div>';
  385. }
  386. if(!$cambiaColumna)
  387. $divAlMomento .= '</div>';
  388. }
  389. $divAlMomento .= '</div>
  390. </div>';
  391. }
  392. }
  393. return $divAlMomento;
  394. } else
  395. return 'error';
  396. }
  397. /********** GRÁFICAS **********/
  398. function graficas($pdo, $concurso, $etapa){
  399. $graficas = array();
  400. $divRubros = '';
  401. $cont = 0;
  402. $rubros = Etapa::getRubrosXEtapa($pdo, $etapa);
  403. if (count($rubros) > 0){
  404. $graficas = array('rubros' => '', 'graficas' => '', 'leyenda' => '');
  405. foreach ($rubros as $rubro){
  406. $divRubros .= '<div class="w-100 indivisa-text-bold text-left display-6 indivisa-text-bold-italic text-white mt-3 mb-2 pb-1 px-4 bg-primary">' . $rubro['rubro'] . '</div>
  407. <div class="cat">';
  408. $preguntas = Etapa::getPreguntasXRubro($pdo, $rubro['idrubro']);
  409. foreach ($preguntas as $pregunta){
  410. if (Resultados::esPromediable($pdo, $pregunta['tipo'])){
  411. $cont++;
  412. $divRubros .= '<div class="elem text-left pl-4 py-1 bordeInf" data-id="' . $pregunta['idpregunta'] . '" data-con="' . $concurso . '" onclick="grafica(this)">' . $pregunta['pregunta'] . '</div>';
  413. }
  414. }
  415. $divRubros .= '</div>';
  416. }
  417. $graficas['rubros'] = $divRubros;
  418. $divLeyenda = '';
  419. switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){
  420. case 'REVISION':
  421. $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, 0, 'clave');
  422. break;
  423. case 'EVALUACION':
  424. $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, 0, 'clave');
  425. break;
  426. default :
  427. $proyectos = array();
  428. }
  429. $colores = obtenerColores($proyectos);
  430. $col = 1;
  431. $divide = ceil(count($colores) / 2);
  432. $cambiaColumna = true;
  433. for ($cont =0; $cont < count($colores); $cont++){
  434. if($cambiaColumna){
  435. $divLeyenda .= '<div class="col-6">';
  436. $cambiaColumna = false;
  437. }
  438. $divLeyenda .= '<div class="d-flex flex-row justify-content-start align-items-start align-items-center my-1">
  439. <div class="etiqueta text-white rounded p-2 mr-3" style="background:' . $colores[$cont] . '">' . $proyectos[$cont]['clave'] . '</div>
  440. <div class="text-primary ">' . $proyectos[$cont]['proyecto'] . '</div>
  441. </div>';
  442. $col++;
  443. if ($col > $divide){
  444. $cambiaColumna = true;
  445. $col = 1;
  446. }
  447. if($cambiaColumna)
  448. $divLeyenda .= '</div>';
  449. }
  450. if(!$cambiaColumna)
  451. $divLeyenda .= '</div>';
  452. $graficas['leyenda'] = $divLeyenda;
  453. }
  454. return $graficas;
  455. }
  456. function obtenerColores($proyectos){
  457. $coloresDef = array();
  458. $colores = Colores::chartColors();
  459. if (count($proyectos) <= count($colores)){
  460. for ($cont = 0; $cont < count($proyectos); $cont++){
  461. array_push($coloresDef, $colores[$cont]);
  462. }
  463. } else {
  464. $cont = 0;
  465. for ($proy = 0; $proy < count($proyectos); $proy++){
  466. array_push($coloresDef, $colores[$cont]);
  467. $cont++;
  468. if ($cont == (count($colores) - 1))
  469. $cont = 0;
  470. }
  471. }
  472. return $coloresDef;
  473. }
  474. /********** PROYECTOS **********/
  475. function listadoProyectos($pdo, $concurso, $etapa){
  476. $listaProyectos = '';
  477. switch (mb_strtoupper(Etapa::getClaveEtapaXID($pdo,$etapa))){
  478. case 'REVISION':
  479. $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, 0, 'nombre');
  480. break;
  481. case 'EVALUACION':
  482. $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, 0, 'nombre');
  483. break;
  484. default :
  485. $proyectos = array();
  486. }
  487. if (count($proyectos) > 0){
  488. foreach ($proyectos as $proyecto){
  489. $listaProyectos .= '<li data-id="' . $proyecto['idproyecto'] . '">' . $proyecto['clave'] . '-' . $proyecto['proyecto'] . '</li>';
  490. }
  491. return $listaProyectos;
  492. } else
  493. return 'error';
  494. }
  495. /********** FINALISTAS / GANADORES **********/
  496. function finalistas($pdo, $id, $fechaFinalistas, $activo, $acceso){
  497. $divFinalistas = '';
  498. if ($fechaFinalistas['fechas'] == 'Por definir')
  499. return '<div class="fondoAnuncio mt-2">
  500. <div class="d-flex flex-column justify-content-center align-items-center">
  501. <div class="text-primary text-center mt-5 tit">¡Importante!</div>
  502. <div class="text-primary text-center small m-3 msg">No ha sido asignada la fecha de publicación de finalistas</div>
  503. <div class="display-1 text-danger mb-4 ing-no-cargado"></div>
  504. </div>
  505. </div>';
  506. else {
  507. $asigna = false;
  508. $flag = false;
  509. $categorias = Concurso::getCategoriasConcurso($pdo, $id);
  510. $finalistas = array();
  511. if (count($categorias) > 0) {
  512. if ($activo && !$fechaFinalistas['activo']){
  513. if ($acceso){
  514. $asigna = true;
  515. $despliega = '';
  516. if (count($categorias) < 3)
  517. $despliega = 'd-flex flex-row';
  518. else
  519. $despliega = 'card-columns';
  520. $divFinalistas .= '<div class="' . $despliega . ' categorias">';
  521. $col = 0;
  522. $disabled = '';
  523. $existenFinalistas = Proyecto::getProyectosFinalistas($pdo, $id, 0, 'nombre');
  524. if (count($existenFinalistas) > 0){
  525. $flag = true;
  526. $disabled = 'disabled';
  527. }
  528. foreach ($categorias as $categoria){
  529. $divFinalistas .= '<div class="card mb-3">
  530. <h4 class="text-center catSelec">' . $categoria['categoria'] . '</h4>
  531. <div class="w-100 d-flex flex-row justify-content-between">
  532. <div class="w-75 indivisa-text-bold text-white bg-primary align-items-center"><div class="p-3">Proyecto</div></div>
  533. <div class="w-25 d-flex flex-row justify-content-center align-content-center">
  534. <div class="flex-fill d-flex flex-column justify-content-center indivisa-text-bold text-center text-white ' . Colores::getBGColor($col) . '"><div>Finalistas</div></div>
  535. </div>
  536. </div>';
  537. $row = 0;
  538. $col++;
  539. $autorizados = Proyecto::getProyectosAutorizados($pdo, $id, $categoria['idcategoria'], 'nombre');
  540. $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'nombre');
  541. foreach ($autorizados as $proyecto) {
  542. $divFinalistas .= '<div class="w-100 d-flex flex-row justify-content-between renglon py-2">
  543. <div class="w-75 text-primary"><b>' . $proyecto['clave'] . '</b> - '. $proyecto['proyecto'] . '</div>
  544. <div class="w-25 d-flex flex-row justify-content-center">';
  545. if (in_array($proyecto['idproyecto'], array_column($finalistas, 'idproyecto')))
  546. $check = 'checked';
  547. else
  548. $check = '';
  549. $divFinalistas .= '<div class="flex-fill text-center align-self-center">
  550. <input type="checkbox" id="cat' . $categoria['idcategoria'] . '-row' . $row . '" name="cat' . $categoria['idcategoria'] . '-row' . $row . '" data-table="' . $categoria['idcategoria'] . '" value="' . $categoria['idcategoria'] . '-' . $proyecto['idproyecto'] . '" ' . $check .' ' . $disabled . '/>
  551. <label for="cat' . $categoria['idcategoria'] . '-row' . $row . '" class="ing-finalistas elemSelec final ';
  552. if ($check == '' && $flag)
  553. $divFinalistas .= ' disabledElem ';
  554. $divFinalistas .= '"></label>
  555. </div>';
  556. $divFinalistas .= '</div>
  557. </div>';
  558. $row++;
  559. }
  560. $divFinalistas .= '</div>';
  561. }
  562. $divFinalistas .= '</div>
  563. <div id="errorLblAsignar" class="mt-3 indivisa-text-bold-italic display-6 text-center" style="display:none"></div>
  564. <div id="secBtns">
  565. <div class="d-flex mx-auto justify-content-center pt-3">';
  566. if ($flag)
  567. $divFinalistas .= '<button type="button" class="btn btn-ing btn-outline-primary arrow mx-2" id="btnAsignar" data-tipo="1">Editar</button>';
  568. else
  569. $divFinalistas .= '<button type="button" class="btn btn-ing btn-outline-primary arrow mx-2" id="btnAsignar" data-tipo="1">Publicar</button>';
  570. if ($flag)
  571. $estilo = 'style="display:none;"';
  572. else
  573. $estilo = '';
  574. $divFinalistas .= '<button type="reset" class="btn btn-ing btn-outline-danger arrow mx-2" id="btnLimpiar" data-tipo="1" ' . $estilo .'>Cancelar</button>
  575. </div>
  576. </div>';
  577. } else {
  578. $divFinalistas = '<div class="fondoAnuncio mt-2">
  579. <div class="d-flex flex-column justify-content-center align-items-center">
  580. <div class="text-primary text-center mt-5 tit">¡Lo sentimos!</div>
  581. <div class="text-primary text-center small m-3 msg">Los finalistas aún no han sido publicados</div>
  582. <div class="display-1 text-danger mb-4 ing-no-cargado"></div>
  583. </div>
  584. </div>';
  585. }
  586. } else {
  587. $despliega = '';
  588. if (count($categorias) < 3)
  589. $despliega = 'd-flex flex-row';
  590. else
  591. $despliega = 'card-columns';
  592. $divFinalistas .= '<div class="' . $despliega . ' categorias">';
  593. foreach ($categorias as $categoria){
  594. $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'clave');
  595. $divFinalistas .= '<div class="card mb-3">
  596. <div class="indivisa-text-bold display-6 text-center titCategoria mb-4">' . $categoria['categoria'] . '</div>';
  597. $cont = 0;
  598. foreach ($finalistas as $finalista){
  599. $divFinalistas .= '<div class="d-flex flex-row align-items-center mb-2">
  600. <label class="colA ' . Colores::getBGColor($cont) . ' text-primary indivisa-text-bold pt-2 mr-3">' . $finalista['clave'] . '</label>
  601. <label class="text-primary flex-grow-1">' . $finalista['proyecto'] . '</label>
  602. </div>';
  603. $cont++;
  604. }
  605. $divFinalistas .= '</div>';
  606. }
  607. $divFinalistas .= '</div>';
  608. }
  609. if ($asigna){
  610. if ($flag)
  611. return '<div id="msgPrincipal" class="indivisa-text-italic display-5 text-center text-primary pb-4">Los finalistas del concurso ya han sido asignados<br><div class="small">(Pueden ser modificados únicamente antes del ' . Fechas::romanizaFecha($fechaFinalistas['fechas']) .')</div></div>' . $divFinalistas;
  612. else
  613. return '<div id="msgPrincipal" class="indivisa-text-italic display-5 text-center text-primary pb-4">Selecciona a los finalistas del concurso para poder hacerlos públicos</div>' . $divFinalistas;
  614. } else
  615. return $divFinalistas;
  616. } else
  617. return 'error';
  618. }
  619. }
  620. function ganadores($pdo, $id, $fechaGanadores, $activo, $acceso){
  621. $divGanadores = '';
  622. if ($fechaGanadores['fechas'] == 'Por definir')
  623. return '<div class="fondoAnuncio mt-2">
  624. <div class="d-flex flex-column justify-content-center align-items-center">
  625. <div class="text-primary text-center mt-5 tit">¡Importante!</div>
  626. <div class="text-primary text-center small m-3 msg">No ha sido asignada la fecha de publicación de ganadores</div>
  627. <div class="display-1 text-danger mb-4 ing-no-cargado"></div>
  628. </div>
  629. </div>';
  630. else {
  631. $asigna = false;
  632. $flag = false;
  633. $categorias = Concurso::getCategoriasConcurso($pdo, $id);
  634. $ganadores = array();
  635. if (count($categorias) > 0) {
  636. if ($activo && !$fechaGanadores['activo']){
  637. if ($acceso){
  638. $asigna = true;$despliega = '';
  639. if (count($categorias) < 3)
  640. $despliega = 'd-flex flex-row';
  641. else
  642. $despliega = 'card-columns';
  643. $divGanadores .= '<div class="' . $despliega . ' categorias">';
  644. foreach ($categorias as $categoria){
  645. $divGanadores .= '<div class="card mb-3">
  646. <h4 class="text-center catSelec">' . $categoria['categoria'] . '</h4>
  647. <div class="w-100 d-flex flex-row justify-content-between">
  648. <div class="w-75 indivisa-text-bold text-white bg-primary align-items-center"><div class="p-3">Proyecto</div></div>
  649. <div class="w-25 d-flex flex-row justify-content-center align-content-center">
  650. <div class="flex-fill d-flex flex-column justify-content-center indivisa-text-bold text-center text-white bg-azul1"><div>1°</div></div>
  651. <div class="flex-fill d-flex flex-column justify-content-center indivisa-text-bold text-center text-white bg-azul2"><div>2°</div></div>
  652. <div class="flex-fill d-flex flex-column justify-content-center indivisa-text-bold text-center text-white bg-azul3"><div>3°</div></div>
  653. </div>
  654. </div>';
  655. $row = 0;
  656. $color;
  657. $finalistas = Proyecto::getProyectosFinalistas($pdo, $id, $categoria['idcategoria'], 'nombre');
  658. $ganadores = Proyecto::getProyectosGanadores($pdo, $categoria['idcategoria'],$id);
  659. $disabled = '';
  660. if (count($ganadores) > 0){
  661. $flag = true;
  662. $disabled = 'disabled';
  663. }
  664. foreach ($finalistas as $proyecto) {
  665. $lugar = verificalugar($ganadores, $proyecto['idproyecto']);
  666. if ($proyecto['categoria'] == $categoria['idcategoria']) {
  667. $divGanadores .= '<div class="w-100 d-flex flex-row justify-content-between renglon py-2">
  668. <div class="w-75 text-primary"><b>' . $proyecto['clave'] . '</b> - ' . $proyecto['proyecto'] . '</div>
  669. <div class="w-25 d-flex flex-row justify-content-center">';
  670. for ($cont = 1; $cont <= 3; $cont++){
  671. if ($lugar == $cont)
  672. $check = 'checked';
  673. else
  674. $check = '';
  675. $divGanadores .= '<div class="flex-fill text-center align-self-center">
  676. <input type="radio" id="cat' . $categoria['idcategoria'] . '-row' . $row . '-' . $cont . '" name="cat' . $categoria['idcategoria'] . '-row' . $row . '" data-table="' . $categoria['idcategoria'] . '" data-col="' . $cont . '" value="' . $categoria['idcategoria'] . '-' . $proyecto['idproyecto'] . '" ' . $check .' ' . $disabled . '/>
  677. <label for="cat' . $categoria['idcategoria'] . '-row' . $row . '-' . $cont . '" class="ing-insignia3 elemSelec ' . Colores::getLugarColor($cont) . ' ';
  678. if ($check == '' && $flag)
  679. $divGanadores .= ' disabledElem ';
  680. $divGanadores .= '"></label>
  681. </div>';
  682. }
  683. $divGanadores .= '</div>
  684. </div>';
  685. $row++;
  686. }
  687. }
  688. $divGanadores .= '</div>';
  689. }
  690. $divGanadores .= '</div>
  691. <div id="errorLblAsignar" class="mt-3 indivisa-text-bold-italic display-6 text-center" style="display:none"></div>
  692. <div id="secBtns">
  693. <div class="d-flex mx-auto justify-content-center pt-3">';
  694. if ($flag)
  695. $divGanadores .= '<button type="button" class="btn btn-ing btn-outline-primary arrow mx-2" id="btnAsignar" data-tipo="2">Editar</button>';
  696. else
  697. $divGanadores .= '<button type="button" class="btn btn-ing btn-outline-primary arrow mx-2" id="btnAsignar" data-tipo="2">Publicar</button>';
  698. if ($flag)
  699. $estilo = 'style="display:none;"';
  700. else
  701. $estilo = '';
  702. $divGanadores .= '<button type="reset" class="btn btn-ing btn-outline-danger arrow mx-2" id="btnLimpiar" data-tipo="2" ' . $estilo .'>Cancelar</button>
  703. </div>
  704. </div>';
  705. } else {
  706. $divGanadores = '<div class="fondoAnuncio mt-2">
  707. <div class="d-flex flex-column justify-content-center align-items-center">
  708. <div class="text-primary text-center mt-5 tit">¡Lo sentimos!</div>
  709. <div class="text-primary text-center small m-3 msg">Los ganadores aún no han sido publicados</div>
  710. <div class="display-1 text-danger mb-4 ing-no-cargado"></div>
  711. </div>
  712. </div>';
  713. }
  714. } else {
  715. $divGanadores .= '<div class="row align-items-center justify-content-end">';
  716. foreach ($categorias as $categoria){
  717. $ganadores = Proyecto::getProyectosGanadores($pdo, $categoria['idcategoria'],$id);
  718. $divGanadores .= '<div class="col-sm-6">
  719. <div class="d-flex flex-row justify-content-center align-items-end px-5">
  720. <div>
  721. <div class="grad2 text-center"><img class="segundo" src="img/secciones/reportes/copa2.svg"></div>
  722. <div class="flex-fill bg-azul5 segundo px-4 pt-1">
  723. <svg viewbox="0 0 100 100"><path d="M0,0 a1,1 0 0,0 100,0" class="medioCirc" /><text x="40" y="30" class="indivisa-text-black display-6 textMedioCirc">2°</text></svg>
  724. </div>
  725. </div>
  726. <div>
  727. <div class="grad1 text-center"><img class="primero" src="img/secciones/reportes/copa1.svg"></div>
  728. <div class="flex-fill bg-azul4 primero px-4 pt-1">
  729. <svg viewbox="0 0 100 100"><path d="M0,0 a1,1 0 0,0 100,0" class="medioCirc" /><text x="40" y="30" class="indivisa-text-black display-6 textMedioCirc">1°</text></svg>
  730. </div>
  731. </div>
  732. <div>
  733. <div class="grad3 text-center"><img class="tercero" src="img/secciones/reportes/copa3.svg"></div>
  734. <div class="flex-fill bg-azul6 tercero px-4 pt-1">
  735. <svg viewbox="0 0 100 100"><path d="M0,0 a1,1 0 0,0 100,0" class="medioCirc" /><text x="40" y="30" class="indivisa-text-black display-6 textMedioCirc">3°</text></svg>
  736. </div>
  737. </div>
  738. </div>
  739. <div class="w-100 bg-primary p-2 lugarCat text-center text-white">' . $categoria['categoria'] . '</div>
  740. <div class="container">';
  741. for ($cont = 0; $cont < count($ganadores); $cont++){
  742. if ($cont < (count($ganadores) -1))
  743. $borde = 'lugarBorde';
  744. else
  745. $borde = '';
  746. $divGanadores .= '<div class="row px-5">
  747. <div class="grad' . $ganadores[$cont]['lugar'] . ' lugarNum col-sm-2 text-primary text-center">' . $ganadores[$cont]['lugar'] . '°</div>
  748. <div class="col-sm-10 d-flex flex-row justify-content-start align-items-center text-primary px-0 ' . $borde .'">
  749. <div class="lugarClave mx-2">' . $ganadores[$cont]['clave'] . '</div><div class="mx-2">' . $ganadores[$cont]['proyecto'] . '</div>
  750. </div>
  751. </div>';
  752. }
  753. $divGanadores .= '</div>
  754. </div>';
  755. }
  756. $divGanadores .= '</div>';
  757. }
  758. if ($asigna){
  759. if ($flag)
  760. return '<div id="msgPrincipal" class="indivisa-text-italic display-5 text-center text-primary pb-4">Los ganadores del concurso ya han sido asignados<br><div class="small">(Pueden ser modificados únicamente antes del ' . Fechas::romanizaFecha($fechaGanadores['fechas']) . ')</div></div>' . $divGanadores;
  761. else
  762. return '<div id="msgPrincipal" class="indivisa-text-italic display-5 text-center text-primary pb-4">Selecciona a los ganadores del concurso para poder hacerlos públicos</div>' . $divGanadores;
  763. } else
  764. return $divGanadores;
  765. } else
  766. return 'error';
  767. }
  768. }
  769. function lugar($lugar){
  770. $datos= array();
  771. switch ($lugar){
  772. case 1: $datos = array('color' => 'gold', 'orden' => 'order-1 order-sm-2', 'bloque' => 'Central'); break;
  773. case 2: $datos = array('color' => 'silver', 'orden' => 'order-2 order-sm-1', 'bloque' => 'Izq'); break;
  774. case 3: $datos = array('color' => 'bronze', 'orden' => 'order-3 order-sm-3', 'bloque' => 'Der'); break;
  775. }
  776. return $datos;
  777. }
  778. function verificalugar($ganadores, $idproyecto){
  779. $lugar = 0;
  780. if (in_array($idproyecto, array_column($ganadores, 'idproyecto'))){
  781. $cont = 0;
  782. while ($cont < count($ganadores)){
  783. if ($ganadores[$cont]['idproyecto'] == $idproyecto){
  784. $lugar = $ganadores[$cont]['lugar'];
  785. $cont = count($ganadores);
  786. } else
  787. $cont++;
  788. }
  789. }
  790. return $lugar;
  791. }
  792. /********** INSERT, DELETE, UPDATE **********/
  793. function actualizaFinalista($pdo, $proyecto, $status){
  794. $actualizado = false;
  795. $stmt = $pdo->prepare('Select * from cidit_fu_finalistas(:proyecto,:status)');
  796. $stmt->bindParam(':proyecto', $proyecto);
  797. $stmt->bindParam(':status', $status, PDO::PARAM_BOOL);
  798. if($stmt->execute())
  799. $actualizado = true;
  800. $stmt->closeCursor();
  801. $stmt = null;
  802. return $actualizado;
  803. }
  804. function agregaGanador($pdo, $categoria, $proyecto, $lugar){
  805. $agregado = false;
  806. $stmt = $pdo->prepare('Select * from cidit_fi_ganador(:categoria,:proyecto,:lugar)');
  807. $stmt->bindParam(':categoria', $categoria);
  808. $stmt->bindParam(':proyecto', $proyecto);
  809. $stmt->bindParam(':lugar', $lugar);
  810. if($stmt->execute())
  811. $agregado = true;
  812. $stmt->closeCursor();
  813. $stmt = null;
  814. return $agregado;
  815. }
  816. function eliminaGanador($pdo, $categoria, $proyecto, $lugar){
  817. $eliminado = false;
  818. $stmt = $pdo->prepare('Select * from cidit_fd_ganador(:categoria,:proyecto,:lugar)');
  819. $stmt->bindParam(':categoria', $categoria);
  820. $stmt->bindParam(':proyecto', $proyecto);
  821. $stmt->bindParam(':lugar', $lugar);
  822. if($stmt->execute())
  823. $eliminado = true;
  824. $stmt->closeCursor();
  825. $stmt = null;
  826. return $eliminado;
  827. }