111 lines
6.8 KiB
Python
111 lines
6.8 KiB
Python
# Generated by Django 5.2.4 on 2026-07-06 07:50
|
|
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('employees', '0054_employee_id_guest_range_guard'),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='TaskBoard',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=255, verbose_name='Название')),
|
|
('description', models.TextField(blank=True, verbose_name='Описание')),
|
|
('is_archived', models.BooleanField(default=False, verbose_name='Архивная')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Обновлено')),
|
|
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='created_task_boards', to=settings.AUTH_USER_MODEL, verbose_name='Создал')),
|
|
('departments', models.ManyToManyField(blank=True, related_name='task_boards', to='employees.department', verbose_name='Отделы')),
|
|
('members', models.ManyToManyField(blank=True, related_name='task_boards', to=settings.AUTH_USER_MODEL, verbose_name='Участники')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Доска задач',
|
|
'verbose_name_plural': 'Доски задач',
|
|
'ordering': ['name', 'id'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='TaskColumn',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=120, verbose_name='Название')),
|
|
('position', models.PositiveIntegerField(default=0, verbose_name='Позиция')),
|
|
('color', models.CharField(blank=True, max_length=32, verbose_name='Цвет')),
|
|
('is_done', models.BooleanField(default=False, verbose_name='Финальная колонка')),
|
|
('is_archived', models.BooleanField(default=False, verbose_name='Архивная')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Обновлено')),
|
|
('board', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='columns', to='tasks.taskboard', verbose_name='Доска')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Колонка задач',
|
|
'verbose_name_plural': 'Колонки задач',
|
|
'ordering': ['position', 'id'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='TaskLabel',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=80, verbose_name='Название')),
|
|
('color', models.CharField(default='#38bdf8', max_length=32, verbose_name='Цвет')),
|
|
('board', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='tasks.taskboard', verbose_name='Доска')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Метка задачи',
|
|
'verbose_name_plural': 'Метки задач',
|
|
'ordering': ['name', 'id'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='Task',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=255, verbose_name='Название')),
|
|
('description', models.TextField(blank=True, verbose_name='Описание')),
|
|
('priority', models.CharField(choices=[('low', 'Низкий'), ('medium', 'Средний'), ('high', 'Высокий'), ('critical', 'Критический')], default='medium', max_length=20, verbose_name='Приоритет')),
|
|
('due_date', models.DateField(blank=True, null=True, verbose_name='Срок')),
|
|
('position', models.PositiveIntegerField(default=0, verbose_name='Позиция')),
|
|
('completed_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='Обновлено')),
|
|
('assignee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_tasks', to=settings.AUTH_USER_MODEL, verbose_name='Исполнитель')),
|
|
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='created_tasks', to=settings.AUTH_USER_MODEL, verbose_name='Создал')),
|
|
('board', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks', to='tasks.taskboard', verbose_name='Доска')),
|
|
('column', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='tasks', to='tasks.taskcolumn', verbose_name='Колонка')),
|
|
('labels', models.ManyToManyField(blank=True, related_name='tasks', to='tasks.tasklabel', verbose_name='Метки')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Задача',
|
|
'verbose_name_plural': 'Задачи',
|
|
'ordering': ['position', '-created_at', 'id'],
|
|
},
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='taskcolumn',
|
|
constraint=models.UniqueConstraint(fields=('board', 'name'), name='uniq_task_column_board_name'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='tasklabel',
|
|
constraint=models.UniqueConstraint(fields=('board', 'name'), name='uniq_task_label_board_name'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='task',
|
|
index=models.Index(fields=['board', 'column', 'position'], name='tasks_task_board_i_6021b0_idx'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='task',
|
|
index=models.Index(fields=['assignee', 'due_date'], name='tasks_task_assigne_5c11c7_idx'),
|
|
),
|
|
]
|