# Generated by Django 6.0 on 2026-01-23 18:13

import django.core.validators
import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Parent',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('external_user_id', models.CharField(blank=True, help_text='User ID from master database', max_length=100, null=True, unique=True)),
                ('first_name', models.CharField(blank=True, max_length=100, null=True)),
                ('middle_name', models.CharField(blank=True, max_length=100, null=True)),
                ('last_name', models.CharField(blank=True, max_length=100, null=True)),
                ('email', models.EmailField(blank=True, help_text='Primary email address', max_length=255, null=True, validators=[django.core.validators.EmailValidator()])),
                ('phone', models.CharField(blank=True, help_text='Primary phone number', max_length=20, null=True)),
                ('alternate_phone', models.CharField(blank=True, help_text='Alternate phone number', max_length=20, null=True)),
                ('parent_type', models.CharField(blank=True, choices=[('FATHER', 'Father'), ('MOTHER', 'Mother'), ('GUARDIAN', 'Guardian'), ('OTHER', 'Other')], max_length=20, null=True)),
                ('occupation', models.CharField(blank=True, max_length=255, null=True)),
                ('annual_income', models.DecimalField(blank=True, decimal_places=2, help_text='Annual income in local currency', max_digits=15, null=True)),
                ('address_line_1', models.TextField(blank=True, null=True)),
                ('address_line_2', models.TextField(blank=True, null=True)),
                ('city', models.CharField(blank=True, max_length=100, null=True)),
                ('state', models.CharField(blank=True, max_length=100, null=True)),
                ('country', models.CharField(blank=True, max_length=100, null=True)),
                ('pincode', models.CharField(blank=True, max_length=20, null=True)),
                ('date_of_birth', models.DateField(blank=True, null=True)),
                ('gender', models.CharField(blank=True, choices=[('MALE', 'Male'), ('FEMALE', 'Female'), ('OTHER', 'Other'), ('PREFER_NOT_TO_SAY', 'Prefer not to say')], max_length=20, null=True)),
                ('identification_number', models.CharField(blank=True, help_text='Aadhar, SSN, or other government ID', max_length=50, null=True)),
                ('identification_type', models.CharField(blank=True, choices=[('AADHAR', 'Aadhar'), ('SSN', 'Social Security Number'), ('PAN', 'PAN'), ('PASSPORT', 'Passport'), ('DRIVING_LICENSE', 'Driving License'), ('OTHER', 'Other')], max_length=50, null=True)),
                ('is_primary', models.BooleanField(default=False, help_text='Is this the primary parent?')),
                ('is_active', models.BooleanField(default=True)),
                ('profile_image', models.ImageField(blank=True, null=True, upload_to='parents/profile_images/')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('deleted_at', models.DateTimeField(blank=True, null=True)),
            ],
            options={
                'verbose_name': 'Parent',
                'verbose_name_plural': 'Parents',
                'db_table': 'parents',
                'ordering': ['last_name', 'first_name'],
                'indexes': [models.Index(fields=['external_user_id'], name='parents_externa_efd1e5_idx'), models.Index(fields=['email'], name='parents_email_346afe_idx'), models.Index(fields=['phone'], name='parents_phone_b7d597_idx'), models.Index(fields=['is_primary'], name='parents_is_prim_270772_idx'), models.Index(fields=['is_active'], name='parents_is_acti_e8ef3e_idx')],
            },
        ),
        migrations.CreateModel(
            name='Student',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('external_user_id', models.CharField(blank=True, help_text='User ID from master database', max_length=100, null=True, unique=True)),
                ('first_name', models.CharField(blank=True, max_length=100, null=True)),
                ('middle_name', models.CharField(blank=True, max_length=100, null=True)),
                ('last_name', models.CharField(blank=True, max_length=100, null=True)),
                ('student_id', models.CharField(blank=True, help_text='Unique student ID within the system', max_length=50, null=True, unique=True)),
                ('roll_number', models.CharField(blank=True, max_length=50, null=True)),
                ('date_of_birth', models.DateField(blank=True, null=True)),
                ('gender', models.CharField(blank=True, choices=[('MALE', 'Male'), ('FEMALE', 'Female'), ('OTHER', 'Other'), ('PREFER_NOT_TO_SAY', 'Prefer not to say')], max_length=20, null=True)),
                ('personal_email', models.EmailField(blank=True, help_text="Student's personal email", max_length=255, null=True, validators=[django.core.validators.EmailValidator()])),
                ('personal_phone', models.CharField(blank=True, help_text="Student's personal phone number", max_length=20, null=True)),
                ('permanent_address_line_1', models.TextField(blank=True, null=True)),
                ('permanent_address_line_2', models.TextField(blank=True, null=True)),
                ('permanent_city', models.CharField(blank=True, max_length=100, null=True)),
                ('permanent_state', models.CharField(blank=True, max_length=100, null=True)),
                ('permanent_country', models.CharField(blank=True, max_length=100, null=True)),
                ('permanent_pincode', models.CharField(blank=True, max_length=20, null=True)),
                ('correspondence_address_line_1', models.TextField(blank=True, null=True)),
                ('correspondence_address_line_2', models.TextField(blank=True, null=True)),
                ('correspondence_city', models.CharField(blank=True, max_length=100, null=True)),
                ('correspondence_state', models.CharField(blank=True, max_length=100, null=True)),
                ('correspondence_country', models.CharField(blank=True, max_length=100, null=True)),
                ('correspondence_pincode', models.CharField(blank=True, max_length=20, null=True)),
                ('admission_date', models.DateField(blank=True, null=True)),
                ('admission_number', models.CharField(blank=True, max_length=50, null=True)),
                ('identification_number', models.CharField(blank=True, help_text='Aadhar, SSN, or other government ID', max_length=50, null=True)),
                ('identification_type', models.CharField(blank=True, choices=[('AADHAR', 'Aadhar'), ('SSN', 'Social Security Number'), ('PAN', 'PAN'), ('PASSPORT', 'Passport'), ('DRIVING_LICENSE', 'Driving License'), ('OTHER', 'Other')], max_length=50, null=True)),
                ('blood_group', models.CharField(blank=True, choices=[('A+', 'A+'), ('A-', 'A-'), ('B+', 'B+'), ('B-', 'B-'), ('O+', 'O+'), ('O-', 'O-'), ('AB+', 'AB+'), ('AB-', 'AB-')], max_length=10, null=True)),
                ('known_allergies', models.TextField(blank=True, null=True)),
                ('medical_conditions', models.TextField(blank=True, null=True)),
                ('emergency_contact_name', models.CharField(blank=True, max_length=255, null=True)),
                ('emergency_contact_phone', models.CharField(blank=True, max_length=20, null=True)),
                ('emergency_contact_relation', models.CharField(blank=True, max_length=100, null=True)),
                ('is_active', models.BooleanField(default=True)),
                ('profile_image', models.ImageField(blank=True, null=True, upload_to='students/profile_images/')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('deleted_at', models.DateTimeField(blank=True, null=True)),
            ],
            options={
                'verbose_name': 'Student',
                'verbose_name_plural': 'Students',
                'db_table': 'students',
                'ordering': ['last_name', 'first_name'],
                'indexes': [models.Index(fields=['external_user_id'], name='students_externa_aedf56_idx'), models.Index(fields=['student_id'], name='students_student_1ff8ed_idx'), models.Index(fields=['roll_number'], name='students_roll_nu_954626_idx'), models.Index(fields=['admission_number'], name='students_admissi_664d58_idx'), models.Index(fields=['is_active'], name='students_is_acti_4aecc9_idx')],
            },
        ),
        migrations.CreateModel(
            name='Teacher',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('external_user_id', models.CharField(blank=True, help_text='User ID from master database', max_length=100, null=True, unique=True)),
                ('first_name', models.CharField(blank=True, max_length=100, null=True)),
                ('middle_name', models.CharField(blank=True, max_length=100, null=True)),
                ('last_name', models.CharField(blank=True, max_length=100, null=True)),
                ('email', models.EmailField(blank=True, help_text='Primary email address', max_length=255, null=True, validators=[django.core.validators.EmailValidator()])),
                ('phone', models.CharField(blank=True, help_text='Primary phone number', max_length=20, null=True)),
                ('alternate_phone', models.CharField(blank=True, help_text='Alternate phone number', max_length=20, null=True)),
                ('employee_id', models.CharField(blank=True, max_length=50, null=True, unique=True)),
                ('qualification', models.CharField(blank=True, max_length=255, null=True)),
                ('specialization', models.CharField(blank=True, max_length=255, null=True)),
                ('date_of_joining', models.DateField(blank=True, null=True)),
                ('employment_type', models.CharField(blank=True, choices=[('FULL_TIME', 'Full Time'), ('PART_TIME', 'Part Time'), ('CONTRACT', 'Contract'), ('VISITING', 'Visiting')], max_length=50, null=True)),
                ('address_line_1', models.TextField(blank=True, null=True)),
                ('address_line_2', models.TextField(blank=True, null=True)),
                ('city', models.CharField(blank=True, max_length=100, null=True)),
                ('state', models.CharField(blank=True, max_length=100, null=True)),
                ('country', models.CharField(blank=True, max_length=100, null=True)),
                ('pincode', models.CharField(blank=True, max_length=20, null=True)),
                ('date_of_birth', models.DateField(blank=True, null=True)),
                ('gender', models.CharField(blank=True, choices=[('MALE', 'Male'), ('FEMALE', 'Female'), ('OTHER', 'Other'), ('PREFER_NOT_TO_SAY', 'Prefer not to say')], max_length=20, null=True)),
                ('emergency_contact_name', models.CharField(blank=True, max_length=255, null=True)),
                ('emergency_contact_phone', models.CharField(blank=True, max_length=20, null=True)),
                ('emergency_contact_relation', models.CharField(blank=True, max_length=100, null=True)),
                ('is_active', models.BooleanField(default=True)),
                ('profile_image', models.ImageField(blank=True, null=True, upload_to='teachers/profile_images/')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('deleted_at', models.DateTimeField(blank=True, null=True)),
            ],
            options={
                'verbose_name': 'Teacher',
                'verbose_name_plural': 'Teachers',
                'db_table': 'teachers',
                'ordering': ['last_name', 'first_name'],
                'indexes': [models.Index(fields=['external_user_id'], name='teachers_externa_937135_idx'), models.Index(fields=['email'], name='teachers_email_87e41d_idx'), models.Index(fields=['employee_id'], name='teachers_employe_e16945_idx'), models.Index(fields=['is_active'], name='teachers_is_acti_d8ca50_idx')],
            },
        ),
        migrations.CreateModel(
            name='StudentParent',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('relationship', models.CharField(blank=True, choices=[('FATHER', 'Father'), ('MOTHER', 'Mother'), ('GUARDIAN', 'Guardian'), ('GRANDFATHER', 'Grandfather'), ('GRANDMOTHER', 'Grandmother'), ('UNCLE', 'Uncle'), ('AUNT', 'Aunt'), ('SIBLING', 'Sibling'), ('OTHER', 'Other')], max_length=50, null=True)),
                ('is_primary_contact', models.BooleanField(default=False, help_text='Is this the primary contact for the student?')),
                ('can_pickup', models.BooleanField(default=False, help_text='Can this parent pick up the student from school?')),
                ('has_medical_consent', models.BooleanField(default=False, help_text='Can this parent give medical consent?')),
                ('has_academic_access', models.BooleanField(default=True, help_text='Can this parent access academic information?')),
                ('receive_notifications', models.BooleanField(default=True)),
                ('notification_preferences', models.JSONField(blank=True, default=dict, help_text='JSON field for notification preferences', null=True)),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('deleted_at', models.DateTimeField(blank=True, null=True)),
                ('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_parents', to='people.parent')),
                ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_parents', to='people.student')),
            ],
            options={
                'verbose_name': 'Student Parent Relationship',
                'verbose_name_plural': 'Student Parent Relationships',
                'db_table': 'student_parents',
                'ordering': ['student__last_name', 'student__first_name'],
                'indexes': [models.Index(fields=['student', 'parent'], name='student_par_student_f5ab2a_idx'), models.Index(fields=['is_active'], name='student_par_is_acti_ac36ae_idx'), models.Index(fields=['is_primary_contact'], name='student_par_is_prim_0f9743_idx'), models.Index(fields=['relationship'], name='student_par_relatio_a6da4b_idx')],
                'unique_together': {('student', 'parent')},
            },
        ),
    ]
