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