add from v002
This commit is contained in:
55
001.BACKEND/kalendar/views.py
Normal file
55
001.BACKEND/kalendar/views.py
Normal file
@@ -0,0 +1,55 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user