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')