asigna_action.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <?php
  2. require_once '../classes/Concurso.php';
  3. require_once '../classes/Etapa.php';
  4. require_once '../classes/Proyecto.php';
  5. require_once '../classes/Usuario.php';
  6. require_once '../classes/Asignacion.php';
  7. require_once '../include/bd_pdo.php';
  8. if(!isset($_POST['tipo'])){
  9. $return['error'] = 'Error! No se recibieron los datos.';
  10. } else {
  11. if (!is_null($pdo)){
  12. $etapa = Etapa::getIdEtapa($pdo, 'EVALUACION');
  13. switch ($_POST['tipo']){
  14. case 1: //Despliega resumen de asignaciones
  15. /*$fechasAsignacion = Concurso::getFechaXEtapa($pdo, $_POST['concurso'],$etapa);
  16. if (isset($fechasAsignacion['fechas']) && $fechasAsignacion['fechas'] != 'Por definir'){*/
  17. if (true) {
  18. $asignaciones = Asignacion::getAsignaciones($pdo, 'ETAPA', null, $etapa, $_POST['concurso']);
  19. if (count($asignaciones) > 0) {
  20. $temp = array_column($asignaciones, 'idusuario');
  21. $temp = array_unique($temp, SORT_NUMERIC);
  22. $usuarios = array();
  23. foreach ($temp as $user){
  24. array_push($usuarios, array('idusuario' => $user) + Usuario::getNombreUsuario($pdo, $user));
  25. }
  26. array_multisort(array_column($usuarios, 'apellidos'),SORT_ASC,$usuarios);
  27. $proyectos = array();
  28. $temp = array_column($asignaciones, 'idproyecto');
  29. $temp = array_unique($temp, SORT_NUMERIC);
  30. foreach ($temp as $proy){
  31. array_push($proyectos, array('idproyecto' => $proy) + Proyecto::getProyectoXID($pdo, $proy));
  32. }
  33. array_multisort(array_column($proyectos, 'clave'),SORT_ASC,$proyectos);
  34. $html = generaResumen($proyectos, $usuarios, $asignaciones);
  35. $return['main'] = $html;
  36. } else{
  37. $return['icono'] = 'ing-no-cargado text-danger';
  38. $return['error'] = 'Aún no han sido asignados los proyectos';
  39. }
  40. } else {
  41. $return['icono'] = 'ing-eventos text-rojo1';
  42. $return['error'] = 'No ha sido definida la fecha de evaluación de proyectos';
  43. }
  44. break;
  45. case 2: //Genera dropdownlist de proyectos
  46. $asignaciones = Asignacion::getAsignaciones($pdo, 'ETAPA', null, $etapa, $_POST['concurso']);
  47. $proyectosAsignados = array();
  48. if (count($asignaciones) > 0) {
  49. $temp = array_column($asignaciones, 'idproyecto');
  50. $proyectosAsignados = array_unique($temp, SORT_NUMERIC);
  51. }
  52. if ($_POST['carrera'] == 0)
  53. $proyectos = Proyecto::getProyectosConcurso($pdo, $_POST['concurso']);
  54. else
  55. $proyectos = Proyecto::getProyectosConcurso($pdo, $_POST['concurso'], $_POST['carrera']);
  56. foreach ($proyectosAsignados as $proy){
  57. reset($proyectos);
  58. while ($temp = current($proyectos)){
  59. if ($temp['idproyecto'] == $proy){
  60. $index = key($proyectos);
  61. unset($proyectos[$index]);
  62. end($proyectos);
  63. next($proyectos);
  64. } else
  65. next($proyectos);
  66. }
  67. }
  68. if (count($proyectos) > 0){
  69. $html = '';
  70. foreach ($proyectos as $proy){
  71. $nivel = 0;
  72. $html .= '<li data-id="' . $proy['idproyecto'] . '" data-carrera="' . $proy['idcarrera'] . '">' . $proy['proyecto'] . '</li>';
  73. }
  74. $return['lista'] = $html;
  75. } else {
  76. if (count($proyectosAsignados) > 0)
  77. $return['error'] = 'Todos los proyectos finalistas tienen al menos un evaluador asignado.<br>Modifica en la sección editar.';
  78. else
  79. $return['error'] = 'No se han publicado aún los proyectos finalistas';
  80. }
  81. break;
  82. case 3: //Asignar proyectos-evaluador
  83. $seleccionados = json_decode($_POST['elegidos'],true);
  84. $elegidos = array();
  85. $asignado = true;
  86. $todos = true;
  87. $rol = Usuario::getIdRol($pdo, 'EVALUADOR');
  88. foreach ($seleccionados as $evaluador){
  89. if ($evaluador['id'] != 'x') {
  90. $ids = explode('-',$evaluador['id']);
  91. if ($ids[0] != 0){
  92. $usr = $ids[0];
  93. if (count($rol) > 0)
  94. if (!Usuario::tieneRol($pdo, $usr, $rol['idrol'], $_POST['concurso']))
  95. Usuario::agregaUsuarioRol($pdo, $usr, $rol['idrol'], $_POST['concurso']);
  96. } else
  97. $usr = Usuario::agregaUsuarioNuevoInterno($pdo, $ids[1], 'EVALUADOR', $_POST['concurso']);
  98. } else {
  99. $usr = Usuario::agregaUsuarioNuevoExterno($pdo, $evaluador['nombre'], $evaluador['apellidos'], '', $evaluador['email'], 'EVALUADOR', $_POST['concurso']);
  100. }
  101. if ($usr == 0) {
  102. $todos = false;
  103. } else {
  104. array_push($elegidos,$usr);
  105. }
  106. }
  107. $cont = 0;
  108. while ($cont < count($elegidos) && $asignado){
  109. $asignado = Asignacion::agregaAsignacion($pdo, $etapa, $_POST['proyecto'], $elegidos[$cont]);
  110. $cont++;
  111. }
  112. if (!$asignado){
  113. foreach ($elegidos as $elegido){
  114. Asignacion::eliminaAsignacionXDatos($pdo, $etapa, $_POST['proyecto'], $elegido);
  115. }
  116. if (count($elegidos) == 1)
  117. $return['error'] = 'No fue posible asignarle un evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  118. else
  119. $return['error'] = 'No fue posible asignarle evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  120. } else {
  121. if (count($elegidos) == 1)
  122. if ($todos)
  123. $return['asigna'] = 'Se asignó exitosamente al evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  124. else
  125. $return['error'] = 'No fue posible asignarle un evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  126. else
  127. if ($todos)
  128. $return['asigna'] = 'Se asignaron exitosamente los evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  129. else
  130. $return['asigna'] = 'Se asignaron algunos de los evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '.<br>No fue posible asignarlos a todos.</span>';
  131. }
  132. break;
  133. case 4: //Consulta un proyecto
  134. $asignados = Asignacion::getAsignaciones($pdo, 'PROYECTO', $_POST['dato'], $etapa, $_POST['concurso']);
  135. if (count($asignados) > 0){
  136. $html = '';
  137. foreach ($asignados as $asignado){
  138. $nombre = Usuario::getNombreUsuario($pdo, $asignado['idusuario']);
  139. $html .= '<div class="d-flex flex-column text-primary mb-2 pb-2 position-relative evaluador col-sm-6">
  140. <input type="hidden" class="id" value="i|' . $asignado['idusuario'] . '" />
  141. <div class="indivisa-text-bold mb-1">' . $nombre['nombre'] . ' ' . $nombre['apellidos'] . '</div>
  142. <span class="text-danger ing-cancelar eliminaUser" onclick="eliminaElemento(this)"></span>
  143. </div>';
  144. $return['elegibles'] = $html;
  145. }
  146. } else
  147. $return['error'] = 'No es posible obtener las asignaciones del proyecto ';
  148. break;
  149. case 5: //Guarda las ediciones
  150. $seleccionados = json_decode($_POST['elegidos'],true);
  151. $asignados = Asignacion::getAsignaciones($pdo, 'PROYECTO', $_POST['proyecto'], $etapa, $_POST['concurso']);
  152. $asignados = array_column($asignados, 'idusuario');
  153. $error = array();
  154. $elegidos = array();
  155. $agregar = array();
  156. foreach ($seleccionados as $elegido) {
  157. $ids = explode('-',$elegido['id']);
  158. if (in_array($ids[0], $asignados)){
  159. if (($key = array_search($ids[0], $asignados)) !== false){
  160. unset($asignados[$key]);
  161. if (($key = array_search($elegido, $seleccionados)) !== false)
  162. unset($seleccionados[$key]);
  163. }
  164. }
  165. }
  166. foreach ($asignados as $asignado) {
  167. if (!Asignacion::eliminaAsignacionXDatos($pdo, $etapa, $_POST['proyecto'], $asignado))
  168. array_push($error,$asignado);
  169. }
  170. $asignado = true;
  171. $todos = true;
  172. foreach ($seleccionados as $evaluador){
  173. if ($evaluador['id'] != 'x') {
  174. $ids = explode('-',$evaluador['id']);
  175. if ($ids[0] != 0){
  176. $usr = $ids[0];
  177. if (count($rol) > 0)
  178. if (!Usuario::tieneRol($pdo, $usr, $rol['idrol'], $_POST['concurso']))
  179. Usuario::agregaUsuarioRol($pdo, $usr, $rol['idrol'], $_POST['concurso']);
  180. } else
  181. $usr = Usuario::agregaUsuarioNuevoInterno($pdo, $ids[1], 'EVALUADOR', $_POST['concurso']);
  182. } else {
  183. $usr = Usuario::agregaUsuarioNuevoExterno($pdo, $evaluador['nombre'], $evaluador['apellidos'], '', $evaluador['email'], 'EVALUADOR', $_POST['concurso']);
  184. }
  185. if ($usr == 0) {
  186. $todos = false;
  187. } else {
  188. array_push($elegidos,$usr);
  189. }
  190. }
  191. $cont = 0;
  192. while ($cont < count($elegidos) && $asignado){
  193. $asignado = Asignacion::agregaAsignacion($pdo, $etapa, $_POST['proyecto'], $elegidos[$cont]);
  194. $cont++;
  195. }
  196. if (!$asignado){
  197. foreach ($elegidos as $elegido){
  198. Asignacion::eliminaAsignacionXDatos($pdo, $etapa, $_POST['proyecto'], $elegido);
  199. }
  200. if (count($elegidos) == 1)
  201. $return['error'] = 'No fue posible asignarle un evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  202. else
  203. $return['error'] = 'No fue posible asignarle evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  204. } else {
  205. if (count($elegidos) == 1)
  206. if ($todos)
  207. $return['asigna'] = 'Se asignó exitosamente al evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  208. else
  209. $return['error'] = 'No fue posible asignarle un evaluador al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  210. else
  211. if ($todos)
  212. $return['asigna'] = 'Se asignaron exitosamente los evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '</span>';
  213. else
  214. $return['asigna'] = 'Se asignaron algunos de los evaluadores al proyecto <span class="text-rojo1">' . $_POST['texto'] . '.<br>No fue posible asignarlos a todos.</span>';
  215. }
  216. break;
  217. case 6: //Eliminar asignación
  218. $elegidos = explode(',',$_POST['elegidos']);
  219. $noBorrar = array();
  220. $asignacionesTotales = 0;
  221. foreach ($elegidos as $elegido) {
  222. $asignaciones = Asignacion::getAsignaciones($pdo, 'PROYECTO', $elegido, $etapa, $_POST['concurso']);
  223. foreach($asignaciones as $asignado){
  224. if (Etapa::tieneEvaluaciones($pdo, $asignado['idusuario'], $asignado['idproyecto'], $etapa, $_POST['concurso'])){
  225. array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido));
  226. } else
  227. if (!Asignacion::eliminaAsignacionXDatos($pdo, $etapa, $asignado['idproyecto'], $asignado['idusuario']))
  228. array_push($noBorrar,array('enuso'=>$asignado['idasignacion'], 'elegido' => $elegido));
  229. $asignacionesTotales++;
  230. }
  231. }
  232. if (count($noBorrar) == 0){
  233. if (count($elegidos) == 1)
  234. $return['eliminados'] = 'Se borraron las asignaciones del proyecto';
  235. else
  236. $return['eliminados'] = 'Se borraron las asignaciones de todos los proyectos seleccionados';
  237. } else {
  238. if (count($noBorrar) < $asignacionesTotales){
  239. if (count($elegidos) == 1)
  240. $return['faltan'] = 'No fue posible eliminar todas las asignaciones del proyecto';
  241. else
  242. $return['faltan'] = 'No fue posible eliminar todas las asignaciones de todos los proyectos seleccionados';
  243. } else {
  244. if (count($elegidos) == 1)
  245. $return['error'] = 'No fue posible eliminar ninguna asignación del proyecto';
  246. else
  247. $return['error'] = 'No fue posible eliminar ninguna asignación de los proyectos seleccionados';
  248. break;
  249. }
  250. }
  251. break;
  252. }
  253. } else
  254. $return['error'] = 'No fue posible obtener los datos';
  255. }
  256. $return['json'] = json_encode($return);
  257. echo json_encode($return);
  258. function generaResumen($proyectos, $users, $asignaciones){
  259. $html = '';
  260. $html = '<div class="accordion" id="acordeon">
  261. <div class="row w-100 justify-content-between align-items-start">';
  262. $cont = 1;
  263. foreach ($proyectos as $proyecto){
  264. $lista = '';
  265. $id = 0;
  266. $usuarios = array_filter($asignaciones, function($arreglo) use($proyecto) {
  267. return $arreglo['idproyecto'] == $proyecto['idproyecto'];
  268. });
  269. foreach ($usuarios as $usuario){
  270. $temp = array_filter($users, function($arreglo) use($usuario) {
  271. return $arreglo['idusuario'] == $usuario['idusuario'];
  272. });
  273. $temp2 = current($temp);
  274. $lista .= '<div class="lista">' . $temp2['nombre'] . ' ' . $temp2['apellidos'] . '</div>';
  275. }
  276. $id = $proyecto['idproyecto'];
  277. $html .= '<div class="col-sm-6">
  278. <div class="titulo">
  279. <div class=" d-flex flex-column justify-content-between position-relative p-2" id="titulo' . $cont . '" data-id="' . $id . '">
  280. <span class="ing-cancelar text-danger position-absolute elimIcon"></span>
  281. <span class="ing-editar text-primary position-absolute editIcon"></span>
  282. <div class="dato">' . $proyecto['proyecto'] . '</div>
  283. <div class="detalle"><span data-toggle="collapse" data-target="#texto' . $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>
  284. </div>
  285. <div id="texto' . $cont . '" class="collapse texto bg-light py-2 px-4" aria-labelledby="titulo' . $cont . '" data-parent="#acordeon">'. $lista . '</div>
  286. </div>
  287. </div>';
  288. $cont++;
  289. }
  290. $html .= '</div>
  291. </div>';
  292. return $html;
  293. }
  294. /*function asignaAsesores($pdo, $etapa, $evaluadores, $proyecto, $concurso){
  295. $asignados = false;
  296. $docentes = array();
  297. foreach ($evaluadores as $evaluador){
  298. if ($evaluador['id'] != '-1') {
  299. $ids = explode('-',$evaluador['id']);
  300. if ($ids[0] != 0){
  301. $usr = $ids[0];
  302. $rol = Usuario::getIdRol($pdo, 'ASESOR');
  303. if (count($rol) > 0)
  304. if (!Usuario::tieneRol($pdo, $usr,$rol['idrol'],$concurso))
  305. Usuario::agregaUsuarioRol($pdo, $usr, $rol['idrol'], $concurso);
  306. } else
  307. $usr = Usuario::agregaUsuarioNuevoInterno($pdo, $ids[1], 'ASESOR', $concurso);
  308. array_push($docentes,$usr);
  309. } else {
  310. $usr = Usuario::agregaUsuarioNuevoExterno($pdo, $evaluador['nombre'], $evaluador['apellidos'], '', $evaluador['email'], 'ASESOR', $concurso);
  311. array_push($docentes,$usr);
  312. }
  313. }
  314. if (count($docentes) > 0){
  315. $error = false;
  316. foreach ($docentes as $docente){
  317. if (!Asignacion::agregaAsignacion($pdo, $etapa, $proyecto, $docente))
  318. $error = true;
  319. }
  320. if (!$error)
  321. $asignados = true;
  322. else {
  323. foreach ($docentes as $docente){
  324. Asignacion::eliminaAsignacionXDatos($pdo, $etapa, $proyecto, $docente);
  325. }
  326. Proyecto::eliminaAlumnosProyecto($pdo, $proyecto);
  327. Proyecto::eliminaProyecto($pdo, $proyecto);
  328. $asignados = false;
  329. }
  330. } else {
  331. Proyecto::eliminaAlumnosProyecto($pdo, $proyecto);
  332. Proyecto::eliminaProyecto($pdo, $proyecto);
  333. $asignados = false;
  334. }
  335. return $asignados;
  336. }*/