# 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.conf import settings
from django.db import migrations, models


def backfill_organization(apps, schema_editor):
    Organization = apps.get_model('companies', 'Organization')
    BankAccount = apps.get_model('finance', 'BankAccount')
    BankStatementImport = apps.get_model('finance', 'BankStatementImport')
    BudgetCategory = apps.get_model('finance', 'BudgetCategory')
    Currency = apps.get_model('finance', 'Currency')
    Invoice = apps.get_model('finance', 'Invoice')
    TaxRate = apps.get_model('finance', 'TaxRate')

    org = Organization.objects.first()
    if org is None:
        return
    BankAccount.objects.filter(organization__isnull=True).update(organization=org)
    BankStatementImport.objects.filter(organization__isnull=True).update(organization=org)
    BudgetCategory.objects.filter(organization__isnull=True).update(organization=org)
    Currency.objects.filter(organization__isnull=True).update(organization=org)
    Invoice.objects.filter(organization__isnull=True).update(organization=org)
    TaxRate.objects.filter(organization__isnull=True).update(organization=org)


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('accounting', '0009_add_organization_scope'),
        ('companies', '0012_add_organization_scope'),
        ('events', '0010_add_organization_scope'),
        ('finance', '0010_budgetcategory_expense_account'),
        ('projects', '0026_add_organization_scope'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name='bankaccount',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bank_accounts', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='bankstatementimport',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bank_statement_imports', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='budgetcategory',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='budget_categories', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='currency',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='currencies', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='invoice',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='receivable_invoices_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='taxrate',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tax_rates', to='companies.organization'),
        ),
        migrations.RunPython(backfill_organization, noop_reverse),
        migrations.AlterField(
            model_name='budgetcategory',
            name='code',
            field=models.CharField(blank=True, max_length=20),
        ),
        migrations.AlterField(
            model_name='currency',
            name='code',
            field=models.CharField(help_text='ISO-ish code, e.g. USD, IDR.', max_length=10),
        ),
        migrations.AlterField(
            model_name='invoice',
            name='invoice_number',
            field=models.CharField(blank=True, max_length=50),
        ),
        migrations.AlterField(
            model_name='bankaccount',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bank_accounts', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='bankstatementimport',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bank_statement_imports', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='budgetcategory',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='budget_categories', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='currency',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='currencies', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='invoice',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receivable_invoices_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='taxrate',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tax_rates', to='companies.organization'),
        ),
        migrations.AddConstraint(
            model_name='budgetcategory',
            constraint=models.UniqueConstraint(fields=('organization', 'code'), name='unique_budget_category_code_per_org'),
        ),
        migrations.AddConstraint(
            model_name='currency',
            constraint=models.UniqueConstraint(fields=('organization', 'code'), name='unique_currency_code_per_org'),
        ),
        migrations.AddConstraint(
            model_name='invoice',
            constraint=models.UniqueConstraint(fields=('organization', 'invoice_number'), name='unique_finance_invoice_number_per_org'),
        ),
    ]
