mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Refs #634 -- Re-allow deleting the last subevent and fix UI crashes
This commit is contained in:
@@ -660,7 +660,7 @@ class SubEvent(EventMixin, LoggedModel):
|
|||||||
return self.event.currency
|
return self.event.currency
|
||||||
|
|
||||||
def allow_delete(self):
|
def allow_delete(self):
|
||||||
return self.event.subevents.count() > 1
|
return not self.orderposition_set.exists()
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
super().delete(*args, **kwargs)
|
super().delete(*args, **kwargs)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from django.utils import formats
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
from django.utils.translation import ugettext_lazy as _, ungettext, pgettext
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Item, Order, OrderPosition, RequiredAction, SubEvent, Voucher,
|
Item, Order, OrderPosition, RequiredAction, SubEvent, Voucher,
|
||||||
@@ -329,10 +329,13 @@ def widgets_for_event_qs(request, qs, user, nmax):
|
|||||||
for event in events:
|
for event in events:
|
||||||
tz = pytz.timezone(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
tz = pytz.timezone(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
||||||
if event.has_subevents:
|
if event.has_subevents:
|
||||||
dr = daterange(
|
if event.min_from is None:
|
||||||
(event.min_from).astimezone(tz),
|
dr = pgettext("subevent", "No dates")
|
||||||
(event.max_fromto or event.max_to or event.max_from).astimezone(tz)
|
else:
|
||||||
)
|
dr = daterange(
|
||||||
|
(event.min_from).astimezone(tz),
|
||||||
|
(event.max_fromto or event.max_to or event.max_from).astimezone(tz)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if event.date_to:
|
if event.date_to:
|
||||||
dr = daterange(event.date_from.astimezone(tz), event.date_to.astimezone(tz))
|
dr = daterange(event.date_from.astimezone(tz), event.date_to.astimezone(tz))
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ class SubEventDelete(EventPermissionRequiredMixin, DeleteView):
|
|||||||
raise Http404(pgettext_lazy("subevent", "The requested date does not exist."))
|
raise Http404(pgettext_lazy("subevent", "The requested date does not exist."))
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if self.get_object().orderposition_set.count() > 0:
|
if not self.get_object().allow_delete():
|
||||||
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
||||||
'placed.'))
|
'placed.'))
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
@@ -109,13 +109,10 @@ class SubEventDelete(EventPermissionRequiredMixin, DeleteView):
|
|||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
success_url = self.get_success_url()
|
success_url = self.get_success_url()
|
||||||
|
|
||||||
if self.object.orderposition_set.count() > 0:
|
if not self.object.allow_delete():
|
||||||
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
||||||
'placed.'))
|
'placed.'))
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
elif not self.object.allow_delete(): # checking if this is the last date in the event series
|
|
||||||
messages.error(request, pgettext_lazy('subevent', 'The last date of an event series can not be deleted.'))
|
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
|
||||||
else:
|
else:
|
||||||
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
||||||
self.object.delete()
|
self.object.delete()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db.models.functions import Coalesce, Greatest
|
|||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _, pgettext
|
||||||
|
|
||||||
from pretix.base.models import Organizer, User
|
from pretix.base.models import Organizer, User
|
||||||
from pretix.control.permissions import event_permission_required
|
from pretix.control.permissions import event_permission_required
|
||||||
@@ -38,11 +38,14 @@ def event_list(request):
|
|||||||
|
|
||||||
dr = e.get_date_range_display()
|
dr = e.get_date_range_display()
|
||||||
if e.has_subevents:
|
if e.has_subevents:
|
||||||
tz = pytz.timezone(e.settings.timezone)
|
if e.min_from is None:
|
||||||
dr = _('Series:') + ' ' + daterange(
|
dr = pgettext('subevent', 'No dates')
|
||||||
e.min_from.astimezone(tz),
|
else:
|
||||||
(e.max_fromto or e.max_to or e.max_from).astimezone(tz)
|
tz = pytz.timezone(e.settings.timezone)
|
||||||
)
|
dr = _('Series:') + ' ' + daterange(
|
||||||
|
e.min_from.astimezone(tz),
|
||||||
|
(e.max_fromto or e.max_to or e.max_from).astimezone(tz)
|
||||||
|
)
|
||||||
return {
|
return {
|
||||||
'id': e.pk,
|
'id': e.pk,
|
||||||
'slug': e.slug,
|
'slug': e.slug,
|
||||||
|
|||||||
Reference in New Issue
Block a user