157 lines
5.0 KiB
Python
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")
|