6.3 KiB
📥 Guía de Importación/Exportación de Asistencias
📋 Descripción General
El sistema permite importar y exportar asistencias y estadísticas desde el admin de Django usando archivos Excel (.xlsx) o CSV.
✨ Características
1. Asistencias (Attendance)
Importar Asistencias
- ✅ Botón "Importar" disponible en
/admin/attendance/attendance/ - ✅ Formatos soportados: Excel (.xlsx), CSV (.csv)
- ✅ Permite importar asistencias pasadas (fuera de ventana de tiempo)
- ✅ Valida duplicados y eventos simultáneos automáticamente
- ✅ Auto-crea permisos de Asistente si no existen
Exportar Asistencias
- ✅ Botón "Exportar" disponible en la lista
- ✅ Formatos: Excel (.xlsx), CSV (.csv)
2. Estadísticas de Asistencia (AttendanceStats)
Importar Estadísticas
- ✅ Botón "Importar" disponible en
/admin/attendance/attendancestats/ - ✅ Permite actualizar estadísticas masivamente
Exportar Estadísticas
- ✅ Botón "Exportar" para todas las estadísticas
- ✅ Acción "📊 Exportar estadísticas seleccionadas"
- ✅ Acción "📊 Exportar estudiantes que cumplen requisito para constancia"
- ✅ Acción "🔄 Actualizar estadísticas seleccionadas"
📊 Formato del Archivo Excel para Importar Asistencias
Columnas Requeridas:
| Columna | Descripción | Ejemplo | Obligatorio |
|---|---|---|---|
account_number |
Número de cuenta del estudiante (8 dígitos) | 32114471 | ✅ Sí |
student_name |
Nombre completo del estudiante | Lopez Martinez Valeria | ❌ No (solo referencia) |
event_title |
Título exacto del evento | Matemáticas Aplicadas a Medicina... | ✅ Sí |
registered_by_account |
Cuenta del asistente que registra | 11111111 | ❌ No (default: 11111111) |
timestamp |
Fecha y hora del registro | 2025-10-21 11:30:00 | ❌ No (default: ahora) |
registration_method |
Método de registro | manual | ❌ No (default: manual) |
notes |
Notas adicionales | Importado desde Excel | ❌ No |
is_valid |
¿Es válida la asistencia? | True | ❌ No (default: True) |
Ejemplo de Archivo Excel:
account_number | student_name | event_title | registered_by_account
32114471 | Lopez Martinez Valeria | Matemáticas Aplicadas a Medicina... | 11111111
31904405 | Lopez Martinez Angel | La presión fiscal como oportunidad... | 11111111
42510571 | Almaraz Ramirez Rafael | Tecnologías IIoT al servicio de la Industria | 11111111
⚙️ Comportamiento del Sistema
🔓 skip_validation=True
Cuando se importan asistencias, el sistema usa skip_validation=True que:
✅ PERMITE:
- Importar asistencias fuera de la ventana de tiempo del evento
- Importar asistencias de eventos pasados
- Procesar importaciones masivas históricas
✅ MANTIENE VALIDACIÓN DE:
- ❌ Duplicados: No permite crear dos asistencias del mismo estudiante al mismo evento
- ❌ Eventos simultáneos: No permite asistencia a dos eventos que ocurren al mismo tiempo
🔐 Permisos de Asistente
El sistema automáticamente:
- Busca el asistente por
registered_by_account - Si no existe, usa el asistente por defecto (11111111)
- Verifica si tiene permisos en la tabla
Asistente - Si no tiene permisos, los crea automáticamente con
can_manage_events=True
🚀 Cómo Usar
Importar Asistencias desde Admin
- Ve a
/admin/attendance/attendance/ - Click en botón "IMPORTAR" (arriba a la derecha)
- Selecciona tu archivo Excel o CSV
- El sistema muestra una vista previa de los cambios
- Revisa los errores si los hay
- Click en "Confirmar importación"
- ✅ Listo! Las asistencias se importaron
Exportar Asistencias
- Ve a
/admin/attendance/attendance/ - Click en botón "EXPORTAR"
- Selecciona formato (Excel o CSV)
- Se descarga el archivo automáticamente
Exportar Estudiantes con Constancia
- Ve a
/admin/attendance/attendancestats/ - Selecciona estudiantes (o déjalos todos)
- En "Acción": selecciona "📊 Exportar estudiantes que cumplen requisito para constancia"
- Click en "Ir"
- Se descarga Excel con estudiantes que cumplen el % mínimo
⚠️ Errores Comunes y Soluciones
Error: "Estudiante con cuenta XXXXX no encontrado"
Causa: El número de cuenta no existe en la base de datos Solución: Verifica que el estudiante esté registrado en el sistema
Error: "Evento 'XXXXX' no encontrado"
Causa: El título del evento no coincide exactamente
Solución: Copia el título exacto desde /admin/events/event/
Error: "Este estudiante ya tiene asistencia registrada para este evento"
Causa: Ya existe una asistencia para ese estudiante en ese evento Solución: Es un duplicado, omítelo o elimina el existente primero
Error: "El estudiante ya tiene asistencia registrada en un evento simultáneo"
Causa: El estudiante tiene asistencia en otro evento que ocurre al mismo tiempo Solución: El estudiante no puede estar en dos lugares a la vez. Elige uno solo.
🔄 Actualizar Estadísticas después de Importar
Las estadísticas se actualizan automáticamente después de cada importación.
Si necesitas actualizar manualmente:
- Ve a
/admin/attendance/attendancestats/ - Selecciona los estudiantes
- Acción: "🔄 Actualizar estadísticas seleccionadas"
- Click en "Ir"
📝 Notas Importantes
- Solo superusuarios pueden importar asistencias
- El sistema normaliza automáticamente números de cuenta (elimina espacios, guiones)
- Los certificados SSL pueden variar entre máquinas (regenerar con
./docker/generate_ssl_certs.sh) - La base de datos NO se sincroniza con Git, solo el código
- Para sincronizar datos entre máquinas, usa backup/restore de PostgreSQL
🛠️ Desarrollo
Archivos Modificados:
backend/attendance/admin.py- Admin con ImportExportMixinbackend/attendance/models.py- Modelo con skip_validation
Dependencias:
django-import-export- Manejo de importación/exportaciónopenpyxl- Lectura de archivos Excelpandas- Procesamiento de datos (opcional)
📚 Referencias
- Django Import-Export: https://django-import-export.readthedocs.io/
- Admin de Django: https://docs.djangoproject.com/en/5.0/ref/contrib/admin/