# 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'), ), ]