from rest_framework import serializers from .models import RadniNalog, RadniNalogSlika from kupci.serializers import KupacListaSerializer from fleet.serializers import VoziloListaSerializer, StrojSerializer # --- POMOĆNI SERIALIZER ZA SLIKE --- class RadniNalogSlikaSerializer(serializers.ModelSerializer): class Meta: model = RadniNalogSlika fields = ['id', 'slika', 'opis'] # --- 1. LISTA SERIALIZER --- class RadniNalogListaSerializer(serializers.ModelSerializer): klijent_naziv = serializers.CharField(source='klijent.naziv', read_only=True) stroj_naziv = serializers.CharField(source='stroj.naziv', read_only=True) izvrsitelj_ime = serializers.CharField(source='izvrsitelj.get_full_name', read_only=True) class Meta: model = RadniNalog fields = [ 'id', 'broj_naloga', 'klijent_naziv', 'stroj_naziv', 'status', 'izvrsitelj_ime', 'datum_kreiranja' ] # --- 2. DETALJI SERIALIZER --- class RadniNalogDetaljiSerializer(serializers.ModelSerializer): klijent = KupacListaSerializer(read_only=True) stroj = StrojSerializer(read_only=True) slike = RadniNalogSlikaSerializer(many=True, read_only=True) # VOZILO dohvaćamo preko putnog naloga vozilo = serializers.SerializerMethodField() status_display = serializers.CharField(source='get_status_display', read_only=True) izvrsitelj_ime = serializers.CharField(source='izvrsitelj.get_full_name', read_only=True) class Meta: model = RadniNalog fields = [ 'id', 'broj_naloga', 'klijent', 'stroj', 'putni_nalog', 'vozilo', 'opis_kvara', 'izvrsitelj', 'izvrsitelj_ime', 'status', 'status_display', 'datum_kreiranja', 'datum_azuriranja', 'slika_kvara', 'potpis_klijenta', 'slike' ] read_only_fields = ['datum_kreiranja', 'datum_azuriranja'] def get_vozilo(self, obj): # Ako je radni nalog vezan za putni nalog, vrati podatke o vozilu if obj.putni_nalog and obj.putni_nalog.vozilo: return { "id": obj.putni_nalog.vozilo.id, "naziv": obj.putni_nalog.vozilo.naziv, "registracija": obj.putni_nalog.vozilo.registracija, "trenutni_kilometri": obj.putni_nalog.vozilo.trenutni_kilometri } return None # --- 3. DEFAULT SERIALIZER --- class RadniNalogSerializer(serializers.ModelSerializer): # Dozvoljavamo unos, ali nije obavezan ako ga backend generira broj_naloga = serializers.CharField(required=False, read_only=True) class Meta: model = RadniNalog exclude = [] def validate_broj_naloga(self, value): # Provjera jedinstvenosti prije nego što dođe do baze if RadniNalog.objects.filter(broj_naloga=value).exists(): raise serializers.ValidationError("Radni nalog s ovim brojem već postoji.") return value def validate(self, data): # Tvoja postojeća validacija klijenta i stroja stroj = data.get('stroj') klijent = data.get('klijent') if stroj and klijent and stroj.vlasnik != klijent: raise serializers.ValidationError( {"stroj": "Odabrani stroj ne pripada odabranom klijentu."} ) return data