Refs #634 -- Re-allow deleting the last subevent and fix UI crashes

This commit is contained in:
Raphael Michel
2018-04-13 10:14:54 +02:00
parent fd9f521c60
commit b2721db8e0
4 changed files with 20 additions and 17 deletions

View File

@@ -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)

View File

@@ -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))

View File

@@ -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()

View File

@@ -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,