periodos.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
  3. header('Content-Type: application/json');
  4. if (!Login::is_logged()) {
  5. header('HTTP/1.1 401 Unauthorized');
  6. echo json_encode(['error' => 'No se ha iniciado sesión']);
  7. exit();
  8. }
  9. $user = Login::get_user();
  10. try {
  11. switch ($_SERVER['REQUEST_METHOD']) {
  12. case 'GET':
  13. // Fetch all puestos
  14. $periodo_id = $user->periodo_id;
  15. if (is_null($user->facultad['facultad_id'])) {
  16. $periodos = $db
  17. ->where('CURRENT_DATE BETWEEN periodo_fecha_inicio AND periodo_fecha_fin')
  18. ->join('nivel', 'nivel.nivel_id = periodo.nivel_id')
  19. ->orderBy('periodo_id')
  20. ->get('periodo', null, 'periodo.*, nivel_nombre as nivel');
  21. } else {
  22. $periodos = $db->query(
  23. "SELECT DISTINCT periodo.*, nivel_nombre as nivel FROM periodo
  24. JOIN horario_view USING (periodo_id)
  25. JOIN nivel ON nivel.nivel_id = periodo.nivel_id
  26. WHERE CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin
  27. AND facultad_id = :facultad_id
  28. ORDER BY periodo_id
  29. ",
  30. ['facultad_id' => $user->facultad['facultad_id']]
  31. );
  32. }
  33. echo json_encode($periodos);
  34. break;
  35. case 'PUT':
  36. // Update nivel_id of a periodo
  37. $raw = file_get_contents('php://input');
  38. $data = json_decode($raw, true);
  39. if (!isset($data['action'])) {
  40. header('HTTP/1.1 400 Bad Request');
  41. echo json_encode(['error' => 'Falta la acción a realizar']);
  42. exit();
  43. }
  44. switch ($data['action']) {
  45. case 'changeNivel':
  46. if (!isset($data['periodo_id'], $data['nivel_id'])) {
  47. header('HTTP/1.1 400 Bad Request');
  48. echo json_encode(['error' => 'Falta el id del periodo o el nivel']);
  49. exit();
  50. }
  51. $periodo_id = $data['periodo_id'];
  52. $nivel_id = $data['nivel_id'];
  53. $db->where('periodo_id', $periodo_id)->update('periodo', ['nivel_id' => $nivel_id]);
  54. $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
  55. $nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre'];
  56. echo json_encode([
  57. 'success' =>
  58. "El nivel del periodo $periodo_nombre ha sido cambiado a $nivel_nombre"
  59. ]);
  60. break;
  61. case 'changeFechaInicio':
  62. if (!isset($data['periodo_id'], $data['periodo_fecha_inicio'])) {
  63. header('HTTP/1.1 400 Bad Request');
  64. echo json_encode(['error' => 'Falta el id del periodo o la fecha de inicio']);
  65. exit();
  66. }
  67. $periodo_id = $data['periodo_id'];
  68. $periodo_fecha_inicio = $data['periodo_fecha_inicio'];
  69. $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_inicio' => $periodo_fecha_inicio]);
  70. $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
  71. echo json_encode([
  72. 'success' =>
  73. "La fecha de inicio del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_inicio"
  74. ]);
  75. break;
  76. case 'changeFechaFin':
  77. if (!isset($data['periodo_id'], $data['periodo_fecha_fin'])) {
  78. header('HTTP/1.1 400 Bad Request');
  79. echo json_encode(['error' => 'Falta el id del periodo o la fecha de fin']);
  80. exit();
  81. }
  82. $periodo_id = $data['periodo_id'];
  83. $periodo_fecha_fin = $data['periodo_fecha_fin'];
  84. $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_fin' => $periodo_fecha_fin]);
  85. $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
  86. echo json_encode([
  87. 'success' =>
  88. "La fecha de fin del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_fin"
  89. ]);
  90. break;
  91. case 'updatePeriodo':
  92. if (!isset($data['periodo_id'], $data['periodo_nombre'], $data['id_periodo_sgu'], $data['periodo_clave'])) {
  93. header('HTTP/1.1 400 Bad Request');
  94. echo json_encode(['error' => 'Faltan datos para actualizar el periodo']);
  95. exit();
  96. }
  97. $periodo_id = $data['periodo_id'];
  98. $db->where('periodo_id', $periodo_id)->update('periodo', array_filter($data, fn($key) => in_array($key, [
  99. 'periodo_nombre',
  100. 'id_periodo_sgu',
  101. 'periodo_clave',
  102. ]), ARRAY_FILTER_USE_KEY));
  103. $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
  104. echo json_encode([
  105. 'success' =>
  106. "El periodo $periodo_nombre ha sido actualizado"
  107. ]);
  108. break;
  109. default:
  110. header('HTTP/1.1 400 Bad Request');
  111. echo json_encode(['error' => 'Acción no válida']);
  112. exit();
  113. }
  114. break;
  115. case 'POST':
  116. $raw = file_get_contents('php://input');
  117. $data = json_decode($raw, true);
  118. if (!isset($data['periodo_nombre'], $data['nivel_id'], $data['periodo_fecha_inicio'], $data['periodo_fecha_fin'])) {
  119. header('HTTP/1.1 400 Bad Request');
  120. echo json_encode(['error' => 'Faltan datos para crear el periodo']);
  121. exit();
  122. }
  123. $newPeriodo = $db->insert(
  124. 'periodo',
  125. array_filter($data, fn($key) => in_array($key, [
  126. 'periodo_nombre',
  127. 'nivel_id',
  128. 'periodo_fecha_inicio',
  129. 'periodo_fecha_fin',
  130. 'periodo_clave',
  131. 'id_periodo_sgu',
  132. ]), ARRAY_FILTER_USE_KEY)
  133. );
  134. echo json_encode([
  135. 'success' => true,
  136. 'message' => 'El periodo ha sido creado',
  137. 'periodo' => $newPeriodo
  138. ]);
  139. break;
  140. case 'DELETE':
  141. // Delete a periodo
  142. $raw = file_get_contents('php://input');
  143. $data = json_decode($raw, true);
  144. if (!isset($data['periodo_id'])) {
  145. header('HTTP/1.1 400 Bad Request');
  146. echo json_encode(['error' => 'Falta el id del periodo']);
  147. exit();
  148. }
  149. $periodo_id = $data['periodo_id'];
  150. $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
  151. $db->where('periodo_id', $periodo_id)->delete('periodo');
  152. echo json_encode([
  153. 'success' => true,
  154. 'message' => "El periodo $periodo_nombre ha sido eliminado"
  155. ]);
  156. break;
  157. default:
  158. header('HTTP/1.1 405 Method Not Allowed');
  159. echo json_encode(['error' => 'Método no permitido']);
  160. break;
  161. }
  162. } catch (PDOException $e) {
  163. echo json_encode([
  164. 'error' => $e->getMessage(),
  165. 'query' => $db->getLastQuery(),
  166. 'exception' => $e->getTraceAsString()
  167. ]);
  168. } catch (Exception $e) {
  169. echo json_encode([
  170. 'error' => $e->getMessage(),
  171. 'exception' => $e->getTraceAsString()
  172. ]);
  173. }