add from v002
This commit is contained in:
115
001.BACKEND/fleet/serializers.py
Normal file
115
001.BACKEND/fleet/serializers.py
Normal file
@@ -0,0 +1,115 @@
|
||||
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
|
||||
Reference in New Issue
Block a user