From 01d560cfb4b06558c0c9628b631cd85f3306b3b0 Mon Sep 17 00:00:00 2001 From: ackFromRedmi Date: Sat, 14 Feb 2026 09:32:46 +0300 Subject: [PATCH] Initial commit --- .gitignore | 86 ++++++++++ bom_manager/__init__.py | 0 bom_manager/admin.py | 118 ++++++++++++++ bom_manager/apps.py | 5 + bom_manager/migrations/0001_initial.py | 47 ++++++ .../migrations/0002_alter_item_designation.py | 18 +++ ...alter_bomnode_item_alter_bomnode_parent.py | 24 +++ ...options_alter_bomnode_quantity_and_more.py | 27 ++++ .../migrations/0005_workcenter_routingstep.py | 45 ++++++ bom_manager/migrations/__init__.py | 0 bom_manager/models.py | 147 ++++++++++++++++++ bom_manager/templates/bom_manager/index.html | 8 + bom_manager/tests.py | 3 + bom_manager/urls.py | 6 + bom_manager/views.py | 5 + core/__init__.py | 0 core/asgi.py | 16 ++ core/settings.py | 119 ++++++++++++++ core/urls.py | 23 +++ core/wsgi.py | 16 ++ .../МТЛЕ_0093.000.00_СБ-10__консоль_28_3.pdf | Bin 0 -> 91412 bytes manage.py | 22 +++ requirements.txt | Bin 0 -> 332 bytes templates/base.html | 51 ++++++ templates/components/footer.html | 10 ++ templates/components/navbar.html | 33 ++++ 26 files changed, 829 insertions(+) create mode 100644 .gitignore create mode 100644 bom_manager/__init__.py create mode 100644 bom_manager/admin.py create mode 100644 bom_manager/apps.py create mode 100644 bom_manager/migrations/0001_initial.py create mode 100644 bom_manager/migrations/0002_alter_item_designation.py create mode 100644 bom_manager/migrations/0003_alter_bomnode_item_alter_bomnode_parent.py create mode 100644 bom_manager/migrations/0004_alter_bomnode_options_alter_bomnode_quantity_and_more.py create mode 100644 bom_manager/migrations/0005_workcenter_routingstep.py create mode 100644 bom_manager/migrations/__init__.py create mode 100644 bom_manager/models.py create mode 100644 bom_manager/templates/bom_manager/index.html create mode 100644 bom_manager/tests.py create mode 100644 bom_manager/urls.py create mode 100644 bom_manager/views.py create mode 100644 core/__init__.py create mode 100644 core/asgi.py create mode 100644 core/settings.py create mode 100644 core/urls.py create mode 100644 core/wsgi.py create mode 100644 drawings/МТЛЕ_0093.000.00_СБ-10__консоль_28_3.pdf create mode 100644 manage.py create mode 100644 requirements.txt create mode 100644 templates/base.html create mode 100644 templates/components/footer.html create mode 100644 templates/components/navbar.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82f6523 --- /dev/null +++ b/.gitignore @@ -0,0 +1,86 @@ +# ---> Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Django +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +media/ # Пользовательские загружаемые файлы +staticfiles/ # Собранные статические файлы (collectstatic) +*.pot + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# VS Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# PyCharm +.idea/ +*.iml +*.iws +*.ipr + +# OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Testing and coverage +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ +htmlcov/ + +# Security +secrets.py +*.pem +*.key + +# Temporary and development +*.swp +*.swo +*~ +.project \ No newline at end of file diff --git a/bom_manager/__init__.py b/bom_manager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bom_manager/admin.py b/bom_manager/admin.py new file mode 100644 index 0000000..ca7607a --- /dev/null +++ b/bom_manager/admin.py @@ -0,0 +1,118 @@ +from django.contrib import admin +from mptt.admin import MPTTModelAdmin, DraggableMPTTAdmin +from .models import Item, BOMNode, EntityType, RoutingStep, WorkCenter + +# Register your models here. + +# Создаем инлайн для отображения RoutingStep в Item +class RoutingStepInline(admin.TabularInline): + model = RoutingStep + extra = 1 + # Поле tech_params в стандартной админке — это просто текстовое поле. + # Позже его можно будет "причесать" с помощью JS, чтобы оно выглядело красиво. + fields = ('order', 'operation_type', 'work_center', 'drawing_file', 'tech_params') + + +# Создаем инлайн для отображения BOMNode в Item +class BOMNodeInline(admin.TabularInline): + model = BOMNode + + # Указываем fk_key т + fk_name = 'parent' + + # Указываем поля для отображения в инлайне + fields = ('item', 'quantity') + + # Колличество пустых строк в инлайне + extra = 3 + + # добавим автокомплит для удобства + autocomplete_fields = ['item'] + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "parent": + # Родителями в инлайне могут быть только Сборки/Изделия/Комплексы + kwargs["queryset"] = BOMNode.objects.filter( + item__entity_type__in=[EntityType.UNIT, EntityType.ASSEMBLY, EntityType.COMPLEX] + ) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + +@admin.register(Item) +class ItemAdmin(admin.ModelAdmin): + list_display = ('get_full_name', 'entity_type', 'drawing') + list_filter = ('entity_type', 'is_assembly') + # Поиск по номеру и названию + search_fields = ['designation', 'title'] + + @admin.display(description='Наименование') + def get_full_name(self, obj): + return f"{obj.designation or ''} {obj.title}" + + inlines = [RoutingStepInline] + # def get_queryset(self, request): + # qs = super().get_queryset(request) + # return qs.filter(entity_type=EntityType.ASSEMBLY) + +@admin.register(BOMNode) +class BOMNodeAdmin(DraggableMPTTAdmin): + # Настройки отображения древовидной структуры + mptt_level_indent = 40 # отступ в пикселях + + # Поля для отображения в админке + fields = ('parent', 'item', 'quantity') + +# Чтобы в списке было видно не только название связи, но и данные из Item + list_display = ('tree_actions', 'indented_title', 'get_designation', 'quantity') + list_display_links = ('indented_title',) + + # Отображаем инлайн. + inlines = [BOMNodeInline] + + # Метод для отображения децимального номера из связанной модели Item + def get_designation(self, obj): + return obj.item.designation + get_designation.short_description = 'Децимальный номер' + + # Оптимизация запросов (чтобы админка не тормозила) + def get_queryset(self, request): + qs = super().get_queryset(request) + return qs.select_related('item', 'parent') + + # def formfield_for_foreignkey(self, db_field, request, **kwargs): + # if db_field.name == "parent": + # # Фильтруем: родителями могут быть только узлы, + # # где связанный Item является сборкой или изделием + # kwargs["queryset"] = BOMNode.objects.filter( + # item__entity_type__in=[EntityType.UNIT, EntityType.ASSEMBLY] + # ) + # return super().formfield_for_foreignkey(db_field, request, **kwargs) + + + # переопределим метод get_inlines в BOMNodeAdmin. + # Если узел привязан к «Детали» или «Стандартному изделию», таблица внизу просто не появится. + def get_inlines(self, request, obj=None): + # Если мы создаем новый узел (obj is None), инлайн можно показать + if obj is None: + return [] + + # Разрешенные типы (те, в которые МОЖНО вкладывать) + allowed_types = [EntityType.UNIT, EntityType.ASSEMBLY, EntityType.COMPLEX] + + # Если тип изделия связанного узла в списке разрешенных — показываем инлайн + if obj.item.entity_type in allowed_types: + return [BOMNodeInline] + + # Для остальных (детали, стандартные) возвращаем пустой список + return [] + +@admin.register(RoutingStep) +class RoutingStepAdmin(admin.ModelAdmin): + # Поля для отображения в админке + list_display = ('item', 'operation_type', 'work_center', 'order') + list_filter = ('operation_type', 'work_center') + search_fields = ['item__title'] + +@admin.register(WorkCenter) +class WorkCenterAdmin(admin.ModelAdmin): + list_display = ('name', 'rate_per_hour') + search_fields = ['name'] diff --git a/bom_manager/apps.py b/bom_manager/apps.py new file mode 100644 index 0000000..db21322 --- /dev/null +++ b/bom_manager/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class BomManagerConfig(AppConfig): + name = 'bom_manager' diff --git a/bom_manager/migrations/0001_initial.py b/bom_manager/migrations/0001_initial.py new file mode 100644 index 0000000..c580b3a --- /dev/null +++ b/bom_manager/migrations/0001_initial.py @@ -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, + }, + ), + ] diff --git a/bom_manager/migrations/0002_alter_item_designation.py b/bom_manager/migrations/0002_alter_item_designation.py new file mode 100644 index 0000000..645488f --- /dev/null +++ b/bom_manager/migrations/0002_alter_item_designation.py @@ -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='Децимальный номер'), + ), + ] diff --git a/bom_manager/migrations/0003_alter_bomnode_item_alter_bomnode_parent.py b/bom_manager/migrations/0003_alter_bomnode_item_alter_bomnode_parent.py new file mode 100644 index 0000000..9520e5c --- /dev/null +++ b/bom_manager/migrations/0003_alter_bomnode_item_alter_bomnode_parent.py @@ -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'), + ), + ] diff --git a/bom_manager/migrations/0004_alter_bomnode_options_alter_bomnode_quantity_and_more.py b/bom_manager/migrations/0004_alter_bomnode_options_alter_bomnode_quantity_and_more.py new file mode 100644 index 0000000..93a1613 --- /dev/null +++ b/bom_manager/migrations/0004_alter_bomnode_options_alter_bomnode_quantity_and_more.py @@ -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), + ), + ] diff --git a/bom_manager/migrations/0005_workcenter_routingstep.py b/bom_manager/migrations/0005_workcenter_routingstep.py new file mode 100644 index 0000000..2fcd896 --- /dev/null +++ b/bom_manager/migrations/0005_workcenter_routingstep.py @@ -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'], + }, + ), + ] diff --git a/bom_manager/migrations/__init__.py b/bom_manager/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bom_manager/models.py b/bom_manager/models.py new file mode 100644 index 0000000..adeb517 --- /dev/null +++ b/bom_manager/models.py @@ -0,0 +1,147 @@ +from django.db import models +from django.urls import reverse +from mptt.models import MPTTModel, TreeForeignKey +# Create your models here. + +class EntityType(models.TextChoices): + """Тип изделия""" + UNIT = 'UNIT', 'Изделие' + ASSEMBLY = 'ASSY', 'Сборка' + PART = 'PART', 'Деталь' + STANDARD = 'STD', 'Стандартное изделие' + COMPLEX = 'CPLX', 'Комплекс' + + +class OperationType(models.TextChoices): + """Тип операции""" + LRL = 'LRL', 'Лазерная резка листа (ЛРЛ)' + LRT = 'LRT', 'Лазерная резка трубы (ЛРТ)' + TO = 'TO', 'Токарная обработка (ТО)' + WELD = 'WELD', 'Сварка' + PAINT = 'PAINT', 'Покраска' + BEND = 'BEND', 'Гибка' + CLEAN = 'CLEAN', 'Зачистка' + BANDSAW = 'BANDSAW', 'Лентопильный станок' + MOVE = 'MOVE', 'Перемещение' + +class WorkCenter(models.Model): + """Справочник станков или участков""" + name = models.CharField("Название станка/участка", max_length=100) + rate_per_hour = models.DecimalField("Стоимость часа", max_digits=10, decimal_places=2, default=0) + + class Meta: + verbose_name = "Станок/участок" + verbose_name_plural = "Станки/участки" + + def __str__(self): + return self.name + +class Item(models.Model): + + + # Децимальный номер + designation = models.CharField(max_length=30, verbose_name="Децимальный номер", db_index=True, blank=True, null=True) + + # Обозначение + title = models.CharField(max_length=100, verbose_name="Обозначение", blank=False, null=False) + + # Тип изделия + entity_type = models.CharField(max_length=4, choices=EntityType.choices, default=EntityType.PART) + + # Флаг сборки + is_assembly = models.BooleanField("Сборка", default=False) + + # Технические данные + drawing = models.FileField("Чертеж", upload_to='drawings/', blank=True, null=True) + + + + class Meta: + verbose_name = "Компонент" + verbose_name_plural = "Компоненты" + + def __str__(self): + if self.designation: + return f"{self.designation} {self.title}" + return self.title # Если номера нет, выводим только название без None + + def get_absolute_url(self): + return reverse("item_detail", kwargs={"pk": self.pk}) + +class BOMNode(MPTTModel): + + # Связь с компонентом + item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='bom_nodes') + # Связь с родительским компонентом + parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children') + # Количество + quantity = models.IntegerField(default=1, verbose_name="Количество") + + # Разрешаем добавление компонентов только в сборки и изделия + def clean(self): + if self.parent and self.parent.item.entity_type not in [EntityType.UNIT, EntityType.ASSEMBLY, EntityType.COMPLEX]: + raise ValidationError( + f"Нельзя добавлять компоненты в '{self.parent.item.title}', так как это не сборка или изделие!" + ) + + class MPTTMeta: + order_insertion_by = [] # todo: add order_insertion_by + verbose_name = "Дерево материала" + verbose_name_plural = "Деревья материала" + + class Meta: + verbose_name = "Изделие" + verbose_name_plural = "Изделия" + + def __str__(self): + res = f"{self.item.designation or ''} {self.item.title}" + if self.parent: + res += f" (в {self.parent.item.title})" + else: + res += " (Корень изделия)" + return res + + + def get_absolute_url(self): + return reverse("bom_node_detail", kwargs={"pk": self.pk}) + +class RoutingStep(models.Model): + """Технологическая операция""" + # Связь с компонентом + item = models.ForeignKey('Item', on_delete=models.CASCADE, related_name='routing_steps', verbose_name="Деталь/Сборка") + # Тип операции + operation_type = models.CharField("Тип операции", max_length=10, choices=OperationType.choices) + # Связь с станком + work_center = models.ForeignKey(WorkCenter, on_delete=models.SET_NULL, null=True, verbose_name="Станок/Участок") + # Номер операции + order = models.PositiveIntegerField("Номер операции", default=10, help_text="Например: 10, 20, 30...") + + # Файлы + drawing_file = models.FileField("Тех. файл (DXF/IGES)", upload_to='tech_files/%Y/%m', null=True, blank=True) + + # Гибкие данные (JSON) + # Сюда будем писать: {"cut_length": 1500, "pierces": 20} или {"welds": [{"leg": 5, "length": 100}]} + tech_params = models.JSONField("Технологические параметры", default=dict, blank=True) + + # Общие поля для всех операций + setup_time = models.DurationField("Время наладки", null=True, blank=True) + cycle_time = models.DurationField("Время цикла (на 1 шт)", null=True, blank=True) + + def clean(self): + if self.operation_type == OperationType.LRL: + if 'cut_length' not in self.tech_params: + raise ValidationError("Для ЛРЛ обязательно укажите 'cut_length' в параметрах!") + if 'pierces' not in self.tech_params: + raise ValidationError("Для ЛРЛ обязательно укажите 'pierces' в параметрах!") + if self.operation_type == OperationType.LRT: + if 'cut_length' not in self.tech_params: + raise ValidationError("Для ЛРТ обязательно укажите 'cut_length' в параметрах!") + + + class Meta: + ordering = ['order'] + verbose_name = "Технологическая операция" + verbose_name_plural = "Технологический маршрут" + + def __str__(self): + return f"{self.order}. {self.get_operation_type_display()}" \ No newline at end of file diff --git a/bom_manager/templates/bom_manager/index.html b/bom_manager/templates/bom_manager/index.html new file mode 100644 index 0000000..b6598f0 --- /dev/null +++ b/bom_manager/templates/bom_manager/index.html @@ -0,0 +1,8 @@ +{% extends 'base.html' %} + +{% block title %}Список продуктов{% endblock %} + +{% block content %} +Привет + +{% endblock %} diff --git a/bom_manager/tests.py b/bom_manager/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/bom_manager/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/bom_manager/urls.py b/bom_manager/urls.py new file mode 100644 index 0000000..c486297 --- /dev/null +++ b/bom_manager/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.index, name='index'), +] \ No newline at end of file diff --git a/bom_manager/views.py b/bom_manager/views.py new file mode 100644 index 0000000..304383f --- /dev/null +++ b/bom_manager/views.py @@ -0,0 +1,5 @@ +from django.shortcuts import render + +# Create your views here. +def index(request): + return render(request, 'bom_manager/index.html') diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/asgi.py b/core/asgi.py new file mode 100644 index 0000000..cf099bf --- /dev/null +++ b/core/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for core project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + +application = get_asgi_application() diff --git a/core/settings.py b/core/settings.py new file mode 100644 index 0000000..62a39bc --- /dev/null +++ b/core/settings.py @@ -0,0 +1,119 @@ +""" +Django settings for core project. + +Generated by 'django-admin startproject' using Django 6.0.2. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/6.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-5(p6^by%ax10=(ev#ltdb8#f4@mq4&9gqnjvr9dboc=7t_&sbf' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'mptt', # added app MPTT + 'bom_manager', # added app Bom Manager +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'core.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'core.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/6.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/6.0/topics/i18n/ + +LANGUAGE_CODE = 'ru-ru' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/6.0/howto/static-files/ + +STATIC_URL = 'static/' diff --git a/core/urls.py b/core/urls.py new file mode 100644 index 0000000..e6e9db0 --- /dev/null +++ b/core/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for core project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/6.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('bom_manager.urls')), +] diff --git a/core/wsgi.py b/core/wsgi.py new file mode 100644 index 0000000..6d36530 --- /dev/null +++ b/core/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for core project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') + +application = get_wsgi_application() diff --git a/drawings/МТЛЕ_0093.000.00_СБ-10__консоль_28_3.pdf b/drawings/МТЛЕ_0093.000.00_СБ-10__консоль_28_3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a7f9d2bf1c137728660d392eaf6c53ba5e4835bf GIT binary patch literal 91412 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²zG+q9Q+a=g?umA|CW~9 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

@X`V8} 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 TxCJkI^3;0Gb<8_aTh09fpN2CL literal 0 HcmV?d00001 diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..668b208 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,51 @@ + + + + + + + {% block title %}Мой проект{% endblock %} + + + + {% block extra_css %}{% endblock %} + + + + {% include 'components/navbar.html' %} + + +

+ {% block content %}{% endblock %} +
+ + + {% include 'components/footer.html' %} + + + + {% block extra_js %}{% endblock %} + + \ No newline at end of file diff --git a/templates/components/footer.html b/templates/components/footer.html new file mode 100644 index 0000000..5f60285 --- /dev/null +++ b/templates/components/footer.html @@ -0,0 +1,10 @@ + +
+
+

© 2026 Проект АСК. Все права защищены.

+

+ ENV: {{ env_type|default:"unknown" }} + | +

+
+
\ No newline at end of file diff --git a/templates/components/navbar.html b/templates/components/navbar.html new file mode 100644 index 0000000..db457ae --- /dev/null +++ b/templates/components/navbar.html @@ -0,0 +1,33 @@ + + \ No newline at end of file