from rest_framework import serializers from .models import CustomUser from fleet.models import Vozilo from operations.models import RadniNalog, PutniNalog class UserSerializer(serializers.ModelSerializer): # Prosljeđujemo i ljudski čitljiv naziv (npr. "Knjigovodstvo i financije") uloga_prikaz = serializers.CharField(source='get_uloga_display', read_only=True) class Meta: model = CustomUser fields = ['id', 'first_name', 'last_name', 'email', 'telefon', 'oib', 'uloga', 'uloga_prikaz'] # --- POMOĆNI LIGHTWEIGHT SERIALIZERI (Sprečavaju prevelik JSON payload) --- class ServiserVoziloSerializer(serializers.ModelSerializer): class Meta: model = Vozilo # 🚀 POPRAVLJENO: Izbačena nepostojeća polja (marka, model, tip). # Usklađeno s tvojim stvarnim poljima iz /fleet/models.py fields = [ 'id', 'naziv', 'registracija', 'trenutni_kilometri', 'status' ] class ServiserRadniNalogSerializer(serializers.ModelSerializer): # Prikazujemo nazive umjesto ID-jeva radi lakšeg klijentskog ispisa na terminalu kupac_naziv = serializers.CharField(source='klijent.naziv', read_only=True) stroj_naziv = serializers.CharField(source='stroj.naziv', read_only=True) class Meta: model = RadniNalog # 🚀 POPRAVLJENO: 'prioritet' je izbačen jer ne postoji na modelu RadniNalog. # Dodan je 'opis_kvara' koji ti može zatrebati na klijentskim karticama! fields = [ 'id', 'broj_naloga', 'status', 'opis_kvara', 'datum_kreiranja', 'kupac_naziv', 'stroj_naziv' ] class ServiserPutniNalogSerializer(serializers.ModelSerializer): vozilo_registracija = serializers.CharField(source='vozilo.registracija', read_only=True) # 🚀 Budući da jedan putni nalog može imati više radnih naloga (ili nijedan ako tek kreće na put), # koristimo SerializerMethodField za siguran dohvat brojeva dokumenata bez rušenja brojevi_radnih_naloga = serializers.SerializerMethodField() class Meta: model = PutniNalog # 🚀 USKLAĐENO s tvojim točnim poljima iz modela PutniNalog: fields = [ 'id', 'broj_naloga', 'datum_izdavanja', 'status', 'relacija', 'mjesto_odredista', 'pocetna_km', 'zavrsna_km', 'vozilo_registracija', 'brojevi_radnih_naloga' ] def get_brojevi_radnih_naloga(self, obj): # Dohvaćamo sve povezane radne naloge preko related_name='radni_nalozi' nalozi = obj.radni_nalozi.all() if nalozi.exists(): # Vraćamo npr. "RN-2026-0001, RN-2026-0002" ako ih ima više return ", ".join([rn.broj_naloga for rn in nalozi if rn.broj_naloga]) return "Nema povezanih RN" # --- GLAVNI OPERATIVNI SERIALIZER ZA TERMINAL SERVISERA --- class ServiserTerminalSerializer(serializers.Serializer): """ Serializer koji objedinjuje sve podatke servisera i njegove dodijeljene resurse. Ne nasljeđuje ModelSerializer jer serijalizira rječnik (dict) dobiven iz service sloja. """ id = serializers.IntegerField(source='serviser.id') email = serializers.EmailField(source='serviser.email') first_name = serializers.CharField(source='serviser.first_name') last_name = serializers.CharField(source='serviser.last_name') uloga = serializers.CharField(source='serviser.uloga') # 🚀 Ugniježđeni podaci koji se pune kroz asocijativni rječnik iz services.py radni_nalozi = ServiserRadniNalogSerializer(many=True) putni_nalozi = ServiserPutniNalogSerializer(many=True) vozila = ServiserVoziloSerializer(many=True)