# Generated by Django 5.2.11 on 2026-02-24 17:08

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("tenant", "0003_tenant_locale_calendar_tenant_locale_country_and_more"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Document",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("title", models.CharField(max_length=500, verbose_name="عنوان")),
                (
                    "code",
                    models.CharField(
                        help_text="شناسه یکتا سند در سازمان",
                        max_length=100,
                        verbose_name="کد سند",
                    ),
                ),
                (
                    "description",
                    models.TextField(blank=True, default="", verbose_name="توضیحات"),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("draft", "پیش\u200cنویس"),
                            ("pending_review", "در انتظار بررسی"),
                            ("approved", "تأیید شده"),
                            ("rejected", "رد شده"),
                            ("obsolete", "منسوخ"),
                            ("archived", "بایگانی شده"),
                        ],
                        db_index=True,
                        default="draft",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "current_version",
                    models.PositiveIntegerField(default=0, verbose_name="نسخه فعلی"),
                ),
                (
                    "metadata",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="اطلاعات اضافی سند",
                        verbose_name="متادیتا",
                    ),
                ),
                (
                    "access_level",
                    models.CharField(
                        choices=[
                            ("view", "مشاهده"),
                            ("edit", "ویرایش"),
                            ("approve", "تأیید"),
                            ("admin", "مدیر"),
                        ],
                        default="view",
                        max_length=20,
                        verbose_name="سطح دسترسی پیش\u200cفرض",
                    ),
                ),
                (
                    "is_checked_out",
                    models.BooleanField(default=False, verbose_name="تحویل گرفته شده"),
                ),
                (
                    "checked_out_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="زمان تحویل"
                    ),
                ),
                ("is_deleted", models.BooleanField(db_index=True, default=False)),
                ("deleted_at", models.DateTimeField(blank=True, null=True)),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "checked_out_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="checked_out_documents",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="تحویل\u200cگیرنده",
                    ),
                ),
                (
                    "owner",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="owned_documents",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="مالک",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "سند",
                "verbose_name_plural": "اسناد",
                "db_table": "dc_document",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="DocumentAccess",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "access_type",
                    models.CharField(
                        choices=[("user", "کاربر"), ("role", "نقش")],
                        default="user",
                        max_length=10,
                        verbose_name="نوع دسترسی",
                    ),
                ),
                (
                    "role_id",
                    models.UUIDField(
                        blank=True,
                        help_text="UUID نقش از سرویس دسترسی",
                        null=True,
                        verbose_name="شناسه نقش",
                    ),
                ),
                (
                    "permission_level",
                    models.CharField(
                        choices=[
                            ("view", "مشاهده"),
                            ("edit", "ویرایش"),
                            ("approve", "تأیید"),
                            ("admin", "مدیر"),
                        ],
                        default="view",
                        max_length=20,
                        verbose_name="سطح دسترسی",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="access_rules",
                        to="document_control.document",
                        verbose_name="سند",
                    ),
                ),
                (
                    "granted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="granted_document_access",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="اعطاکننده",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="document_access_rules",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
            ],
            options={
                "verbose_name": "دسترسی سند",
                "verbose_name_plural": "دسترسی\u200cهای سند",
                "db_table": "dc_document_access",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="DocumentAuditLog",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "action",
                    models.CharField(
                        choices=[
                            ("create", "ایجاد"),
                            ("update", "ویرایش"),
                            ("delete", "حذف"),
                            ("view", "مشاهده"),
                            ("checkout", "تحویل گرفتن"),
                            ("checkin", "تحویل دادن"),
                            ("publish", "انتشار"),
                            ("archive", "بایگانی"),
                            ("approve", "تأیید"),
                            ("reject", "رد"),
                            ("version_create", "ایجاد نسخه"),
                            ("access_grant", "اعطای دسترسی"),
                            ("access_revoke", "سلب دسترسی"),
                        ],
                        max_length=20,
                        verbose_name="عملیات",
                    ),
                ),
                (
                    "details",
                    models.JSONField(blank=True, default=dict, verbose_name="جزئیات"),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="آدرس IP"
                    ),
                ),
                (
                    "user_agent",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=500,
                        verbose_name="User Agent",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="audit_logs",
                        to="document_control.document",
                        verbose_name="سند",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="document_audit_logs",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
            ],
            options={
                "verbose_name": "لاگ بازرسی سند",
                "verbose_name_plural": "لاگ\u200cهای بازرسی اسناد",
                "db_table": "dc_document_audit_log",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="DocumentCategory",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="نام دسته")),
                ("code", models.CharField(max_length=50, verbose_name="کد دسته")),
                (
                    "description",
                    models.TextField(blank=True, default="", verbose_name="توضیحات"),
                ),
                (
                    "sort_order",
                    models.IntegerField(default=0, verbose_name="ترتیب نمایش"),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "parent",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="children",
                        to="document_control.documentcategory",
                        verbose_name="دسته والد",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "دسته اسناد",
                "verbose_name_plural": "دسته\u200cهای اسناد",
                "db_table": "dc_document_category",
                "ordering": ["sort_order", "name"],
                "unique_together": {("tenant", "code")},
            },
        ),
        migrations.AddField(
            model_name="document",
            name="category",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="documents",
                to="document_control.documentcategory",
                verbose_name="دسته",
            ),
        ),
        migrations.CreateModel(
            name="DocumentVersion",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "version_number",
                    models.PositiveIntegerField(verbose_name="شماره نسخه"),
                ),
                (
                    "file_url",
                    models.CharField(max_length=1000, verbose_name="آدرس فایل"),
                ),
                (
                    "file_name",
                    models.CharField(max_length=500, verbose_name="نام فایل"),
                ),
                (
                    "file_size",
                    models.BigIntegerField(default=0, verbose_name="حجم فایل (بایت)"),
                ),
                (
                    "mime_type",
                    models.CharField(
                        blank=True, default="", max_length=100, verbose_name="نوع فایل"
                    ),
                ),
                (
                    "change_description",
                    models.TextField(
                        blank=True, default="", verbose_name="شرح تغییرات"
                    ),
                ),
                (
                    "is_current",
                    models.BooleanField(
                        db_index=True, default=False, verbose_name="نسخه فعلی"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="document_versions",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="ایجادکننده",
                    ),
                ),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="versions",
                        to="document_control.document",
                        verbose_name="سند",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "نسخه سند",
                "verbose_name_plural": "نسخه\u200cهای سند",
                "db_table": "dc_document_version",
                "ordering": ["-version_number"],
                "unique_together": {("document", "version_number")},
            },
        ),
        migrations.CreateModel(
            name="DocumentApproval",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "در انتظار"),
                            ("approved", "تأیید شده"),
                            ("rejected", "رد شده"),
                            ("cancelled", "لغو شده"),
                        ],
                        db_index=True,
                        default="pending",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "comments",
                    models.TextField(blank=True, default="", verbose_name="نظرات"),
                ),
                (
                    "approved_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="زمان تأیید"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "approver",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="document_approvals",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="تأییدکننده",
                    ),
                ),
                (
                    "document",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="approvals",
                        to="document_control.document",
                        verbose_name="سند",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "version",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="approvals",
                        to="document_control.documentversion",
                        verbose_name="نسخه",
                    ),
                ),
            ],
            options={
                "verbose_name": "تأیید سند",
                "verbose_name_plural": "تأییدات سند",
                "db_table": "dc_document_approval",
                "ordering": ["-created_at"],
            },
        ),
        migrations.AlterUniqueTogether(
            name="document",
            unique_together={("tenant", "code")},
        ),
    ]
