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