Files
MES_Core/shiftflow/admin.py
ackFromRedmi 6013d5854b
All checks were successful
Deploy MES Core / deploy (push) Successful in 10s
Доработали фильт в реестре заданий
2026-03-29 20:29:05 +03:00

62 lines
2.6 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, ProductionTask, 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(ProductionTask)
class ProductionTaskAdmin(admin.ModelAdmin):
list_display = ('drawing_name', 'deal', 'material', 'quantity_ordered', 'created_at')
search_fields = ('drawing_name', 'deal__number')
list_filter = ('deal', 'material', 'is_bend')
# --- Сменные задания (Выполнение) ---
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
# Что видим в общем списке (используем task__ для доступа к полям базы)
list_display = ('date', 'machine', 'get_deal', 'get_drawing', 'quantity_plan', 'quantity_fact', 'status', 'is_synced_1c')
# Фильтры справа
list_filter = ('date', 'machine', 'status', 'is_synced_1c', 'task__deal')
# Поиск по номеру сделки и названию детали через связь task
search_fields = ('task__drawing_name', 'task__deal__number')
# Группируем поля в форме редактирования
fieldsets = (
('Связь с заданием', {
'fields': ('task', 'date', 'machine')
}),
('Исполнение', {
'fields': ('quantity_plan', 'quantity_fact', 'status', 'is_synced_1c')
}),
('Отходы и материалы', {
'fields': ('material_taken', 'usable_waste', 'scrap_weight')
}),
)
def get_deal(self, obj):
return obj.task.deal if obj.task else "-"
get_deal.short_description = 'Сделка'
def get_drawing(self, obj):
return obj.task.drawing_name if obj.task else "-"
get_drawing.short_description = 'Деталь'
# Регистрация станков просто списком
admin.site.register(Machine)
@admin.register(EmployeeProfile)
class EmployeeProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'role')
filter_horizontal = ('machines',) # Красивый выбор станков двумя колонками