asigna_action.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. <?php
  2. /*
  3. SUBTIPO
  4. * 1 - Revisores
  5. * 2 - Proyectos
  6. */
  7. require_once '../classes/Concurso.php';
  8. require_once '../classes/Etapa.php';
  9. require_once '../classes/Proyecto.php';
  10. require_once '../classes/Usuario.php';
  11. require_once '../classes/Asignacion.php';
  12. require_once '../include/bd_pdo.php';;
  13. if(!isset($_POST['tipo'])){
  14. $return['error'] = 'Error! No se recibieron los datos.';
  15. } else {
  16. if (!is_null($pdo)){
  17. switch ($_POST['tipo']){
  18. case 1: //Despliega resumen de asignaciones
  19. $asignaciones = Etapa::getAsignacionesXEtapa($pdo, $_POST['concurso'], $_POST['etapa']);
  20. if (count($asignaciones) > 0) {
  21. $temp = array_column($asignaciones, 'idusuario');
  22. $temp = array_unique($temp, SORT_NUMERIC);
  23. $usuarios = array();
  24. foreach ($temp as $user){
  25. array_push($usuarios, array('idusuario' => $user) + Usuario::getNombreUsuario($pdo, $user));
  26. }
  27. array_multisort(array_column($usuarios, 'apellidos'),SORT_ASC,$usuarios);
  28. $proyectos = array();
  29. $temp = array_column($asignaciones, 'idproyecto');
  30. $temp = array_unique($temp, SORT_NUMERIC);
  31. foreach ($temp as $proy){
  32. array_push($proyectos, array('idproyecto' => $proy) + Proyecto::getProyectoXID($pdo, $proy));
  33. }
  34. array_multisort(array_column($proyectos, 'clave'),SORT_ASC,$proyectos);
  35. $html = '';
  36. switch ($_POST['subtipo']){
  37. case 1:
  38. $tipo = '';
  39. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  40. switch($etapa){
  41. case 'REVISION': $tipo = 'revisor'; break;
  42. case 'EVALUACION': $tipo = 'evaluador'; break;
  43. }
  44. $html = generaTabPrincipal($tipo, $usuarios, $proyectos, $asignaciones);
  45. break;
  46. case 2:
  47. $html = generaTabPrincipal('proyecto', $proyectos, $usuarios, $asignaciones);
  48. break;
  49. }
  50. $return['main'] = $html;
  51. } else
  52. $return['error'] = 'No fue posible obtener los datos';
  53. break;
  54. case 2: //Genera dropdownlist de usuarios/proyectos principales
  55. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  56. $asignaciones = Etapa::getAsignacionesXEtapa($pdo, $_POST['concurso'], $_POST['etapa']);
  57. $categorias = Concurso::getCategoriasConcurso($pdo, $_POST['concurso']);
  58. switch($etapa){
  59. case 'REVISION':
  60. switch ($_POST['subtipo']){
  61. case 1:
  62. if (count($categorias) > 0){
  63. $niveles = array_column($categorias, 'nivel');
  64. $niveles = array_unique($niveles);
  65. $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles);
  66. $usuariosAsignados = array();
  67. if (count($asignaciones) > 0) {
  68. $temp = array_column($asignaciones, 'idusuario');
  69. $usuariosAsignados = array_unique($temp, SORT_NUMERIC);
  70. }
  71. foreach ($usuariosAsignados as $user){
  72. reset($usuarios);
  73. while ($temp = current($usuarios)){
  74. if ($temp['idusuario'] == $user){
  75. $index = key($usuarios);
  76. unset($usuarios[$index]);
  77. end($usuarios);
  78. next($usuarios);
  79. } else
  80. next($usuarios);
  81. }
  82. }
  83. if (count($usuarios) > 0){
  84. $html = '';
  85. foreach ($usuarios as $user){
  86. $nombre = mb_convert_case(mb_strtolower($user['apellidos'] . ' ' . $user['nombre']), MB_CASE_TITLE, "UTF-8");
  87. $html .= '<li data-id="' . $user['idusuario'] . '-' . $user['idinterno'] . '" data-nivel="' . $user['niveles'] . '">' . $nombre . '</li>';
  88. }
  89. $return['lista'] = $html;
  90. } else
  91. if (count($usuariosAsignados) > 0)
  92. $return['error'] = 'Todos los profesores tienen al menos un proyecto asignado.<br>Modifica en la sección editar.';
  93. else
  94. $return['error'] = 'No fue posible obtener a los revisores';
  95. } else
  96. $return['error'] = 'No fue posible obtener a los revisores';
  97. break;
  98. case 2:
  99. $proyectosAsignados = array();
  100. if (count($asignaciones) > 0) {
  101. $temp = array_column($asignaciones, 'idproyecto');
  102. $proyectosAsignados = array_unique($temp, SORT_NUMERIC);
  103. }
  104. $rol = Usuario::getIdRol($pdo, 'REVISOR');
  105. $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['concurso'], 0, 'clave');
  106. foreach ($proyectosAsignados as $proy){
  107. reset($proyectos);
  108. while ($temp = current($proyectos)){
  109. if ($temp['idproyecto'] == $proy){
  110. $index = key($proyectos);
  111. unset($proyectos[$index]);
  112. end($proyectos);
  113. next($proyectos);
  114. } else
  115. next($proyectos);
  116. }
  117. }
  118. if (count($proyectos) > 0){
  119. $html = '';
  120. foreach ($proyectos as $proy){
  121. $nivel = 0;
  122. reset($categorias);
  123. while ($temp = current($categorias)){
  124. if ($temp['idcategoria'] == $proy['categoria']){
  125. $nivel = $temp['nivel'];
  126. end($categorias);
  127. next($categorias);
  128. } else
  129. next($categorias);
  130. }
  131. $html .= '<li data-id="' . $proy['idproyecto'] . '" data-nivel="' . $nivel . '"><b>' . $proy['clave'] . '</b> - ' . $proy['proyecto'] . '</li>';
  132. }
  133. $return['lista'] = $html;
  134. } else
  135. if (count($proyectosAsignados) > 0)
  136. $return['error'] = 'Todos los proyectos autorizados tienen al menos un revisor asignado.<br>Modifica en la sección editar.';
  137. else
  138. $return['error'] = 'No se han autorizado aún los proyectos';
  139. break;
  140. }
  141. break;
  142. case 'EVALUACION':
  143. switch ($_POST['subtipo']){
  144. case 1:
  145. if (count($categorias) > 0){
  146. $niveles = array_column($categorias, 'nivel');
  147. $niveles = array_unique($niveles);
  148. $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles);
  149. $usuariosAsignados = array();
  150. if (count($asignaciones) > 0) {
  151. $temp = array_column($asignaciones, 'idusuario');
  152. $usuariosAsignados = array_unique($temp, SORT_NUMERIC);
  153. }
  154. foreach ($usuariosAsignados as $user){
  155. reset($usuarios);
  156. while ($temp = current($usuarios)){
  157. if ($temp['idusuario'] == $user){
  158. $index = key($usuarios);
  159. unset($usuarios[$index]);
  160. end($usuarios);
  161. next($usuarios);
  162. } else
  163. next($usuarios);
  164. }
  165. }
  166. if (count($usuarios) > 0){
  167. $html = '';
  168. foreach ($usuarios as $user){
  169. $nombre = mb_convert_case(mb_strtolower($user['apellidos'] . ' ' . $user['nombre']), MB_CASE_TITLE, "UTF-8");
  170. $html .= '<li data-id="' . $user['idusuario'] . '-' . $user['idinterno'] . '" data-nivel="' . $user['niveles'] . '">' . $nombre . '</li>';
  171. }
  172. $return['lista'] = $html;
  173. } else
  174. if (count($usuariosAsignados) > 0)
  175. $return['error'] = 'Todos los profesores tienen al menos un proyecto asignado.<br>Modifica en la sección editar.';
  176. else
  177. $return['error'] = 'No fue posible obtener a los evaluadores';
  178. } else
  179. $return['error'] = 'No fue posible obtener a los evaluadores';
  180. break;
  181. case 2:
  182. $proyectosAsignados = array();
  183. if (count($asignaciones) > 0) {
  184. $temp = array_column($asignaciones, 'idproyecto');
  185. $proyectosAsignados = array_unique($temp, SORT_NUMERIC);
  186. }
  187. $rol = Usuario::getIdRol($pdo, 'REVISOR');
  188. $proyectos = Proyecto::getProyectosAutorizados($pdo, $_POST['concurso'], 0, 'clave');
  189. foreach ($proyectosAsignados as $proy){
  190. reset($proyectos);
  191. while ($temp = current($proyectos)){
  192. if ($temp['idproyecto'] == $proy){
  193. $index = key($proyectos);
  194. unset($proyectos[$index]);
  195. end($proyectos);
  196. next($proyectos);
  197. } else
  198. next($proyectos);
  199. }
  200. }
  201. if (count($proyectos) > 0){
  202. $html = '';
  203. foreach ($proyectos as $proy){
  204. $nivel = 0;
  205. reset($categorias);
  206. while ($temp = current($categorias)){
  207. if ($temp['idcategoria'] == $proy['categoria']){
  208. $nivel = $temp['nivel'];
  209. end($categorias);
  210. next($categorias);
  211. } else
  212. next($categorias);
  213. }
  214. $html .= '<li data-id="' . $proy['idproyecto'] . '" data-nivel="' . $nivel . '"><b>' . $proy['clave'] . '</b> - ' . $proy['proyecto'] . '</li>';
  215. }
  216. $return['lista'] = $html;
  217. } else
  218. if (count($proyectosAsignados) > 0)
  219. $return['error'] = 'Todos los proyectos autorizados tienen al menos un evaluador asignado.<br>Modifica en la sección editar.';
  220. else
  221. $return['error'] = 'No se han publicado aún los proyectos finalistas';
  222. break;
  223. }
  224. break;
  225. }
  226. break;
  227. case 3: //Genera lista de usuarios/proyectos secundarios
  228. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  229. $niveles = explode(',',$_POST['nivel']);
  230. switch ($_POST['subtipo']){
  231. case 1:
  232. $html = generaProyectos($pdo, $_POST['concurso'], $etapa, $niveles);
  233. if (empty($html))
  234. $return['error'] = 'No hay proyectos disponibles a mostrar';
  235. else
  236. $return['elegibles'] = $html;
  237. break;
  238. case 2:
  239. $html = generaUsuarios($pdo, $niveles);
  240. if (empty($html))
  241. $return['error'] = 'No hay usuarios disponibles a mostrar';
  242. else
  243. $return['elegibles'] = $html;
  244. break;
  245. default :
  246. $return['error'] = 'No ahy información disponible a mostrar';
  247. }
  248. break;
  249. case 4: //Asignar proyectos-asesor/evaluador
  250. $elegidos = explode(',',$_POST['elegidos']);
  251. switch ($_POST['subtipo']){
  252. case 1:
  253. $cont = 0;
  254. $asignado = true;
  255. $ids = explode('-',$_POST['princ']);
  256. if ($ids[0] != 0){
  257. $usr = $ids[0];
  258. $puesto = Usuario::getPuestoXClave($pdo, 'COMITE');
  259. if (count($puesto) > 0){
  260. if (!Usuario::tienePuesto($pdo, $usr,$puesto['idpuesto']))
  261. Usuario::agregaUsuarioPuesto($pdo,$usr,$puesto['idpuesto']);
  262. }
  263. } else
  264. $usr = Asignacion::agregaUsuario($pdo, $ids[1], mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])), $_POST['concurso']);
  265. if ($usr != 0) {
  266. while ($cont < count($elegidos) && $asignado){
  267. $asignado = Asignacion::agregaAsignacion($pdo, $_POST['etapa'], $elegidos[$cont], $usr);
  268. $cont++;
  269. }
  270. if (!$asignado){
  271. foreach ($elegidos as $elegido){
  272. Asignacion::eliminaAsignacionXDatos($pdo, $_POST['etapa'], $elegido, $usr);
  273. }
  274. if (count($elegidos) == 1)
  275. $return['error'] = 'No fue posible asignarle a <span class="text-azul1">' . $_POST['texto'] . '</span> el proyecto';
  276. else
  277. $return['error'] = 'No fue posible asignarle a <span class="text-azul1">' . $_POST['texto'] . '</span> los proyectos';
  278. } else {
  279. if (count($elegidos) == 1)
  280. $return['asigna'] = 'Se asignó exitosamente el proyecto a <span class="text-azul1">' . $_POST['texto'] . '</span>';
  281. else
  282. $return['asigna'] = 'Se asignaron exitosamente los proyectos a <span class="text-azul1">' . $_POST['texto'] . '</span>';
  283. }
  284. } else
  285. $return['error'] = 'No fue posible asignarle a <span class="text-azul1">' . $_POST['texto'] . '</span> los proyectos';
  286. break;
  287. case 2:
  288. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  289. $tipo = '';
  290. switch($etapa){
  291. case 'REVISION': $tipo = 'revisor'; break;
  292. case 'EVALUACION': $tipo = 'evaluador'; break;
  293. }
  294. $cont = 0;
  295. $asignado = true;
  296. $todos = true;
  297. while($ele = current($elegidos)){
  298. $ids = explode('-',$ele);
  299. $index = key($elegidos);
  300. if ($ids[0] != 0){
  301. $puesto = Usuario::getPuestoXClave($pdo, 'COMITE');
  302. if (count($puesto) > 0){
  303. if (!Usuario::tienePuesto($pdo, $ids[0],$puesto['idpuesto']))
  304. Usuario::agregaUsuarioPuesto($pdo,$ids[0],$puesto['idpuesto']);
  305. }
  306. $elegidos[$index] = $ids[0];
  307. } else {
  308. $usr = Asignacion::agregaUsuario($pdo, $ids[1], mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa'])), $_POST['concurso']);
  309. if ($usr == 0) {
  310. unset($elegidos[$index]);
  311. $todos = false;
  312. } else {
  313. $elegidos[$index] = $usr;
  314. }
  315. }
  316. next($elegidos);
  317. }
  318. while ($cont < count($elegidos) && $asignado){
  319. $asignado = Asignacion::agregaAsignacion($pdo, $_POST['etapa'], $_POST['princ'], $elegidos[$cont]);
  320. $cont++;
  321. }
  322. if (!$asignado){
  323. foreach ($elegidos as $elegido){
  324. Asignacion::eliminaAsignacionXDatos($pdo, $_POST['etapa'], $_POST['princ'], $elegido);
  325. }
  326. if (count($elegidos) == 1)
  327. $return['error'] = 'No fue posible asignarle un ' . $tipo . ' al proyecto <span class="text-azul1">' . $_POST['texto'] . '</span>';
  328. else
  329. $return['error'] = 'No fue posible asignarle ' . $tipo . 'es al proyecto <span class="text-azul1">' . $_POST['texto'] . '</span>';
  330. } else {
  331. if (count($elegidos) == 1)
  332. if ($todos)
  333. $return['asigna'] = 'Se asignó exitosamente el ' . $tipo . ' al proyecto <span class="text-azul1">' . $_POST['texto'] . '</span>';
  334. else
  335. $return['error'] = 'No fue posible asignarle un ' . $tipo . ' al proyecto <span class="text-azul1">' . $_POST['texto'] . '</span>';
  336. else
  337. if ($todos)
  338. $return['asigna'] = 'Se asignaron exitosamente los ' . $tipo . 'es al proyecto <span class="text-azul1">' . $_POST['texto'] . '</span>';
  339. else
  340. $return['asigna'] = 'Se asignaron algunos de los ' . $tipo . 'es al proyecto <span class="text-azul1">' . $_POST['texto'] . '.<br>No fue posible asignarlos a todos.</span>';
  341. }
  342. break;
  343. }
  344. break;
  345. case 5: //Edita una asignación
  346. break;
  347. case 6: //Eliminar asignación
  348. $elegidos = explode(',',$_POST['elegidos']);
  349. $noBorrar = array();
  350. $asignacionesTotales = 0;
  351. foreach ($elegidos as $elegido) {
  352. $asignaciones = Asignacion::getAsignaciones($pdo, $_POST['subtipo'], $elegido, $_POST['etapa'], $_POST['concurso']);
  353. foreach($asignaciones as $asignado){
  354. if (Asignacion::tieneEvaluaciones($pdo, $asignado['idasignacion'])){
  355. array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido));
  356. } else
  357. if (!Asignacion::eliminaAsignacion ($pdo, $asignado['idasignacion']))
  358. array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido));
  359. $asignacionesTotales++;
  360. }
  361. }
  362. if (count($noBorrar) == 0){
  363. switch($_POST['subtipo']){
  364. case 1:
  365. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  366. $tipo = '';
  367. switch($etapa){
  368. case 'REVISION': $tipo = 'revisor'; break;
  369. case 'EVALUACION': $tipo = 'evaluador'; break;
  370. }
  371. if (count($elegidos) == 1)
  372. $return['eliminados'] = 'Se borraron las asignaciones del ' . $tipo;
  373. else
  374. $return['eliminados'] = 'Se borraron las asignaciones de todos los ' . $tipo . 'es seleccionados';
  375. break;
  376. case 2:
  377. if (count($elegidos) == 1)
  378. $return['eliminados'] = 'Se borraron las asignaciones del proyecto';
  379. else
  380. $return['eliminados'] = 'Se borraron las asignaciones de todos los proyectos seleccionados';
  381. break;
  382. }
  383. } else {
  384. if (count($noBorrar) < $asignacionesTotales){
  385. switch($_POST['subtipo']){
  386. case 1:
  387. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  388. $tipo = '';
  389. switch($etapa){
  390. case 'REVISION': $tipo = 'revisor'; break;
  391. case 'EVALUACION': $tipo = 'evaluador'; break;
  392. }
  393. if (count($elegidos) == 1)
  394. $return['faltan'] = 'No fue posible eliminar todas las asignaciones del ' . $tipo;
  395. else
  396. $return['faltan'] = 'No fue posible eliminar todas las asignaciones de todos los ' . $tipo . 'es seleccionados';
  397. break;
  398. case 2:
  399. if (count($elegidos) == 1)
  400. $return['faltan'] = 'No fue posible eliminar todas las asignaciones del proyecto';
  401. else
  402. $return['faltan'] = 'No fue posible eliminar todas las asignaciones de todos los proyectos seleccionados';
  403. break;
  404. }
  405. } else {
  406. switch($_POST['subtipo']){
  407. case 1:
  408. $etapa = mb_strtoupper(Etapa::getClaveEtapaXID($pdo, $_POST['etapa']));
  409. $tipo = '';
  410. switch($etapa){
  411. case 'REVISION': $tipo = 'revisor'; break;
  412. case 'EVALUACION': $tipo = 'evaluador'; break;
  413. }
  414. if (count($elegidos) == 1)
  415. $return['error'] = 'No fue posible eliminar ninguna asignación del ' . $tipo;
  416. else
  417. $return['error'] = 'No fue posible eliminar ninguna asignación de los ' . $tipo . 'es seleccionados';
  418. break;
  419. case 2:
  420. if (count($elegidos) == 1)
  421. $return['error'] = 'No fue posible eliminar ninguna asignación del proyecto';
  422. else
  423. $return['error'] = 'No fue posible eliminar ninguna asignación de los proyectos seleccionados';
  424. break;
  425. }
  426. }
  427. }
  428. break;
  429. }
  430. } else
  431. $return['error'] = 'No fue posible obtener los datos';
  432. }
  433. $return['json'] = json_encode($return);
  434. echo json_encode($return);
  435. function generaTabPrincipal($tab, $principal, $secundario, $datos){
  436. $html = '';
  437. $html = '<div class="accordion" id="acordeon' . ucfirst($tab) . '">
  438. <div class="row w-100 justify-content-between align-items-start">';
  439. $cont = 1;
  440. foreach ($principal as $princ){
  441. $lista = '';
  442. $id = 0;
  443. switch (mb_strtoupper($tab)){
  444. case 'REVISOR':
  445. case 'EVALUADOR':
  446. $textoPrinc = mb_convert_case(mb_strtolower($princ['apellidos'] . ' ' . $princ['nombre']), MB_CASE_TITLE, "UTF-8");
  447. $respuesta = array_filter($datos, function($arreglo) use($princ) {
  448. return $arreglo['idusuario'] == $princ['idusuario'];
  449. });
  450. foreach ($respuesta as $resp){
  451. $temp = array_filter($secundario, function($arreglo) use($resp) {
  452. return $arreglo['idproyecto'] == $resp['idproyecto'];
  453. });
  454. $temp2 = current($temp);
  455. $lista .= '<div class="lista">' . $temp2['clave'] . ' - ' . $temp2['proyecto'] . '</div>';
  456. }
  457. $id = $princ['idusuario'];
  458. break;
  459. case 'PROYECTO':
  460. $textoPrinc = $princ['clave'] . ' - ' . $princ['proyecto'];
  461. $respuesta = array_filter($datos, function($arreglo) use($princ) {
  462. return $arreglo['idproyecto'] == $princ['idproyecto'];
  463. });
  464. foreach ($respuesta as $resp){
  465. $temp = array_filter($secundario, function($arreglo) use($resp) {
  466. return $arreglo['idusuario'] == $resp['idusuario'];
  467. });
  468. $temp2 = current($temp);
  469. $lista .= '<div class="lista">' . mb_convert_case(mb_strtolower($temp2['apellidos'] . ' ' . $temp2['nombre']), MB_CASE_TITLE, "UTF-8") . '</div>';
  470. }
  471. $id = $princ['idproyecto'];
  472. break;
  473. }
  474. $html .= '<div class="col-sm-6">
  475. <div class="titulo">
  476. <div class=" d-flex flex-column justify-content-between position-relative p-2" id="titulo' . ucfirst($tab) . $cont . '" data-id="' . $id . '">
  477. <span class="ing-cancelar text-danger position-absolute elimIcon"></span>
  478. <span class="ing-editar text-primary position-absolute editIcon"></span>
  479. <div class="dato">' . $textoPrinc . '</div>
  480. <div class="detalle"><span data-toggle="collapse" data-target="#texto' . ucfirst($tab) . $cont . '" class="small rounded ver btn-extra py-1 px-2"><span class="ing-ojo mr-1"></span><span class="msg">Ver Detalle</span></span></div>
  481. </div>
  482. <div id="texto' . ucfirst($tab) . $cont . '" class="collapse texto bg-light py-2 px-4" aria-labelledby="titulo' . ucfirst($tab) . $cont . '" data-parent="#acordeon' . ucfirst($tab) . '">'. $lista . '</div>
  483. </div>
  484. </div>';
  485. $cont++;
  486. }
  487. $html .= '</div>
  488. </div>';
  489. return $html;
  490. }
  491. function generaProyectos($pdo, $concurso, $etapa, $niveles){
  492. $html = '';
  493. $categorias = array();
  494. $tempCategorias = Concurso::getCategoriasConcurso($pdo, $concurso);
  495. foreach ($tempCategorias as $temp){
  496. reset($niveles);
  497. while ($nivel = current($niveles)){
  498. if ($temp['nivel'] == $nivel){
  499. array_push($categorias, $temp);
  500. end($niveles);
  501. next($niveles);
  502. } else
  503. next($niveles);
  504. }
  505. }
  506. if (count($categorias) > 0){
  507. $despliega = '';
  508. if (count($categorias) < 3)
  509. $despliega = 'd-flex flex-row';
  510. else
  511. $despliega = 'card-columns';
  512. $html = '<div class="' . $despliega . ' categorias">';
  513. foreach ($categorias as $categoria){
  514. switch($etapa){
  515. case 'REVISION':
  516. $proyectos = Proyecto::getProyectosAutorizados($pdo, $concurso, $categoria['idcategoria'], 'clave');
  517. break;
  518. case 'EVALUACION':
  519. $proyectos = Proyecto::getProyectosFinalistas($pdo, $concurso, $categoria['idcategoria'], 'clave');
  520. break;
  521. }
  522. $html .= '<div class="card">
  523. <div class="my-3 titulo p-2 text-center">' . $categoria['categoria'] . '</div>
  524. <div>';
  525. if (count($proyectos) > 0){
  526. foreach ($proyectos as $proyecto) {
  527. $html .= '<div class="renglon d-flex flex-row justify-content-start align-items-start my-2">
  528. <div class="text-center mr-2 mt-1">
  529. <input type="checkbox" id="op' . $proyecto['idproyecto'] . '" name="op' . $proyecto['idproyecto'] . '" value="' . $proyecto['idproyecto'] . '"/>
  530. <label for="op' . $proyecto['idproyecto'] . '" class="ing-revision-cartel final"></label>
  531. </div>
  532. <div class="flex-fill text-primary"><b>' . $proyecto['clave'] . '</b> - ' . $proyecto['proyecto'] . '</div>
  533. </div>';
  534. }
  535. } else
  536. $html .= '<div class="display-6 text-secondary text-center">No hay ningún proyecto aprobado</div>';
  537. $html .= '</div>
  538. </div>';
  539. }
  540. $html .= '</div>';
  541. } else
  542. $html = '';
  543. return $html;
  544. }
  545. function generaUsuarios($pdo, $niveles){
  546. $html = '';
  547. $usuarios = Asignacion::getUsuariosAsignables($pdo, $niveles);
  548. if (count($usuarios) > 0) {
  549. $colClass='';
  550. $num = count($usuarios);
  551. switch ($num){
  552. case $num <= 5:
  553. $numCol = $num;
  554. $colClass = 'col-sm-12';
  555. break;
  556. case $num > 5 && $num <= 10:
  557. $numCol = ceil(count($usuarios) / 2);
  558. $colClass = 'col-sm-6';
  559. break;
  560. case $num > 10:
  561. $numCol = ceil(count($usuarios) / 3);
  562. $colClass = 'col-sm-4';
  563. break;
  564. }
  565. $cont = 1;
  566. $cambiaColumna = true;
  567. $html = '<div class="row">';
  568. foreach ($usuarios as $usuario){
  569. if($cambiaColumna){
  570. $html .= '<div class="' . $colClass . '">';
  571. $cambiaColumna = false;
  572. }
  573. $nombre = mb_convert_case(mb_strtolower($usuario['apellidos'] . ' ' . $usuario['nombre']), MB_CASE_TITLE, "UTF-8");
  574. $html .= '<div class="renglon d-flex flex-row justify-content-start align-items-center my-2">
  575. <div class="text-center mr-2 mt-1">
  576. <input type="checkbox" id="op' . $usuario['idusuario'] . '-' . $usuario['idinterno'] . '" name="op' . $usuario['idusuario'] . '-' . $usuario['idinterno'] . '" value="' . $usuario['idusuario'] . '-' . $usuario['idinterno'] . '"/>
  577. <label for="op' . $usuario['idusuario'] . '-' . $usuario['idinterno'] . '" class="ing-revision-cartel final"></label>
  578. </div>
  579. <div class="flex-fill text-primary">' . $nombre . '</div>
  580. </div>';
  581. $cont++;
  582. if ($cont > $numCol){
  583. $cambiaColumna = true;
  584. $cont = 1;
  585. }
  586. if($cambiaColumna)
  587. $html .= '</div>';
  588. }
  589. if(!$cambiaColumna)
  590. $html .= '</div>';
  591. $html .= '</div>';
  592. } else
  593. $html = '';
  594. return $html;
  595. }