forked from CGM_Public/pretix_original
Do not show invisible questions in order overview
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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,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'
|
||||||
|
|||||||
Reference in New Issue
Block a user