'No se ha iniciado sesión']); exit(); } $user = Login::get_user(); try { switch ($_SERVER['REQUEST_METHOD']) { case 'GET': // Fetch all puestos $periodo_id = $user->periodo_id; if (is_null($user->facultad['facultad_id'])) { $periodos = $db //->where('CURRENT_DATE BETWEEN periodo_fecha_inicio AND periodo_fecha_fin') ->join('nivel', 'nivel.nivel_id = periodo.nivel_id') ->orderBy('periodo_id') ->get('periodo', null, 'periodo.*, nivel_nombre as nivel'); } else { $periodos = $db->query( "SELECT DISTINCT periodo.*, nivel_nombre as nivel FROM periodo JOIN horario_view USING (periodo_id) JOIN nivel ON nivel.nivel_id = periodo.nivel_id WHERE /*CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin AND */facultad_id = :facultad_id ORDER BY periodo_id ", ['facultad_id' => $user->facultad['facultad_id']] ); } echo json_encode($periodos); break; case 'PUT': // Update nivel_id of a periodo $raw = file_get_contents('php://input'); $data = json_decode($raw, true); if (!isset($data['action'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Falta la acción a realizar']); exit(); } switch ($data['action']) { case 'changeNivel': if (!isset($data['periodo_id'], $data['nivel_id'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Falta el id del periodo o el nivel']); exit(); } $periodo_id = $data['periodo_id']; $nivel_id = $data['nivel_id']; $db->where('periodo_id', $periodo_id)->update('periodo', ['nivel_id' => $nivel_id]); $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre']; echo json_encode([ 'success' => "El nivel del periodo $periodo_nombre ha sido cambiado a $nivel_nombre" ]); break; case 'changeFechaInicio': if (!isset($data['periodo_id'], $data['periodo_fecha_inicio'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Falta el id del periodo o la fecha de inicio']); exit(); } $periodo_id = $data['periodo_id']; $periodo_fecha_inicio = $data['periodo_fecha_inicio']; $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_inicio' => $periodo_fecha_inicio]); $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; echo json_encode([ 'success' => "La fecha de inicio del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_inicio" ]); break; case 'changeFechaFin': if (!isset($data['periodo_id'], $data['periodo_fecha_fin'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Falta el id del periodo o la fecha de fin']); exit(); } $periodo_id = $data['periodo_id']; $periodo_fecha_fin = $data['periodo_fecha_fin']; $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_fin' => $periodo_fecha_fin]); $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; echo json_encode([ 'success' => "La fecha de fin del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_fin" ]); break; case 'updatePeriodo': if (!isset($data['periodo_id'], $data['periodo_nombre'], $data['id_periodo_sgu'], $data['periodo_clave'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Faltan datos para actualizar el periodo']); exit(); } $periodo_id = $data['periodo_id']; $db->where('periodo_id', $periodo_id)->update('periodo', array_filter($data, fn($key) => in_array($key, [ 'periodo_nombre', 'id_periodo_sgu', 'periodo_clave', ]), ARRAY_FILTER_USE_KEY)); $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; echo json_encode([ 'success' => "El periodo $periodo_nombre ha sido actualizado" ]); break; default: header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Acción no válida']); exit(); } break; case 'POST': $raw = file_get_contents('php://input'); $data = json_decode($raw, true); if (!isset($data['periodo_nombre'], $data['nivel_id'], $data['periodo_fecha_inicio'], $data['periodo_fecha_fin'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Faltan datos para crear el periodo']); exit(); } $newPeriodo = $db->insert( 'periodo', array_filter($data, fn($key) => in_array($key, [ 'periodo_nombre', 'nivel_id', 'periodo_fecha_inicio', 'periodo_fecha_fin', 'periodo_clave', 'id_periodo_sgu', ]), ARRAY_FILTER_USE_KEY) ); echo json_encode([ 'success' => true, 'message' => 'El periodo ha sido creado', 'periodo' => $newPeriodo ]); break; case 'DELETE': // Delete a periodo $raw = file_get_contents('php://input'); $data = json_decode($raw, true); if (!isset($data['periodo_id'])) { header('HTTP/1.1 400 Bad Request'); echo json_encode(['error' => 'Falta el id del periodo']); exit(); } $periodo_id = $data['periodo_id']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $db->where('periodo_id', $periodo_id)->delete('periodo'); echo json_encode([ 'success' => true, 'message' => "El periodo $periodo_nombre ha sido eliminado" ]); break; default: header('HTTP/1.1 405 Method Not Allowed'); echo json_encode(['error' => 'Método no permitido']); break; } } catch (PDOException $e) { echo json_encode([ 'error' => $e->getMessage(), 'query' => $db->getLastQuery(), 'exception' => $e->getTraceAsString() ]); } catch (Exception $e) { echo json_encode([ 'error' => $e->getMessage(), 'exception' => $e->getTraceAsString() ]); }