Files
fleet-template.008/001.BACKEND/kalendar/views.py
2026-05-31 19:21:25 +02:00

55 lines
2.0 KiB
Python

from rest_framework import viewsets, generics, filters
from django_filters.rest_framework import DjangoFilterBackend
from django.utils import timezone
from django.db.models import Q
from .models import Dogadaj
from .serializers import DogadajSerializer
class DogadajViewSet(viewsets.ModelViewSet):
"""
Glavni API za kalendar. Podržava pregled svih termina,
drag-and-drop (patch) i kreiranje novih bilješki.
"""
# VAŽNO: select_related('radni_nalog__izvrsitelj') je ključan
# jer tvoj model koristi @property izvrsitelj.
# Bez ovoga, svaki termin u kalendaru bi radio poseban upit u bazu.
queryset = Dogadaj.objects.all().select_related(
'radni_nalog__izvrsitelj',
'radni_nalog__klijent',
'klijent',
'vozilo',
'serviser_u_kalendaru'
)
serializer_class = DogadajSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ['tip', 'klijent', 'vozilo']
ordering = ['pocetak']
def get_queryset(self):
"""
Opcionalno: Ako želiš da serviseri vide samo svoje termine u kalendaru,
otkomentiraj donji dio. Ako dispečer vidi sve, ostavi kako jest.
"""
qs = super().get_queryset()
# if not self.request.user.is_staff:
# return qs.filter(Q(radni_nalog__izvrsitelj=self.request.user) | Q(serviser_u_kalendaru=self.request.user))
return qs
class MojRasporedView(generics.ListAPIView):
"""
Endpoint namijenjen mobilnoj aplikaciji: "Moji zadaci za danas".
Pristup: GET /kalendar/api/moj-raspored/
"""
serializer_class = DogadajSerializer
def get_queryset(self):
user = self.request.user
danas = timezone.now().date()
# Filtriramo samo ono što je dodijeljeno ulogiranom korisniku za danas
return Dogadaj.objects.filter(
Q(pocetak__date=danas) | Q(kraj__date=danas)
).filter(
Q(radni_nalog__izvrsitelj=user) | Q(serviser_u_kalendaru=user)
).select_related('radni_nalog', 'klijent', 'vozilo')