Files
admin-edu-space/CHANGELOG_SESSION.md
T

5.1 KiB

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.