Asignacion.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. require_once 'Etapa.php';
  3. require_once 'Proyecto.php';
  4. require_once 'Usuario.php';
  5. require_once 'SGI.php';
  6. class Asignacion {
  7. public static function existenAsignaciones($pdo, $concurso, $etapa){
  8. $existen = false;
  9. $stmt = $pdo->prepare('Select * from cidit_fs_existenasignacionesconcurso(:etapa,:concurso)');
  10. $stmt->bindParam(':etapa', $etapa);
  11. $stmt->bindParam(':concurso', $concurso);
  12. if($stmt->execute()){
  13. $temp = $stmt->fetch();
  14. $existen = $temp['existe'];
  15. }
  16. $stmt->closeCursor();
  17. $stmt = null;
  18. return $existen;
  19. }
  20. public static function getAsignaciones($pdo, $tipo, $dato, $etapa, $concurso){
  21. $asignaciones = array();
  22. switch($tipo){
  23. case 1:
  24. $stmt = $pdo->prepare('Select * from cidit_fs_asignaciones(:usr,null,:etapa,:concurso)');
  25. $stmt->bindParam(':usr', $dato);
  26. break;
  27. case 2:
  28. $stmt = $pdo->prepare('Select * from cidit_fs_asignaciones(null,:proy,:etapa,:concurso)');
  29. $stmt->bindParam(':proy', $dato);
  30. break;
  31. }
  32. $stmt->bindParam(':etapa', $etapa);
  33. $stmt->bindParam(':concurso', $concurso);
  34. if($stmt->execute())
  35. $asignaciones = $stmt->fetchAll();
  36. $stmt->closeCursor();
  37. $stmt = null;
  38. return $asignaciones;
  39. }
  40. public static function agregaAsignacion($pdo, $etapa, $proyecto, $usuario){
  41. $asigno = false;
  42. $stmt = $pdo->prepare('Select * from cidit_fi_asignacion(:etapa,:proyecto,:usuario)');
  43. $stmt->bindParam(':etapa', $etapa);
  44. $stmt->bindParam(':proyecto', $proyecto);
  45. $stmt->bindParam(':usuario', $usuario);
  46. if($stmt->execute())
  47. $asigno = true;
  48. $stmt->closeCursor();
  49. $stmt = null;
  50. return $asigno;
  51. }
  52. public static function eliminaAsignacionXDatos($pdo, $etapa, $proyecto, $usuario){
  53. $elimino = false;
  54. $stmt = $pdo->prepare('Select * from cidit_fd_asignacionxdatos(:etapa,:proyecto,:usuario)');
  55. $stmt->bindParam(':proyecto', $proyecto);
  56. $stmt->bindParam(':usuario', $usuario);
  57. $stmt->bindParam(':etapa', $etapa);
  58. if($stmt->execute())
  59. $elimino = true;
  60. $stmt->closeCursor();
  61. $stmt = null;
  62. return $elimino;
  63. }
  64. public static function eliminaAsignacion($pdo, $asignacion){
  65. $elimino = false;
  66. $stmt = $pdo->prepare('Select * from cidit_fd_asignacion(:asignacion)');
  67. $stmt->bindParam(':asignacion', $asignacion);
  68. if($stmt->execute())
  69. $elimino = true;
  70. $stmt->closeCursor();
  71. $stmt = null;
  72. return $elimino;
  73. }
  74. public static function tieneEvaluaciones($pdo, $asignacion){
  75. $tiene = true;
  76. $stmt = $pdo->prepare('Select * from cidit_fs_tieneevaluacion(:asignacion)');
  77. $stmt->bindParam(':asignacion', $asignacion);
  78. if($stmt->execute()){
  79. $temp = $stmt->fetch();
  80. $tiene = $temp['tiene'];
  81. }
  82. $stmt->closeCursor();
  83. $stmt = null;
  84. return $tiene;
  85. }
  86. public static function agregaUsuario ($pdo, $usr, $etapa, $concurso){
  87. $idusr = Usuario::agregaUsuarioInterno($pdo, $usr);
  88. $puesto = Usuario::getPuestoXClave($pdo, 'COMITE');
  89. if (count($puesto) > 0)
  90. Usuario::agregaUsuarioPuesto($pdo,$idusr,$puesto['idpuesto']);
  91. else
  92. $idusr = 0;
  93. if ($idusr != 0){
  94. $rol = array();
  95. switch($etapa){
  96. case 'REVISION': $rol = Usuario::getIdRol($pdo, 'REVISOR'); break;
  97. case 'EVALUACION': $rol = Usuario::getIdRol($pdo, 'JURADO'); break;
  98. }
  99. if (count($rol) > 0)
  100. if(!Usuario::agregaUsuarioRol($pdo, $idusr, $rol['idrol'], $concurso))
  101. $idusr = 0;
  102. }
  103. return $idusr;
  104. }
  105. public static function getUsuariosAsignables($pdo, $niveles){
  106. $usuarios = array();
  107. $users = array();
  108. foreach ($niveles as $nivel){
  109. array_push($users, self::getProfesPorNivel($pdo, $nivel));
  110. }
  111. foreach ($users as $usr){
  112. foreach ($usr as $temp){
  113. array_push($usuarios,$temp);
  114. }
  115. }
  116. $duplicados = array_column($usuarios,'idinterno');
  117. $duplicados = array_unique($duplicados);
  118. $duplicados = array_diff_assoc(array_column($usuarios,'idinterno'), $duplicados);
  119. while ($temp = current($duplicados)){
  120. reset($usuarios);
  121. $index = key($duplicados);
  122. while ($temp2 = current($usuarios)){
  123. if ($temp2['idinterno'] == $temp){
  124. $index2 = key($usuarios);
  125. $usuarios[$index2]['categorias'] .= ',' . $usuarios[$index]['niveles'];
  126. unset($usuarios[$index]);
  127. end($usuarios);
  128. next($usuarios);
  129. } else
  130. next($usuarios);
  131. }
  132. next($duplicados);
  133. }
  134. //array_multisort(array_column($usuarios, 'apellidos'),SORT_ASC,$usuarios);
  135. setlocale(LC_COLLATE, 'esm');
  136. usort($usuarios, function($a, $b) {
  137. return strcoll($a['apellidos'], $b['apellidos']);
  138. });
  139. return $usuarios;
  140. }
  141. private static function getProfesPorNivel($pdo, $nivel) {
  142. $periodo = SGI::getPeriodoActivo($pdo, $nivel);
  143. $usuarios = array();
  144. if (!empty($periodo)){
  145. $profes = SGI::getProfesoresActivos($pdo, $periodo);
  146. foreach ($profes as $prof){
  147. $temp = Usuario::datosUsuario($pdo, $prof["Usuario_id"], 'a', false);
  148. if (count($temp) > 0)
  149. array_push ($usuarios, array('idusuario' => $temp['iduser'], 'idinterno' => $prof["Usuario_id"], 'nombre' => $prof['Usuario_nombre'], 'apellidos' => $prof['Usuario_apellidos'],'niveles' => $nivel));
  150. else
  151. array_push ($usuarios, array('idusuario' => 0, 'idinterno' => $prof["Usuario_id"], 'nombre' => $prof['Usuario_nombre'], 'apellidos' => $prof['Usuario_apellidos'],'niveles' => $nivel));
  152. }
  153. return $usuarios;
  154. } else
  155. return array();
  156. }
  157. }