234 lines
14 KiB
Python
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'),
|
|
),
|
|
]
|