Files
admin-edu-space/CHANGELOG_SESSION.md
T

85 lines
5.1 KiB
Markdown

# Resumen de Cambios - Sesión de Desarrollo (Rama `dev`)
**Fecha:** 2026-09-02 / 2026-09-03
**Proyecto:** Admin Edu-Space (Flask + PostgreSQL)
**Rama:** `dev`
---
## 1. Auditoría Git y Puesta en Producción
* **Informe Técnico Completo (`DEPLOYMENT_AUDIT.md`):**
* Análisis de ramas locales y remotas (`main`, `dev`, `origin/planning`, `origin/commissions`, `origin/spanish`).
* Manual de despliegue en producción con arquitectura WSGI (Gunicorn), Nginx como proxy inverso, Systemd unit y contenedorización Docker / Docker Compose.
* **Archivos Base:**
* Creación de `.env.example` con todas las variables requeridas (PostgreSQL, Flask, Secret Key, Babel).
* Creación de `init_db.py` para bootstrap inicial seguro de base de datos y usuario administrador por defecto (`admin@edu-space.com` / `admin123`).
---
## 2. Base de Datos y Modelos
* **Preferencia de Idioma Persistente:**
* Migración en PostgreSQL agregando la columna `preferred_language VARCHAR(10)` a la tabla `users`.
* Actualización del modelo `User` en `app/models/user.py` con el campo `preferred_language`.
---
## 3. Implementación de Vistas y Plantillas Faltantes
* **Perfil de Usuario (`app/templates/auth/profile.html`):**
* Vista completa con datos del usuario, rol, estado, fecha de registro y reservas recientes.
* Formulario interactivo para configurar la **Preferencia de Idioma** (*Detectar automáticamente del navegador*, *Español*, *English*).
* **Cambio de Contraseña (`app/templates/auth/change_password.html`):**
* Formulario seguro para actualización de credenciales.
* **Manejo de Errores (`app/templates/auth/403.html`):**
* Pantalla de error 403 Forbidden estilizada.
---
## 4. Correcciones de UX y Bugs de Rutas
* **Navbar Limpio (`app/templates/base.html`):**
* Eliminación del bloque duplicado del menú de usuario `System Administrator`.
* **Corrección de BuildError en Comisiones:**
* En `app/routes/classrooms.py`, se agregó el alias de ruta `@classrooms_bp.route('/', endpoint='index')` para resolver enlaces a `classrooms.index`.
* En `app/templates/schedule/commissions.html`, se reemplazó el filtro inválido de Django `truncatewords(20)` por el filtro estándar de Jinja2 `truncate(100)`.
* **Corrección Visual en `/genetic-optimizer` (`app/templates/genetic_optimizer.html`):**
* Se agregó el espaciado `pt-5 mt-4` evitando que la barra de navegación fija superior (`fixed-top`) se monte sobre el contenido.
* Rediseño de tarjeta hero con contraste óptimo y reemplazo de iconos faltantes por Bootstrap Icons (`bi bi-...`).
* **Corrección en Calendario (`app/templates/schedule/calendar.html`):**
* Inclusión de contenedor con espaciado superior y bundle de localización `locales-all.min.js` para FullCalendar.
---
## 5. Internacionalización (i18n) y Localización al Español
* **Configuración del Motor Babel (`config/config.py` y `babel.cfg`):**
* Configuración de `BABEL_TRANSLATION_DIRECTORIES` con ruta absoluta.
* Actualización del método de extracción Jinja2 en `babel.cfg`.
* **Formularios con Traducción Lazy (`lazy_gettext`):**
* `app/forms/auth.py` (`LoginForm`).
* `app/forms/classroom.py` (`ClassroomForm`, `ClassroomResourceForm`).
* `app/forms/reservation.py` (`ReservationForm`).
* **Traducción Integral de Plantillas:**
* `app/templates/auth/login.html`: Pantalla de login traducida y con selector de idioma visible.
* `app/templates/dashboard.html`: Todas las tarjetas estadísticas, acciones rápidas y tablas.
* `app/templates/classrooms/list.html` y `add.html`: Filtros, estados vacíos, cabeceras y formularios.
* `app/templates/schedule/today.html`: Horario del día, métricas y botones.
* `app/templates/schedule/calendar.html`: Vistas, leyendas y eventos.
* `app/templates/genetic_optimizer.html`: Estado del algoritmo y controles.
* `app/templates/partials/language_switcher.html`: Muestra "Español" en lugar de "Spanish".
* **Compilación de Catálogos:**
* Compilación binaria de `messages.po` a `messages.mo` en `translations/es/` y `translations/en/` con 0 mensajes pendientes.
---
## 6. Lógica de Detección y Precedencia de Idiomas
En `app/__init__.py` (`get_locale()`):
1. **Parámetro URL (`?lang=`):** Máxima prioridad para cambio explícito.
2. **Preferencia en Perfil del Usuario (`current_user.preferred_language`):** Sobrescribe la configuración del navegador en toda la sesión si el usuario está autenticado.
3. **Preferencia de Sesión (`session['language']`):** Cambio manual mediante el dropdown.
4. **Detección Automática del Navegador (`request.accept_languages.best_match()`):** Valor por defecto para visitantes no autenticados y pantalla de login.
* Al cerrar sesión (`logout`), se limpia la sesión para que el login use el navegador.
* Al cambiar el idioma en el selector siendo usuario autenticado, se sincroniza automáticamente con su perfil en base de datos.
---
## 7. Configuración del Entorno de Desarrollo
* Se creó `.vscode/settings.json` apuntando al intérprete del entorno virtual (`venv\Scripts\python.exe`), solucionando falsos positivos del analizador estático para `flask_wtf` y `flask_babel`.