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

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


def backfill_organization(apps, schema_editor):
    Organization = apps.get_model('companies', 'Organization')
    Account = apps.get_model('accounting', 'Account')
    Fund = apps.get_model('accounting', 'Fund')
    JournalEntry = apps.get_model('accounting', 'JournalEntry')
    Sale = apps.get_model('accounting', 'Sale')
    SalesAccountingSettings = apps.get_model('accounting', 'SalesAccountingSettings')
    Transaction = apps.get_model('accounting', 'Transaction')

    org = Organization.objects.first()
    if org is None:
        return
    Account.objects.filter(organization__isnull=True).update(organization=org)
    Fund.objects.filter(organization__isnull=True).update(organization=org)
    JournalEntry.objects.filter(organization__isnull=True).update(organization=org)
    Sale.objects.filter(organization__isnull=True).update(organization=org)
    SalesAccountingSettings.objects.filter(organization__isnull=True).update(organization=org)
    Transaction.objects.filter(organization__isnull=True).update(organization=org)


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('accounting', '0008_alter_account_type'),
        ('asset_management', '0009_licenseseatassignment'),
        ('companies', '0012_add_organization_scope'),
        ('contacts', '0004_add_organization_scope'),
        ('finance', '0010_budgetcategory_expense_account'),
        ('procurements', '0017_payment_fund_approval'),
        ('projects', '0026_add_organization_scope'),
    ]

    operations = [
        migrations.AddField(
            model_name='account',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='accounts', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='fund',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='accounting_funds_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='journalentry',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='journal_entries_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='sale',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sales_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='salesaccountingsettings',
            name='organization',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sales_accounting_settings', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='transaction',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transactions_scoped', to='companies.organization'),
        ),
        migrations.RunPython(backfill_organization, noop_reverse),
        migrations.AlterField(
            model_name='account',
            name='code',
            field=models.CharField(help_text='e.g. 1000, 4000.', max_length=20),
        ),
        migrations.AlterField(
            model_name='fund',
            name='fund_id',
            field=models.CharField(help_text='Business key, e.g. FND-001.', max_length=30),
        ),
        migrations.AlterField(
            model_name='journalentry',
            name='journal_no',
            field=models.CharField(help_text='e.g. JV-001.', max_length=30),
        ),
        migrations.AlterField(
            model_name='sale',
            name='sale_no',
            field=models.CharField(help_text='e.g. SALE-001.', max_length=30),
        ),
        migrations.AlterField(
            model_name='transaction',
            name='transaction_id',
            field=models.CharField(help_text='Business key, e.g. TRX-001.', max_length=30),
        ),
        migrations.AlterField(
            model_name='account',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accounts', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='fund',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accounting_funds_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='journalentry',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='journal_entries_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='sale',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sales_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='salesaccountingsettings',
            name='organization',
            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='sales_accounting_settings', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='transaction',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transactions_scoped', to='companies.organization'),
        ),
        migrations.AddConstraint(
            model_name='account',
            constraint=models.UniqueConstraint(fields=('organization', 'code'), name='unique_account_code_per_org'),
        ),
        migrations.AddConstraint(
            model_name='fund',
            constraint=models.UniqueConstraint(fields=('organization', 'fund_id'), name='unique_fund_id_per_org'),
        ),
        migrations.AddConstraint(
            model_name='journalentry',
            constraint=models.UniqueConstraint(fields=('organization', 'journal_no'), name='unique_journal_no_per_org'),
        ),
        migrations.AddConstraint(
            model_name='sale',
            constraint=models.UniqueConstraint(fields=('organization', 'sale_no'), name='unique_sale_no_per_org'),
        ),
        migrations.AddConstraint(
            model_name='transaction',
            constraint=models.UniqueConstraint(fields=('organization', 'transaction_id'), name='unique_transaction_id_per_org'),
        ),
    ]
