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