forked from CGM_Public/pretix_original
PDF exporters: Fix ordering of add-on products by name
This commit is contained in:
@@ -47,7 +47,7 @@ from django.core.files import File
|
|||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
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 Exists, OuterRef, Q, Subquery
|
from django.db.models import Case, Exists, OuterRef, Q, Subquery, When
|
||||||
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
|
||||||
@@ -373,8 +373,12 @@ class BadgeExporter(BaseExporter):
|
|||||||
elif form_data.get('order_by', '').startswith('name:'):
|
elif form_data.get('order_by', '').startswith('name:'):
|
||||||
part = form_data['order_by'][5:]
|
part = form_data['order_by'][5:]
|
||||||
qs = qs.annotate(
|
qs = qs.annotate(
|
||||||
resolved_name=Coalesce('attendee_name_parts', 'addon_to__attendee_name_parts',
|
resolved_name=Case(
|
||||||
'order__invoice_address__name_parts')
|
When(attendee_name_cached__ne='', then='attendee_name_parts'),
|
||||||
|
When(addon_to__attendee_name_cached__isnull=False, addon_to__attendee_name_cached__ne='',
|
||||||
|
then='addon_to__attendee_name_parts'),
|
||||||
|
default='order__invoice_address__name_parts',
|
||||||
|
)
|
||||||
).annotate(
|
).annotate(
|
||||||
resolved_name_part=JSONExtract('resolved_name', part)
|
resolved_name_part=JSONExtract('resolved_name', part)
|
||||||
).order_by(
|
).order_by(
|
||||||
|
|||||||
@@ -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 OuterRef, Q, Subquery
|
from django.db.models import Case, OuterRef, Q, Subquery, When
|
||||||
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
|
||||||
@@ -145,7 +145,11 @@ class AllTicketsPDF(BaseExporter):
|
|||||||
elif form_data.get('order_by', '').startswith('name:'):
|
elif form_data.get('order_by', '').startswith('name:'):
|
||||||
part = form_data['order_by'][5:]
|
part = form_data['order_by'][5:]
|
||||||
qs = qs.annotate(
|
qs = qs.annotate(
|
||||||
resolved_name=Coalesce('attendee_name_parts', 'addon_to__attendee_name_parts', 'order__invoice_address__name_parts')
|
resolved_name=Case(
|
||||||
|
When(attendee_name_cached__ne='', then='attendee_name_parts'),
|
||||||
|
When(addon_to__attendee_name_cached__isnull=False, addon_to__attendee_name_cached__ne='', then='addon_to__attendee_name_parts'),
|
||||||
|
default='order__invoice_address__name_parts',
|
||||||
|
)
|
||||||
).annotate(
|
).annotate(
|
||||||
resolved_name_part=JSONExtract('resolved_name', part)
|
resolved_name_part=JSONExtract('resolved_name', part)
|
||||||
).order_by(
|
).order_by(
|
||||||
|
|||||||
Reference in New Issue
Block a user