# 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')
    FinancePosting = apps.get_model('procurements', 'FinancePosting')
    GoodsReceipt = apps.get_model('procurements', 'GoodsReceipt')
    Invoice = apps.get_model('procurements', 'Invoice')
    Payment = apps.get_model('procurements', 'Payment')
    ProcurementContract = apps.get_model('procurements', 'ProcurementContract')
    ProcurementEvent = apps.get_model('procurements', 'ProcurementEvent')
    ProcurementPolicy = apps.get_model('procurements', 'ProcurementPolicy')
    PurchaseOrder = apps.get_model('procurements', 'PurchaseOrder')
    Requisition = apps.get_model('procurements', 'Requisition')
    RFQRFP = apps.get_model('procurements', 'RFQRFP')

    org = Organization.objects.first()
    if org is None:
        return
    FinancePosting.objects.filter(organization__isnull=True).update(organization=org)
    GoodsReceipt.objects.filter(organization__isnull=True).update(organization=org)
    Invoice.objects.filter(organization__isnull=True).update(organization=org)
    Payment.objects.filter(organization__isnull=True).update(organization=org)
    ProcurementContract.objects.filter(organization__isnull=True).update(organization=org)
    ProcurementEvent.objects.filter(organization__isnull=True).update(organization=org)
    ProcurementPolicy.objects.filter(organization__isnull=True).update(organization=org)
    PurchaseOrder.objects.filter(organization__isnull=True).update(organization=org)
    Requisition.objects.filter(organization__isnull=True).update(organization=org)
    RFQRFP.objects.filter(organization__isnull=True).update(organization=org)


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('asset_management', '0010_add_organization_scope'),
        ('companies', '0012_add_organization_scope'),
        ('finance', '0011_add_organization_scope'),
        ('procurements', '0017_payment_fund_approval'),
        ('projects', '0026_add_organization_scope'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.RemoveConstraint(
            model_name='financeposting',
            name='unique_procurement_finance_posting',
        ),
        migrations.AddField(
            model_name='financeposting',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_finance_postings_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='goodsreceipt',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='goods_receipts_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='invoice',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_invoices_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='payment',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_payments_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='procurementcontract',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_contracts_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='procurementevent',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_events', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='procurementpolicy',
            name='organization',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='procurement_policy', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='purchaseorder',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='purchase_orders_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='requisition',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='requisitions', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='rfqrfp',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rfq_rfps_scoped', to='companies.organization'),
        ),
        migrations.RunPython(backfill_organization, noop_reverse),
        migrations.AlterField(
            model_name='goodsreceipt',
            name='receipt_number',
            field=models.CharField(max_length=50),
        ),
        migrations.AlterField(
            model_name='invoice',
            name='invoice_number',
            field=models.CharField(max_length=50),
        ),
        migrations.AlterField(
            model_name='procurementcontract',
            name='contract_number',
            field=models.CharField(max_length=100),
        ),
        migrations.AlterField(
            model_name='purchaseorder',
            name='order_number',
            field=models.CharField(max_length=50),
        ),
        migrations.AlterField(
            model_name='requisition',
            name='number',
            field=models.CharField(blank=True, max_length=40),
        ),
        migrations.AlterField(
            model_name='financeposting',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_finance_postings_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='goodsreceipt',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='goods_receipts_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='invoice',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_invoices_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='payment',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_payments_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='procurementcontract',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_contracts_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='procurementevent',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_events', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='procurementpolicy',
            name='organization',
            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='procurement_policy', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='purchaseorder',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='purchase_orders_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='requisition',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='requisitions', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='rfqrfp',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rfq_rfps_scoped', to='companies.organization'),
        ),
        migrations.AddConstraint(
            model_name='financeposting',
            constraint=models.UniqueConstraint(fields=('organization', 'source_type', 'source_id', 'posting_type'), name='unique_procurement_finance_posting'),
        ),
        migrations.AddConstraint(
            model_name='goodsreceipt',
            constraint=models.UniqueConstraint(fields=('organization', 'receipt_number'), name='unique_receipt_number_per_org'),
        ),
        migrations.AddConstraint(
            model_name='invoice',
            constraint=models.UniqueConstraint(fields=('organization', 'invoice_number'), name='unique_procurement_invoice_number_per_org'),
        ),
        migrations.AddConstraint(
            model_name='procurementcontract',
            constraint=models.UniqueConstraint(fields=('organization', 'contract_number'), name='unique_contract_number_per_org'),
        ),
        migrations.AddConstraint(
            model_name='purchaseorder',
            constraint=models.UniqueConstraint(fields=('organization', 'order_number'), name='unique_order_number_per_org'),
        ),
        migrations.AddConstraint(
            model_name='requisition',
            constraint=models.UniqueConstraint(fields=('organization', 'number'), name='unique_requisition_number_per_org'),
        ),
    ]
