From 945411f21a9572595247d3c26428f694b999f89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Thu, 30 Jul 2020 13:24:23 +0200 Subject: [PATCH] Scheduling: Load resources dynamically --- AKModel/urls.py | 5 ++++ AKScheduling/api.py | 25 +++++++++++++++++++ .../admin/AKScheduling/scheduling.html | 9 +------ AKScheduling/views.py | 2 -- 4 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 AKScheduling/api.py diff --git a/AKModel/urls.py b/AKModel/urls.py index a469c54f..b2cffbea 100644 --- a/AKModel/urls.py +++ b/AKModel/urls.py @@ -1,3 +1,4 @@ +from django.apps import apps from django.urls import include, path from rest_framework.routers import DefaultRouter @@ -11,6 +12,10 @@ api_router.register('ak', views.AKViewSet, basename='AK') api_router.register('room', views.RoomViewSet, basename='Room') api_router.register('akslot', views.AKSlotViewSet, basename='AKSlot') +if apps.is_installed("AKScheduling"): + from AKScheduling.api import ResourcesViewSet + api_router.register('scheduling-resources', ResourcesViewSet, basename='scheduling-resources') + app_name = 'model' urlpatterns = [ diff --git a/AKScheduling/api.py b/AKScheduling/api.py new file mode 100644 index 00000000..110b50fa --- /dev/null +++ b/AKScheduling/api.py @@ -0,0 +1,25 @@ +from rest_framework import viewsets, permissions, mixins, serializers + +from AKModel.models import Room +from AKModel.views import EventSlugMixin + + +class ResourceSerializer(serializers.ModelSerializer): + class Meta: + model = Room + fields = ['id', 'title'] + + title = serializers.SerializerMethodField('transform_title') + + def transform_title(self, obj): + if obj.capacity > 0: + return f"{obj.title} [{obj.capacity}]" + return obj.title + + +class ResourcesViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet): + permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,) + serializer_class = ResourceSerializer + + def get_queryset(self): + return Room.objects.filter(event=self.event) diff --git a/AKScheduling/templates/admin/AKScheduling/scheduling.html b/AKScheduling/templates/admin/AKScheduling/scheduling.html index 8c4faf98..66da8585 100644 --- a/AKScheduling/templates/admin/AKScheduling/scheduling.html +++ b/AKScheduling/templates/admin/AKScheduling/scheduling.html @@ -83,14 +83,7 @@ eventColor: '#127ba3', datesAboveResources: true, resourceAreaHeaderContent: '{% trans "Room" %}', - resources: [ - {% for room in rooms %} - { - 'id': '{{ room.title }}', - 'title': '{{ room.title }}', - }, - {% endfor %} - ], + resources: '{% url "model:scheduling-resources-list" event_slug=event.slug %}', events: [ {% for slot in akslots %} {% if slot.start %} diff --git a/AKScheduling/views.py b/AKScheduling/views.py index fd30864c..61d4e2ae 100644 --- a/AKScheduling/views.py +++ b/AKScheduling/views.py @@ -33,8 +33,6 @@ class SchedulingAdminView(AdminViewMixin, FilterByEventSlugMixin, ListView): context["start"] = self.event.start context["end"] = self.event.end - context["rooms"] = self.event.room_set.all() - context["availabilities"] = Availability.objects.filter(event=self.event, room__isnull=False) return context -- GitLab