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 django import forms
from django.core.exceptions import ValidationError
from django.forms import formset_factory
from django.urls import reverse
from django.utils.dates import MONTHS, WEEKDAYS
@@ -382,12 +381,6 @@ class TimeForm(forms.Form):
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(
TimeForm,

View File

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

View File

@@ -324,7 +324,13 @@ def add_events_for_days(request, baseqs, before, after, ebd, timezones):
'event': event,
'continued': not first,
'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'),
'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,
'timezone': settings.timezone,
'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,
'url': eventreverse(se.event, 'presale:event.index', kwargs=kwargs)
})