# Generated by Django 5.2.6 on 2025-09-24 00:32 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('authentication', '0001_initial'), ] operations = [ migrations.CreateModel( name='Event', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200, verbose_name='Título de la ponencia')), ('description', models.TextField(verbose_name='Descripción')), ('event_type', models.CharField(choices=[('conference', 'Conferencia'), ('workshop', 'Taller'), ('panel', 'Mesa Redonda'), ('seminar', 'Seminario')], default='conference', max_length=20, verbose_name='Tipo de evento')), ('modality', models.CharField(choices=[('presencial', 'Presencial'), ('online', 'En línea'), ('hybrid', 'Híbrido')], default='presencial', max_length=15, verbose_name='Modalidad')), ('speaker', models.CharField(max_length=200, verbose_name='Ponente')), ('date', models.DateField(verbose_name='Fecha')), ('start_time', models.TimeField(verbose_name='Hora de inicio')), ('end_time', models.TimeField(verbose_name='Hora de fin')), ('location', models.CharField(help_text='Para eventos presenciales: aula/salón. Para eventos en línea: enlace o plataforma', max_length=200, verbose_name='Ubicación/Plataforma')), ('max_capacity', models.IntegerField(default=100, verbose_name='Capacidad máxima')), ('is_active', models.BooleanField(default=True, verbose_name='Evento activo')), ('requires_registration', models.BooleanField(default=False, verbose_name='Requiere registro previo')), ('meeting_link', models.URLField(blank=True, help_text='Para eventos en línea o híbridos', null=True, verbose_name='Enlace de reunión')), ('meeting_id', models.CharField(blank=True, help_text='Código de sala/reunión', max_length=50, null=True, verbose_name='ID de reunión')), ('created_at', models.DateTimeField(auto_now_add=True)), ('created_by', models.ForeignKey(limit_choices_to={'user_type': 'teacher'}, on_delete=django.db.models.deletion.CASCADE, to='authentication.userprofile', verbose_name='Creado por')), ], options={ 'verbose_name': 'Evento/Ponencia', 'verbose_name_plural': 'Eventos/Ponencias', 'ordering': ['date', 'start_time'], }, ), migrations.CreateModel( name='ExternalUser', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('full_name', models.CharField(max_length=200, verbose_name='Nombre completo')), ('email', models.EmailField(max_length=254, verbose_name='Correo electrónico')), ('phone', models.CharField(blank=True, max_length=15, null=True, verbose_name='Teléfono')), ('institution', models.CharField(max_length=200, verbose_name='Institución de procedencia')), ('position', models.CharField(blank=True, max_length=100, null=True, verbose_name='Cargo/Posición')), ('reason', models.TextField(verbose_name='Motivo de asistencia')), ('temporary_id', models.CharField(max_length=20, unique=True, verbose_name='ID temporal')), ('status', models.CharField(choices=[('pending', 'Pendiente'), ('approved', 'Aprobado'), ('rejected', 'Rechazado')], default='pending', max_length=10, verbose_name='Estado de aprobación')), ('rejection_reason', models.TextField(blank=True, null=True, verbose_name='Motivo de rechazo')), ('created_at', models.DateTimeField(auto_now_add=True)), ('processed_at', models.DateTimeField(blank=True, null=True)), ('approved_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='authentication.userprofile', verbose_name='Aprobado por')), ], options={ 'verbose_name': 'Usuario Externo', 'verbose_name_plural': 'Usuarios Externos', 'ordering': ['-created_at'], }, ), ]