From b2dee786df7e41107ffcbd012c322f1187cbe55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Sat, 22 Oct 2022 15:35:21 +0200 Subject: [PATCH] Visualize default slots in scheduler --- AKModel/urls.py | 6 +++-- AKScheduling/api.py | 26 ++++++++++++++++++- .../admin/AKScheduling/scheduling.html | 3 ++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/AKModel/urls.py b/AKModel/urls.py index e86661fd..cee15bb0 100644 --- a/AKModel/urls.py +++ b/AKModel/urls.py @@ -19,7 +19,7 @@ api_router.register('akslot', views.AKSlotViewSet, basename='AKSlot') extra_paths = [] if apps.is_installed("AKScheduling"): from AKScheduling.api import ResourcesViewSet, RoomAvailabilitiesView, EventsView, EventsViewSet, \ - ConstraintViolationsViewSet + ConstraintViolationsViewSet, DefaultSlotsView api_router.register('scheduling-resources', ResourcesViewSet, basename='scheduling-resources') api_router.register('scheduling-event', EventsViewSet, basename='scheduling-event') @@ -28,7 +28,9 @@ if apps.is_installed("AKScheduling"): extra_paths.append(path('api/scheduling-events/', EventsView.as_view(), name='scheduling-events')) extra_paths.append(path('api/scheduling-room-availabilities/', RoomAvailabilitiesView.as_view(), - name='scheduling-room-availabilities')) + name='scheduling-room-availabilities')), + extra_paths.append(path('api/scheduling-default-slots/', DefaultSlotsView.as_view(), + name='scheduling-default-slots')) if apps.is_installed("AKSubmission"): from AKSubmission.api import increment_interest_counter diff --git a/AKScheduling/api.py b/AKScheduling/api.py index 7e60c864..20524030 100644 --- a/AKScheduling/api.py +++ b/AKScheduling/api.py @@ -7,7 +7,7 @@ from django.views.generic import ListView from rest_framework import viewsets, mixins, serializers, permissions from AKModel.availability.models import Availability -from AKModel.models import Room, AKSlot, ConstraintViolation +from AKModel.models import Room, AKSlot, ConstraintViolation, DefaultSlot from AKModel.views import EventSlugMixin @@ -80,6 +80,30 @@ class RoomAvailabilitiesView(LoginRequiredMixin, EventSlugMixin, ListView): ) +class DefaultSlotsView(LoginRequiredMixin, EventSlugMixin, ListView): + model = DefaultSlot + context_object_name = "default_slots" + + def get_queryset(self): + return super().get_queryset().filter(event=self.event) + + def render_to_response(self, context, **response_kwargs): + all_room_ids = [r.pk for r in self.event.room_set.all()] + return JsonResponse( + [{ + "title": "", + "resourceIds": all_room_ids, + "start": timezone.localtime(a.start, self.event.timezone).strftime("%Y-%m-%d %H:%M:%S"), + "end": timezone.localtime(a.end, self.event.timezone).strftime("%Y-%m-%d %H:%M:%S"), + "display": 'background', + "groupId": 'defaultSlot', + "backgroundColor": '#69b6d4' + } for a in context["default_slots"]], + safe=False, + **response_kwargs + ) + + class EventSerializer(serializers.ModelSerializer): class Meta: model = AKSlot diff --git a/AKScheduling/templates/admin/AKScheduling/scheduling.html b/AKScheduling/templates/admin/AKScheduling/scheduling.html index 28b8b17d..77db3f58 100644 --- a/AKScheduling/templates/admin/AKScheduling/scheduling.html +++ b/AKScheduling/templates/admin/AKScheduling/scheduling.html @@ -147,7 +147,8 @@ resources: '{% url "model:scheduling-resources-list" event_slug=event.slug %}', eventSources: [ '{% url "model:scheduling-events" event_slug=event.slug %}', - '{% url "model:scheduling-room-availabilities" event_slug=event.slug %}' + '{% url "model:scheduling-room-availabilities" event_slug=event.slug %}', + '{% url "model:scheduling-default-slots" event_slug=event.slug %}' ], schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', dayMinWidth: 100, -- GitLab