Подправил админку под новые модели
All checks were successful
Deploy MES Core / deploy (push) Successful in 8s
All checks were successful
Deploy MES Core / deploy (push) Successful in 8s
This commit is contained in:
@@ -1,12 +1,71 @@
|
|||||||
|
import os
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from .models import Machine, Item
|
from .models import Company, Machine, Deal, Material, Item
|
||||||
|
|
||||||
@admin.register(Machine)
|
# --- Настройка отображения Компаний ---
|
||||||
class MachineAdmin(admin.ModelAdmin):
|
@admin.register(Company)
|
||||||
list_display = ('name',)
|
class CompanyAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('name', 'description')
|
||||||
|
search_fields = ('name',)
|
||||||
|
|
||||||
|
# --- Настройка отображения Сделок ---
|
||||||
|
@admin.register(Deal)
|
||||||
|
class DealAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('number', 'company', 'created_at')
|
||||||
|
search_fields = ('number', 'company__name')
|
||||||
|
list_filter = ('company',)
|
||||||
|
|
||||||
|
# --- Настройка отображения Материалов ---
|
||||||
|
@admin.register(Material)
|
||||||
|
class MaterialAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('name',)
|
||||||
|
|
||||||
|
# --- ГЛАВНАЯ МАГИЯ: Сменные задания ---
|
||||||
@admin.register(Item)
|
@admin.register(Item)
|
||||||
class ItemAdmin(admin.ModelAdmin):
|
class ItemAdmin(admin.ModelAdmin):
|
||||||
list_display = ('date', 'machine', 'deal', 'drawing_name', 'quantity_plan', 'quantity_fact', 'status')
|
# Что видим в общем списке
|
||||||
list_filter = ('date', 'machine', 'status')
|
list_display = ('date', 'machine', 'deal', 'drawing_name', 'quantity_plan', 'quantity_fact', 'status', 'is_synced_1c')
|
||||||
search_fields = ('deal', 'drawing_name')
|
# Фильтры справа
|
||||||
|
list_filter = ('date', 'machine', 'status', 'is_synced_1c', 'deal')
|
||||||
|
# Поиск по номеру сделки и названию детали
|
||||||
|
search_fields = ('drawing_name', 'deal__number')
|
||||||
|
|
||||||
|
# Группируем поля в форме редактирования для удобства
|
||||||
|
fieldsets = (
|
||||||
|
('Основная информация', {
|
||||||
|
'fields': ('date', 'machine', 'deal', 'status')
|
||||||
|
}),
|
||||||
|
('Чертеж и параметры', {
|
||||||
|
'fields': ('drawing_file', 'drawing_name', 'size_value', 'extra_drawing', 'material', 'quantity_plan', 'is_bend')
|
||||||
|
}),
|
||||||
|
('Исполнение (Оператор)', {
|
||||||
|
'fields': ('operator', 'quantity_fact', 'material_taken', 'usable_waste', 'scrap_weight', 'is_synced_1c')
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
|
def save_model(self, request, obj, form, change):
|
||||||
|
"""
|
||||||
|
Переопределяем сохранение, чтобы автоматизировать заполнение полей.
|
||||||
|
"""
|
||||||
|
# 1. Если имя детали "Б/ч" или пустое, а файл загружен — берем имя из файла
|
||||||
|
if (obj.drawing_name == "Б/ч" or not obj.drawing_name) and obj.drawing_file:
|
||||||
|
filename = os.path.basename(obj.drawing_file.name)
|
||||||
|
obj.drawing_name = os.path.splitext(filename)[0] # Отрезаем .dxf или .step
|
||||||
|
|
||||||
|
# 2. Логика запоминания последней сделки (через сессию браузера)
|
||||||
|
if obj.deal:
|
||||||
|
request.session['last_deal_id'] = obj.deal.id
|
||||||
|
|
||||||
|
super().save_model(request, obj, form, change)
|
||||||
|
|
||||||
|
def get_changeform_initial_data(self, request):
|
||||||
|
"""
|
||||||
|
Подставляем последнюю выбранную сделку в новую форму.
|
||||||
|
"""
|
||||||
|
initial = super().get_changeform_initial_data(request)
|
||||||
|
if 'last_deal_id' in request.session:
|
||||||
|
initial['deal'] = request.session['last_deal_id']
|
||||||
|
return initial
|
||||||
|
|
||||||
|
# Регистрация станков просто списком
|
||||||
|
admin.site.register(Machine)
|
||||||
Reference in New Issue
Block a user