forked from val-lop20/Pagina-de-Asistencia-MAC
175 lines
6.3 KiB
Markdown
175 lines
6.3 KiB
Markdown
# 📥 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**:
|
|
1. Busca el asistente por `registered_by_account`
|
|
2. Si no existe, usa el asistente por defecto (11111111)
|
|
3. Verifica si tiene permisos en la tabla `Asistente`
|
|
4. Si no tiene permisos, los crea automáticamente con `can_manage_events=True`
|
|
|
|
---
|
|
|
|
## 🚀 Cómo Usar
|
|
|
|
### Importar Asistencias desde Admin
|
|
|
|
1. Ve a `/admin/attendance/attendance/`
|
|
2. Click en botón **"IMPORTAR"** (arriba a la derecha)
|
|
3. Selecciona tu archivo Excel o CSV
|
|
4. El sistema muestra una **vista previa** de los cambios
|
|
5. Revisa los errores si los hay
|
|
6. Click en **"Confirmar importación"**
|
|
7. ✅ Listo! Las asistencias se importaron
|
|
|
|
### Exportar Asistencias
|
|
|
|
1. Ve a `/admin/attendance/attendance/`
|
|
2. Click en botón **"EXPORTAR"**
|
|
3. Selecciona formato (Excel o CSV)
|
|
4. Se descarga el archivo automáticamente
|
|
|
|
### Exportar Estudiantes con Constancia
|
|
|
|
1. Ve a `/admin/attendance/attendancestats/`
|
|
2. Selecciona estudiantes (o déjalos todos)
|
|
3. En "Acción": selecciona **"📊 Exportar estudiantes que cumplen requisito para constancia"**
|
|
4. Click en **"Ir"**
|
|
5. 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:
|
|
1. Ve a `/admin/attendance/attendancestats/`
|
|
2. Selecciona los estudiantes
|
|
3. Acción: **"🔄 Actualizar estadísticas seleccionadas"**
|
|
4. Click en **"Ir"**
|
|
|
|
---
|
|
|
|
## 📝 Notas Importantes
|
|
|
|
1. **Solo superusuarios** pueden importar asistencias
|
|
2. El sistema **normaliza automáticamente** números de cuenta (elimina espacios, guiones)
|
|
3. Los **certificados SSL** pueden variar entre máquinas (regenerar con `./docker/generate_ssl_certs.sh`)
|
|
4. La **base de datos NO se sincroniza con Git**, solo el código
|
|
5. Para sincronizar datos entre máquinas, usa **backup/restore de PostgreSQL**
|
|
|
|
---
|
|
|
|
## 🛠️ Desarrollo
|
|
|
|
### Archivos Modificados:
|
|
- `backend/attendance/admin.py` - Admin con ImportExportMixin
|
|
- `backend/attendance/models.py` - Modelo con skip_validation
|
|
|
|
### Dependencias:
|
|
- `django-import-export` - Manejo de importación/exportación
|
|
- `openpyxl` - Lectura de archivos Excel
|
|
- `pandas` - 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/
|