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