# Generated by Django 5.2.4 on 2026-08-26 07:30 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("tasks", "0040_task_skills"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="TaskExecutionCycle", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "task_id_snapshot", models.PositiveBigIntegerField(verbose_name="ID задачи"), ), ( "cycle_key", models.CharField( max_length=180, unique=True, verbose_name="Ключ цикла", ), ), ( "task_title", models.CharField(max_length=255, verbose_name="Название задачи"), ), ( "due_date_snapshot", models.DateField( null=True, verbose_name="Срок на момент завершения" ), ), ( "completed_at_snapshot", models.DateTimeField(verbose_name="Время завершения"), ), ( "protection_until", models.DateTimeField(verbose_name="Подтвердить после"), ), ( "status", models.CharField( choices=[ ("pending", "Ожидает подтверждения"), ("confirmed", "Подтверждено"), ("late", "Завершено после срока"), ("reopened", "Возвращено в работу"), ("excluded", "Не участвует в расчёте"), ], default="pending", max_length=16, verbose_name="Состояние", ), ), ( "is_self_assigned", models.BooleanField(default=False, verbose_name="Самоназначение"), ), ( "exclusion_reason", models.CharField( blank=True, max_length=80, verbose_name="Причина исключения", ), ), ( "reopened_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="Обновлено"), ), ( "employee", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="task_execution_cycles", to=settings.AUTH_USER_MODEL, verbose_name="Исполнитель на момент завершения", ), ), ( "task", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="execution_cycles", to="tasks.task", verbose_name="Задача", ), ), ], options={ "verbose_name": "Цикл исполнения задачи", "verbose_name_plural": "Циклы исполнения задач", "ordering": ["completed_at_snapshot", "id"], "indexes": [ models.Index( fields=["employee", "status", "completed_at_snapshot"], name="tasks_taske_employe_e1d1f9_idx", ), models.Index( fields=["task", "status"], name="tasks_taske_task_id_d09903_idx", ), ], }, ), ]