mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Event list: Correct handling of event series
This commit is contained in:
@@ -246,8 +246,8 @@ class EventFilterForm(FilterForm):
|
|||||||
orders = {
|
orders = {
|
||||||
'slug': 'slug',
|
'slug': 'slug',
|
||||||
'organizer': 'organizer__name',
|
'organizer': 'organizer__name',
|
||||||
'date_from': 'date_from',
|
'date_from': 'order_from',
|
||||||
'date_to': 'date_to',
|
'date_to': 'order_to',
|
||||||
'live': 'live'
|
'live': 'live'
|
||||||
}
|
}
|
||||||
status = forms.ChoiceField(
|
status = forms.ChoiceField(
|
||||||
|
|||||||
@@ -85,11 +85,26 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<strong><a href="{% url "control:event.index" organizer=e.organizer.slug event=e.slug %}">{{ e.name }}</a></strong>
|
<strong><a href="{% url "control:event.index" organizer=e.organizer.slug event=e.slug %}">{{ e.name }}</a></strong>
|
||||||
|
{% if e.has_subevents %}
|
||||||
|
<span class="label label-default">{% trans "Series" %}</span>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ e.slug }}</td>
|
<td>{{ e.slug }}</td>
|
||||||
{% if not hide_orga %}<td>{{ e.organizer }}</td>{% endif %}
|
{% if not hide_orga %}<td>{{ e.organizer }}</td>{% endif %}
|
||||||
<td>{{ e.get_date_from_display }}</td>
|
<td>
|
||||||
<td>{{ e.get_date_to_display }}</td>
|
{% if e.has_subevents %}
|
||||||
|
{{ e.min_from|default_if_none:"" }}
|
||||||
|
{% else %}
|
||||||
|
{{ e.get_date_from_display }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% 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 %}
|
||||||
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% if not e.live %}
|
{% if not e.live %}
|
||||||
<span class="label label-danger">{% trans "Shop disabled" %}</span>
|
<span class="label label-danger">{% trans "Shop disabled" %}</span>
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ from django.conf import settings
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import transaction
|
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.http import JsonResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.utils.crypto import get_random_string
|
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(
|
qs = self.request.user.get_events_with_any_permission().select_related('organizer').prefetch_related(
|
||||||
'_settings_objects', 'organizer___settings_objects'
|
'_settings_objects', 'organizer___settings_objects'
|
||||||
).order_by('-date_from')
|
).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():
|
if self.filter_form.is_valid():
|
||||||
qs = self.filter_form.filter_qs(qs)
|
qs = self.filter_form.filter_qs(qs)
|
||||||
return qs
|
return qs
|
||||||
|
|||||||
Reference in New Issue
Block a user