Files
paad/action/periodos.php
Your Name 960592e68b
Some checks are pending
Deploy Pruebas / deploy (push) Waiting to run
Del servidor bueno
2024-10-11 16:44:27 -06:00

204 lines
8.3 KiB
PHP

<?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json');
if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => '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()
]);
}