This commit is contained in:
2026-05-22 06:08:51 +00:00
parent c078a257e9
commit bafec754d1
131 changed files with 2346 additions and 893 deletions

View File

@@ -1,9 +1,9 @@
from rest_framework import serializers
from .models import Dogadaj
from operations.serializers import RadniNalogListaSerializer
import re
class DogadajSerializer(serializers.ModelSerializer):
# 1. Mapiranje za standardne kalendarske knjižnice (FullCalendar traži title, start, end)
# 1. Mapiranje za standardne kalendarske knjižnice
title = serializers.CharField(source='naslov')
start = serializers.DateTimeField(source='pocetak')
end = serializers.DateTimeField(source='kraj')
@@ -16,23 +16,27 @@ class DogadajSerializer(serializers.ModelSerializer):
boja = serializers.SerializerMethodField()
je_radni_nalog = serializers.SerializerMethodField()
# 4. NOVA RAZDVOJENA POLJA ZA VOCILO I ČISTI OPIS KWARTA
vozilo_naziv = serializers.SerializerMethodField()
opis_cisti = 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'
'opis', 'opis_cisti', 'vozilo_naziv', '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
korisnik = obj.izvrsitelj
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"""
"""Dodjeljuje boju ovisno o tipu događaja"""
boje = {
'servis': '#3498db', # Plava
'isporuka': '#2ecc71', # Zelena
@@ -43,4 +47,31 @@ class DogadajSerializer(serializers.ModelSerializer):
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
return obj.radni_nalog is not None
def _parsiraj_spojeni_opis(self, obj):
"""Pomoćna metoda koja analizira tekst i vraća (vozilo, opis)"""
sirovi_tekst = obj.opis or ""
# Ako tekst sadrži ključne riječi, razdvajamo ga pomoću Regexa na backendu
if "Vozilo:" in sirovi_tekst or "Opis kvara:" in sirovi_tekst:
vozilo_match = re.search(r"Vozilo:\s*(.*?)(?=\s*Opis kvara:|$)", sirovi_tekst, re.IGNORECASE)
opis_match = re.search(r"Opis kvara:\s*(.*)", sirovi_tekst, re.IGNORECASE)
vozilo = vozilo_match.group(1).strip() if vozilo_match else None
opis = opis_match.group(1).strip() if opis_match else sirovi_tekst
return vozilo, opis
# Ako je polje vozilo na modelu već popunjeno kao relacija/tekst, iskoristi ga
model_vozilo = str(obj.vozilo) if obj.vozilo else None
return model_vozilo, sirovi_tekst
def get_vozilo_naziv(self, obj):
"""Vraća samo čisti naziv vozila"""
vozilo, _ = self._parsiraj_spojeni_opis(obj)
return vozilo
def get_opis_cisti(self, obj):
"""Vraća samo čisti tekst opisa kvara"""
_, opis = self._parsiraj_spojeni_opis(obj)
return opis if opis else "Nema dodatnog opisa."