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})"