Files
ACORE/apps/it_manager/migrations/0001_initial.py
T
lokses 131cb27d16 Initial commit — ACORE pharmacy network management system
Django project: employees, locations, visit_manager, it_manager,
mattermost_connector and stub connectors (ad, mail, portal).
2026-05-31 14:21:47 +03:00

132 lines
9.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Generated by Django 6.0.3 on 2026-04-24 09:37
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('locations', '0002_remove_pharmacy_locations_p_last_sy_0dc5a0_idx_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Equipment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('equipment_type', models.CharField(choices=[('laptop', 'Ноутбук'), ('desktop', 'ПК'), ('monitor', 'Монитор'), ('printer', 'Принтер'), ('phone', 'Телефон'), ('tablet', 'Планшет'), ('router', 'Роутер/Свитч'), ('ups', 'ИБП'), ('scanner', 'Сканер'), ('other', 'Другое')], max_length=20, verbose_name='Тип')),
('brand', models.CharField(max_length=100, verbose_name='Бренд')),
('model', models.CharField(max_length=100, verbose_name='Модель')),
('serial_number', models.CharField(max_length=100, unique=True, verbose_name='Серийный номер')),
('inventory_number', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='Инвентарный номер')),
('status', models.CharField(choices=[('stock', 'На складе'), ('assigned', 'Выдано'), ('repair', 'В ремонте'), ('written_off', 'Списано')], db_index=True, default='stock', max_length=20, verbose_name='Статус')),
('purchase_date', models.DateField(blank=True, null=True, verbose_name='Дата покупки')),
('warranty_until', models.DateField(blank=True, null=True, verbose_name='Гарантия до')),
('notes', models.TextField(blank=True, verbose_name='Примечания')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('assigned_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_equipment', to=settings.AUTH_USER_MODEL, verbose_name='Выдано сотруднику')),
('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='location_equipment', to='locations.location', verbose_name='Локация')),
],
options={
'verbose_name': 'Оборудование',
'verbose_name_plural': 'Оборудование',
'ordering': ['equipment_type', 'brand', 'model'],
},
),
migrations.CreateModel(
name='EquipmentAssignment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('assigned_at', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата выдачи')),
('returned_at', models.DateTimeField(blank=True, null=True, verbose_name='Дата возврата')),
('notes', models.TextField(blank=True, verbose_name='Примечания')),
('assigned_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='issued_equipment', to=settings.AUTH_USER_MODEL, verbose_name='Выдал')),
('assigned_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='equipment_assignments', to=settings.AUTH_USER_MODEL, verbose_name='Сотрудник')),
('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to='it_manager.equipment', verbose_name='Оборудование')),
('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='equipment_assignments', to='locations.location', verbose_name='Локация')),
],
options={
'verbose_name': 'Перемещение оборудования',
'verbose_name_plural': 'История перемещений',
'ordering': ['-assigned_at'],
},
),
migrations.CreateModel(
name='Ticket',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('number', models.CharField(editable=False, max_length=20, unique=True, verbose_name='Номер')),
('title', models.CharField(max_length=200, verbose_name='Заголовок')),
('ticket_type', models.CharField(choices=[('repair', 'Ремонт'), ('replacement', 'Замена оборудования'), ('new_equipment', 'Новое оборудование'), ('access', 'Доступ / Аккаунт'), ('consultation', 'Консультация'), ('other', 'Другое')], db_index=True, max_length=20, verbose_name='Тип')),
('priority', models.CharField(choices=[('low', 'Низкий'), ('medium', 'Средний'), ('high', 'Высокий'), ('critical', 'Критический')], db_index=True, default='medium', max_length=10, verbose_name='Приоритет')),
('status', models.CharField(choices=[('new', 'Новая'), ('in_progress', 'В работе'), ('waiting', 'Ожидание'), ('resolved', 'Решена'), ('closed', 'Закрыта')], db_index=True, default='new', max_length=20, verbose_name='Статус')),
('description', models.TextField(verbose_name='Описание проблемы')),
('resolution', models.TextField(blank=True, verbose_name='Решение')),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('resolved_at', models.DateTimeField(blank=True, null=True, verbose_name='Решена в')),
('closed_at', models.DateTimeField(blank=True, null=True, verbose_name='Закрыта в')),
('assignee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_tickets', to=settings.AUTH_USER_MODEL, verbose_name='Исполнитель')),
('equipment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tickets', to='it_manager.equipment', verbose_name='Оборудование')),
('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='it_tickets', to='locations.location', verbose_name='Локация')),
('requester', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='created_tickets', to=settings.AUTH_USER_MODEL, verbose_name='Заявитель')),
],
options={
'verbose_name': 'Заявка',
'verbose_name_plural': 'Заявки',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='TicketComment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField(verbose_name='Комментарий')),
('is_internal', models.BooleanField(default=False, help_text='Виден только сотрудникам IT', verbose_name='Внутренний')),
('created_at', models.DateTimeField(auto_now_add=True)),
('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='ticket_comments', to=settings.AUTH_USER_MODEL, verbose_name='Автор')),
('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='it_manager.ticket', verbose_name='Заявка')),
],
options={
'verbose_name': 'Комментарий',
'verbose_name_plural': 'Комментарии',
'ordering': ['created_at'],
},
),
migrations.AddIndex(
model_name='equipment',
index=models.Index(fields=['status'], name='it_manager__status_f1197a_idx'),
),
migrations.AddIndex(
model_name='equipment',
index=models.Index(fields=['equipment_type'], name='it_manager__equipme_0beeb3_idx'),
),
migrations.AddIndex(
model_name='equipment',
index=models.Index(fields=['assigned_to'], name='it_manager__assigne_3c2a08_idx'),
),
migrations.AddIndex(
model_name='equipmentassignment',
index=models.Index(fields=['equipment', 'assigned_at'], name='it_manager__equipme_87de0f_idx'),
),
migrations.AddIndex(
model_name='ticket',
index=models.Index(fields=['status', 'priority'], name='it_manager__status_6e5b9f_idx'),
),
migrations.AddIndex(
model_name='ticket',
index=models.Index(fields=['requester', 'status'], name='it_manager__request_a11dcf_idx'),
),
migrations.AddIndex(
model_name='ticket',
index=models.Index(fields=['assignee', 'status'], name='it_manager__assigne_555f6b_idx'),
),
]