Files
003-fleet-management/001.BACKEND/fleet/models.py
2026-05-20 21:24:00 +02:00

88 lines
3.1 KiB
Python

from django.db import models
from django.core.exceptions import ValidationError
class Vozilo(models.Model):
STATUS_CHOICES = [
('aktivan', 'Aktivan'),
('servis', 'Na Servisu'),
('neaktivan', 'Izvan Pogona'),
]
naziv = models.CharField(max_length=50, verbose_name="Interni naziv")
registracija = models.CharField(max_length=15, unique=True, db_index=True)
# Kilometri
pocetni_kilometri = models.PositiveIntegerField(default=0)
trenutni_kilometri = models.PositiveIntegerField(default=0)
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='aktivan'
)
class Meta:
verbose_name = "Vozilo"
verbose_name_plural = "Vozila"
ordering = ['naziv']
def clean(self):
# Osnovna logika: trenutni kilometri ne smiju biti manji od početnih
if self.trenutni_kilometri < self.pocetni_kilometri:
raise ValidationError({
'trenutni_kilometri': "Trenutni kilometri ne mogu biti manji od početnih."
})
def save(self, *args, **kwargs):
# Logika za nove zapise
if not self.pk:
self.trenutni_kilometri = self.pocetni_kilometri
self.registracija = self.registracija.upper().replace(" ", "")
# Pozivamo clean() prije spremanja (Django to ne radi automatski u save())
self.full_clean()
super().save(*args, **kwargs)
def __str__(self):
return f"{self.naziv} ({self.registracija})"
class Stroj(models.Model):
TIP_STROJA = [
('dizalica_toranj', 'Toranjska dizalica'),
('dizalica_auto', 'Autodizalica'),
('vilicar', 'Viličar'),
('platforma', 'Radna platforma'),
]
# Poveznica s kupcem: Jedan kupac može imati mnogo strojeva
# --- RJEŠENJE ZA LOOP: Koristimo string 'kupci.Kupac' ---
vlasnik = models.ForeignKey(
'kupci.Kupac',
on_delete=models.CASCADE,
related_name='strojevi',
verbose_name="Vlasnik/Kupac"
)
naziv = models.CharField(max_length=100, help_text="Npr. Liebherr LTM 1030")
serijski_broj = models.CharField(max_length=50, unique=True)
marka = models.CharField(max_length=50, blank=True)
model_stroja = models.CharField(max_length=50, blank=True)
godina_proizvodnje = models.PositiveIntegerField(null=True, blank=True)
tip = models.CharField(max_length=30, choices=TIP_STROJA)
# Podaci za održavanje
radni_sati = models.DecimalField(max_digits=12, decimal_places=2, default=0)
registracija = models.CharField(max_length=20, blank=True, null=True, help_text="Za autodizalice i vozila")
datum_zadnjeg_atesta = models.DateField(null=True, blank=True)
class Meta:
verbose_name = "Stroj"
verbose_name_plural = "Strojevi"
ordering = ['marka', 'model_stroja']
def __str__(self):
# Mala nadogradnja da ne vraća prazan string ako marka/model nedostaju
oznaka = f"{self.marka} {self.model_stroja}".strip() or self.naziv
return f"{oznaka} (S/N: {self.serijski_broj})"