# Generated by Django 5.2.6 on 2026-06-29 10:52

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


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='BudgetHead',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Created At')),
                ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
                ('name', models.CharField(max_length=200, unique=True, verbose_name='Head Name')),
                ('code', models.CharField(editable=False, max_length=20, unique=True, verbose_name='Budget Code')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified_by', to=settings.AUTH_USER_MODEL, verbose_name='Modified By')),
            ],
            options={
                'verbose_name': 'Budget Head',
                'verbose_name_plural': 'Budget Heads',
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='BudgetSettings',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Created At')),
                ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
                ('overrun_limit_percent', models.DecimalField(decimal_places=2, default=0, help_text='Maximum percentage by which a request may exceed the remaining budget balance before it is blocked.  0 = no overrun allowed.', max_digits=5, verbose_name='Over-budget Limit (%)')),
                ('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified_by', to=settings.AUTH_USER_MODEL, verbose_name='Modified By')),
            ],
            options={
                'verbose_name': 'Budget Settings',
                'verbose_name_plural': 'Budget Settings',
            },
        ),
        migrations.CreateModel(
            name='BudgetSubHead',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Created At')),
                ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
                ('name', models.CharField(max_length=200, verbose_name='Sub-Head Name')),
                ('code', models.CharField(editable=False, max_length=30, unique=True, verbose_name='Budget Code')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('head', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sub_heads', to='budget.budgethead', verbose_name='Budget Head')),
                ('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified_by', to=settings.AUTH_USER_MODEL, verbose_name='Modified By')),
            ],
            options={
                'verbose_name': 'Budget Sub-Head',
                'verbose_name_plural': 'Budget Sub-Heads',
                'ordering': ['head__name', 'name'],
                'unique_together': {('head', 'name')},
            },
        ),
        migrations.CreateModel(
            name='BudgetItem',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Created At')),
                ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
                ('name', models.CharField(max_length=200, verbose_name='Item Name')),
                ('code', models.CharField(editable=False, max_length=40, unique=True, verbose_name='Budget Code')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified_by', to=settings.AUTH_USER_MODEL, verbose_name='Modified By')),
                ('sub_head', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='budget.budgetsubhead', verbose_name='Budget Sub-Head')),
            ],
            options={
                'verbose_name': 'Budget Item',
                'verbose_name_plural': 'Budget Items',
                'ordering': ['sub_head__head__name', 'sub_head__name', 'name'],
                'unique_together': {('sub_head', 'name')},
            },
        ),
        migrations.CreateModel(
            name='BudgetAllocation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Created At')),
                ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
                ('fiscal_year', models.PositiveSmallIntegerField(help_text='e.g. 2025 for FY 2025 (Jan–Dec)', verbose_name='Fiscal Year')),
                ('period_type', models.CharField(choices=[('annual', 'Annual'), ('quarterly', 'Quarterly'), ('monthly', 'Monthly'), ('weekly', 'Weekly')], default='annual', max_length=20, verbose_name='Period Type')),
                ('period_value', models.PositiveSmallIntegerField(blank=True, help_text='Quarter (1–4), Month (1–12), or Week (1–53). Leave blank for Annual.', null=True, verbose_name='Period Value')),
                ('allocated_amount', models.DecimalField(decimal_places=2, default=0, max_digits=15, verbose_name='Allocated Amount (₦)')),
                ('committed_amount', models.DecimalField(decimal_places=2, default=0, help_text='Total of pending/submitted expense requests.', max_digits=15, verbose_name='Committed Amount (₦)')),
                ('approved_amount', models.DecimalField(decimal_places=2, default=0, help_text='Total of approved but not yet disbursed requests.', max_digits=15, verbose_name='Approved Amount (₦)')),
                ('disbursed_amount', models.DecimalField(decimal_places=2, default=0, help_text='Total actually paid out.', max_digits=15, verbose_name='Disbursed Amount (₦)')),
                ('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified_by', to=settings.AUTH_USER_MODEL, verbose_name='Modified By')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='budget.budgetitem', verbose_name='Budget Item')),
            ],
            options={
                'verbose_name': 'Budget Allocation',
                'verbose_name_plural': 'Budget Allocations',
                'ordering': ['-fiscal_year', 'period_type', 'period_value'],
                'unique_together': {('item', 'fiscal_year', 'period_type', 'period_value')},
            },
        ),
    ]
