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',) # Красивый выбор станков двумя колонками