86 lines
3.3 KiB
Python
86 lines
3.3 KiB
Python
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 |