Огромная замена логики
All checks were successful
Deploy MES Core / deploy (push) Successful in 11s

This commit is contained in:
2026-04-06 08:06:37 +03:00
parent 0e8497ab1f
commit e88b861f68
48 changed files with 3833 additions and 175 deletions

View File

@@ -0,0 +1,65 @@
# Generated by Django 6.0.3 on 2026-04-04 15:14
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('manufacturing', '0001_initial'),
('warehouse', '0003_alter_material_full_name'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Location',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, unique=True, verbose_name='Место хранения')),
('is_production_area', models.BooleanField(default=False, verbose_name='Это производственный участок')),
],
options={
'verbose_name': 'Склад/Участок',
'verbose_name_plural': 'Склады и участки',
},
),
migrations.CreateModel(
name='StockItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.FloatField(verbose_name='Количество (шт/м/кг/лист)')),
('is_remnant', models.BooleanField(default=False, verbose_name='Деловой остаток')),
('current_length', models.FloatField(blank=True, null=True, verbose_name='Текущая длина, мм')),
('current_width', models.FloatField(blank=True, null=True, verbose_name='Текущая ширина, мм')),
('unique_id', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='ID/Маркировка (для ДО)')),
('entity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='manufacturing.productentity', verbose_name='Произведённая сущность')),
('location', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='warehouse.location', verbose_name='Где находится')),
('material', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='warehouse.material', verbose_name='Сырьё')),
],
options={
'verbose_name': 'Единица на складе',
'verbose_name_plural': 'Остатки на складах',
},
),
migrations.CreateModel(
name='TransferRecord',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('sent', 'В пути'), ('received', 'Принято'), ('discrepancy', 'Расхождение')], default='sent', max_length=20, verbose_name='Статус')),
('created_at', models.DateTimeField(auto_now_add=True)),
('received_at', models.DateTimeField(blank=True, null=True)),
('from_location', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='outgoing', to='warehouse.location')),
('items', models.ManyToManyField(to='warehouse.stockitem', verbose_name='Перемещаемые объекты')),
('receiver', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='received_transfers', to=settings.AUTH_USER_MODEL)),
('sender', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='sent_transfers', to=settings.AUTH_USER_MODEL)),
('to_location', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='incoming', to='warehouse.location')),
],
options={
'verbose_name': 'Перемещение',
'verbose_name_plural': 'Перемещения',
},
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 6.0.3 on 2026-04-05 08:27
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0004_location_stockitem_transferrecord'),
]
operations = [
migrations.AlterModelOptions(
name='stockitem',
options={'verbose_name': 'Единица на складах', 'verbose_name_plural': 'Единицы на складах'},
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 6.0.3 on 2026-04-05 08:50
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0005_alter_stockitem_options'),
]
operations = [
migrations.AlterModelOptions(
name='stockitem',
options={'verbose_name': 'Единица на складе', 'verbose_name_plural': 'Единицы на складе'},
),
]

View File

@@ -0,0 +1,65 @@
# Generated by Django 6.0.3 on 2026-04-05 11:42
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0006_alter_stockitem_options'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.RemoveField(
model_name='transferrecord',
name='items',
),
migrations.AddField(
model_name='transferrecord',
name='is_applied',
field=models.BooleanField(default=False, verbose_name='Применено'),
),
migrations.AddField(
model_name='transferrecord',
name='occurred_at',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата/время'),
),
migrations.AlterField(
model_name='transferrecord',
name='from_location',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='outgoing', to='warehouse.location', verbose_name='Откуда'),
),
migrations.AlterField(
model_name='transferrecord',
name='receiver',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='received_transfers', to=settings.AUTH_USER_MODEL, verbose_name='Кому'),
),
migrations.AlterField(
model_name='transferrecord',
name='sender',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sent_transfers', to=settings.AUTH_USER_MODEL, verbose_name='Кто'),
),
migrations.AlterField(
model_name='transferrecord',
name='to_location',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='incoming', to='warehouse.location', verbose_name='Куда'),
),
migrations.CreateModel(
name='TransferLine',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.FloatField(verbose_name='Количество')),
('stock_item', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='warehouse.stockitem', verbose_name='Единица на складе')),
('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='warehouse.transferrecord', verbose_name='Перемещение')),
],
options={
'verbose_name': 'Строка перемещения',
'verbose_name_plural': 'Строки перемещения',
'unique_together': {('transfer', 'stock_item')},
},
),
]

View File

@@ -0,0 +1,24 @@
# Generated by Django 6.0.3 on 2026-04-05 15:45
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0007_remove_transferrecord_items_and_more'),
]
operations = [
migrations.AlterField(
model_name='transferrecord',
name='received_at',
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True),
),
migrations.AlterField(
model_name='transferrecord',
name='status',
field=models.CharField(choices=[('sent', 'В пути'), ('received', 'Принято'), ('discrepancy', 'Расхождение')], default='received', max_length=20, verbose_name='Статус'),
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 6.0.3 on 2026-04-05 19:06
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0008_alter_transferrecord_received_at_and_more'),
]
operations = [
migrations.AddField(
model_name='stockitem',
name='created_at',
field=models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Поступление'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.3 on 2026-04-05 19:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0009_stockitem_created_at'),
]
operations = [
migrations.AddField(
model_name='materialcategory',
name='form_factor',
field=models.CharField(choices=[('sheet', 'Лист'), ('bar', 'Прокат/хлыст'), ('other', 'Прочее')], default='other', max_length=16, verbose_name='Форма'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.3 on 2026-04-05 20:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0010_materialcategory_form_factor'),
]
operations = [
migrations.AddField(
model_name='stockitem',
name='is_customer_supplied',
field=models.BooleanField(default=False, verbose_name='Давальческий'),
),
]

View File

@@ -0,0 +1,20 @@
# Generated by Django 6.0.3 on 2026-04-06 03:32
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shiftflow', '0018_alter_productionreportconsumption_unique_together_and_more'),
('warehouse', '0011_stockitem_is_customer_supplied'),
]
operations = [
migrations.AddField(
model_name='stockitem',
name='deal',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='shiftflow.deal', verbose_name='Сделка'),
),
]