Files
pagasis/backend/events/migrations/0001_initial.py
T
2025-10-15 23:45:32 -06:00

67 lines
4.4 KiB
Python

# 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'],
},
),
]