diff --git a/src/pretix/control/templates/pretixcontrol/items/index.html b/src/pretix/control/templates/pretixcontrol/items/index.html
index 3dc1f1a7d2..591152d127 100644
--- a/src/pretix/control/templates/pretixcontrol/items/index.html
+++ b/src/pretix/control/templates/pretixcontrol/items/index.html
@@ -45,6 +45,7 @@
|
|
|
+ |
{% trans "Default price" %} |
Edit |
@@ -113,6 +114,20 @@
{% endif %}
+
+ {% if i.attendee_data_required %}
+ {{ i.questionnaire_names_html }}">
+
+
+
+ {% elif i.attendee_data_asked %}
+ {{ i.questionnaire_names_html }}">
+
+
+ {% elif i.custom_questions_asked %}
+ {{ i.questionnaire_names_html }}">
+ {% endif %}
+ |
{% if i.var_count %}
diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py
index bf46b03273..98769c9de7 100644
--- a/src/pretix/control/views/item.py
+++ b/src/pretix/control/views/item.py
@@ -53,6 +53,8 @@ from django.http import (
from django.shortcuts import redirect, render
from django.urls import resolve, reverse
from django.utils.functional import cached_property
+from django.utils.html import format_html_join
+from django.utils.safestring import mark_safe
from django.utils.timezone import now
from django.utils.translation import gettext, gettext_lazy as _
from django.views.decorators.http import require_http_methods
@@ -100,6 +102,7 @@ from . import (
ChartContainingView, CreateView, PaginationMixin, TellParentFormMixin,
UpdateView,
)
+from ...presale.views import prefetch_relevant_questionnaires
def has_truthy_attr(cls, attr):
@@ -125,7 +128,10 @@ class ItemList(ListView):
).select_related("tax_rule").annotate(
var_count=Count('variations'),
requires_seat=requires_seat,
- ).prefetch_related("category", "limit_sales_channels").order_by(
+ ).prefetch_related(
+ "category", "limit_sales_channels",
+ prefetch_relevant_questionnaires(self.request.event, None, None, questionnaire_lookup='questionnaires'),
+ ).order_by(
F('category__position').asc(nulls_first=True),
'category', 'position'
)
@@ -133,6 +139,16 @@ class ItemList(ListView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['sales_channels'] = self.request.organizer.sales_channels.all()
+ for item in ctx['items']:
+ qrows = [qc for qq in item.relevant_questionnaires for qc in qq.questionnairerowlist]
+ item.attendee_data_asked = any(row.system_datafield for row in qrows)
+ item.attendee_data_required = item.attendee_data_asked and any(row.system_datafield and row.required for row in qrows)
+ item.custom_questions_asked = any(row.user_datafield_id for row in qrows)
+ item.questionnaire_names_html = format_html_join(' ', '• {} {}{}', ((
+ q.internal_name,
+ mark_safe("") if q.ask_during_checkin else '',
+ mark_safe("") if q.hidden else '',
+ ) for q in item.relevant_questionnaires))
items_by_category = {cat: list(items) for cat, items in groupby(ctx['items'], lambda item: item.category)}
ctx['cat_list'] = [(cat, items_by_category.get(cat, [])) for cat in [None, *self.request.event.categories.all()]]
return ctx
diff --git a/src/pretix/presale/views/__init__.py b/src/pretix/presale/views/__init__.py
index bb7c9b36a0..994fec1e61 100644
--- a/src/pretix/presale/views/__init__.py
+++ b/src/pretix/presale/views/__init__.py
@@ -396,10 +396,12 @@ def cart_exists(request):
return bool(request._cart_cache)
-def prefetch_relevant_questionnaires(event, sales_channel, questionnaire_type):
- qqs = event.questionnaires.filter(
- Q(all_sales_channels=True) | Q(limit_sales_channels__identifier=sales_channel),
- )
+def prefetch_relevant_questionnaires(event, sales_channel, questionnaire_type, questionnaire_lookup='item__questionnaires'):
+ qqs = event.questionnaires
+ if sales_channel:
+ qqs = qqs.filter(
+ Q(all_sales_channels=True) | Q(limit_sales_channels__identifier=sales_channel),
+ )
if questionnaire_type:
qqs = qqs.filter(type=questionnaire_type)
else:
@@ -412,7 +414,7 @@ def prefetch_relevant_questionnaires(event, sales_channel, questionnaire_type):
Question.objects.none(),
to_attr='dummy'
)
- return Prefetch('item__questionnaires',
+ return Prefetch(questionnaire_lookup,
qqs.prefetch_related(
Prefetch('rows', QuestionnaireRow.objects.prefetch_related(
Prefetch('user_datafield', Question.objects.prefetch_related(
diff --git a/src/pretix/static/pretixbase/scss/_theme.scss b/src/pretix/static/pretixbase/scss/_theme.scss
index eb32d06ec4..09566697c9 100644
--- a/src/pretix/static/pretixbase/scss/_theme.scss
+++ b/src/pretix/static/pretixbase/scss/_theme.scss
@@ -251,6 +251,8 @@ svg.svg-icon {
.fa-stack-shifted {
left: 0.5em;
}
+.fa-stack-sm { font-size: 0.75em; }
+.fa-stack-shift-up { top: -0.4em; }
.badge-primary { background: $brand-primary; }
.badge-success { background: $brand-success; }
|