forked from val-lop20/Pagina-de-Asistencia-MAC
90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Script para eliminar asistencias a la conferencia fiscal y actualizar estadísticas.
|
|
"""
|
|
import os
|
|
import sys
|
|
import django
|
|
|
|
# Configurar Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mac_attendance.settings')
|
|
django.setup()
|
|
|
|
from attendance.models import Attendance, AttendanceStats
|
|
from events.models import Event
|
|
from authentication.models import UserProfile
|
|
|
|
def delete_fiscal_attendances():
|
|
"""Eliminar asistencias a la conferencia fiscal"""
|
|
print("=" * 80)
|
|
print("ELIMINANDO ASISTENCIAS A CONFERENCIA FISCAL")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
# Buscar el evento
|
|
try:
|
|
fiscal_event = Event.objects.get(title="La presión fiscal como oportunidad en el entorno profesional")
|
|
print(f"✓ Evento encontrado: {fiscal_event.title}")
|
|
print(f" ID: {fiscal_event.id}")
|
|
print(f" Fecha: {fiscal_event.date}")
|
|
print(f" Horario: {fiscal_event.start_time} - {fiscal_event.end_time}")
|
|
print()
|
|
|
|
# Obtener todas las asistencias
|
|
fiscal_attendances = Attendance.objects.filter(event=fiscal_event)
|
|
total_attendances = fiscal_attendances.count()
|
|
|
|
print(f"Total de asistencias a eliminar: {total_attendances}")
|
|
print()
|
|
|
|
if total_attendances > 0:
|
|
# Guardar los estudiantes afectados para actualizar sus estadísticas
|
|
affected_students = set()
|
|
|
|
print("Eliminando asistencias:")
|
|
for att in fiscal_attendances:
|
|
student = att.student
|
|
affected_students.add(student)
|
|
print(f" - {student.account_number}: {student.full_name} (ID: {att.id})")
|
|
att.delete()
|
|
|
|
print()
|
|
print(f"✓ {total_attendances} asistencias eliminadas")
|
|
print()
|
|
|
|
# Actualizar estadísticas de los estudiantes afectados
|
|
print("Actualizando estadísticas de estudiantes afectados...")
|
|
print()
|
|
|
|
for student in affected_students:
|
|
try:
|
|
stats = AttendanceStats.objects.get(student=student)
|
|
old_attended = stats.attended_events
|
|
old_percentage = stats.attendance_percentage
|
|
|
|
stats.update_stats()
|
|
|
|
print(f" ✓ {student.full_name}")
|
|
print(f" Antes: {old_attended}/{stats.total_events} ({old_percentage}%)")
|
|
print(f" Ahora: {stats.attended_events}/{stats.total_events} ({stats.attendance_percentage}%)")
|
|
except AttendanceStats.DoesNotExist:
|
|
print(f" ⚠ {student.full_name} - No tiene estadísticas")
|
|
|
|
print()
|
|
print(f"✓ Estadísticas actualizadas para {len(affected_students)} estudiantes")
|
|
else:
|
|
print("✓ No hay asistencias que eliminar")
|
|
|
|
except Event.DoesNotExist:
|
|
print("✗ No se encontró el evento 'La presión fiscal como oportunidad en el entorno profesional'")
|
|
return
|
|
|
|
print()
|
|
print("=" * 80)
|
|
print("✓ Proceso completado")
|
|
print("=" * 80)
|
|
|
|
if __name__ == "__main__":
|
|
delete_fiscal_attendances()
|