Improve support for cross-midnight time slots

This commit is contained in:
Raphael Michel
2020-10-05 17:14:49 +02:00
parent d85583f70a
commit 766428c469
3 changed files with 24 additions and 15 deletions

View File

@@ -2,7 +2,6 @@ from datetime import timedelta
from urllib.parse import urlencode from urllib.parse import urlencode
from django import forms from django import forms
from django.core.exceptions import ValidationError
from django.forms import formset_factory from django.forms import formset_factory
from django.urls import reverse from django.urls import reverse
from django.utils.dates import MONTHS, WEEKDAYS from django.utils.dates import MONTHS, WEEKDAYS
@@ -382,12 +381,6 @@ class TimeForm(forms.Form):
required=False required=False
) )
def clean(self):
d = super().clean()
if d.get('time_from') and d.get('time_to') and d['time_from'] > d['time_to']:
raise ValidationError({'time_to': _('The end of the event has to be later than its start.')})
return d
TimeFormSet = formset_factory( TimeFormSet = formset_factory(
TimeForm, TimeForm,

View File

@@ -1,5 +1,5 @@
import copy import copy
from datetime import datetime from datetime import datetime, timedelta
from dateutil.rrule import DAILY, MONTHLY, WEEKLY, YEARLY, rrule, rruleset from dateutil.rrule import DAILY, MONTHLY, WEEKLY, YEARLY, rrule, rruleset
from django.contrib import messages from django.contrib import messages
@@ -739,11 +739,15 @@ class SubEventBulkCreate(SubEventEditorMixin, EventPermissionRequiredMixin, Crea
se = copy.copy(form.instance) se = copy.copy(form.instance)
se.date_from = make_aware(datetime.combine(rdate, t['time_from']), tz) se.date_from = make_aware(datetime.combine(rdate, t['time_from']), tz)
se.date_to = (
make_aware(datetime.combine(rdate, t['time_to']), tz) if t.get('time_to'):
if t.get('time_to') se.date_to = (
else None make_aware(datetime.combine(rdate, t['time_to']), tz)
) if t.get('time_to') > t.get('time_from')
else make_aware(datetime.combine(rdate + timedelta(days=1), t['time_to']), tz)
)
else:
se.date_to = None
se.date_admission = ( se.date_admission = (
make_aware(datetime.combine(rdate, t['time_admission']), tz) make_aware(datetime.combine(rdate, t['time_admission']), tz)
if t.get('time_admission') if t.get('time_admission')

View File

@@ -324,7 +324,13 @@ def add_events_for_days(request, baseqs, before, after, ebd, timezones):
'event': event, 'event': event,
'continued': not first, 'continued': not first,
'time': datetime_from.time().replace(tzinfo=None) if first and event.settings.show_times else None, 'time': datetime_from.time().replace(tzinfo=None) if first and event.settings.show_times else None,
'time_end': datetime_to.time().replace(tzinfo=None) if date_to == date_from and event.settings.show_times else None, 'time_end': (
datetime_to.time().replace(tzinfo=None)
if (date_to == date_from or (
date_to == date_from + timedelta(days=1) and date_to.time() < date_from.time()
)) and event.settings.show_times
else None,
),
'url': eventreverse(event, 'presale:event.index'), 'url': eventreverse(event, 'presale:event.index'),
'timezone': event.settings.timezone, 'timezone': event.settings.timezone,
}) })
@@ -387,7 +393,13 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n
'continued': not first, 'continued': not first,
'timezone': settings.timezone, 'timezone': settings.timezone,
'time': datetime_from.time().replace(tzinfo=None) if first and settings.show_times else None, 'time': datetime_from.time().replace(tzinfo=None) if first and settings.show_times else None,
'time_end': datetime_to.time().replace(tzinfo=None) if date_to == date_from and settings.show_times else None, 'time_end': (
datetime_to.time().replace(tzinfo=None)
if (date_to == date_from or (
date_to == date_from + timedelta(days=1) and date_to.time() < date_from.time()
)) and event.settings.show_times
else None,
),
'event': se, 'event': se,
'url': eventreverse(se.event, 'presale:event.index', kwargs=kwargs) 'url': eventreverse(se.event, 'presale:event.index', kwargs=kwargs)
}) })