46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
from rest_framework import serializers
|
|
from .models import Dogadaj
|
|
from operations.serializers import RadniNalogListaSerializer
|
|
|
|
class DogadajSerializer(serializers.ModelSerializer):
|
|
# 1. Mapiranje za standardne kalendarske knjižnice (FullCalendar traži title, start, end)
|
|
title = serializers.CharField(source='naslov')
|
|
start = serializers.DateTimeField(source='pocetak')
|
|
end = serializers.DateTimeField(source='kraj')
|
|
|
|
# 2. Dinamički podaci (korištenje @property-ja i Choice polja)
|
|
izvrsitelj_ime = serializers.SerializerMethodField()
|
|
tip_display = serializers.CharField(source='get_tip_display', read_only=True)
|
|
|
|
# 3. Dodatne informacije za UI
|
|
boja = serializers.SerializerMethodField()
|
|
je_radni_nalog = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Dogadaj
|
|
fields = [
|
|
'id', 'title', 'start', 'end', 'tip', 'tip_display',
|
|
'opis', 'izvrsitelj_ime', 'boja', 'je_radni_nalog',
|
|
'klijent', 'vozilo', 'radni_nalog'
|
|
]
|
|
|
|
def get_izvrsitelj_ime(self, obj):
|
|
"""Dohvaća ime preko tvog @property izvrsitelj u modelu"""
|
|
korisnik = obj.izvrsitelj # Poziva @property iz models.py
|
|
if korisnik:
|
|
return korisnik.get_full_name() or korisnik.username
|
|
return "Nije dodijeljeno"
|
|
|
|
def get_boja(self, obj):
|
|
"""Dodjeljuje boju ovisno o tipu događaja za vizualni kalendar"""
|
|
boje = {
|
|
'servis': '#3498db', # Plava
|
|
'isporuka': '#2ecc71', # Zelena
|
|
'sastanak': '#f1c40f', # Žuta
|
|
'biljeska': '#95a5a6', # Siva
|
|
}
|
|
return boje.get(obj.tip, '#34495e')
|
|
|
|
def get_je_radni_nalog(self, obj):
|
|
"""Pomaže frontendu da zna treba li prikazati link na radni nalog"""
|
|
return obj.radni_nalog is not None |