forked from CGM_Public/pretix_original
Add placeholder for checked in addons (Z#23230009)
This commit is contained in:
@@ -54,7 +54,7 @@ from bidi import get_display
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.staticfiles import finders
|
from django.contrib.staticfiles import finders
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db.models import Max, Min
|
from django.db.models import Exists, Max, Min, OuterRef
|
||||||
from django.db.models.fields.files import FieldFile
|
from django.db.models.fields.files import FieldFile
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.deconstruct import deconstructible
|
from django.utils.deconstruct import deconstructible
|
||||||
@@ -76,7 +76,7 @@ from reportlab.pdfgen.canvas import Canvas
|
|||||||
from reportlab.platypus import Paragraph
|
from reportlab.platypus import Paragraph
|
||||||
|
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
from pretix.base.models import Event, Order, OrderPosition, Question
|
from pretix.base.models import Checkin, Event, Order, OrderPosition, Question
|
||||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
from pretix.base.settings import PERSON_NAME_SCHEMES
|
||||||
from pretix.base.signals import layout_image_variables, layout_text_variables
|
from pretix.base.signals import layout_image_variables, layout_text_variables
|
||||||
from pretix.base.templatetags.money import money_filter
|
from pretix.base.templatetags.money import money_filter
|
||||||
@@ -379,6 +379,13 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
str(p) for p in generate_compressed_addon_list(op, order, ev)
|
str(p) for p in generate_compressed_addon_list(op, order, ev)
|
||||||
])
|
])
|
||||||
}),
|
}),
|
||||||
|
("checked_in_addons", {
|
||||||
|
"label": _("List of Checked-In Add-Ons"),
|
||||||
|
"editor_sample": _("Add-on 1\n2x Add-on 2"),
|
||||||
|
"evaluate": lambda op, order, ev: "\n".join([
|
||||||
|
str(p) for p in generate_compressed_addon_list(op, order, ev, only_checked_in=True)
|
||||||
|
])
|
||||||
|
}),
|
||||||
("organizer", {
|
("organizer", {
|
||||||
"label": _("Organizer name"),
|
"label": _("Organizer name"),
|
||||||
"editor_sample": _("Event organizer company"),
|
"editor_sample": _("Event organizer company"),
|
||||||
@@ -750,12 +757,16 @@ def get_program_times(op: OrderPosition, ev: Event):
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
def generate_compressed_addon_list(op, order, event):
|
def generate_compressed_addon_list(op, order, event, only_checked_in=False):
|
||||||
itemcount = defaultdict(int)
|
itemcount = defaultdict(int)
|
||||||
addons = [p for p in (
|
addon_qs = (
|
||||||
op.addons.all() if 'addons' in getattr(op, '_prefetched_objects_cache', {})
|
op.addons.all() if 'addons' in getattr(op, '_prefetched_objects_cache', {})
|
||||||
else op.addons.select_related('item', 'variation')
|
else op.addons.select_related('item', 'variation')
|
||||||
) if not p.canceled]
|
)
|
||||||
|
if only_checked_in:
|
||||||
|
addon_qs = addon_qs.filter(Exists(Checkin.objects.filter(position=OuterRef('pk'))), canceled=False)
|
||||||
|
addons = [p for p in addon_qs if not p.canceled]
|
||||||
|
|
||||||
for pos in addons:
|
for pos in addons:
|
||||||
itemcount[pos.item, pos.variation] += 1
|
itemcount[pos.item, pos.variation] += 1
|
||||||
|
|
||||||
|
|||||||
@@ -2053,7 +2053,7 @@ def test_pdf_data(token_client, organizer, event, order, django_assert_max_num_q
|
|||||||
assert not resp.data['positions'][0].get('pdf_data')
|
assert not resp.data['positions'][0].get('pdf_data')
|
||||||
|
|
||||||
# order list
|
# order list
|
||||||
with django_assert_max_num_queries(33):
|
with django_assert_max_num_queries(34):
|
||||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format(
|
resp = token_client.get('/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format(
|
||||||
organizer.slug, event.slug
|
organizer.slug, event.slug
|
||||||
))
|
))
|
||||||
@@ -2068,7 +2068,7 @@ def test_pdf_data(token_client, organizer, event, order, django_assert_max_num_q
|
|||||||
assert not resp.data['results'][0]['positions'][0].get('pdf_data')
|
assert not resp.data['results'][0]['positions'][0].get('pdf_data')
|
||||||
|
|
||||||
# position list
|
# position list
|
||||||
with django_assert_max_num_queries(35):
|
with django_assert_max_num_queries(36):
|
||||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/orderpositions/?pdf_data=true'.format(
|
resp = token_client.get('/api/v1/organizers/{}/events/{}/orderpositions/?pdf_data=true'.format(
|
||||||
organizer.slug, event.slug
|
organizer.slug, event.slug
|
||||||
))
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user