From 749a984dd6c543534c5eec537ba6df6fe12a4798 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 17:27:42 +0200
Subject: [PATCH] Scheduling: Load events and availabilities using API

Introduce fullcalendar JSON encoding for events and background events/constraints/availabilities
Add them to API endpoints
Use these endpoints instead of static encoding
---
 AKModel/urls.py                               | 22 ++++++++++---
 .../admin/AKScheduling/scheduling.html        | 32 ++-----------------
 AKScheduling/views.py                         |  2 --
 3 files changed, 21 insertions(+), 35 deletions(-)

diff --git a/AKModel/urls.py b/AKModel/urls.py
index b2cffbea..19e0083d 100644
--- a/AKModel/urls.py
+++ b/AKModel/urls.py
@@ -12,18 +12,32 @@ api_router.register('ak', views.AKViewSet, basename='AK')
 api_router.register('room', views.RoomViewSet, basename='Room')
 api_router.register('akslot', views.AKSlotViewSet, basename='AKSlot')
 
+
+extra_paths = []
 if apps.is_installed("AKScheduling"):
-    from AKScheduling.api import ResourcesViewSet
+    from AKScheduling.api import ResourcesViewSet, RoomAvailabilitiesView, EventsView
+
     api_router.register('scheduling-resources', ResourcesViewSet, basename='scheduling-resources')
 
+    extra_paths = [
+        path('api/scheduling-events/', EventsView.as_view(), name='scheduling-events'),
+        path('api/scheduling-room-availabilities/', RoomAvailabilitiesView.as_view(), name='scheduling-room-availabilities'),
+    ]
+
+
+event_specific_paths = [
+            path('api/', include(api_router.urls), name='api'),
+        ]
+event_specific_paths.extend(extra_paths)
+
+
 app_name = 'model'
 
+
 urlpatterns = [
     path(
         '<slug:event_slug>/',
-        include([
-            path('api/', include(api_router.urls), name='api'),
-        ])
+        include(event_specific_paths)
     ),
     path('user/', views.UserView.as_view(), name="user"),
 ]
diff --git a/AKScheduling/templates/admin/AKScheduling/scheduling.html b/AKScheduling/templates/admin/AKScheduling/scheduling.html
index 66da8585..e87aab7a 100644
--- a/AKScheduling/templates/admin/AKScheduling/scheduling.html
+++ b/AKScheduling/templates/admin/AKScheduling/scheduling.html
@@ -84,35 +84,9 @@
                 datesAboveResources: true,
                 resourceAreaHeaderContent: '{% trans "Room" %}',
                 resources: '{% url "model:scheduling-resources-list" event_slug=event.slug %}',
-                events: [
-                        {% for slot in akslots %}
-                            {% if slot.start %}
-                                {
-                                    'title': '{{ slot.ak.short_name }}',
-                                    'description': '{{ slot.ak.name }}',
-                                    'start': '{{ slot.start | timezone:event.timezone | date:"Y-m-d H:i:s" }}',
-                                    'end': '{{ slot.end | timezone:event.timezone | date:"Y-m-d H:i:s" }}',
-                                    'resourceId': '{{ slot.room.title }}',
-                                    'backgroundColor': '{{ slot|highlight_change_colors }}',
-                                    'borderColor': '{{ slot.ak.category.color }}',
-                                    'url': '{% url 'submit:ak_detail' event_slug=event.slug pk=slot.ak.pk %}',
-                                    constraint: 'roomAvailable',
-                                },
-                            {% endif %}
-                        {% endfor %}
-                        {% for a in availabilities %}
-                            {% if a.room != None %}
-                                {
-                                    title: '',
-                                    start: '{{ a.start | timezone:event.timezone | date:"Y-m-d H:i:s" }}',
-                                    end: '{{ a.end | timezone:event.timezone | date:"Y-m-d H:i:s" }}',
-                                    resourceId: '{{ a.room.title }}',
-                                    backgroundColor: '#28B62C',
-                                    display: 'background',
-                                    groupId: 'roomAvailable',
-                                },
-                            {% endif %}
-                        {% endfor %}
+                eventSources: [
+                        '{% url "model:scheduling-events" event_slug=event.slug %}',
+                        '{% url "model:scheduling-room-availabilities" event_slug=event.slug %}'
                     ],
                 schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
                 dayMinWidth: 100,
diff --git a/AKScheduling/views.py b/AKScheduling/views.py
index 61d4e2ae..c0649ab7 100644
--- a/AKScheduling/views.py
+++ b/AKScheduling/views.py
@@ -33,6 +33,4 @@ class SchedulingAdminView(AdminViewMixin, FilterByEventSlugMixin, ListView):
         context["start"] = self.event.start
         context["end"] = self.event.end
 
-        context["availabilities"] = Availability.objects.filter(event=self.event, room__isnull=False)
-
         return context
-- 
GitLab