Fix device issues and document current LAN deployment

This commit is contained in:
2026-10-13 10:54:20 +02:00
parent 35f88746ff
commit 048cec333e
23 changed files with 707 additions and 36 deletions

View File

@@ -5,7 +5,7 @@ from django.contrib.auth.models import User
from django.contrib.auth.password_validation import validate_password
from .models import ChoiceValue, Device, Employee, FieldDefinition, FieldOption, UserProfile
from .device_types import HARDWARE_FIELDS, applicable_fields
from .device_types import HARDWARE_FIELDS, TRISTATE_FIELDS, applicable_fields
GERMAN_DATE_INPUT_FORMATS = ["%d.%m.%Y", "%Y-%m-%d"]
@@ -45,7 +45,7 @@ class QuickAddForm(forms.Form):
selected_type = self.fields["device_type"].queryset.filter(pk=self.data["device_type"]).first()
for name in sorted(HARDWARE_FIELDS):
field = deepcopy(DeviceForm.base_fields[name])
if name in {"battery", "wifi", "lan", "duplex", "color_printing"}:
if name in TRISTATE_FIELDS:
field.required = False
field.initial = Device.TriState.UNKNOWN
if self.is_bound and name not in applicable_fields(selected_type):
@@ -60,7 +60,7 @@ class QuickAddForm(forms.Form):
values = {}
for name in applicable_fields(self.cleaned_data["device_type"]):
value = self.cleaned_data[name]
if name in {"battery", "wifi", "lan", "duplex", "color_printing"} and not value:
if name in TRISTATE_FIELDS and not value:
value = Device.TriState.UNKNOWN
values[name] = value
return values
@@ -88,6 +88,13 @@ class QuickAddForm(forms.Form):
class DeviceForm(forms.ModelForm):
camera = forms.ChoiceField(label="Kamera", choices=Device.TriState.choices, required=False)
sound = forms.ChoiceField(label="Sound", choices=Device.TriState.choices, required=False)
hdmi = forms.ChoiceField(label="HDMI", choices=Device.TriState.choices, required=False)
vga = forms.ChoiceField(label="VGA", choices=Device.TriState.choices, required=False)
dvi = forms.ChoiceField(label="DVI", choices=Device.TriState.choices, required=False)
displayport = forms.ChoiceField(label="DP", choices=Device.TriState.choices, required=False)
aspect_ratio = forms.CharField(label="Seitenverhältnis", max_length=20, required=False, help_text="z. B. 16:9, 4:3 oder 21:9")
battery = forms.ChoiceField(label="Akku", choices=Device.TriState.choices, required=False)
wifi = forms.ChoiceField(label="WLAN", choices=Device.TriState.choices, required=False)
lan = forms.ChoiceField(label="LAN", choices=Device.TriState.choices, required=False)
@@ -162,7 +169,7 @@ class DeviceForm(forms.ModelForm):
device = super().save(commit=False)
for name in applicable_fields(device.device_type):
value = self.cleaned_data[name]
if name in {"battery", "wifi", "lan", "duplex", "color_printing"} and not value:
if name in TRISTATE_FIELDS and not value:
value = Device.TriState.UNKNOWN
setattr(device, name, value)
if commit:
@@ -179,11 +186,18 @@ class InspectionForm(forms.Form):
super().__init__(*args, **kwargs)
self.device = device
self.initial.setdefault("model", device.model)
for name in ("cpu", "ram_gb", "ssd_gb", "hdd_gb", "display_inches", "battery", "wifi", "lan", "hwid", "ports", "resolution", "print_technology", "duplex", "color_printing"):
for name in ("cpu", "ram_gb", "ssd_gb", "hdd_gb", "display_inches", "battery", "wifi", "lan", "hwid", "ports", "resolution", "print_technology", "duplex", "color_printing", "aspect_ratio", "camera", "sound", "hdmi", "vga", "dvi", "displayport"):
if name in applicable_fields(device.device_type):
self.fields[name] = deepcopy(DeviceForm.base_fields[name])
self.initial.setdefault(name, getattr(device, name))
def clean(self):
cleaned = super().clean()
for name in TRISTATE_FIELDS & self.fields.keys():
if not cleaned.get(name):
cleaned[name] = Device.TriState.UNKNOWN
return cleaned
@property
def specification_fields(self):
return [self[name] for name in self.fields if name != "defects"]