Files

157 lines
5.0 KiB
Python

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(
'<a class="button" href="{}" target="_blank" style="background-color: #417690; color: white; padding: 5px 10px; border-radius: 4px; text-decoration: none;">🖨️ Printează PV</a>',
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")