# Generated by Django 6.0.4 on 2026-07-03 15:43

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


class Migration(migrations.Migration):

    dependencies = [
        ('accounting', '0004_fund_project_fund_journalentry_budget_item_and_more'),
        ('finance', '0007_bankaccount_delete_financesettings_and_more'),
        ('hr', '0002_payroll_hr_payrolls_status_0ab14f_idx'),
        ('projects', '0017_project_display_currency'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='CashAdvance',
            fields=[
                ('id', models.UUIDField(default=apps.projects.models.uuid7, editable=False, primary_key=True, serialize=False)),
                ('purpose', models.CharField(max_length=255)),
                ('amount', models.DecimalField(decimal_places=2, max_digits=14)),
                ('currency', models.CharField(default='IDR', max_length=10)),
                ('amount_idr', models.DecimalField(blank=True, decimal_places=2, max_digits=18, null=True)),
                ('date_issued', models.DateField()),
                ('status', models.CharField(choices=[('issued', 'Issued'), ('settled', 'Settled'), ('cancelled', 'Cancelled')], db_index=True, default='issued', max_length=10)),
                ('spent_amount', models.DecimalField(blank=True, decimal_places=2, max_digits=14, null=True)),
                ('returned_amount', models.DecimalField(blank=True, decimal_places=2, max_digits=14, null=True)),
                ('settlement_receipt', models.FileField(blank=True, null=True, upload_to='cash_advances/receipts/')),
                ('settlement_notes', models.TextField(blank=True)),
                ('settled_at', models.DateTimeField(blank=True, null=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('budget_item', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cash_advances', to='finance.budgetitem')),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_cash_advances', to=settings.AUTH_USER_MODEL)),
                ('fund', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='cash_advances', to='projects.projectfund')),
                ('issue_journal_entry', models.ForeignKey(blank=True, help_text='Dr Advance Asset / Cr Cash journal posted on issue.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='accounting.journalentry')),
                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cash_advances', to='projects.project')),
                ('project_finance_entry', models.OneToOneField(blank=True, help_text='Mirrored expense row created on settlement so existing expense totals include it.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cash_advance', to='projects.projectfinance')),
                ('recipient', models.ForeignKey(help_text='Employee/staff the advance was issued to.', on_delete=django.db.models.deletion.PROTECT, related_name='cash_advances', to='hr.employee')),
                ('settled_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='settled_cash_advances', to=settings.AUTH_USER_MODEL)),
                ('settlement_journal_entry', models.ForeignKey(blank=True, help_text='Dr Expense (+ Dr Cash if returned) / Cr Advance Asset journal posted on settle.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='accounting.journalentry')),
            ],
            options={
                'db_table': 'project_cash_advances',
                'ordering': ['-date_issued', '-created_at'],
                'indexes': [models.Index(fields=['status'], name='project_cas_status_b483a6_idx'), models.Index(fields=['fund', 'status'], name='project_cas_fund_id_13cc2c_idx')],
            },
        ),
    ]
