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