from django.contrib import admin from django.utils.html import format_html from django.urls import reverse from simple_history.admin import SimpleHistoryAdmin from .models import ( Computer, Monitor, Peripheral, DigitalCertificate, MaintenanceRecord, DecommissionRecord, HandoverProtocol, ) from .models import DecommissionRecord # --- Inlines for Computer --- # class MaintenanceInlineComputer(admin.TabularInline): # model = MaintenanceRecord # fk_name = "computer" # extra = 0 # class DecommissionInlineComputer(admin.StackedInline): # model = DecommissionRecord # fk_name = "computer" # extra = 0 # max_num = 1 # # --- Inlines for Monitor --- # class MaintenanceInlineMonitor(admin.TabularInline): # model = MaintenanceRecord # fk_name = "monitor" # extra = 0 # class DecommissionInlineMonitor(admin.StackedInline): # model = DecommissionRecord # fk_name = "monitor" # extra = 0 # max_num = 1 # # --- Inlines for Peripheral --- # class MaintenanceInlinePeripheral(admin.TabularInline): # model = MaintenanceRecord # fk_name = "peripheral" # extra = 0 # class DecommissionInlinePeripheral(admin.StackedInline): # model = DecommissionRecord # fk_name = "peripheral" # extra = 0 # max_num = 1 @admin.register(Computer) class ComputerAdmin(SimpleHistoryAdmin): list_display = ("equipment_code", "oem_name", "status", "assigned_to", "entry_date") list_filter = ("status", "entry_date", "assigned_to") search_fields = ("equipment_code", "oem_name", "mac_address", "observations") # inlines = [MaintenanceInlineComputer, DecommissionInlineComputer] @admin.register(Monitor) class MonitorAdmin(SimpleHistoryAdmin): list_display = ("equipment_code", "name", "status", "assigned_to", "entry_date") list_filter = ("status", "entry_date", "assigned_to") search_fields = ("equipment_code", "name", "serial_number") # inlines = [MaintenanceInlineMonitor, DecommissionInlineMonitor] @admin.register(Peripheral) class PeripheralAdmin(SimpleHistoryAdmin): list_display = ( "equipment_code", "name", "peripheral_type", "status", "assigned_to", ) list_filter = ("status", "peripheral_type", "entry_date", "assigned_to") search_fields = ("equipment_code", "name", "serial_number") # inlines = [MaintenanceInlinePeripheral, DecommissionInlinePeripheral] @admin.register(DigitalCertificate) class DigitalCertificateAdmin(SimpleHistoryAdmin): list_display = ( "get_certificate_type_display", "assigned_to", "issue_date", "expiration_date", "is_canceled", ) list_filter = ("certificate_type", "is_canceled", "issue_date") search_fields = ("assigned_to__name", "assigned_to__username") # Optionally register the records independently so they can be searched globally @admin.register(MaintenanceRecord) class MaintenanceRecordAdmin(SimpleHistoryAdmin): list_display = ("date", "operation_type", "performed_by") list_filter = ("date", "operation_type") search_fields = ("description", "performed_by") @admin.register(DecommissionRecord) class DecommissionRecordAdmin(SimpleHistoryAdmin): list_display = ("document_number", "date", "reason") list_filter = ("date",) search_fields = ("document_number", "reason") @admin.register(HandoverProtocol) class HandoverProtocolAdmin(SimpleHistoryAdmin): list_display = ( "document_number", "date", "previous_holder", "new_holder", "it_validator", "print_protocol_button", ) list_filter = ("date", "it_validator") filter_horizontal = ("computers", "monitors", "peripherals") # Make these fields read-only so they cannot be manually overwritten readonly_fields = ("document_number", "it_validator") def save_model(self, request, obj, form, change): if not obj.it_validator: # Captures the logged-in user's name automatically obj.it_validator = request.user.get_full_name() or request.user.username super().save_model(request, obj, form, change) def print_protocol_button(self, obj): if obj.pk: url = reverse("equipment:print_handover", args=[obj.pk]) return format_html( '🖨️ Printează PV', url, ) return "-" print_protocol_button.short_description = "Acțiune" # @admin.register(DecommissionRecord) # class DecommissionRecordAdmin(SimpleHistoryAdmin): # list_display = ("document_number", "date", "reason") # search_fields = ("document_number", "reason") # list_filter = ("date",) # Acest filter_horizontal va crea o interfață cu două coloane foarte utilă # pentru a selecta ușor multiple echipamente din stânga în dreapta filter_horizontal = ("computers", "monitors", "peripherals")