From 3415bf5cd324a6cc93ff3c6c6f1882c0c8844abe Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 24 Aug 2017 10:44:22 +0200 Subject: [PATCH] Event list: Correct handling of event series --- src/pretix/control/forms/filter.py | 4 ++-- .../templates/pretixcontrol/events/index.html | 19 +++++++++++++++++-- src/pretix/control/views/main.py | 13 +++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 7bb0d54c48..f759c9de30 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -246,8 +246,8 @@ class EventFilterForm(FilterForm): orders = { 'slug': 'slug', 'organizer': 'organizer__name', - 'date_from': 'date_from', - 'date_to': 'date_to', + 'date_from': 'order_from', + 'date_to': 'order_to', 'live': 'live' } status = forms.ChoiceField( diff --git a/src/pretix/control/templates/pretixcontrol/events/index.html b/src/pretix/control/templates/pretixcontrol/events/index.html index 4f47801cbe..617961a4d0 100644 --- a/src/pretix/control/templates/pretixcontrol/events/index.html +++ b/src/pretix/control/templates/pretixcontrol/events/index.html @@ -85,11 +85,26 @@ {{ e.name }} + {% if e.has_subevents %} + {% trans "Series" %} + {% endif %} {{ e.slug }} {% if not hide_orga %}{{ e.organizer }}{% endif %} - {{ e.get_date_from_display }} - {{ e.get_date_to_display }} + + {% if e.has_subevents %} + {{ e.min_from|default_if_none:"" }} + {% else %} + {{ e.get_date_from_display }} + {% endif %} + + + {% if e.has_subevents %} + {{ e.max_fromto|default_if_none:e.max_from|default_if_none:e.max_to|default_if_none:"" }} + {% else %} + {{ e.get_date_from_display }} + {% endif %} + {% if not e.live %} {% trans "Shop disabled" %} diff --git a/src/pretix/control/views/main.py b/src/pretix/control/views/main.py index 963b8522d2..953c4b3878 100644 --- a/src/pretix/control/views/main.py +++ b/src/pretix/control/views/main.py @@ -2,6 +2,8 @@ from django.conf import settings from django.contrib import messages from django.core.urlresolvers import reverse from django.db import transaction +from django.db.models import Max, Min +from django.db.models.functions import Coalesce, Greatest from django.http import JsonResponse from django.shortcuts import redirect from django.utils.crypto import get_random_string @@ -30,6 +32,17 @@ class EventList(ListView): qs = self.request.user.get_events_with_any_permission().select_related('organizer').prefetch_related( '_settings_objects', 'organizer___settings_objects' ).order_by('-date_from') + + qs = qs.annotate( + min_from=Min('subevents__date_from'), + max_from=Max('subevents__date_from'), + max_to=Max('subevents__date_to'), + max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) + ).annotate( + order_from=Coalesce('min_from', 'date_from'), + order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to'), + ) + if self.filter_form.is_valid(): qs = self.filter_form.filter_qs(qs) return qs