Badge/ticket export: Allow to sort by company

This commit is contained in:
Raphael Michel
2024-04-15 10:55:32 +02:00
parent 46da0bda61
commit d0c58713c4
2 changed files with 38 additions and 6 deletions

View File

@@ -39,7 +39,7 @@ from io import BytesIO
from django import forms
from django.core.files.base import ContentFile
from django.db import DataError, models
from django.db.models import Case, OuterRef, Q, Subquery, When
from django.db.models import Case, OuterRef, Q, Subquery, When, Value
from django.db.models.functions import Cast, Coalesce
from django.utils.timezone import now
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
@@ -92,6 +92,7 @@ class AllTicketsPDF(BaseExporter):
label=_('Sort by'),
choices=[
('name', _('Attendee name')),
('company', _('Attendee company')),
('code', _('Order code')),
('date', _('Event date')),
] + ([
@@ -137,9 +138,23 @@ class AllTicketsPDF(BaseExporter):
qs = qs.filter(Q(subevent__date_from__lt=dt_end) | Q(subevent__isnull=True, order__event__date_from__lt=dt_end))
if form_data.get('order_by') == 'name':
qs = qs.order_by('attendee_name_cached', 'order__code')
elif form_data.get('order_by') == 'code':
qs = qs.order_by('order__code')
qs = qs.annotate(
resolved_name=Case(
When(attendee_name_cached__ne='', then='attendee_name_cached'),
When(addon_to__attendee_name_cached__isnull=False, addon_to__attendee_name_cached__ne='',
then='addon_to__attendee_name_cached'),
default=Value(""),
)
).order_by('resolved_name', 'order__code')
elif form_data.get('order_by') == 'company':
qs = qs.annotate(
resolved_company=Case(
When(company__ne='', then='company'),
When(addon_to__company__isnull=False, addon_to__company__ne='',
then='addon_to__company'),
default=Value(""),
)
).order_by('resolved_company', 'order__code')
elif form_data.get('order_by') == 'date':
qs = qs.annotate(ed=Coalesce('subevent__date_from', 'order__event__date_from')).order_by('ed', 'order__code')
elif form_data.get('order_by', '').startswith('name:'):