Initial commit
This commit is contained in:
47
bom_manager/migrations/0001_initial.py
Normal file
47
bom_manager/migrations/0001_initial.py
Normal file
@@ -0,0 +1,47 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-12 20:07
|
||||
|
||||
import django.db.models.deletion
|
||||
import mptt.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Item',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('designation', models.CharField(db_index=True, max_length=30, verbose_name='Децимальный номер')),
|
||||
('title', models.CharField(max_length=100, verbose_name='Обозначение')),
|
||||
('entity_type', models.CharField(choices=[('UNIT', 'Изделие'), ('ASSY', 'Сборка'), ('PART', 'Деталь'), ('STD', 'Стандартное изделие'), ('CPLX', 'Комплекс')], default='ASSY', max_length=4)),
|
||||
('is_assembly', models.BooleanField(default=False, verbose_name='Сборка')),
|
||||
('drawing', models.FileField(blank=True, null=True, upload_to='drawings/', verbose_name='Чертеж')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Компонент',
|
||||
'verbose_name_plural': 'Компоненты',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BOMNode',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('quantity', models.DecimalField(decimal_places=2, default=1, max_digits=10, verbose_name='Количество')),
|
||||
('lft', models.PositiveIntegerField(editable=False)),
|
||||
('rght', models.PositiveIntegerField(editable=False)),
|
||||
('tree_id', models.PositiveIntegerField(db_index=True, editable=False)),
|
||||
('level', models.PositiveIntegerField(editable=False)),
|
||||
('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='bom_manager.bomnode')),
|
||||
('item', mptt.fields.TreeForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bom_manager.item')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
18
bom_manager/migrations/0002_alter_item_designation.py
Normal file
18
bom_manager/migrations/0002_alter_item_designation.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-12 20:11
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bom_manager', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='item',
|
||||
name='designation',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=30, null=True, verbose_name='Децимальный номер'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-12 20:14
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bom_manager', '0002_alter_item_designation'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='bomnode',
|
||||
name='item',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bom_nodes', to='bom_manager.item'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bomnode',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='bom_manager.bomnode'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,27 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-13 18:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bom_manager', '0003_alter_bomnode_item_alter_bomnode_parent'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='bomnode',
|
||||
options={'verbose_name': 'Изделие', 'verbose_name_plural': 'Изделия'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bomnode',
|
||||
name='quantity',
|
||||
field=models.IntegerField(default=1, verbose_name='Количество'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='item',
|
||||
name='entity_type',
|
||||
field=models.CharField(choices=[('UNIT', 'Изделие'), ('ASSY', 'Сборка'), ('PART', 'Деталь'), ('STD', 'Стандартное изделие'), ('CPLX', 'Комплекс')], default='PART', max_length=4),
|
||||
),
|
||||
]
|
||||
45
bom_manager/migrations/0005_workcenter_routingstep.py
Normal file
45
bom_manager/migrations/0005_workcenter_routingstep.py
Normal file
@@ -0,0 +1,45 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-13 19:18
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bom_manager', '0004_alter_bomnode_options_alter_bomnode_quantity_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WorkCenter',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, verbose_name='Название станка/участка')),
|
||||
('rate_per_hour', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Стоимость часа')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Станок/участок',
|
||||
'verbose_name_plural': 'Станки/участки',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RoutingStep',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('operation_type', models.CharField(choices=[('LRL', 'Лазерная резка листа (ЛРЛ)'), ('LRT', 'Лазерная резка трубы (ЛРТ)'), ('TO', 'Токарная обработка (ТО)'), ('WELD', 'Сварка'), ('PAINT', 'Покраска'), ('BEND', 'Гибка'), ('CLEAN', 'Зачистка'), ('BANDSAW', 'Лентопильный станок'), ('MOVE', 'Перемещение')], max_length=10, verbose_name='Тип операции')),
|
||||
('order', models.PositiveIntegerField(default=10, help_text='Например: 10, 20, 30...', verbose_name='Номер операции')),
|
||||
('drawing_file', models.FileField(blank=True, null=True, upload_to='tech_files/%Y/%m', verbose_name='Тех. файл (DXF/IGES)')),
|
||||
('tech_params', models.JSONField(blank=True, default=dict, verbose_name='Технологические параметры')),
|
||||
('setup_time', models.DurationField(blank=True, null=True, verbose_name='Время наладки')),
|
||||
('cycle_time', models.DurationField(blank=True, null=True, verbose_name='Время цикла (на 1 шт)')),
|
||||
('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='routing_steps', to='bom_manager.item', verbose_name='Деталь/Сборка')),
|
||||
('work_center', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='bom_manager.workcenter', verbose_name='Станок/Участок')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Технологическая операция',
|
||||
'verbose_name_plural': 'Технологический маршрут',
|
||||
'ordering': ['order'],
|
||||
},
|
||||
),
|
||||
]
|
||||
0
bom_manager/migrations/__init__.py
Normal file
0
bom_manager/migrations/__init__.py
Normal file
Reference in New Issue
Block a user