feat: version 4.5.0 -- Calendario personal con filtros y capas por tipo

Calendario personal para todos los roles: reuniones que organizo o me invitaron,
proyectos donde soy dueno/miembro, actividades y tareas donde soy responsable y
tareas recurrentes creadas o compartidas conmigo (solo lectura si no soy el creador).
Filtros Ver (Todo / Solo lo mio / Compartido conmigo) y Mostrar (lista de tipos con
Todo); colores por tipo, vencidos en rojo, compartido marcado con franja.
La pestana Calendario del proyecto muestra todas sus reuniones vinculadas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-28 11:14:13 -05:00
parent 6066f27ba0
commit d562351242
18 changed files with 269 additions and 38 deletions
+14 -2
View File
@@ -36,10 +36,22 @@ Las reuniones siguen el mismo contrato (`PUT /api/meetings/:id`).
## Calendario de reuniones (v4.4.0)
Todas las rutas requieren JWT y módulo `calendar`. Las fechas son `YYYY-MM-DD HH:mm:ss` en hora
civil `America/Guayaquil` (UTC-5). `GET /api/meetings?from=&to=&page=&pageSize=` devuelve
civil `America/Guayaquil` (UTC-5). `GET /api/meetings?from=&to=&page=&pageSize=[&projectId=]` (sin `projectId`: solo reuniones que el
usuario organiza o a las que fue invitado, cualquier rol; con `projectId`: todas las del proyecto si
puede leerlo, si no 404) devuelve
`{items,total,page,pageSize}` con ocurrencias expandidas (`occurrence_start`, `occurrence_end`);
rango máximo 93 días y hasta 1500 ocurrencias por página (predeterminado: 1500).
`GET /api/meetings/activities?from=&to=` devuelve hasta 1000 vencimientos legibles.
`GET /api/meetings/activities?from=&to=` devuelve hasta 1000 vencimientos de actividades donde el
usuario es responsable (con `is_closed` y `overdue`).
`GET /api/meetings/tasks?from=&to=`: tareas donde el usuario es responsable (`activity_id`, `project_id`,
`is_closed`, `overdue`). `GET /api/meetings/projects?from=&to=`: proyectos donde es dueño o miembro,
una fila por fecha en rango (`milestone`: `start` | `end`). Ambas requieren módulo `projects`.
`GET /api/meetings/recurring?from=&to=` (requiere también el módulo `recurring_tasks`) devuelve los
próximos vencimientos de las tareas recurrentes activas que el usuario creó o de las que es responsable, calculados al vuelo
desde `next_due_date` con la misma regla que `advanceCycle` y cortados en `end_date`. Cada fila trae
`due_date`, `is_next` (el ciclo pendiente real), `overdue` y `can_open` (si puede abrirla en Tareas recurrentes).
Todas las filas de calendario traen `shared` (lo creó/organiza otra persona y me incluye).
- `GET /api/meetings/:id`: detalle, participantes con RSVP y excepciones.
- `POST /api/meetings`: `{title,description,startsAt,endsAt,allDay,location,videoUrl,projectId,reminderMinutes,participantUserIds,externalEmails,recurrence}`.