Do not show invisible questions in order overview

This commit is contained in:
Raphael Michel
2019-03-13 17:06:49 +01:00
parent f95e8f374d
commit 307ee36e52
3 changed files with 35 additions and 9 deletions
+26 -4
View File
@@ -946,16 +946,38 @@ class AbstractPosition(models.Model):
# selected via prefetch_related # selected via prefetch_related
if not all: if not all:
if hasattr(self.item, 'questions_to_ask'): if hasattr(self.item, 'questions_to_ask'):
self.questions = list(copy.copy(q) for q in self.item.questions_to_ask) questions = list(copy.copy(q) for q in self.item.questions_to_ask)
else: else:
self.questions = list(copy.copy(q) for q in self.item.questions.filter(ask_during_checkin=False)) questions = list(copy.copy(q) for q in self.item.questions.filter(ask_during_checkin=False))
else: else:
self.questions = list(copy.copy(q) for q in self.item.questions.all()) questions = list(copy.copy(q) for q in self.item.questions.all())
for q in self.questions:
question_cache = {
q.pk: q for q in questions
}
def question_is_visible(parentid, qval):
parentq = question_cache[parentid]
if parentq.dependency_question_id and not question_is_visible(parentq.dependency_question_id, parentq.dependency_value):
return False
if parentid not in self.answ:
return False
if qval == 'True':
return self.answ[parentid].answer == 'True'
elif qval == 'False':
return self.answ[parentid].answer == 'False'
else:
return qval in [o.identifier for o in self.answ[parentid].options.all()]
self.questions = []
for q in questions:
if q.id in self.answ: if q.id in self.answ:
q.answer = self.answ[q.id] q.answer = self.answ[q.id]
q.answer.question = q # cache object
else: else:
q.answer = "" q.answer = ""
if not q.dependency_question_id or question_is_visible(q.dependency_question_id, q.dependency_value):
self.questions.append(q)
@property @property
def net_price(self): def net_price(self):
+4 -2
View File
@@ -12,7 +12,7 @@ from django.contrib import messages
from django.core.files import File from django.core.files import File
from django.db import transaction from django.db import transaction
from django.db.models import ( from django.db.models import (
Count, IntegerField, OuterRef, ProtectedError, Q, Subquery, Sum, Count, IntegerField, OuterRef, Prefetch, ProtectedError, Q, Subquery, Sum,
) )
from django.http import ( from django.http import (
FileResponse, Http404, HttpResponseNotAllowed, JsonResponse, FileResponse, Http404, HttpResponseNotAllowed, JsonResponse,
@@ -234,7 +234,9 @@ class OrderDetail(OrderView):
).select_related( ).select_related(
'item', 'variation', 'addon_to', 'tax_rule' 'item', 'variation', 'addon_to', 'tax_rule'
).prefetch_related( ).prefetch_related(
'item__questions', 'answers', 'answers__question', 'checkins', 'checkins__list' 'item__questions',
Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options').select_related('question')),
'checkins', 'checkins__list'
).order_by('positionid') ).order_by('positionid')
positions = [] positions = []
+5 -3
View File
@@ -5,13 +5,15 @@ from functools import wraps
from itertools import groupby from itertools import groupby
from django.conf import settings from django.conf import settings
from django.db.models import Sum from django.db.models import Prefetch, Sum
from django.utils.decorators import available_attrs from django.utils.decorators import available_attrs
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.timezone import now from django.utils.timezone import now
from pretix.base.i18n import language from pretix.base.i18n import language
from pretix.base.models import CartPosition, InvoiceAddress, OrderPosition from pretix.base.models import (
CartPosition, InvoiceAddress, OrderPosition, QuestionAnswer,
)
from pretix.base.services.cart import get_fees from pretix.base.services.cart import get_fees
from pretix.multidomain.urlreverse import eventreverse from pretix.multidomain.urlreverse import eventreverse
from pretix.presale.signals import question_form_fields from pretix.presale.signals import question_form_fields
@@ -48,7 +50,7 @@ class CartMixin:
prefetch = [] prefetch = []
if answers: if answers:
prefetch.append('item__questions') prefetch.append('item__questions')
prefetch.append('answers') prefetch.append(Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options')))
cartpos = queryset.order_by( cartpos = queryset.order_by(
'item__category__position', 'item__category_id', 'item__position', 'item__name', 'variation__value' 'item__category__position', 'item__category_id', 'item__position', 'item__name', 'variation__value'