curl --request GET \
--url https://api.example.com/api/solicitudes/admin/calendario{
"status": "fail",
"message": "Los parámetros fecha_inicio y fecha_fin son obligatorios (YYYY-MM-DD)."
}
Retrieve approved requests in calendar event format for administrators
curl --request GET \
--url https://api.example.com/api/solicitudes/admin/calendario{
"status": "fail",
"message": "Los parámetros fecha_inicio y fecha_fin son obligatorios (YYYY-MM-DD)."
}
GET /api/solicitudes/admin/calendario
"2026-03-01""2026-03-31"1: Vacation2: Permission3: Absence4: Remote WorkShow properties
Show Event Object
const token = 'admin_jwt_token';
const params = new URLSearchParams({
fecha_inicio: '2026-03-01',
fecha_fin: '2026-03-31',
id_tipo_solicitud: 1 // Optional: filter for vacations only
});
const response = await fetch(`/api/solicitudes/admin/calendario?${params}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
const data = await response.json();
console.log(data);
{
"status": 200,
"results": 3,
"data": {
"eventos": [
{
"id": 123,
"title": "John Doe - Vacaciones",
"start": "2026-03-10T00:00:00.000Z",
"end": "2026-03-15T00:00:00.000Z",
"allDay": true,
"backgroundColor": "#3788d8",
"borderColor": "#3788d8",
"extendedProps": {
"id_empleado": 45,
"id_tipo_solicitud": 1,
"descripcion": "Spring vacation",
"dias_solicitados": 5
}
},
{
"id": 124,
"title": "Jane Smith - Permiso",
"start": "2026-03-20T00:00:00.000Z",
"end": "2026-03-20T00:00:00.000Z",
"allDay": true,
"backgroundColor": "#f59e0b",
"borderColor": "#f59e0b",
"extendedProps": {
"id_empleado": 67,
"id_tipo_solicitud": 2,
"descripcion": "Medical appointment",
"dias_solicitados": 1
}
}
]
}
}
{
"status": "fail",
"message": "Los parámetros fecha_inicio y fecha_fin son obligatorios (YYYY-MM-DD)."
}
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
function AdminCalendar() {
const [events, setEvents] = useState([]);
const fetchEvents = async (fetchInfo) => {
const params = new URLSearchParams({
fecha_inicio: fetchInfo.startStr.split('T')[0],
fecha_fin: fetchInfo.endStr.split('T')[0]
});
const response = await fetch(
`/api/solicitudes/admin/calendario?${params}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
const data = await response.json();
setEvents(data.data.eventos);
};
return (
<FullCalendar
plugins={[dayGridPlugin]}
initialView="dayGridMonth"
events={events}
datesSet={fetchEvents}
/>
);
}
// Get all approved requests for March 2026
GET /api/solicitudes/admin/calendario?fecha_inicio=2026-03-01&fecha_fin=2026-03-31
// Get only vacation requests for Q2 2026
GET /api/solicitudes/admin/calendario?fecha_inicio=2026-04-01&fecha_fin=2026-06-30&id_tipo_solicitud=1
// Get all requests for the current week
const today = new Date();
const weekStart = new Date(today.setDate(today.getDate() - today.getDay()));
const weekEnd = new Date(today.setDate(today.getDate() - today.getDay() + 6));
GET /api/solicitudes/admin/calendario?fecha_inicio=${weekStart}&fecha_fin=${weekEnd}