# Generated by Django 5.2.11 on 2026-02-24 20:21

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="AggregationDefinition",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="نام")),
                (
                    "description",
                    models.TextField(blank=True, default="", verbose_name="توضیحات"),
                ),
                (
                    "source_module",
                    models.CharField(
                        help_text="مثال: pm, ppm, strategy, hrm",
                        max_length=100,
                        verbose_name="ماژول منبع",
                    ),
                ),
                (
                    "source_entity",
                    models.CharField(
                        help_text="مثال: project, portfolio, kpi_actual",
                        max_length=100,
                        verbose_name="موجودیت منبع",
                    ),
                ),
                (
                    "aggregation_type",
                    models.CharField(
                        choices=[
                            ("count", "تعداد"),
                            ("sum", "جمع"),
                            ("average", "میانگین"),
                            ("min", "حداقل"),
                            ("max", "حداکثر"),
                            ("weighted_avg", "میانگین وزنی"),
                            ("median", "میانه"),
                            ("custom", "سفارشی"),
                        ],
                        default="count",
                        max_length=20,
                        verbose_name="نوع تجمیع",
                    ),
                ),
                (
                    "aggregation_field",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="فیلدی که تجمیع روی آن اعمال می\u200cشود",
                        max_length=100,
                        verbose_name="فیلد تجمیع",
                    ),
                ),
                (
                    "filter_criteria",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="فیلترهای اعمال\u200cشده قبل از تجمیع",
                        verbose_name="معیارهای فیلتر",
                    ),
                ),
                (
                    "group_by",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="فیلدهای گروه\u200cبندی",
                        verbose_name="گروه\u200cبندی",
                    ),
                ),
                (
                    "schedule",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Cron expression یا preset: daily, weekly, monthly",
                        max_length=100,
                        verbose_name="زمان\u200cبندی",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, 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": "anl_aggregation_def",
            },
        ),
        migrations.CreateModel(
            name="AggregationSnapshot",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("snapshot_date", models.DateField(verbose_name="تاریخ اسنپ\u200cشات")),
                (
                    "data",
                    models.JSONField(
                        default=dict,
                        help_text="نتایج تجمیع به صورت JSON",
                        verbose_name="داده تجمیع\u200cشده",
                    ),
                ),
                (
                    "record_count",
                    models.PositiveIntegerField(
                        default=0, verbose_name="تعداد رکوردها"
                    ),
                ),
                (
                    "execution_time_ms",
                    models.PositiveIntegerField(
                        default=0, verbose_name="زمان اجرا (میلی\u200cثانیه)"
                    ),
                ),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "definition",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="snapshots",
                        to="analytics.aggregationdefinition",
                        verbose_name="تعریف تجمیع",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "اسنپ\u200cشات تجمیع",
                "verbose_name_plural": "اسنپ\u200cشات\u200cهای تجمیع",
                "db_table": "anl_aggregation_snap",
                "ordering": ["-snapshot_date"],
            },
        ),
        migrations.CreateModel(
            name="ReportTemplate",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="نام قالب")),
                (
                    "description",
                    models.TextField(blank=True, default="", verbose_name="توضیحات"),
                ),
                (
                    "modules",
                    models.JSONField(
                        default=list,
                        help_text="لیست ماژول\u200cهای منبع داده",
                        verbose_name="ماژول\u200cها",
                    ),
                ),
                (
                    "query_definition",
                    models.JSONField(
                        default=dict,
                        help_text="ساختار کوئری برای استخراج داده",
                        verbose_name="تعریف کوئری",
                    ),
                ),
                (
                    "format_options",
                    models.JSONField(
                        default=dict,
                        help_text="تنظیمات فرمت خروجی (ستون\u200cها، فیلترها، ...)",
                        verbose_name="گزینه\u200cهای فرمت",
                    ),
                ),
                (
                    "default_format",
                    models.CharField(
                        choices=[
                            ("pdf", "PDF"),
                            ("excel", "Excel"),
                            ("csv", "CSV"),
                            ("html", "HTML"),
                        ],
                        default="pdf",
                        max_length=10,
                        verbose_name="فرمت پیش\u200cفرض",
                    ),
                ),
                (
                    "is_scheduled",
                    models.BooleanField(
                        default=False, verbose_name="زمان\u200cبندی\u200cشده"
                    ),
                ),
                (
                    "schedule",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Cron expression",
                        max_length=100,
                        verbose_name="زمان\u200cبندی",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "owner",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="report_templates",
                        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": "قالب\u200cهای گزارش",
                "db_table": "anl_report_template",
            },
        ),
        migrations.CreateModel(
            name="GeneratedReport",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "title",
                    models.CharField(
                        blank=True, default="", max_length=255, verbose_name="عنوان"
                    ),
                ),
                (
                    "parameters",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="پارامترهای ورودی هنگام تولید",
                        verbose_name="پارامترها",
                    ),
                ),
                (
                    "format",
                    models.CharField(
                        choices=[
                            ("pdf", "PDF"),
                            ("excel", "Excel"),
                            ("csv", "CSV"),
                            ("html", "HTML"),
                        ],
                        default="pdf",
                        max_length=10,
                        verbose_name="فرمت",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "در انتظار"),
                            ("generating", "در حال تولید"),
                            ("completed", "تکمیل\u200cشده"),
                            ("failed", "خطا"),
                        ],
                        default="pending",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "file_url",
                    models.URLField(
                        blank=True,
                        default="",
                        help_text="آدرس فایل خروجی در storage",
                        verbose_name="آدرس فایل",
                    ),
                ),
                (
                    "file_size",
                    models.PositiveIntegerField(
                        blank=True, null=True, verbose_name="حجم فایل (بایت)"
                    ),
                ),
                (
                    "generated_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="تاریخ تولید"
                    ),
                ),
                (
                    "error_message",
                    models.TextField(blank=True, default="", verbose_name="پیام خطا"),
                ),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "generated_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="generated_reports",
                        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",
                    ),
                ),
                (
                    "template",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="generated_reports",
                        to="analytics.reporttemplate",
                        verbose_name="قالب",
                    ),
                ),
            ],
            options={
                "verbose_name": "گزارش تولیدشده",
                "verbose_name_plural": "گزارش\u200cهای تولیدشده",
                "db_table": "anl_generated_report",
                "ordering": ["-generated_at"],
            },
        ),
        migrations.CreateModel(
            name="KPIRollup",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("kpi_code", models.CharField(max_length=50, verbose_name="کد KPI")),
                (
                    "kpi_name",
                    models.CharField(
                        blank=True, default="", max_length=255, verbose_name="نام KPI"
                    ),
                ),
                (
                    "level",
                    models.CharField(
                        choices=[
                            ("organization", "سازمان"),
                            ("department", "واحد سازمانی"),
                            ("portfolio", "پورتفولیو"),
                            ("program", "برنامه"),
                            ("project", "پروژه"),
                            ("team", "تیم"),
                            ("individual", "فردی"),
                        ],
                        default="organization",
                        max_length=20,
                        verbose_name="سطح",
                    ),
                ),
                (
                    "entity_id",
                    models.UUIDField(
                        blank=True,
                        help_text="شناسه واحد/پورتفولیو/پروژه مربوطه",
                        null=True,
                        verbose_name="شناسه موجودیت",
                    ),
                ),
                (
                    "period",
                    models.CharField(
                        help_text="مثال: 2026-Q1, 2026-01",
                        max_length=20,
                        verbose_name="دوره",
                    ),
                ),
                (
                    "value",
                    models.DecimalField(
                        decimal_places=4, default=0, max_digits=20, verbose_name="مقدار"
                    ),
                ),
                (
                    "previous_value",
                    models.DecimalField(
                        blank=True,
                        decimal_places=4,
                        max_digits=20,
                        null=True,
                        verbose_name="مقدار قبلی",
                    ),
                ),
                (
                    "target_value",
                    models.DecimalField(
                        blank=True,
                        decimal_places=4,
                        max_digits=20,
                        null=True,
                        verbose_name="مقدار هدف",
                    ),
                ),
                (
                    "trend",
                    models.CharField(
                        choices=[
                            ("up", "صعودی"),
                            ("down", "نزولی"),
                            ("flat", "ثابت"),
                            ("volatile", "نوسانی"),
                        ],
                        default="flat",
                        max_length=20,
                        verbose_name="روند",
                    ),
                ),
                (
                    "change_percentage",
                    models.DecimalField(
                        blank=True,
                        decimal_places=2,
                        max_digits=10,
                        null=True,
                        verbose_name="درصد تغییر",
                    ),
                ),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "تجمیع KPI",
                "verbose_name_plural": "تجمیع\u200cهای KPI",
                "db_table": "anl_kpi_rollup",
                "unique_together": {
                    ("tenant", "kpi_code", "level", "entity_id", "period")
                },
            },
        ),
    ]
