Files
pagasis/backend/delete_fiscal_attendances.py
T
2025-10-21 22:08:48 -06:00

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()