Files
MES_Core/shiftflow/admin.py
tertelius a4ba577206
All checks were successful
Deploy MES Core / deploy (push) Successful in 9s
начал работать с интерфейсом
2026-03-29 00:27:29 +03:00

76 lines
3.4 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.

import os
from django.contrib import admin
from .models import Company, EmployeeProfile, Machine, Deal, Material, Item
# --- Настройка отображения Компаний ---
@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
list_display = ('name', 'description')
search_fields = ('name',)
# --- Настройка отображения Сделок ---
@admin.register(Deal)
class DealAdmin(admin.ModelAdmin):
list_display = ('number', 'company')
search_fields = ('number', 'company__name')
list_filter = ('company',)
# --- Настройка отображения Материалов ---
@admin.register(Material)
class MaterialAdmin(admin.ModelAdmin):
search_fields = ('name',)
# --- ГЛАВНАЯ МАГИЯ: Сменные задания ---
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
# Что видим в общем списке
list_display = ('date', 'machine', 'deal', 'drawing_name', 'quantity_plan', 'quantity_fact', 'status', 'is_synced_1c')
# Фильтры справа
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)
@admin.register(EmployeeProfile)
class EmployeeProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'role')
filter_horizontal = ('machines',) # Красивый выбор станков двумя колонками