mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +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 import File
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from django.db import DataError, models
|
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.db.models.functions import Cast, Coalesce
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
|
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
|
||||||
@@ -471,6 +471,7 @@ class BadgeExporter(BaseExporter):
|
|||||||
label=_('Sort by'),
|
label=_('Sort by'),
|
||||||
choices=[
|
choices=[
|
||||||
('name', _('Attendee name')),
|
('name', _('Attendee name')),
|
||||||
|
('company', _('Attendee company')),
|
||||||
('code', _('Order code')),
|
('code', _('Order code')),
|
||||||
('date', _('Event date')),
|
('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))
|
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':
|
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':
|
elif form_data.get('order_by') == 'code':
|
||||||
qs = qs.order_by('order__code')
|
qs = qs.order_by('order__code')
|
||||||
elif form_data.get('order_by') == 'date':
|
elif form_data.get('order_by') == 'date':
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ from io import BytesIO
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.db import DataError, models
|
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.db.models.functions import Cast, Coalesce
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
|
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
|
||||||
@@ -92,6 +92,7 @@ class AllTicketsPDF(BaseExporter):
|
|||||||
label=_('Sort by'),
|
label=_('Sort by'),
|
||||||
choices=[
|
choices=[
|
||||||
('name', _('Attendee name')),
|
('name', _('Attendee name')),
|
||||||
|
('company', _('Attendee company')),
|
||||||
('code', _('Order code')),
|
('code', _('Order code')),
|
||||||
('date', _('Event date')),
|
('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))
|
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':
|
if form_data.get('order_by') == 'name':
|
||||||
qs = qs.order_by('attendee_name_cached', 'order__code')
|
qs = qs.annotate(
|
||||||
elif form_data.get('order_by') == 'code':
|
resolved_name=Case(
|
||||||
qs = qs.order_by('order__code')
|
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':
|
elif form_data.get('order_by') == 'date':
|
||||||
qs = qs.annotate(ed=Coalesce('subevent__date_from', 'order__event__date_from')).order_by('ed', 'order__code')
|
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:'):
|
elif form_data.get('order_by', '').startswith('name:'):
|
||||||
|
|||||||
Reference in New Issue
Block a user