Files
MES_Core/shiftflow/admin.py
ackFromRedmi c2778d9ec8
All checks were successful
Deploy MES Core / deploy (push) Successful in 10s
Теперь сделки на странице планирования
2026-03-31 08:31:54 +03:00

65 lines
2.7 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', 'status', 'company')
search_fields = ('number', 'company__name')
list_filter = ('status', '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.register(Machine)
class MachineAdmin(admin.ModelAdmin):
list_display = ('name', 'machine_type')
list_filter = ('machine_type',)
search_fields = ('name',)
@admin.register(EmployeeProfile)
class EmployeeProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'role')
filter_horizontal = ('machines',) # Красивый выбор станков двумя колонками