# Generated by Django 5.1.3 on 2026-06-01 09:58

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("bpm", "0009_benchmarking"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="MaturityLevel",
            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")),
                (
                    "level",
                    models.PositiveSmallIntegerField(
                        choices=[(1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5")],
                        unique=True,
                        verbose_name="level",
                    ),
                ),
                ("name", models.CharField(max_length=64, verbose_name="name")),
                ("name_fa", models.CharField(blank=True, max_length=64, verbose_name="name (FA)")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                ("description_fa", models.TextField(blank=True, verbose_name="description (FA)")),
                ("criteria", models.JSONField(blank=True, default=dict, verbose_name="criteria")),
            ],
            options={
                "verbose_name": "maturity level",
                "verbose_name_plural": "maturity levels",
                "ordering": ["level"],
            },
        ),
        migrations.CreateModel(
            name="ProcessMaturityAssessment",
            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")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("assessment_date", models.DateField(verbose_name="assessment date")),
                (
                    "current_level",
                    models.PositiveSmallIntegerField(
                        choices=[(1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5")],
                        verbose_name="current maturity level",
                    ),
                ),
                (
                    "target_level",
                    models.PositiveSmallIntegerField(
                        choices=[(1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5")],
                        verbose_name="target maturity level",
                    ),
                ),
                (
                    "dimension_scores",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="Map of dimension key → score (1–5).",
                        verbose_name="dimension scores",
                    ),
                ),
                (
                    "improvement_notes",
                    models.TextField(blank=True, verbose_name="improvement notes"),
                ),
                (
                    "next_review_date",
                    models.DateField(blank=True, null=True, verbose_name="next review date"),
                ),
                (
                    "assessed_by",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bpm_maturity_assessments",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="assessed by",
                    ),
                ),
                (
                    "process",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="maturity_assessments",
                        to="bpm.processdefinition",
                        verbose_name="process",
                    ),
                ),
            ],
            options={
                "verbose_name": "process maturity assessment",
                "verbose_name_plural": "process maturity assessments",
                "ordering": ["-assessment_date"],
            },
        ),
        migrations.CreateModel(
            name="MaturityImprovementAction",
            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")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("title", models.CharField(max_length=256, verbose_name="title")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                (
                    "target_level",
                    models.PositiveSmallIntegerField(
                        choices=[(1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5")],
                        verbose_name="target level",
                    ),
                ),
                ("due_date", models.DateField(blank=True, null=True, verbose_name="due date")),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("open", "Open / باز"),
                            ("in_progress", "In Progress / در جریان"),
                            ("done", "Done / انجام شده"),
                            ("cancelled", "Cancelled / لغو شده"),
                        ],
                        db_index=True,
                        default="open",
                        max_length=16,
                        verbose_name="status",
                    ),
                ),
                (
                    "owner",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="bpm_maturity_actions",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="owner",
                    ),
                ),
                (
                    "assessment",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="improvement_actions",
                        to="bpm.processmaturityassessment",
                        verbose_name="assessment",
                    ),
                ),
            ],
            options={
                "verbose_name": "maturity improvement action",
                "verbose_name_plural": "maturity improvement actions",
                "ordering": ["due_date", "status"],
            },
        ),
    ]
