Files
pagasis/backend/scripts/create_test_data.py
T

141 lines
5.2 KiB
Python
Raw Normal View History

2025-10-15 23:45:32 -06:00
#!/usr/bin/env python
"""Script para crear datos de prueba para el sistema de asistencia"""
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mac_attendance.settings')
django.setup()
from django.contrib.auth.models import User
from authentication.models import UserProfile, Asistente
from events.models import Event
from attendance.models import Attendance, AttendanceStats
from datetime import date, time
def create_test_data():
print("[+] Creando datos de prueba...")
# Obtener o crear un asistente para registrar asistencias
try:
asistente_profile = UserProfile.objects.get(user_type='assistant')
print(f"[OK] Asistente encontrado: {asistente_profile.full_name}")
except UserProfile.DoesNotExist:
print("[ERROR] No hay asistentes en el sistema. Por favor crea uno primero.")
return
# Crear 5 estudiantes de prueba
estudiantes_data = [
('3001001', 'María González López', 90.0), # Cumple
('3001002', 'Juan Pérez Martínez', 85.0), # Cumple
('3001003', 'Ana Rodríguez Sánchez', 75.0), # NO cumple
('3001004', 'Carlos López García', 95.0), # Cumple
('3001005', 'Laura Martínez Ruiz', 60.0), # NO cumple
]
estudiantes = []
for account, name, percentage in estudiantes_data:
# Verificar si ya existe
if UserProfile.objects.filter(account_number=account).exists():
print(f"[SKIP] Estudiante {account} ya existe, omitiendo...")
estudiantes.append(UserProfile.objects.get(account_number=account))
continue
# Crear usuario Django
user = User.objects.create_user(
username=account,
first_name=name,
password=None
)
user.set_unusable_password()
user.save()
# Crear perfil
profile = UserProfile.objects.create(
user=user,
account_number=account,
full_name=name,
user_type='student'
)
estudiantes.append(profile)
print(f"[OK] Estudiante creado: {name} ({account})")
# Crear 3 eventos de prueba (en diferentes horarios para evitar conflictos)
eventos_data = [
('Conferencia de Inteligencia Artificial', 'Dr. Roberto Silva', time(9, 0), time(11, 0)),
('Taller de Python Avanzado', 'Ing. Patricia Gómez', time(12, 0), time(14, 0)),
('Seminario de Ciberseguridad', 'M.C. Fernando Ruiz', time(15, 0), time(17, 0)),
]
eventos = []
for title, speaker, start, end in eventos_data:
# Verificar si ya existe
if Event.objects.filter(title=title).exists():
print(f"[SKIP] Evento '{title}' ya existe, omitiendo...")
eventos.append(Event.objects.get(title=title))
continue
evento = Event.objects.create(
title=title,
speaker=speaker,
date=date(2025, 10, 15),
start_time=start,
end_time=end,
event_type='lecture',
modality='presential',
location='Auditorio Principal',
description=f'Descripción de {title}',
created_by=asistente_profile,
is_active=True
)
eventos.append(evento)
print(f"[OK] Evento creado: {title}")
# Crear asistencias simuladas para generar los porcentajes
print("\n[+] Creando estadisticas de asistencia simuladas...")
for i, (profile, (_, _, target_percentage)) in enumerate(zip(estudiantes, estudiantes_data)):
# Crear o actualizar estadísticas
stats, created = AttendanceStats.objects.get_or_create(
student=profile,
defaults={
'total_events': len(eventos),
'attended_events': 0,
'attendance_percentage': 0.0
}
)
# Calcular eventos a asistir para lograr el porcentaje deseado
total_eventos = len(eventos)
eventos_a_asistir = int((target_percentage / 100) * total_eventos)
# Registrar asistencias
for j in range(eventos_a_asistir):
if j < len(eventos):
# Verificar si ya existe la asistencia
if not Attendance.objects.filter(student=profile, event=eventos[j]).exists():
Attendance.objects.create(
student=profile,
event=eventos[j],
registered_by=asistente_profile,
registration_method='manual',
is_valid=True
)
# Actualizar estadísticas
stats.update_stats()
print(f" {profile.full_name}: {stats.attendance_percentage}% de asistencia")
print("\n[OK] Datos de prueba creados exitosamente!")
print(f"\n[RESUMEN]")
print(f" - Estudiantes: {len(estudiantes)}")
print(f" - Eventos: {len(eventos)}")
print(f" - Porcentaje minimo: 80%")
print(f"\n[INFO] Ahora puedes probar:")
print(f" 1. Ir a http://127.0.0.1:8000/admin/")
print(f" 2. Navegar a 'Estadisticas de asistencia'")
print(f" 3. Seleccionar todos los registros")
print(f" 4. Usar la accion: 'Exportar estudiantes que cumplen requisito para constancia'")
if __name__ == '__main__':
create_test_data()