Files
2026-05-31 19:21:25 +02:00

115 lines
3.8 KiB
Python

from rest_framework import serializers
from .models import Stroj, Vozilo
class StrojShortSerializer(serializers.ModelSerializer):
"""
Kraća verzija serijalizatora za brze liste ili dropdown izbornike.
"""
class Meta:
model = Stroj
fields = ['id', 'naziv', 'serijski_broj', 'registracija']
class StrojSerializer(serializers.ModelSerializer):
"""
Glavni serializer za strojeve/dizalice.
"""
# Prikazuje naziv vlasnika (kupca) umjesto samo ID-a
# (source='vlasnik.naziv' jer je u modelu ForeignKey nazvan 'vlasnik')
vlasnik_naziv = serializers.ReadOnlyField(source='vlasnik.naziv')
# get_tip_display() pretvara 'dizalica_auto' u 'Autodizalica' (čitljivije za UI)
tip_human_readable = serializers.CharField(source='get_tip_display', read_only=True)
radni_nalozi = serializers.SerializerMethodField()
class Meta:
model = Stroj
fields = [
'id',
'vlasnik',
'vlasnik_naziv',
'naziv',
'marka',
'model_stroja',
'serijski_broj',
'tip',
'tip_human_readable',
'godina_proizvodnje',
'radni_sati',
'registracija',
'datum_zadnjeg_atesta',
'radni_nalozi', # Novo polje
]
def get_radni_nalozi(self, obj):
# Lokalni import rješava kružni import error s operations aplikacijom
from operations.serializers import RadniNalogSerializer
# Dohvaćamo radne naloge i sortiramo ih tako da najnoviji budu prvi
queryset = obj.radni_nalozi.all().order_by('-datum_kreiranja')
# Vraćamo serijalizirane podatke
return RadniNalogSerializer(queryset, many=True, context=self.context).data
class VoziloSerializer(serializers.ModelSerializer):
"""
Osnovni serializer koji se koristi za Create/Update operacije.
"""
class Meta:
model = Vozilo
fields = '__all__'
class VoziloListaSerializer(serializers.ModelSerializer):
"""
Serializer za brzi prikaz u tablicama.
"""
# Ljudski čitljiv status (npr. 'Na Servisu' umjesto 'servis')
status_prikaz = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = Vozilo
fields = ['id', 'naziv', 'registracija', 'trenutni_kilometri', 'status', 'status_prikaz']
class VoziloListaSerializer(serializers.ModelSerializer):
"""
Serializer za brzi prikaz u tablicama.
"""
# Ljudski čitljiv status (npr. 'Na Servisu' umjesto 'servis')
status_prikaz = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = Vozilo
fields = ['id', 'naziv', 'registracija', 'trenutni_kilometri', 'status', 'status_prikaz']
class VoziloDetaljiSerializer(serializers.ModelSerializer):
"""
Serializer s dodatnom statistikom za detaljni prikaz vozila.
"""
ukupno_predeno = serializers.SerializerMethodField()
status_prikaz = serializers.CharField(source='get_status_display', read_only=True)
putni_nalozi = serializers.SerializerMethodField()
class Meta:
model = Vozilo
fields = [
'id',
'naziv',
'registracija',
'pocetni_kilometri',
'trenutni_kilometri',
'ukupno_predeno',
'status',
'status_prikaz',
'putni_nalozi',
]
def get_ukupno_predeno(self, obj):
"""Izračunava razliku između trenutnih i početnih kilometara"""
return obj.trenutni_kilometri - obj.pocetni_kilometri
def get_putni_nalozi(self, obj):
from operations.serializers import PutniNalogSerializer
queryset = obj.putni_nalozi.all()
return PutniNalogSerializer(queryset, many=True, context=self.context).data