55 lines
2.0 KiB
Python
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') |