140 lines
5.2 KiB
Python
140 lines
5.2 KiB
Python
# 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",
|
||
),
|
||
],
|
||
},
|
||
),
|
||
]
|