# Generated by Django 4.2.5 on 2025-09-10 13:27

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


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("members", "0001_initial"),
        ("core", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("banking", "0001_initial"),
    ]

    operations = [
        migrations.CreateModel(
            name="CreditProduct",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        max_length=255,
                        unique=True,
                        verbose_name="Nom du produit de crédit",
                    ),
                ),
                (
                    "description",
                    models.TextField(blank=True, verbose_name="Description"),
                ),
                (
                    "min_amount",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant minimum"
                    ),
                ),
                (
                    "max_amount",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant maximum"
                    ),
                ),
                (
                    "interest_rate",
                    models.DecimalField(
                        decimal_places=2,
                        max_digits=5,
                        verbose_name="Taux d'intérêt annuel",
                    ),
                ),
                (
                    "max_duration_months",
                    models.PositiveIntegerField(verbose_name="Durée maximale en mois"),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Produit de crédit",
                "verbose_name_plural": "Produits de crédit",
                "db_table": "credits_credit_product",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Loan",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "disbursed_amount",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant décaissé"
                    ),
                ),
                (
                    "disbursement_date",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Date de décaissement"
                    ),
                ),
                (
                    "interest_rate",
                    models.DecimalField(
                        decimal_places=2, max_digits=5, verbose_name="Taux d'intérêt"
                    ),
                ),
                (
                    "duration_months",
                    models.PositiveIntegerField(verbose_name="Durée en mois"),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("ACTIVE", "Actif"),
                            ("PAID_OFF", "Soldé"),
                            ("DEFAULTED", "En défaut"),
                            ("CANCELLED", "Annulé"),
                        ],
                        default="ACTIVE",
                        max_length=20,
                        verbose_name="Statut",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "credit_product",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        to="credits.creditproduct",
                        verbose_name="Produit de crédit",
                    ),
                ),
            ],
            options={
                "verbose_name": "Prêt",
                "verbose_name_plural": "Prêts",
                "db_table": "credits_loan",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="RepaymentSchedule",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                ("due_date", models.DateField(verbose_name="Date d'échéance")),
                (
                    "principal_due",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Principal dû"
                    ),
                ),
                (
                    "interest_due",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Intérêt dû"
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "loan",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="repayment_schedule",
                        to="credits.loan",
                        verbose_name="Prêt",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Échéancier de remboursement",
                "verbose_name_plural": "Échéanciers de remboursement",
                "db_table": "credits_repayment_schedule",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Repayment",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "amount_paid",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant payé"
                    ),
                ),
                (
                    "payment_date",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Date de paiement"
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "financial_transaction",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="loan_repayment",
                        to="banking.transaction",
                        verbose_name="Transaction financière",
                    ),
                ),
                (
                    "loan",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="repayments",
                        to="credits.loan",
                        verbose_name="Prêt",
                    ),
                ),
                (
                    "repayment_schedule_entry",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="actual_repayments",
                        to="credits.repaymentschedule",
                        verbose_name="Échéance",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Remboursement",
                "verbose_name_plural": "Remboursements",
                "db_table": "credits_repayment",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="LoanApplication",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "requested_amount",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant demandé"
                    ),
                ),
                (
                    "requested_duration_months",
                    models.PositiveIntegerField(verbose_name="Durée demandée en mois"),
                ),
                (
                    "application_date",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Date de la demande"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("PENDING", "En attente"),
                            ("APPROVED", "Approuvée"),
                            ("REJECTED", "Rejetée"),
                            ("CANCELLED", "Annulée"),
                        ],
                        default="PENDING",
                        max_length=20,
                        verbose_name="Statut",
                    ),
                ),
                (
                    "approved_amount",
                    models.DecimalField(
                        blank=True,
                        decimal_places=2,
                        max_digits=15,
                        null=True,
                        verbose_name="Montant approuvé",
                    ),
                ),
                (
                    "approved_duration_months",
                    models.PositiveIntegerField(
                        blank=True, null=True, verbose_name="Durée approuvée en mois"
                    ),
                ),
                (
                    "approval_date",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Date d'approbation"
                    ),
                ),
                (
                    "rejection_reason",
                    models.TextField(blank=True, verbose_name="Motif de rejet"),
                ),
                (
                    "approved_by",
                    models.ForeignKey(
                        blank=True,
                        limit_choices_to={"is_staff": True},
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="approved_loan_applications",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Approuvé par",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "credit_product",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        to="credits.creditproduct",
                        verbose_name="Produit de crédit",
                    ),
                ),
                (
                    "member",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="loan_applications",
                        to="members.member",
                        verbose_name="Membre",
                    ),
                ),
                (
                    "supporting_documents",
                    models.ManyToManyField(
                        blank=True,
                        to="core.document",
                        verbose_name="Pièces justificatives",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Demande de prêt",
                "verbose_name_plural": "Demandes de prêt",
                "db_table": "credits_loan_application",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.AddField(
            model_name="loan",
            name="loan_application",
            field=models.OneToOneField(
                on_delete=django.db.models.deletion.PROTECT,
                related_name="loan_instance",
                to="credits.loanapplication",
                verbose_name="Demande de prêt",
            ),
        ),
        migrations.AddField(
            model_name="loan",
            name="member",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="loans",
                to="members.member",
                verbose_name="Membre",
            ),
        ),
        migrations.AddField(
            model_name="loan",
            name="updated_by",
            field=models.ForeignKey(
                blank=True,
                help_text="Utilisateur ayant modifié cet enregistrement",
                null=True,
                on_delete=django.db.models.deletion.PROTECT,
                related_name="%(class)s_updated",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
    ]
