mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Improve support for cross-midnight time slots
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user