From 5a5cfd88a0d6dbefb6e074a16d71aae9a24b4d8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Tue, 28 Jul 2020 22:31:54 +0200
Subject: [PATCH] Allow to mark availabilites for rooms

Implements #92
---
 AKModel/admin.py                              | 29 +++++++++++++++++++
 .../admin/AKModel/room_change_form.html       | 16 ++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 AKModel/templates/admin/AKModel/room_change_form.html

diff --git a/AKModel/admin.py b/AKModel/admin.py
index a039742d..e9601f24 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -2,6 +2,7 @@ from django.apps import apps
 from django.contrib import admin
 from django.contrib.admin import SimpleListFilter
 from django.db.models import Count, F
+from django import forms
 from django.shortcuts import render
 from django.urls import path, reverse_lazy
 from django.utils import timezone
@@ -9,6 +10,7 @@ from django.utils.html import format_html
 from django.utils.translation import gettext_lazy as _
 from simple_history.admin import SimpleHistoryAdmin
 
+from AKModel.availability.forms import AvailabilitiesFormMixin
 from AKModel.availability.models import Availability
 from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage
 from AKModel.views import EventStatusView, AKCSVExportView, AKWikiExportView, AKMessageDeleteView
@@ -158,6 +160,27 @@ class AKAdmin(SimpleHistoryAdmin):
         return super(AKAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
+class RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
+    class Meta:
+        model = Room
+        fields = ['name',
+                  'location',
+                  'capacity',
+                  'properties',
+                  'event',
+                  ]
+
+        widgets = {
+            'properties': forms.CheckboxSelectMultiple,
+        }
+
+    def __init__(self, *args, **kwargs):
+        # Init availability mixin
+        kwargs['initial'] = dict()
+        super().__init__(*args, **kwargs)
+        self.initial = {**self.initial, **kwargs['initial']}
+
+
 @admin.register(Room)
 class RoomAdmin(admin.ModelAdmin):
     model = Room
@@ -165,6 +188,12 @@ class RoomAdmin(admin.ModelAdmin):
     list_filter = ['location', 'properties', 'event']
     list_editable = []
     ordering = ['location', 'name']
+    change_form_template = "admin/AKModel/room_change_form.html"
+
+    def get_form(self, request, obj=None, change=False, **kwargs):
+        if obj is not None:
+            return RoomForm
+        return super().get_form(request, obj, change, **kwargs)
 
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
diff --git a/AKModel/templates/admin/AKModel/room_change_form.html b/AKModel/templates/admin/AKModel/room_change_form.html
new file mode 100644
index 00000000..4f305c4e
--- /dev/null
+++ b/AKModel/templates/admin/AKModel/room_change_form.html
@@ -0,0 +1,16 @@
+{% extends "admin/change_form.html" %}
+{% load i18n admin_urls %}
+{% load static %}
+{% load bootstrap4 %}
+
+{% block extrahead %}
+    {{ block.super }}
+    {% bootstrap_javascript jquery='slim' %}
+    <link href='{% static 'AKSubmission/vendor/fullcalendar3/fullcalendar.min.css' %}' rel='stylesheet'/>
+    <link href='{% static 'AKSubmission/css/availabilities.css' %}' rel='stylesheet'/>
+
+    <script src="{% static "AKSubmission/vendor/moment/moment-with-locales.js" %}"></script>
+    <script src="{% static "AKSubmission/vendor/moment-timezone/moment-timezone-with-data-10-year-range.js" %}"></script>
+    <script src='{% static 'AKSubmission/vendor/fullcalendar3/fullcalendar.min.js' %}'></script>
+    <script src="{% static "common/js/availabilities.js" %}"></script>
+{% endblock %}
-- 
GitLab