From 520526e2fd083b9689188230a234f112df55b4fe Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Mon, 2 Apr 2018 14:20:02 +0200 Subject: [PATCH] Backend editors for sessions, rooms and tracks Sessions are somewhat limited as some editing is still done through the talkvote page. This should be fixed... --- postgresqleu/confreg/backendforms.py | 61 ++++++++++++++++++++ postgresqleu/confreg/backendviews.py | 25 ++++++++ postgresqleu/urls.py | 3 + template/confreg/admin_dashboard_single.html | 6 +- 4 files changed, 94 insertions(+), 1 deletion(-) diff --git a/postgresqleu/confreg/backendforms.py b/postgresqleu/confreg/backendforms.py index 35d7164..9616c20 100644 --- a/postgresqleu/confreg/backendforms.py +++ b/postgresqleu/confreg/backendforms.py @@ -1,9 +1,11 @@ from django.core.exceptions import ValidationError +from django.core.validators import MinValueValidator, MaxValueValidator from django.db.models import Q import django.forms import django.forms.widgets from django.forms.widgets import TextInput +import datetime from selectable.forms.widgets import AutoCompleteSelectWidget, AutoCompleteSelectMultipleWidget @@ -15,6 +17,7 @@ from postgresqleu.confreg.lookups import RegistrationLookup from postgresqleu.confreg.models import Conference, ConferenceRegistration, ConferenceAdditionalOption from postgresqleu.confreg.models import RegistrationClass, RegistrationType, RegistrationDay +from postgresqleu.confreg.models import ConferenceSession, Track, Room class BackendDateInput(TextInput): def __init__(self, *args, **kwargs): @@ -121,3 +124,61 @@ class BackendRegistrationDayForm(BackendForm): class Meta: model = RegistrationDay fields = ['day', ] + +class BackendTrackForm(BackendForm): + list_fields = ['trackname', 'sortkey'] + class Meta: + model = Track + fields = ['trackname', 'sortkey', 'color', 'incfp'] + +class BackendRoomForm(BackendForm): + list_fields = ['roomname', 'sortkey'] + class Meta: + model = Room + fields = ['roomname', 'sortkey'] + +class BackendConferenceSessionForm(BackendForm): + list_fields = [ 'title', 'speaker_list', 'status_string', 'starttime', 'track', 'room'] + verbose_field_names = { + 'speaker_list': 'Speakers', + 'status_string': 'Status', + } + selectize_multiple_fields = ['speaker'] + + class Meta: + model = ConferenceSession + fields = ['title', 'speaker', 'starttime', 'endtime', 'cross_schedule', 'track', 'room', + 'can_feedback', 'skill_level', 'abstract', 'submissionnote'] + + def fix_fields(self): + self.fields['track'].queryset = Track.objects.filter(conference=self.conference) + self.fields['room'].queryset = Room.objects.filter(conference=self.conference) + + self.fields['starttime'].validators.extend([ + MinValueValidator(datetime.datetime.combine(self.conference.startdate, datetime.time(0,0,0))), + MaxValueValidator(datetime.datetime.combine(self.conference.enddate+datetime.timedelta(days=1), datetime.time(0,0,0))), + ]) + self.fields['endtime'].validators.extend([ + MinValueValidator(datetime.datetime.combine(self.conference.startdate, datetime.time(0,0,0))), + MaxValueValidator(datetime.datetime.combine(self.conference.enddate+datetime.timedelta(days=1), datetime.time(0,0,0))), + ]) + + if not self.conference.skill_levels: + del self.fields['skill_level'] + self.update_protected_fields() + + def clean(self): + cleaned_data = super(BackendConferenceSessionForm, self).clean() + + if cleaned_data.get('starttime') and not cleaned_data.get('endtime'): + self.add_error('endtime', 'End time must be specified if start time is!') + elif cleaned_data.get('endtime') and not cleaned_data.get('starttime'): + self.add_error('starttime', 'Start time must be specified if end time is!') + elif cleaned_data.get('starttime') and cleaned_data.get('endtime'): + if cleaned_data.get('endtime') < cleaned_data.get('starttime'): + self.add_error('endtime', 'End time must be later than start time!') + + if cleaned_data.get('cross_schedule') and cleaned_data.get('room'): + self.add_error('room', 'Room cannot be specified for cross schedule sessions!') + + return cleaned_data diff --git a/postgresqleu/confreg/backendviews.py b/postgresqleu/confreg/backendviews.py index bd95f59..fddfac7 100644 --- a/postgresqleu/confreg/backendviews.py +++ b/postgresqleu/confreg/backendviews.py @@ -18,6 +18,7 @@ from models import RegistrationType, RegistrationClass from backendforms import BackendConferenceForm, BackendRegistrationForm from backendforms import BackendRegistrationTypeForm, BackendRegistrationClassForm from backendforms import BackendRegistrationDayForm +from backendforms import BackendTrackForm, BackendRoomForm, BackendConferenceSessionForm def get_authenticated_conference(request, urlname): if not request.user.is_authenticated: @@ -183,3 +184,27 @@ def edit_regdays(request, urlname, rest): rest, allow_new=True, allow_delete=True) + +def edit_tracks(request, urlname, rest): + return backend_list_editor(request, + urlname, + BackendTrackForm, + rest, + allow_new=True, + allow_delete=True) + +def edit_rooms(request, urlname, rest): + return backend_list_editor(request, + urlname, + BackendRoomForm, + rest, + allow_new=True, + allow_delete=True) + +def edit_sessions(request, urlname, rest): + return backend_list_editor(request, + urlname, + BackendConferenceSessionForm, + rest, + allow_new=True, + allow_delete=True) diff --git a/postgresqleu/urls.py b/postgresqleu/urls.py index a61d2c1..b5f49be 100644 --- a/postgresqleu/urls.py +++ b/postgresqleu/urls.py @@ -141,6 +141,9 @@ urlpatterns = [ url(r'^events/admin/(\w+)/regdays/(.*/)?$', postgresqleu.confreg.backendviews.edit_regdays), url(r'^events/admin/(\w+)/regclasses/(.*/)?$', postgresqleu.confreg.backendviews.edit_regclasses), url(r'^events/admin/(\w+)/regtypes/(.*/)?$', postgresqleu.confreg.backendviews.edit_regtypes), + url(r'^events/admin/(\w+)/tracks/(.*/)?$', postgresqleu.confreg.backendviews.edit_tracks), + url(r'^events/admin/(\w+)/rooms/(.*/)?$', postgresqleu.confreg.backendviews.edit_rooms), + url(r'^events/admin/(\w+)/sessions/(.*/)?$', postgresqleu.confreg.backendviews.edit_sessions), url(r'^events/sponsor/', include('postgresqleu.confsponsor.urls')), diff --git a/template/confreg/admin_dashboard_single.html b/template/confreg/admin_dashboard_single.html index 514701e..d994fb3 100644 --- a/template/confreg/admin_dashboard_single.html +++ b/template/confreg/admin_dashboard_single.html @@ -24,7 +24,7 @@ {%endif%}
View sessions and vote
-
Edit sessions
+
Edit sessions
Create schedule
Volunteer schedule
PDF schedules
@@ -64,6 +64,10 @@
+
+ + +
-- 2.39.5