Event list: Correct handling of event series

This commit is contained in:
Raphael Michel
2017-08-24 10:44:22 +02:00
parent 45b9f1190f
commit 3415bf5cd3
3 changed files with 32 additions and 4 deletions

View File

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

View File

@@ -85,11 +85,26 @@
<tr>
<td>
<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>{{ e.slug }}</td>
{% if not hide_orga %}<td>{{ e.organizer }}</td>{% endif %}
<td>{{ e.get_date_from_display }}</td>
<td>{{ e.get_date_to_display }}</td>
<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">
{% if not e.live %}
<span class="label label-danger">{% trans "Shop disabled" %}</span>

View File

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