# Generated by Django 5.2.12 on 2026-04-21 18:17

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


class Migration(migrations.Migration):

    dependencies = [
        ("rims_finance", "0003_disbursementrequest_milestone"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="budget",
            name="account_reference",
            field=models.CharField(blank=True, max_length=96),
        ),
        migrations.AddField(
            model_name="budget",
            name="approved_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="budget",
            name="finalized_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="budget",
            name="status",
            field=models.CharField(
                choices=[
                    ("draft", "Draft"),
                    ("submitted", "Submitted"),
                    ("approved", "Approved"),
                    ("finalized", "Finalized"),
                ],
                default="draft",
                max_length=16,
            ),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="account_code",
            field=models.CharField(blank=True, max_length=64),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="allocation_year",
            field=models.PositiveSmallIntegerField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="category",
            field=models.CharField(
                choices=[
                    ("personnel", "Personnel"),
                    ("travel", "Travel"),
                    ("equipment", "Equipment"),
                    ("training", "Training"),
                    ("operations", "Operations"),
                    ("other", "Other"),
                ],
                default="other",
                max_length=24,
            ),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="quantity",
            field=models.DecimalField(decimal_places=2, default=1, max_digits=10),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="unit",
            field=models.CharField(blank=True, max_length=64),
        ),
        migrations.AddField(
            model_name="budgetline",
            name="unit_cost",
            field=models.DecimalField(blank=True, decimal_places=2, max_digits=14, null=True),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="account_reference",
            field=models.CharField(blank=True, max_length=96),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="approved_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="approved_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="disbursement_requests_approved",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="payment_method",
            field=models.CharField(
                choices=[
                    ("bank_transfer", "Bank transfer"),
                    ("mobile_money", "Mobile money"),
                    ("cheque", "Cheque"),
                    ("cash", "Cash"),
                    ("other", "Other"),
                ],
                default="bank_transfer",
                max_length=24,
            ),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="rejection_reason",
            field=models.TextField(blank=True),
        ),
        migrations.AddField(
            model_name="disbursementrequest",
            name="scheduled_for",
            field=models.DateField(blank=True, null=True),
        ),
        migrations.CreateModel(
            name="DisbursementExecution",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("scheduled", "Scheduled"),
                            ("executed", "Executed"),
                            ("rescheduled", "Rescheduled"),
                            ("failed", "Failed"),
                        ],
                        default="scheduled",
                        max_length=16,
                    ),
                ),
                (
                    "payment_method",
                    models.CharField(
                        choices=[
                            ("bank_transfer", "Bank transfer"),
                            ("mobile_money", "Mobile money"),
                            ("cheque", "Cheque"),
                            ("cash", "Cash"),
                            ("other", "Other"),
                        ],
                        default="bank_transfer",
                        max_length=24,
                    ),
                ),
                ("scheduled_for", models.DateField(blank=True, null=True)),
                ("executed_at", models.DateTimeField(blank=True, null=True)),
                ("execution_reference", models.CharField(blank=True, max_length=96)),
                ("destination_account", models.CharField(blank=True, max_length=96)),
                ("notes", models.TextField(blank=True)),
                ("reschedule_history", models.JSONField(blank=True, default=list)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "request",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="execution",
                        to="rims_finance.disbursementrequest",
                    ),
                ),
            ],
            options={
                "ordering": ["-updated_at"],
            },
        ),
        migrations.CreateModel(
            name="DisbursementReconciliation",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "Pending"),
                            ("reconciled", "Reconciled"),
                            ("discrepancy", "Discrepancy"),
                        ],
                        default="pending",
                        max_length=16,
                    ),
                ),
                ("notes", models.TextField(blank=True)),
                ("reconciled_at", models.DateTimeField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "reconciled_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="disbursement_reconciliations",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "request",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="reconciliation",
                        to="rims_finance.disbursementrequest",
                    ),
                ),
            ],
            options={
                "ordering": ["-updated_at"],
            },
        ),
    ]
