interaktivna Tablica radnih sati, db
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-12
|
||||
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task_management', '0003_task_vehicle'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TaskTemplate',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unikatni identifikator entiteta (UUID).', primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Vrijeme kreiranja')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Vrijeme zadnje izmjene')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan zapis')),
|
||||
('code', models.SlugField(max_length=64, unique=True)),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.TextField(blank=True)),
|
||||
('status', models.CharField(choices=[('aktivan', 'Aktivan'), ('servis', 'U tijeku'), ('neaktivan', 'Otkazano')], default='aktivan', max_length=20)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['title'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TaskTemplateEntry',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unikatni identifikator entiteta (UUID).', primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Vrijeme kreiranja')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Vrijeme zadnje izmjene')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan zapis')),
|
||||
('sort_order', models.PositiveSmallIntegerField(default=1)),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('work_description', models.TextField(blank=True)),
|
||||
('active_faults', models.TextField(blank=True, help_text='Aktivne greške.')),
|
||||
('explanation_hr', models.TextField(blank=True, help_text='Obrazloženje na hrvatskom jeziku.')),
|
||||
('task_template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entries', to='task_management.tasktemplate')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['sort_order', 'created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TaskWorkEntry',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unikatni identifikator entiteta (UUID).', primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Vrijeme kreiranja')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Vrijeme zadnje izmjene')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan zapis')),
|
||||
('sort_order', models.PositiveSmallIntegerField(default=1)),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('work_description', models.TextField(blank=True)),
|
||||
('active_faults', models.TextField(blank=True)),
|
||||
('explanation_hr', models.TextField(blank=True)),
|
||||
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='work_entries', to='task_management.task')),
|
||||
('template_entry', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='task_work_entries', to='task_management.tasktemplateentry')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['sort_order', 'created_at'],
|
||||
},
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name='tasktemplateentry',
|
||||
constraint=models.UniqueConstraint(fields=('task_template', 'sort_order'), name='task_template_entry_sort_order_unique'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,100 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-12
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def seed_task_templates(apps, schema_editor):
|
||||
TaskTemplate = apps.get_model('task_management', 'TaskTemplate')
|
||||
TaskTemplateEntry = apps.get_model('task_management', 'TaskTemplateEntry')
|
||||
|
||||
templates = [
|
||||
{
|
||||
'code': 'zamjena-ulja-500h',
|
||||
'title': 'Zamjena ulja nakon 500h',
|
||||
'description': 'Redovni servis uljnog sustava nakon 500 radnih sati.',
|
||||
'status': 'aktivan',
|
||||
'entries': [
|
||||
('Provjera razine i stanja ulja', 'Izvršena kontrola razine i vizualna kontrola kontaminacije ulja.', 'Nema aktivnih grešaka.', 'Sustav uredan, bez upozorenja.'),
|
||||
('Ispuštanje starog ulja', 'Sigurno ispušteno staro ulje prema servisnoj proceduri.', 'Nema aktivnih grešaka.', 'Ulje zamijenjeno prema uputama proizvođača.'),
|
||||
('Zamjena filtera ulja', 'Demontiran stari i ugrađen novi filter ulja.', 'Nema aktivnih grešaka.', 'Filter promijenjen i sustav pripremljen za punjenje.'),
|
||||
('Punjenje i test sustava', 'Sustav napunjen novim uljem i odrađen probni rad.', 'Nema aktivnih grešaka.', 'Nakon testa nema curenja ni grešaka.'),
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'zamjena-ulja-1000h',
|
||||
'title': 'Zamjena ulja nakon 1000h',
|
||||
'description': 'Veliki servis uljnog sustava nakon 1000 radnih sati.',
|
||||
'status': 'aktivan',
|
||||
'entries': [
|
||||
('Dijagnostika sustava prije servisa', 'Očitani parametri rada i zabilježeno početno stanje.', 'Provjeriti povremeni pad tlaka.', 'Prijevod poruke greške i potvrda simptoma na hrvatskom.'),
|
||||
('Zamjena ulja i glavnih filtera', 'Zamijenjeno ulje i svi pripadajući filter elementi.', 'Nema kritičnih aktivnih grešaka.', 'Servisni interval resetiran.'),
|
||||
('Kontrola brtvi i spojeva', 'Pregledani spojevi i brtve na mogućnost curenja.', 'Nema aktivnih grešaka.', 'Spojevi su suhi i ispravni.'),
|
||||
('Test pod opterećenjem', 'Izvršen funkcionalni test pod radnim opterećenjem.', 'Nema aktivnih grešaka.', 'Sustav stabilan pri opterećenju.'),
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'promjena-senzora',
|
||||
'title': 'Promjena senzora',
|
||||
'description': 'Zamjena neispravnog senzora i verifikacija rada.',
|
||||
'status': 'aktivan',
|
||||
'entries': [
|
||||
('Identifikacija neispravnog senzora', 'Dijagnostikom potvrđena neispravnost senzora.', 'Aktivna greška senzora.', 'Greška prevedena s engleskog i objašnjena korisniku.'),
|
||||
('Demontaža i montaža novog senzora', 'Neispravan senzor uklonjen i ugrađen novi originalni dio.', 'Nema novih aktivnih grešaka.', 'Montaža izvedena prema specifikaciji.'),
|
||||
('Kalibracija senzora', 'Izvršena kalibracija i sinkronizacija s upravljačkom jedinicom.', 'Nema aktivnih grešaka.', 'Kalibracija uspješna.'),
|
||||
('Završno testiranje', 'Provjeren odziv sustava tijekom rada.', 'Nema aktivnih grešaka.', 'Senzor radi unutar tolerancije.'),
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'aktivna-osovina-ukoso',
|
||||
'title': 'Aktivna osovina ide ukoso',
|
||||
'description': 'Dijagnostika i otklanjanje kvara aktivne osovine.',
|
||||
'status': 'aktivan',
|
||||
'entries': [
|
||||
('Dijagnostika geometrije osovine', 'Provjereni kutovi i odstupanja geometrije osovine.', 'Aktivna greška upravljanja osovinom.', 'Opis greške preveden i pojašnjen na hrvatskom.'),
|
||||
('Pregled hidrauličkih komponenti', 'Provjeren tlak i stanje hidrauličkih vodova.', 'Mogući pad tlaka na upravljačkom krugu.', 'Predložena zamjena kritičnog ventila.'),
|
||||
('Korekcija i podešavanje', 'Izvršeno mehaničko/hidrauličko podešavanje osovine.', 'Nema aktivnih grešaka nakon podešavanja.', 'Osovina vraćena u radne tolerancije.'),
|
||||
('Probna vožnja i završna potvrda', 'Izvršena probna vožnja i kontrola stabilnosti pravca.', 'Nema aktivnih grešaka.', 'Kvar otklonjen, vozilo spremno za rad.'),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
for template_data in templates:
|
||||
entries = template_data.pop('entries')
|
||||
template, _ = TaskTemplate.objects.update_or_create(
|
||||
code=template_data['code'],
|
||||
defaults=template_data,
|
||||
)
|
||||
TaskTemplateEntry.objects.filter(task_template=template).delete()
|
||||
for idx, entry in enumerate(entries, start=1):
|
||||
title, work_description, active_faults, explanation_hr = entry
|
||||
TaskTemplateEntry.objects.create(
|
||||
task_template=template,
|
||||
sort_order=idx,
|
||||
title=title,
|
||||
work_description=work_description,
|
||||
active_faults=active_faults,
|
||||
explanation_hr=explanation_hr,
|
||||
)
|
||||
|
||||
|
||||
def reverse_seed_task_templates(apps, schema_editor):
|
||||
TaskTemplate = apps.get_model('task_management', 'TaskTemplate')
|
||||
TaskTemplate.objects.filter(
|
||||
code__in=[
|
||||
'zamjena-ulja-500h',
|
||||
'zamjena-ulja-1000h',
|
||||
'promjena-senzora',
|
||||
'aktivna-osovina-ukoso',
|
||||
]
|
||||
).delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task_management', '0004_tasktemplate_taskworkentry'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(seed_task_templates, reverse_seed_task_templates),
|
||||
]
|
||||
@@ -0,0 +1,39 @@
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task_management', '0005_seed_task_templates'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='status',
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
('aktivan', 'Aktivan'),
|
||||
('servis', 'U tijeku'),
|
||||
('zavrsen', 'Završen'),
|
||||
('neaktivan', 'Otkazano'),
|
||||
],
|
||||
default='aktivan',
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tasktemplate',
|
||||
name='status',
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
('aktivan', 'Aktivan'),
|
||||
('servis', 'U tijeku'),
|
||||
('zavrsen', 'Završen'),
|
||||
('neaktivan', 'Otkazano'),
|
||||
],
|
||||
default='aktivan',
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task_management', '0006_add_finished_task_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TaskWorkHoursTable',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unikatni identifikator entiteta (UUID).', primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Vrijeme kreiranja')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Vrijeme zadnje izmjene')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan zapis')),
|
||||
('data', models.JSONField(blank=True, default=None, null=True, verbose_name='Podaci tablice radnih sati')),
|
||||
('task', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='work_hours_table', to='task_management.task', verbose_name='Radni zadatak')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Tablica radnih sati',
|
||||
'verbose_name_plural': 'Tablice radnih sati',
|
||||
'ordering': ['-updated_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user