Versiunea funcțională EUMI

This commit is contained in:
2026-08-31 16:10:46 +03:00
parent 75bcef3095
commit ce5028a27f
58 changed files with 4271 additions and 98 deletions
+79 -33
View File
@@ -1,4 +1,6 @@
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,
@@ -7,49 +9,50 @@ from .models import (
DigitalCertificate,
MaintenanceRecord,
DecommissionRecord,
HandoverProtocol,
)
from .models import DecommissionRecord
# --- Inlines for Computer ---
class MaintenanceInlineComputer(admin.TabularInline):
model = MaintenanceRecord
fk_name = "computer"
extra = 0
# 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
# 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
# # --- 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
# 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
# # --- 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
# class DecommissionInlinePeripheral(admin.StackedInline):
# model = DecommissionRecord
# fk_name = "peripheral"
# extra = 0
# max_num = 1
@admin.register(Computer)
@@ -57,7 +60,7 @@ 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]
# inlines = [MaintenanceInlineComputer, DecommissionInlineComputer]
@admin.register(Monitor)
@@ -65,7 +68,7 @@ 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]
# inlines = [MaintenanceInlineMonitor, DecommissionInlineMonitor]
@admin.register(Peripheral)
@@ -79,7 +82,7 @@ class PeripheralAdmin(SimpleHistoryAdmin):
)
list_filter = ("status", "peripheral_type", "entry_date", "assigned_to")
search_fields = ("equipment_code", "name", "serial_number")
inlines = [MaintenanceInlinePeripheral, DecommissionInlinePeripheral]
# inlines = [MaintenanceInlinePeripheral, DecommissionInlinePeripheral]
@admin.register(DigitalCertificate)
@@ -108,3 +111,46 @@ 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")