This commit is contained in:
124
backend/modules/fleet/migrations/0001_initial.py
Normal file
124
backend/modules/fleet/migrations/0001_initial.py
Normal file
@@ -0,0 +1,124 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-01 11:39
|
||||
|
||||
import django.db.models.deletion
|
||||
import modules.fleet.models
|
||||
import uuid
|
||||
from decimal import Decimal
|
||||
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='Vehicle',
|
||||
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')),
|
||||
('registration_number', models.CharField(max_length=20, unique=True, verbose_name='Registracija')),
|
||||
('make', models.CharField(blank=True, max_length=100, verbose_name='Proizvođač')),
|
||||
('model', models.CharField(blank=True, max_length=100, verbose_name='Model')),
|
||||
('year', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Godina')),
|
||||
('vin', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='VIN')),
|
||||
('current_mileage', models.PositiveIntegerField(default=0, verbose_name='Trenutna kilometraža (km)')),
|
||||
('service_interval_km', models.PositiveIntegerField(default=15000, verbose_name='Interval servisa (km)')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivno')),
|
||||
('assigned_servicer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='assigned_vehicles', to=settings.AUTH_USER_MODEL, verbose_name='Serviser')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Vozilo',
|
||||
'verbose_name_plural': 'Vozila',
|
||||
'ordering': ['registration_number'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VehicleNotification',
|
||||
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')),
|
||||
('title', models.CharField(max_length=255, verbose_name='Naslov')),
|
||||
('message', models.TextField(verbose_name='Poruka')),
|
||||
('level', models.CharField(choices=[('info', 'Info'), ('warning', 'Upozorenje'), ('critical', 'Kritično')], default='info', max_length=20, verbose_name='Razina')),
|
||||
('is_sent', models.BooleanField(default=False, verbose_name='Poslano (e-mail)')),
|
||||
('is_read', models.BooleanField(default=False, verbose_name='Pročitano')),
|
||||
('recipient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_notifications', to=settings.AUTH_USER_MODEL, verbose_name='Primatelj')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Notifikacija za vozilo',
|
||||
'verbose_name_plural': 'Notifikacije za vozila',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VehicleServiceRecord',
|
||||
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')),
|
||||
('description', models.TextField(verbose_name='Opis posla')),
|
||||
('parts', models.TextField(blank=True, verbose_name='Korišteni dijelovi')),
|
||||
('cost', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=10, verbose_name='Trošak')),
|
||||
('service_date', models.DateField(auto_now_add=True, verbose_name='Datum servisa')),
|
||||
('mileage', models.PositiveIntegerField(verbose_name='Kilometraža pri servisu')),
|
||||
('next_service_due_at', models.PositiveIntegerField(blank=True, null=True, verbose_name='Kilometraža sljedećeg servisa')),
|
||||
('performed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='performed_vehicle_services', to=settings.AUTH_USER_MODEL, verbose_name='Izvršio')),
|
||||
('vehicle', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='service_records', to='fleet.vehicle', verbose_name='Vozilo')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Servisni zapis',
|
||||
'verbose_name_plural': 'Servisni zapisi',
|
||||
'ordering': ['-service_date'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VehicleServicePhoto',
|
||||
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')),
|
||||
('image', models.ImageField(upload_to=modules.fleet.models._service_photo_upload_to, verbose_name='Fotografija')),
|
||||
('description', models.CharField(blank=True, max_length=255, verbose_name='Opis')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan')),
|
||||
('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_service_photos', to=settings.AUTH_USER_MODEL, verbose_name='Postavio')),
|
||||
('service_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='fleet.vehicleservicerecord', verbose_name='Servisni zapis')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Fotografija servisa',
|
||||
'verbose_name_plural': 'Fotografije servisa',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='WorkOrder',
|
||||
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')),
|
||||
('date', models.DateField(auto_now_add=True, verbose_name='Datum')),
|
||||
('start_mileage', models.PositiveIntegerField(verbose_name='Početna kilometraža')),
|
||||
('end_mileage', models.PositiveIntegerField(blank=True, null=True, verbose_name='Završna kilometraža')),
|
||||
('purpose', models.CharField(blank=True, max_length=255, verbose_name='Svrha')),
|
||||
('notes', models.TextField(blank=True, verbose_name='Bilješke')),
|
||||
('status', models.CharField(choices=[('open', 'Otvoren'), ('closed', 'Zatvoren')], default='open', max_length=20, verbose_name='Status')),
|
||||
('creator', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='created_work_orders', to=settings.AUTH_USER_MODEL, verbose_name='Kreirao')),
|
||||
('vehicle', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='work_orders', to='fleet.vehicle', verbose_name='Vozilo')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Putni nalog',
|
||||
'verbose_name_plural': 'Putni nalozi',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,21 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-03 02:15
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='vehicle',
|
||||
name='assigned_servicer',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='assigned_vehicles', to=settings.AUTH_USER_MODEL, verbose_name='Serviser'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 08:28
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('crm', '0001_initial'),
|
||||
('fleet', '0002_alter_vehicle_assigned_servicer'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='client',
|
||||
field=models.ForeignKey(blank=True, help_text='Popunite samo za vozila kupaca (is_company_vehicle = Ne).', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicles', to='crm.client', verbose_name='Kupac'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='is_company_vehicle',
|
||||
field=models.BooleanField(default=True, help_text='Označite ako vozilo pripada našoj tvrtki. Poništite za vozila kupaca.', verbose_name='Vozilo tvrtke'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,36 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 11:45
|
||||
|
||||
import django.db.models.deletion
|
||||
import modules.fleet.models
|
||||
import uuid
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('fleet', '0003_add_is_company_vehicle_and_client_fk'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='VehicleServiceAttachment',
|
||||
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')),
|
||||
('file', models.FileField(upload_to=modules.fleet.models._service_attachment_upload_to, verbose_name='Datoteka')),
|
||||
('description', models.CharField(blank=True, max_length=255, verbose_name='Opis')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan')),
|
||||
('service_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='fleet.vehicleservicerecord', verbose_name='Servisni zapis')),
|
||||
('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_service_attachments', to=settings.AUTH_USER_MODEL, verbose_name='Postavio')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Prilog servisa',
|
||||
'verbose_name_plural': 'Prilozi servisa',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 13:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0004_vehicleserviceattachment'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehiclenotification',
|
||||
name='metadata',
|
||||
field=models.JSONField(blank=True, default=dict, verbose_name='Metapodaci'),
|
||||
),
|
||||
]
|
||||
26
backend/modules/fleet/migrations/0006_crane_proxy_model.py
Normal file
26
backend/modules/fleet/migrations/0006_crane_proxy_model.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 13:35
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0005_vehiclenotification_metadata'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Crane',
|
||||
fields=[],
|
||||
options={
|
||||
'verbose_name': 'Dizalica',
|
||||
'verbose_name_plural': 'Dizalice',
|
||||
'ordering': ['registration_number'],
|
||||
'proxy': True,
|
||||
'indexes': [],
|
||||
'constraints': [],
|
||||
},
|
||||
bases=('fleet.vehicle',),
|
||||
),
|
||||
]
|
||||
18
backend/modules/fleet/migrations/0007_vehicle_asset_type.py
Normal file
18
backend/modules/fleet/migrations/0007_vehicle_asset_type.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 15:50
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0006_crane_proxy_model'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='asset_type',
|
||||
field=models.CharField(choices=[('vehicle', 'Vozilo'), ('crane', 'Dizalica')], db_index=True, default='crane', max_length=20, verbose_name='Tip sredstva'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,34 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-06 13:55
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def backfill_asset_type_vehicle(apps, schema_editor):
|
||||
Vehicle = apps.get_model('fleet', 'Vehicle')
|
||||
WorkOrder = apps.get_model('fleet', 'WorkOrder')
|
||||
|
||||
work_order_vehicle_ids = WorkOrder.objects.values_list('vehicle_id', flat=True)
|
||||
service_vehicle_ids = (
|
||||
Vehicle.objects
|
||||
.filter(
|
||||
assigned_servicer__isnull=False,
|
||||
is_company_vehicle=True,
|
||||
client__isnull=True,
|
||||
)
|
||||
.exclude(id__in=work_order_vehicle_ids)
|
||||
.values_list('id', flat=True)
|
||||
)
|
||||
|
||||
Vehicle.objects.filter(id__in=service_vehicle_ids).update(asset_type='vehicle')
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0007_vehicle_asset_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(backfill_asset_type_vehicle, migrations.RunPython.noop),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-07 17:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0008_backfill_asset_type_vehicle'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='location',
|
||||
field=models.CharField(blank=True, max_length=255, verbose_name='Lokacija odredišta'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='travel_end_at',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Kraj puta'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='travel_start_at',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Početak puta'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-07 17:31
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def assign_work_order_from_vehicle(apps, schema_editor):
|
||||
WorkOrder = apps.get_model('fleet', 'WorkOrder')
|
||||
VehicleServiceRecord = apps.get_model('fleet', 'VehicleServiceRecord')
|
||||
|
||||
for record in VehicleServiceRecord.objects.filter(work_order__isnull=True).iterator():
|
||||
work_order = (
|
||||
WorkOrder.objects
|
||||
.filter(vehicle_id=record.vehicle_id, is_active=True)
|
||||
.order_by('-created_at')
|
||||
.first()
|
||||
)
|
||||
if work_order is not None:
|
||||
record.work_order_id = work_order.id
|
||||
record.save(update_fields=['work_order'])
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0009_workorder_location_and_travel_times'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='work_order',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='service_records', to='fleet.workorder', verbose_name='Radni zadatak'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='mileage',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Kilometraža pri servisu'),
|
||||
),
|
||||
migrations.RunPython(assign_work_order_from_vehicle, migrations.RunPython.noop),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-07 17:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0010_service_record_work_order_and_optional_mileage'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='workorder',
|
||||
name='start_mileage',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Početna kilometraža'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-07 17:40
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0011_workorder_start_mileage_optional'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='workorder',
|
||||
name='purpose',
|
||||
field=models.CharField(blank=True, choices=[('defektaza', 'Defektaža'), ('kontrola', 'Kontrola'), ('redovni_pregled', 'Redovni pregled')], max_length=50, verbose_name='Svrha'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-07
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task_management', '0002_task_work_order'),
|
||||
('fleet', '0012_workorder_purpose_choices'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='task',
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name='service_records',
|
||||
to='task_management.task',
|
||||
verbose_name='Task',
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0013_vehicleservicerecord_task'),
|
||||
('task_management', '0003_task_vehicle'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='work_order',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='task',
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name='service_records',
|
||||
to='task_management.task',
|
||||
verbose_name='Radni zadatak',
|
||||
),
|
||||
),
|
||||
]
|
||||
47
backend/modules/fleet/migrations/0015_workorderinvoice.py
Normal file
47
backend/modules/fleet/migrations/0015_workorderinvoice.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import uuid
|
||||
|
||||
|
||||
def work_order_invoice_upload_to(instance, filename):
|
||||
vehicle_reg = 'unknown'
|
||||
try:
|
||||
vehicle_reg = instance.work_order.vehicle.registration_number
|
||||
except Exception:
|
||||
vehicle_reg = 'unknown'
|
||||
unique_name = f"{uuid.uuid4().hex}_{filename}"
|
||||
return f"fleet/{vehicle_reg}/work_order_invoices/{unique_name}"
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0014_servicerecord_remove_workorder'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WorkOrderInvoice',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('naziv_racuna', models.CharField(max_length=255, verbose_name='Naziv računa')),
|
||||
('lokacija', models.CharField(blank=True, max_length=255, verbose_name='Lokacija')),
|
||||
('datum', models.DateField(default=django.utils.timezone.now, verbose_name='Datum')),
|
||||
('opis', models.TextField(blank=True, verbose_name='Opis')),
|
||||
('image', models.ImageField(blank=True, null=True, upload_to=work_order_invoice_upload_to, verbose_name='Slika računa')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktivan')),
|
||||
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_work_order_invoices', to=settings.AUTH_USER_MODEL, verbose_name='Kreirao')),
|
||||
('work_order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invoices', to='fleet.workorder', verbose_name='Putni nalog')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Račun putnog naloga',
|
||||
'verbose_name_plural': 'Računi putnog naloga',
|
||||
'ordering': ['-datum', '-created_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,36 @@
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0015_workorderinvoice'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='servicer_vehicle_end_mileage',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Vozilo servisera - završna kilometraža'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='servicer_vehicle_fuel_cost',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='Vozilo servisera - trošak goriva (EUR)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='servicer_vehicle_make_model',
|
||||
field=models.CharField(blank=True, max_length=120, verbose_name='Vozilo servisera - marka/model'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='servicer_vehicle_registration',
|
||||
field=models.CharField(blank=True, max_length=20, verbose_name='Vozilo servisera - registracija'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='workorder',
|
||||
name='servicer_vehicle_start_mileage',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Vozilo servisera - početna kilometraža'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0016_workorder_servicer_vehicle_fields'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='crane_serial_number',
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
db_index=True,
|
||||
help_text='Serijski broj dizalice mora imati točno 6 znamenki.',
|
||||
max_length=6,
|
||||
null=True,
|
||||
verbose_name='Serijski broj dizalice',
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-09 12:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0017_vehicle_crane_serial_number'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='chassis_working_hours',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='Radni sati podvozja'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='superstructure_working_hours',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='Radni sati nadogradnje'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0018_vehicle_chassis_working_hours_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicleservicerecord',
|
||||
name='service_title',
|
||||
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Naziv servisnog zapisa'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-09 16:41
|
||||
|
||||
import modules.fleet.models
|
||||
import uuid
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fleet', '0019_vehicleservicerecord_service_title'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='workorderinvoice',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Vrijeme kreiranja'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='workorderinvoice',
|
||||
name='id',
|
||||
field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unikatni identifikator entiteta (UUID).', primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='workorderinvoice',
|
||||
name='image',
|
||||
field=models.ImageField(blank=True, null=True, upload_to=modules.fleet.models._work_order_invoice_upload_to, verbose_name='Slika računa'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='workorderinvoice',
|
||||
name='updated_at',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='Vrijeme zadnje izmjene'),
|
||||
),
|
||||
]
|
||||
0
backend/modules/fleet/migrations/__init__.py
Normal file
0
backend/modules/fleet/migrations/__init__.py
Normal file
Reference in New Issue
Block a user