121 lines
4.4 KiB
Python
121 lines
4.4 KiB
Python
from django.contrib import admin
|
|
from django import forms
|
|
from django.core.exceptions import ValidationError
|
|
from django.utils import timezone
|
|
from rest_framework_api_key.admin import APIKeyModelAdmin
|
|
from rest_framework_api_key.models import APIKey
|
|
|
|
from .models import AuditLog, AllInOneSpecification, ChoiceValue, ComputerSpecification, DesktopSpecification, Device, DeviceTask, Employee, FieldDefinition, FieldOption, ImportJob, InspectionRecord, InventoryAPIKey, LaptopSpecification, MonitorSpecification, PrinterSpecification, RepairRecord, SavedView, UserPreference, UserProfile, WorkflowEvent
|
|
from .permissions import can_edit
|
|
|
|
|
|
try:
|
|
admin.site.unregister(APIKey)
|
|
except admin.sites.NotRegistered:
|
|
pass
|
|
|
|
|
|
class InventoryAPIKeyAdminForm(forms.ModelForm):
|
|
class Meta:
|
|
model = InventoryAPIKey
|
|
fields = "__all__"
|
|
|
|
def clean_expiry_date(self):
|
|
expiry = self.cleaned_data.get("expiry_date")
|
|
if not expiry:
|
|
raise ValidationError("Ein Ablaufdatum ist aus Sicherheitsgründen erforderlich.")
|
|
if expiry <= timezone.now():
|
|
raise ValidationError("Das Ablaufdatum muss in der Zukunft liegen.")
|
|
return expiry
|
|
|
|
def clean(self):
|
|
cleaned = super().clean()
|
|
user = cleaned.get("service_user")
|
|
if cleaned.get("can_write") and user and not can_edit(user):
|
|
self.add_error("service_user", "Schreibzugriff erfordert ein Bearbeiter- oder Administratorkonto.")
|
|
return cleaned
|
|
|
|
|
|
@admin.register(Device)
|
|
class DeviceAdmin(admin.ModelAdmin):
|
|
list_display = ("number", "stage", "status", "device_type", "model", "employee", "date", "archived_at")
|
|
search_fields = ("=number", "model", "laptop_specification__cpu", "desktop_specification__cpu", "aio_specification__cpu", "computer_specification__cpu", "ticket", "comment")
|
|
list_filter = ("stage", "status", "device_type", "employee", "archived_at")
|
|
readonly_fields = ("number", "created_at", "updated_at")
|
|
|
|
|
|
@admin.register(DeviceTask)
|
|
class DeviceTaskAdmin(admin.ModelAdmin):
|
|
list_display = ("title", "device", "state", "assigned_to", "due_date", "completed_at")
|
|
list_filter = ("state", "due_date")
|
|
search_fields = ("title", "device__number")
|
|
|
|
|
|
@admin.register(WorkflowEvent)
|
|
class WorkflowEventAdmin(admin.ModelAdmin):
|
|
list_display = ("device", "from_stage", "to_stage", "user", "created_at")
|
|
readonly_fields = ("device", "from_stage", "to_stage", "note", "user", "created_at")
|
|
|
|
|
|
@admin.register(InspectionRecord, RepairRecord)
|
|
class StageRecordAdmin(admin.ModelAdmin):
|
|
list_display = ("device", "recorded_by", "created_at")
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
return tuple(field.name for field in self.model._meta.fields)
|
|
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|
|
|
|
|
|
@admin.register(LaptopSpecification, DesktopSpecification, AllInOneSpecification, ComputerSpecification, MonitorSpecification, PrinterSpecification)
|
|
class SpecificationAdmin(admin.ModelAdmin):
|
|
list_display = ("device",)
|
|
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def has_change_permission(self, request, obj=None):
|
|
return False
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|
|
|
|
|
|
@admin.register(ChoiceValue)
|
|
class ChoiceValueAdmin(admin.ModelAdmin):
|
|
list_display = ("kind", "label", "active", "sort_order")
|
|
list_filter = ("kind", "active")
|
|
|
|
|
|
@admin.register(InventoryAPIKey)
|
|
class InventoryAPIKeyAdmin(APIKeyModelAdmin):
|
|
form = InventoryAPIKeyAdminForm
|
|
list_display = (
|
|
"prefix", "name", "service_user", "can_read", "can_write", "created",
|
|
"expiry_date", "_has_expired", "revoked", "last_used_at",
|
|
)
|
|
list_filter = ("can_read", "can_write", "revoked", "created")
|
|
search_fields = ("name", "prefix", "service_user__username")
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
return super().get_readonly_fields(request, obj) + ("created_by", "last_used_at", "last_used_ip")
|
|
|
|
def save_model(self, request, obj, form=None, change=False):
|
|
if not obj.pk:
|
|
obj.created_by = request.user
|
|
super().save_model(request, obj, form, change)
|
|
|
|
|
|
admin.site.register(Employee)
|
|
admin.site.register(UserProfile)
|
|
admin.site.register(FieldDefinition)
|
|
admin.site.register(FieldOption)
|
|
admin.site.register(AuditLog)
|
|
admin.site.register(UserPreference)
|
|
admin.site.register(SavedView)
|
|
admin.site.register(ImportJob)
|