diff --git a/CHANGELOG.md b/CHANGELOG.md index 027b774..8e986a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,24 +16,32 @@ El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1 --- ## [2.3.0] - 2026-09-19 +### Añadido +- **Monitoreo y Percentiles de Asignación de Aulas Físicas (Admin & Bedelía):** + - Panel analítico *"Estado y Percentiles de Asignación de Aulas Físicas"* incorporado en los dashboards de Administrador (`/dashboard?role=admin`) y Bedelía (`/dashboard?role=bedelia`). + - Cálculo dinámico en tiempo real de **Aulas Asignadas** en número y percentil (**26 aulas · 96.3%**) con enlace directo a cursadas activas. + - Cálculo dinámico en tiempo real de **Aulas Sin Asignar / Libres** en número y percentil (**1 aula · 3.7%**) con enlace directo al formulario de asignación de espacios. + - Barras de progreso visuales con desglose dual: **Planificación Cuatrimestral** (96.3% asignado vs 3.7% disponible) y **Ocupación Operativa del Día** (aulas con clases hoy vs aulas libres). + - Exposición de métricas de asignación y percentiles en el endpoint de la API REST `GET /api/v1/dashboard/stats`. +- **Módulo de Cursadas Asignadas y Métricas Reales en Catálogo Presencial (`/classrooms/list_classrooms?view_mode=physical`):** + - Incorporación de la sección *"Cursadas Asignadas"* dentro de cada tarjeta de aula física y columna en vista de tabla, detallando asignaturas, comisiones y turnos. + - Métricas de ocupación física real por período (Día, Semana, Mes) con porcentajes calculados dinámicamente (6%, 11%, 17%, 22% según la carga horaria del aula). + - Botones de acción directa con ID dinámico: **Ficha** (`/classrooms/view_classroom?id=...`), **Horarios en Calendario** (`/schedule/calendar_view?classroom_id=...`) y **Editar**. + - Conexión de la tabla *"Próximas Clases y Reservas"* en la ficha individual del aula (`/classrooms/view_classroom`) con las reservas reales del cuatrimestre y enlaces a cada reserva (`/schedule/view_reservation?id=...`). + ### Modificado - **Dashboard Docente (`/dashboard?role=docente`):** - - Eliminado el botón flotante *"Reservar Aula / Solicitar espacio para clase"* (`/schedule/add_reservation`) a petición de los requerimientos funcionales docentes. + - Eliminado el botón flotante *"Reservar Aula / Solicitar espacio para clase"* (`/schedule/add_reservation`) a petición de los requerimientos funcionales del cuerpo docente. - Reorganizada la grilla superior a 3 columnas simétricas (`col-md-4`) para las tarjetas de *Mis Clases Hoy*, *Mis Reservas Activas* y *Aulas Virtuales*. -### Añadido -- **Monitoreo y Percentiles de Asignación de Aulas (Admin & Bedelía):** - - Nuevo panel analítico *"Estado y Percentiles de Asignación de Aulas Físicas"* en los paneles de Administrador (`/dashboard?role=admin`) y Bedelía (`/dashboard?role=bedelia`). - - Cálculo dinámico de **Aulas Asignadas** en número y percentil (**26 aulas · 96.3%**) con enlace a cursadas activas. - - Cálculo dinámico de **Aulas Sin Asignar / Libres** en número y percentil (**1 aula · 3.7%**) con enlace a asignación de espacios. - - Barras de progreso visuales con desglose comparativo de **Planificación Cuatrimestral** vs **Ocupación Operativa del Día**. - - Exposición de estas métricas en la API REST de backend (`GET /api/v1/dashboard/stats`). - ### Corregido -- **Renderizado de Aulas Presenciales en Catálogo (`/classrooms/list_classrooms`):** - - Solucionada la incompatibilidad de `nunjucks/src/jinja-compat` con la propiedad `.items` mediante interceptor en `memberLookup` de `frontend/src/app.js`. - - Corregido el bug de evaluación en `backend/app/routes/api/dashboard.py` que intentaba invocar `.ilike` sobre la propiedad `Classroom.room_number`. - - Agregado el módulo *"Cursadas Asignadas"* en tarjetas de aulas presenciales con materias, comisiones y turnos. +- **Fallo Crítico de Renderizado en Nunjucks (`memberLookup` con `.items`):** + - Solucionada la incompatibilidad de `nunjucks/src/jinja-compat` que interceptaba la propiedad `.items` convirtiendo `classrooms.items` en una función interna en lugar de un array, lo que impedía dibujar las tarjetas de aulas presenciales en `frontend/views/classrooms/list.html`. + - Implementado interceptor en `memberLookup` en `frontend/src/app.js` para preservar arrays intactos. +- **Clasificación Errónea de Reservas Físicas como Virtuales (`is_virtual`):** + - Corregida la propiedad `@property is_virtual` en `Reservation` (`backend/app/models/reservation.py`) para garantizar que si una reserva tiene aula física asignada (`self.classroom and not self.classroom.is_virtual`), siempre sea clasificada como presencial (`is_virtual = False`), evitando falsos positivos cuando la comisión posee un enlace virtual predeterminado. +- **Excepción de SQLAlchemy en Estadísticas de Dashboard:** + - Corregido el error de ejecución generado al invocar `.ilike()` sobre la propiedad Python `@property Classroom.room_number` en `backend/app/routes/api/dashboard.py`, migrando la clasificación de aulas presenciales y virtuales a una evaluación robusta en memoria Python (`Classroom.code` y `Classroom.building`). --- diff --git a/README.md b/README.md index 1e280c8..3d0618a 100644 --- a/README.md +++ b/README.md @@ -50,19 +50,22 @@ El repositorio está dividido en dos aplicaciones principales que interactúan m La plataforma cuenta con paneles adaptados a las necesidades operativas de cada perfil institucional: -* **Administrador (`/dashboard?role=admin`):** Cockpit institucional con métricas globales, auditoría de seguridad RBAC, tendencias mensuales y catálogo de gestión. -* **Bedelía (`/dashboard?role=bedelia`):** Control operativo del campus en tiempo real, conteo de aulas físicas y virtuales, cartelera del día y bandeja de aprobación de reservas pendientes. -* **Docente / Profesor (`/dashboard?role=docente`):** Sesiones del día con accesos directos a videollamadas, gestión de comisiones y formulario para solicitar aulas. +* **Administrador (`/dashboard?role=admin`):** Cockpit institucional con métricas globales, auditoría de seguridad RBAC, tendencias mensuales y panel interactivo de **Estado y Percentiles de Asignación de Aulas Físicas** (asignadas vs disponibles en número y porcentaje). +* **Bedelía (`/dashboard?role=bedelia`):** Control operativo del campus en tiempo real, balance de aulas presenciales asignadas (96.3%) y libres (3.7%), cartelera del día y bandeja de aprobación de reservas pendientes. +* **Docente / Profesor (`/dashboard?role=docente`):** Sesiones del día con accesos directos a videollamadas y gestión de comisiones. * **Alumno / Estudiante (`/dashboard?role=alumno`):** Brújula de cursada *"¿Dónde curso hoy?"* con ubicación por piso y aula o enlace virtual, junto al cronograma de exámenes y entregas de TPs. > **Modo Vista Previa:** Los usuarios con perfil administrador o directivo pueden previsualizar cualquier perspectiva utilizando el selector de roles en la barra superior o pasando el parámetro `?role={admin|bedelia|docente|alumno}` en la URL. --- -## ☁️ Importador de Google Sheets & Campus Virtual +## ☁️ Sincronización Google Sheets, Configuración Global & Purga Académica El sistema incluye sincronización automatizada con las planillas oficiales de cursada de UniCABA: +* **Configuración Global Dinámica:** Selección y persistencia de la URL de Google Sheets directamente desde la interfaz web (`/admin/google_sheets_import`) sin valores fijos en el código. +* **Herramienta de Purga y Reinicio (`reset_academic_data`):** Módulo CLI y web para limpiar selectivamente reservas, aulas, asignaturas, comisiones o carreras, garantizando pruebas limpias desde cero y preservando siempre usuarios y credenciales. * **Concurrencia Virtual Ilimitada:** Reconocimiento de espacios áulicos remotos (`Campus Virtual · VIRTUAL`), permitiendo la coexistencia de múltiples comisiones en la misma franja horaria sin colisiones de agenda. +* **Catálogo Presencial con Cursadas Asignadas:** Listado de aulas físicas con cálculo de ocupación real (semana/mes), vista previa de asignaturas y enlaces directos a calendario y ficha del espacio. * **Enlaces de Videollamada Automáticos:** Generación de enlaces seguros (Google Meet / Teams) para acceso instantáneo de docentes y estudiantes. * **Filtros en Cartelera:** Opciones para filtrar por turno, piso u ocultar aulas virtuales mediante el switch dedicado en `/schedule/today_schedule`.