Files
Inventory/inventory/migrations/0007_workflow_tasks.py
2026-09-29 08:43:05 +02:00

68 lines
3.8 KiB
Python

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
def initial_stages(apps, schema_editor):
Device = apps.get_model("inventory", "Device")
for device in Device.objects.select_related("status").iterator():
label = device.status.label.casefold()
if label == "ausgegeben":
stage = "ISSUED"
elif label in {"fertig", "reserviert"}:
stage = "STORAGE"
elif label == "defekt":
stage = "REPAIR"
else:
stage = "INTAKE"
Device.objects.filter(pk=device.pk).update(stage=stage)
class Migration(migrations.Migration):
dependencies = [
("inventory", "0006_device_revision"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name="device", name="stage",
field=models.CharField(max_length=12, choices=[
("INTAKE", "Eingang"), ("INSPECTION", "Inspektion"),
("REPAIR", "Reparatur"), ("STORAGE", "Lagerung"), ("ISSUED", "Ausgegeben"),
], default="INTAKE", db_index=True),
),
migrations.CreateModel(
name="DeviceTask",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("created_at", models.DateTimeField(auto_now_add=True)),
("updated_at", models.DateTimeField(auto_now=True)),
("title", models.CharField(max_length=200)),
("description", models.TextField(blank=True)),
("state", models.CharField(max_length=8, choices=[("OPEN", "Offen"), ("DONE", "Erledigt")], default="OPEN", db_index=True)),
("completed_at", models.DateTimeField(null=True, blank=True)),
("due_date", models.DateField(null=True, blank=True)),
("assigned_to", models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.SET_NULL, related_name="assigned_device_tasks", null=True, blank=True)),
("completed_by", models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.SET_NULL, related_name="completed_device_tasks", null=True, blank=True)),
("created_by", models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.SET_NULL, related_name="created_device_tasks", null=True)),
("device", models.ForeignKey(to="inventory.device", on_delete=django.db.models.deletion.CASCADE, related_name="tasks")),
],
options={"ordering": ["state", "-created_at"]},
),
migrations.CreateModel(
name="WorkflowEvent",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("from_stage", models.CharField(max_length=12, choices=[("INTAKE", "Eingang"), ("INSPECTION", "Inspektion"), ("REPAIR", "Reparatur"), ("STORAGE", "Lagerung"), ("ISSUED", "Ausgegeben")], blank=True)),
("to_stage", models.CharField(max_length=12, choices=[("INTAKE", "Eingang"), ("INSPECTION", "Inspektion"), ("REPAIR", "Reparatur"), ("STORAGE", "Lagerung"), ("ISSUED", "Ausgegeben")])),
("note", models.CharField(max_length=500, blank=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
("device", models.ForeignKey(to="inventory.device", on_delete=django.db.models.deletion.CASCADE, related_name="workflow_events")),
("user", models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.SET_NULL, null=True)),
],
options={"ordering": ["-created_at", "-id"]},
),
migrations.RunPython(initial_stages, migrations.RunPython.noop),
]