# Generated by Django 6.0.4 on 2026-07-29 07:58, hand-adjusted:
# backfill organization to the bootstrapped CSIS org, then tighten to non-null.

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


def backfill_organization(apps, schema_editor):
    Organization = apps.get_model('companies', 'Organization')
    AttendanceSettings = apps.get_model('hr', 'AttendanceSettings')
    Communication = apps.get_model('hr', 'Communication')
    Employee = apps.get_model('hr', 'Employee')
    PayrollSettings = apps.get_model('hr', 'PayrollSettings')
    Recruitment = apps.get_model('hr', 'Recruitment')
    ShiftTemplate = apps.get_model('hr', 'ShiftTemplate')
    Survey = apps.get_model('hr', 'Survey')

    org = Organization.objects.first()
    if org is None:
        return
    Communication.objects.filter(organization__isnull=True).update(organization=org)
    Employee.objects.filter(organization__isnull=True).update(organization=org)
    Recruitment.objects.filter(organization__isnull=True).update(organization=org)
    ShiftTemplate.objects.filter(organization__isnull=True).update(organization=org)
    Survey.objects.filter(organization__isnull=True).update(organization=org)
    # Singletons: at most one existing row of each, before this migration.
    if not AttendanceSettings.objects.filter(organization=org).exists():
        AttendanceSettings.objects.filter(organization__isnull=True).update(organization=org)
    if not PayrollSettings.objects.filter(organization=org).exists():
        PayrollSettings.objects.filter(organization__isnull=True).update(organization=org)


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('companies', '0012_add_organization_scope'),
        ('hr', '0010_employee_status_index_payroll_period_index'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name='attendancesettings',
            name='organization',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attendance_settings', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='communication',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='communications', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='employee',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='employees', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='payrollsettings',
            name='organization',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='payroll_settings', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='recruitment',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='recruitments', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='shifttemplate',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='shift_templates', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='survey',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='surveys', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='employee',
            name='employee_id',
            field=models.CharField(max_length=50),
        ),
        migrations.AddConstraint(
            model_name='employee',
            constraint=models.UniqueConstraint(fields=('organization', 'employee_id'), name='unique_employee_id_per_org'),
        ),
        migrations.RunPython(backfill_organization, noop_reverse),
        migrations.AlterField(
            model_name='attendancesettings',
            name='organization',
            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_settings', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='communication',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='communications', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='employee',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employees', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='payrollsettings',
            name='organization',
            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='payroll_settings', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='recruitment',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recruitments', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='shifttemplate',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='shift_templates', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='survey',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='surveys', to='companies.organization'),
        ),
    ]
