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

234 lines
14 KiB
Python

# Generated by Django 5.2.17 on 2026-09-19 12:26
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Employee',
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)),
('code', models.CharField(max_length=12, unique=True)),
('name', models.CharField(max_length=160)),
('active', models.BooleanField(db_index=True, default=True)),
],
options={
'ordering': ['code'],
},
),
migrations.CreateModel(
name='FieldDefinition',
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)),
('name', models.CharField(max_length=120)),
('key', models.SlugField(max_length=80, unique=True)),
('field_type', models.CharField(choices=[('text', 'Text'), ('long_text', 'Langer Text'), ('integer', 'Ganzzahl'), ('decimal', 'Dezimalzahl'), ('boolean', 'Ja/Nein'), ('date', 'Datum'), ('select', 'Auswahl'), ('multi_select', 'Mehrfachauswahl')], max_length=20)),
('unit', models.CharField(blank=True, max_length=30)),
('required', models.BooleanField(default=False)),
('active', models.BooleanField(db_index=True, default=True)),
('show_in_list', models.BooleanField(default=False)),
('filterable', models.BooleanField(default=False)),
('searchable', models.BooleanField(default=False)),
('sort_order', models.PositiveIntegerField(default=0)),
('group', models.CharField(default='Zusatzfelder', max_length=80)),
('allow_custom_values', models.BooleanField(default=False)),
],
options={
'ordering': ['sort_order', 'name'],
},
),
migrations.CreateModel(
name='NumberSequence',
fields=[
('name', models.CharField(max_length=30, primary_key=True, serialize=False)),
('last_value', models.PositiveIntegerField(default=0)),
],
),
migrations.CreateModel(
name='ChoiceValue',
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)),
('kind', models.CharField(choices=[('status', 'Status'), ('recipient', 'Empfänger'), ('location', 'Ort'), ('device_type', 'Typ'), ('ram', 'RAM-Vorschlag'), ('ssd', 'SSD-Vorschlag'), ('hdd', 'HDD-Vorschlag'), ('display', 'Displaygröße')], db_index=True, max_length=30)),
('label', models.CharField(max_length=120)),
('numeric_value', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
('active', models.BooleanField(db_index=True, default=True)),
('sort_order', models.PositiveIntegerField(default=0)),
],
options={
'ordering': ['kind', 'sort_order', 'label'],
'indexes': [models.Index(fields=['kind', 'active', 'sort_order'], name='inventory_c_kind_320c2f_idx')],
'constraints': [models.UniqueConstraint(fields=('kind', 'label'), name='unique_choice_label_per_kind')],
},
),
migrations.CreateModel(
name='Device',
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)),
('number', models.PositiveIntegerField(db_index=True, editable=False, unique=True)),
('shelf', models.CharField(blank=True, db_index=True, max_length=80)),
('date', models.DateField(db_index=True, default=django.utils.timezone.localdate)),
('ticket', models.CharField(blank=True, db_index=True, max_length=120)),
('price', models.DecimalField(blank=True, decimal_places=2, max_digits=10, 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)),
('display_inches', models.DecimalField(blank=True, decimal_places=1, max_digits=4, null=True)),
('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)),
('cpu', models.CharField(blank=True, db_index=True, max_length=200)),
('model', models.CharField(blank=True, db_index=True, max_length=200)),
('donor', models.CharField(blank=True, max_length=200)),
('comment', models.TextField(blank=True)),
('custom_values', models.JSONField(blank=True, default=dict)),
('archived_at', models.DateTimeField(blank=True, db_index=True, null=True)),
('archived_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='archived_devices', to=settings.AUTH_USER_MODEL)),
('device_type', models.ForeignKey(blank=True, limit_choices_to={'kind': 'device_type'}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='type_devices', to='inventory.choicevalue')),
('location', models.ForeignKey(blank=True, limit_choices_to={'kind': 'location'}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='location_devices', to='inventory.choicevalue')),
('recipient', models.ForeignKey(blank=True, limit_choices_to={'kind': 'recipient'}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='recipient_devices', to='inventory.choicevalue')),
('status', models.ForeignKey(limit_choices_to={'kind': 'status'}, on_delete=django.db.models.deletion.PROTECT, related_name='status_devices', to='inventory.choicevalue')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='inventory.employee')),
],
options={
'ordering': ['-number'],
},
),
migrations.CreateModel(
name='FieldOption',
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)),
('label', models.CharField(max_length=120)),
('active', models.BooleanField(default=True)),
('sort_order', models.PositiveIntegerField(default=0)),
('field', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='inventory.fielddefinition')),
],
options={
'ordering': ['sort_order', 'label'],
},
),
migrations.CreateModel(
name='ImportJob',
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)),
('file', models.FileField(upload_to='imports/%Y/%m/')),
('original_name', models.CharField(max_length=255)),
('status', models.CharField(choices=[('UPLOADED', 'Hochgeladen'), ('COMPLETED', 'Abgeschlossen'), ('FAILED', 'Fehlgeschlagen')], default='UPLOADED', max_length=12)),
('headers', models.JSONField(default=list)),
('preview_rows', models.JSONField(default=list)),
('result', models.JSONField(default=dict)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='import_jobs', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SavedView',
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)),
('name', models.CharField(max_length=120)),
('filters', models.JSONField(default=dict)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='saved_views', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='UserPreference',
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)),
('visible_columns', models.JSONField(blank=True, default=list)),
('column_order', models.JSONField(blank=True, default=list)),
('column_widths', models.JSONField(blank=True, default=dict)),
('page_size', models.PositiveSmallIntegerField(default=50)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='inventory_preferences', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='UserProfile',
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)),
('role', models.CharField(choices=[('ADMIN', 'Administrator'), ('EDITOR', 'Bearbeiter'), ('VIEWER', 'Betrachter')], default='VIEWER', max_length=10)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='AuditLog',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('action', models.CharField(choices=[('CREATE', 'Erstellt'), ('UPDATE', 'Geändert'), ('ARCHIVE', 'Archiviert'), ('RESTORE', 'Wiederhergestellt'), ('IMPORT', 'Importiert')], max_length=10)),
('field', models.CharField(blank=True, max_length=100)),
('old_value', models.TextField(blank=True)),
('new_value', models.TextField(blank=True)),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audit_entries', to=settings.AUTH_USER_MODEL)),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audit_entries', to='inventory.device')),
],
options={
'ordering': ['-created_at', '-id'],
'indexes': [models.Index(fields=['device', '-created_at'], name='inventory_a_device__78ae29_idx')],
},
),
migrations.AddIndex(
model_name='device',
index=models.Index(fields=['archived_at', '-number'], name='inventory_d_archive_2483fe_idx'),
),
migrations.AddIndex(
model_name='device',
index=models.Index(fields=['status', 'archived_at'], name='inventory_d_status__f41a2e_idx'),
),
migrations.AddIndex(
model_name='device',
index=models.Index(fields=['device_type', 'archived_at'], name='inventory_d_device__ec71d5_idx'),
),
migrations.AddIndex(
model_name='device',
index=models.Index(fields=['employee', 'archived_at'], name='inventory_d_employe_e23a79_idx'),
),
migrations.AddIndex(
model_name='device',
index=models.Index(fields=['recipient', 'archived_at'], name='inventory_d_recipie_5290ea_idx'),
),
migrations.AddConstraint(
model_name='fieldoption',
constraint=models.UniqueConstraint(fields=('field', 'label'), name='unique_custom_field_option'),
),
migrations.AddConstraint(
model_name='savedview',
constraint=models.UniqueConstraint(fields=('user', 'name'), name='unique_saved_view_name'),
),
]