238 lines
8.5 KiB
Python
238 lines
8.5 KiB
Python
# Generated by Django 5.2.17 on 2026-09-26 10:54
|
|
|
|
import django.db.models.deletion
|
|
from django.db import migrations, models
|
|
|
|
|
|
def copy_to_specifications(apps, schema_editor):
|
|
Device = apps.get_model("inventory", "Device")
|
|
Computer = apps.get_model("inventory", "ComputerSpecification")
|
|
Monitor = apps.get_model("inventory", "MonitorSpecification")
|
|
Printer = apps.get_model("inventory", "PrinterSpecification")
|
|
for device in Device.objects.select_related("device_type").iterator(chunk_size=500):
|
|
label = device.device_type.label.strip().casefold() if device.device_type else ""
|
|
if label == "drucker":
|
|
Printer.objects.create(device_id=device.pk, wifi=device.wifi, lan=device.lan)
|
|
elif label == "bildschirm":
|
|
Monitor.objects.create(device_id=device.pk, display_inches=device.display_inches)
|
|
else:
|
|
Computer.objects.create(
|
|
device_id=device.pk, cpu=device.cpu, hwid=device.hwid,
|
|
ram_gb=device.ram_gb, ssd_gb=device.ssd_gb, hdd_gb=device.hdd_gb,
|
|
display_inches=device.display_inches, battery=device.battery,
|
|
wifi=device.wifi, lan=device.lan,
|
|
)
|
|
|
|
|
|
def copy_back_to_devices(apps, schema_editor):
|
|
Device = apps.get_model("inventory", "Device")
|
|
Computer = apps.get_model("inventory", "ComputerSpecification")
|
|
Monitor = apps.get_model("inventory", "MonitorSpecification")
|
|
Printer = apps.get_model("inventory", "PrinterSpecification")
|
|
for device in Device.objects.select_related("device_type").iterator(chunk_size=500):
|
|
label = device.device_type.label.strip().casefold() if device.device_type else ""
|
|
if label == "drucker":
|
|
spec = Printer.objects.filter(device_id=device.pk).first()
|
|
elif label == "bildschirm":
|
|
spec = Monitor.objects.filter(device_id=device.pk).first()
|
|
else:
|
|
spec = Computer.objects.filter(device_id=device.pk).first()
|
|
if spec:
|
|
Device.objects.filter(pk=device.pk).update(**{
|
|
name: getattr(spec, name) for name in (
|
|
"cpu", "hwid", "ram_gb", "ssd_gb", "hdd_gb", "display_inches", "battery", "wifi", "lan",
|
|
) if hasattr(spec, name)
|
|
})
|
|
|
|
|
|
def computer_search_index(apps, schema_editor):
|
|
if schema_editor.connection.vendor == "postgresql":
|
|
schema_editor.execute(
|
|
"CREATE INDEX IF NOT EXISTS inventory_computer_cpu_trgm "
|
|
"ON inventory_computerspecification USING gin (cpu gin_trgm_ops)"
|
|
)
|
|
|
|
|
|
def drop_computer_search_index(apps, schema_editor):
|
|
if schema_editor.connection.vendor == "postgresql":
|
|
schema_editor.execute("DROP INDEX IF EXISTS inventory_computer_cpu_trgm")
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("inventory", "0008_normalize_hardware_by_type"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="ComputerSpecification",
|
|
fields=[
|
|
(
|
|
"device",
|
|
models.OneToOneField(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
primary_key=True,
|
|
related_name="computer_specification",
|
|
serialize=False,
|
|
to="inventory.device",
|
|
),
|
|
),
|
|
("cpu", models.CharField(blank=True, db_index=True, max_length=200)),
|
|
("hwid", models.CharField(blank=True, db_index=True, max_length=255)),
|
|
(
|
|
"ram_gb",
|
|
models.PositiveIntegerField(blank=True, db_index=True, null=True),
|
|
),
|
|
(
|
|
"ssd_gb",
|
|
models.PositiveIntegerField(blank=True, db_index=True, null=True),
|
|
),
|
|
(
|
|
"hdd_gb",
|
|
models.PositiveIntegerField(blank=True, db_index=True, null=True),
|
|
),
|
|
(
|
|
"display_inches",
|
|
models.DecimalField(
|
|
blank=True, decimal_places=1, max_digits=4, null=True
|
|
),
|
|
),
|
|
(
|
|
"battery",
|
|
models.CharField(
|
|
choices=[
|
|
("YES", "JA"),
|
|
("NO", "NEIN"),
|
|
("UNKNOWN", "UNBEKANNT"),
|
|
],
|
|
default="UNKNOWN",
|
|
max_length=10,
|
|
),
|
|
),
|
|
(
|
|
"wifi",
|
|
models.CharField(
|
|
choices=[
|
|
("YES", "JA"),
|
|
("NO", "NEIN"),
|
|
("UNKNOWN", "UNBEKANNT"),
|
|
],
|
|
default="UNKNOWN",
|
|
max_length=10,
|
|
),
|
|
),
|
|
(
|
|
"lan",
|
|
models.CharField(
|
|
choices=[
|
|
("YES", "JA"),
|
|
("NO", "NEIN"),
|
|
("UNKNOWN", "UNBEKANNT"),
|
|
],
|
|
default="UNKNOWN",
|
|
max_length=10,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name="MonitorSpecification",
|
|
fields=[
|
|
(
|
|
"device",
|
|
models.OneToOneField(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
primary_key=True,
|
|
related_name="monitor_specification",
|
|
serialize=False,
|
|
to="inventory.device",
|
|
),
|
|
),
|
|
(
|
|
"display_inches",
|
|
models.DecimalField(
|
|
blank=True, decimal_places=1, max_digits=4, null=True
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name="PrinterSpecification",
|
|
fields=[
|
|
(
|
|
"device",
|
|
models.OneToOneField(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
primary_key=True,
|
|
related_name="printer_specification",
|
|
serialize=False,
|
|
to="inventory.device",
|
|
),
|
|
),
|
|
(
|
|
"wifi",
|
|
models.CharField(
|
|
choices=[
|
|
("YES", "JA"),
|
|
("NO", "NEIN"),
|
|
("UNKNOWN", "UNBEKANNT"),
|
|
],
|
|
default="UNKNOWN",
|
|
max_length=10,
|
|
),
|
|
),
|
|
(
|
|
"lan",
|
|
models.CharField(
|
|
choices=[
|
|
("YES", "JA"),
|
|
("NO", "NEIN"),
|
|
("UNKNOWN", "UNBEKANNT"),
|
|
],
|
|
default="UNKNOWN",
|
|
max_length=10,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.RunPython(copy_to_specifications, copy_back_to_devices),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="battery",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="cpu",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="display_inches",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="hdd_gb",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="hwid",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="lan",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="ram_gb",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="ssd_gb",
|
|
),
|
|
migrations.RemoveField(
|
|
model_name="device",
|
|
name="wifi",
|
|
),
|
|
migrations.RunPython(computer_search_index, drop_computer_search_index),
|
|
]
|