mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Badge/ticket export: Allow to sort by company
This commit is contained in:
@@ -50,7 +50,7 @@ from django.contrib.staticfiles import finders
|
||||
from django.core.files import File
|
||||
from django.core.files.storage import default_storage
|
||||
from django.db import DataError, models
|
||||
from django.db.models import Case, Exists, OuterRef, Q, Subquery, When
|
||||
from django.db.models import Case, Exists, OuterRef, Q, Subquery, When, Value
|
||||
from django.db.models.functions import Cast, Coalesce
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
|
||||
@@ -471,6 +471,7 @@ class BadgeExporter(BaseExporter):
|
||||
label=_('Sort by'),
|
||||
choices=[
|
||||
('name', _('Attendee name')),
|
||||
('company', _('Attendee company')),
|
||||
('code', _('Order code')),
|
||||
('date', _('Event date')),
|
||||
] + ([
|
||||
@@ -525,7 +526,23 @@ class BadgeExporter(BaseExporter):
|
||||
qs = qs.filter(Q(subevent__date_from__lt=dt) | Q(subevent__isnull=True, order__event__date_from__lt=dt))
|
||||
|
||||
if form_data.get('order_by') == 'name':
|
||||
qs = qs.order_by('attendee_name_cached', '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_cached'),
|
||||
default=Value(""),
|
||||
)
|
||||
).order_by('resolved_company', 'order__code')
|
||||
elif form_data.get('order_by') == 'code':
|
||||
qs = qs.order_by('order__code')
|
||||
elif form_data.get('order_by') == 'date':
|
||||
|
||||
@@ -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:'):
|
||||
|
||||
Reference in New Issue
Block a user