From b2721db8e08163da2654231691f9938c5e338e72 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 13 Apr 2018 10:14:54 +0200 Subject: [PATCH] Refs #634 -- Re-allow deleting the last subevent and fix UI crashes --- src/pretix/base/models/event.py | 2 +- src/pretix/control/views/dashboards.py | 13 ++++++++----- src/pretix/control/views/subevents.py | 7 ++----- src/pretix/control/views/typeahead.py | 15 +++++++++------ 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 8190139d98..eba442c1e2 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -660,7 +660,7 @@ class SubEvent(EventMixin, LoggedModel): return self.event.currency def allow_delete(self): - return self.event.subevents.count() > 1 + return not self.orderposition_set.exists() def delete(self, *args, **kwargs): super().delete(*args, **kwargs) diff --git a/src/pretix/control/views/dashboards.py b/src/pretix/control/views/dashboards.py index e25eb81d48..398df7d2a5 100644 --- a/src/pretix/control/views/dashboards.py +++ b/src/pretix/control/views/dashboards.py @@ -14,7 +14,7 @@ from django.utils import formats from django.utils.formats import date_format from django.utils.html import escape 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 ( Item, Order, OrderPosition, RequiredAction, SubEvent, Voucher, @@ -329,10 +329,13 @@ def widgets_for_event_qs(request, qs, user, nmax): for event in events: tz = pytz.timezone(event.cache.get_or_set('timezone', lambda: event.settings.timezone)) if event.has_subevents: - dr = daterange( - (event.min_from).astimezone(tz), - (event.max_fromto or event.max_to or event.max_from).astimezone(tz) - ) + if event.min_from is None: + dr = pgettext("subevent", "No dates") + else: + dr = daterange( + (event.min_from).astimezone(tz), + (event.max_fromto or event.max_to or event.max_from).astimezone(tz) + ) else: if event.date_to: dr = daterange(event.date_from.astimezone(tz), event.date_to.astimezone(tz)) diff --git a/src/pretix/control/views/subevents.py b/src/pretix/control/views/subevents.py index b4026e0446..bddda51969 100644 --- a/src/pretix/control/views/subevents.py +++ b/src/pretix/control/views/subevents.py @@ -98,7 +98,7 @@ class SubEventDelete(EventPermissionRequiredMixin, DeleteView): raise Http404(pgettext_lazy("subevent", "The requested date does not exist.")) 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 ' 'placed.')) return HttpResponseRedirect(self.get_success_url()) @@ -109,13 +109,10 @@ class SubEventDelete(EventPermissionRequiredMixin, DeleteView): self.object = self.get_object() 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 ' 'placed.')) 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: self.object.log_action('pretix.subevent.deleted', user=self.request.user) self.object.delete() diff --git a/src/pretix/control/views/typeahead.py b/src/pretix/control/views/typeahead.py index 0e98cfabbd..6bb6ab3b8e 100644 --- a/src/pretix/control/views/typeahead.py +++ b/src/pretix/control/views/typeahead.py @@ -8,7 +8,7 @@ from django.db.models.functions import Coalesce, Greatest from django.http import JsonResponse from django.urls import reverse 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.control.permissions import event_permission_required @@ -38,11 +38,14 @@ def event_list(request): dr = e.get_date_range_display() if e.has_subevents: - 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) - ) + if e.min_from is None: + dr = pgettext('subevent', 'No dates') + else: + 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 { 'id': e.pk, 'slug': e.slug,