102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
|
|
|
|
from rest_framework.permissions import IsAuthenticated
|
|
|
|
from colloscope.models import *
|
|
from colloscope.serializers import *
|
|
|
|
|
|
class SchoolViewset(ReadOnlyModelViewSet):
|
|
serializer_class = SchoolSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return School.objects.all()
|
|
|
|
|
|
class ClassViewset(ReadOnlyModelViewSet):
|
|
serializer_class = ClassSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Class.objects.all()
|
|
|
|
|
|
class TermViewset(ReadOnlyModelViewSet):
|
|
serializer_class = TermSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Term.objects.all()
|
|
|
|
|
|
class SubjectViewset(ReadOnlyModelViewSet):
|
|
serializer_class = SubjectSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Subject.objects.all()
|
|
|
|
|
|
class GroupTypeViewset(ReadOnlyModelViewSet):
|
|
serializer_class = GroupTypeSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return GroupType.objects.all()
|
|
|
|
|
|
class GroupViewset(ReadOnlyModelViewSet):
|
|
serializer_class = GroupSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Group.objects.all()
|
|
|
|
|
|
class StudentViewset(ReadOnlyModelViewSet):
|
|
serializer_class = StudentSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Student.objects.all()
|
|
|
|
|
|
class ColleurViewset(ReadOnlyModelViewSet):
|
|
serializer_class = ColleurSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Colleur.objects.all()
|
|
|
|
|
|
class SlotViewset(ReadOnlyModelViewSet):
|
|
serializer_class = SlotSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Slot.objects.all()
|
|
|
|
|
|
class ColleViewset(ModelViewSet):
|
|
serializer_class = ColleSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return (Colle.objects
|
|
.select_related("slot", "slot__term")
|
|
.prefetch_related("swap_set")
|
|
.annotate(base_vol=Count("groups__members"))
|
|
.annotate(swap_plus=Count("swap", filter=Q(swap__enroll=1), distinct=True))
|
|
.annotate(swap_minus=Count("swap", filter=Q(swap__enroll=0), distinct=True))
|
|
.annotate(volume=F("base_vol") + F("swap_plus") - F("swap_minus"))
|
|
.order_by("datetime", "slot__time"))
|
|
|
|
|
|
class CalendarLinkViewset(ReadOnlyModelViewSet):
|
|
serializer_class = CalendarLinkSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return CalendarLink.objects.all()
|