# Generated by Django 5.1.3 on 2026-06-01 08:16

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("bpm", "0003_process_data_catalog"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="ProcessRole",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                ("code", models.CharField(max_length=20, verbose_name="code")),
                ("name", models.CharField(max_length=120, verbose_name="name")),
                ("name_fa", models.CharField(blank=True, max_length=120, verbose_name="name (FA)")),
                (
                    "iam_role_code",
                    models.CharField(
                        blank=True,
                        help_text="Codename of the matching IAM Role (no DB constraint).",
                        max_length=100,
                        verbose_name="IAM role code",
                    ),
                ),
                (
                    "order",
                    models.PositiveSmallIntegerField(default=0, verbose_name="display order"),
                ),
                (
                    "process",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="roles",
                        to="bpm.processdefinition",
                        verbose_name="process",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        help_text="Optionally pin a specific user to this role.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bpm_process_roles",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="assigned user",
                    ),
                ),
            ],
            options={
                "verbose_name": "process role",
                "verbose_name_plural": "process roles",
                "ordering": ("process", "order", "code"),
            },
        ),
        migrations.CreateModel(
            name="RACIMatrix",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                ("version", models.CharField(default="1.0", max_length=20, verbose_name="version")),
                ("is_current", models.BooleanField(default=False, verbose_name="is current")),
                ("notes", models.TextField(blank=True, verbose_name="notes")),
                (
                    "process",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="raci_matrices",
                        to="bpm.processdefinition",
                        verbose_name="process",
                    ),
                ),
            ],
            options={
                "verbose_name": "RACI matrix",
                "verbose_name_plural": "RACI matrices",
                "ordering": ("-created_at",),
            },
        ),
        migrations.CreateModel(
            name="RACIEntry",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "activity_label",
                    models.CharField(
                        help_text="Free-text activity title (auto-filled from step when step is set).",
                        max_length=255,
                        verbose_name="activity label",
                    ),
                ),
                (
                    "responsibility",
                    models.CharField(
                        choices=[
                            ("R", "Responsible"),
                            ("A", "Accountable"),
                            ("C", "Consulted"),
                            ("I", "Informed"),
                        ],
                        max_length=1,
                        verbose_name="responsibility",
                    ),
                ),
                ("notes", models.TextField(blank=True, verbose_name="notes")),
                (
                    "role",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="raci_entries",
                        to="bpm.processrole",
                        verbose_name="process role",
                    ),
                ),
                (
                    "step",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="raci_entries",
                        to="bpm.processoperationalstep",
                        verbose_name="operational step",
                    ),
                ),
                (
                    "matrix",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="entries",
                        to="bpm.racimatrix",
                        verbose_name="RACI matrix",
                    ),
                ),
            ],
            options={
                "verbose_name": "RACI entry",
                "verbose_name_plural": "RACI entries",
                "ordering": ("matrix", "step__order", "activity_label", "role__order"),
            },
        ),
        migrations.AddConstraint(
            model_name="processrole",
            constraint=models.UniqueConstraint(
                fields=("process", "code"), name="bpm_processrole_process_code_uniq"
            ),
        ),
        migrations.AddConstraint(
            model_name="racientry",
            constraint=models.UniqueConstraint(
                fields=("matrix", "activity_label", "role"),
                name="bpm_racientry_matrix_activity_role_uniq",
            ),
        ),
    ]
