Allow adding question answers to ticket layouts

This commit is contained in:
Raphael Michel
2017-11-23 20:55:03 +01:00
parent bd7ba09f10
commit bd5d0093ef
3 changed files with 45 additions and 3 deletions

View File

@@ -1,9 +1,14 @@
from functools import partial
from django.dispatch import receiver
from django.template.loader import get_template
from django.urls import resolve
from django.utils.translation import ugettext_lazy as _
from pretix.base.models import QuestionAnswer
from pretix.base.signals import (
EventPluginSignal, register_data_exporters, register_ticket_outputs,
EventPluginSignal, event_copy_data, register_data_exporters,
register_ticket_outputs,
)
from pretix.control.signals import html_head
from pretix.presale.style import ( # NOQA: legacy import
@@ -52,3 +57,36 @@ dictionaries as values that contain keys like in the following example::
The evaluate member will be called with the order position, order and event as arguments. The event might
also be a subevent, if applicable.
"""
def get_answer(op, order, event, question_id):
try:
a = op.answers.get(question_id=question_id)
return str(a).replace("\n", "<br/>\n")
except QuestionAnswer.DoesNotExist:
return ""
@receiver(layout_text_variables, dispatch_uid="pretix_ticketoutputpdf_layout_text_variables_questions")
def variables_from_questions(sender, *args, **kwargs):
d = {}
for q in sender.questions.all():
d['question_{}'.format(q.pk)] = {
'label': _('Question: {question}').format(question=q.question),
'editor_sample': _('<Answer: {question}>').format(question=q.question),
'evaluate': partial(get_answer, question_id=q.pk)
}
return d
@receiver(signal=event_copy_data, dispatch_uid="pretix_ticketoutputpdf_copy_data")
def event_copy_data_receiver(sender, other, question_map, **kwargs):
layout = sender.settings.get('ticketoutput_pdf_layout', as_type=list)
if not layout:
return
for o in layout:
if o['type'] == 'textarea':
if o['content'].startswith('question_'):
o['content'] = 'question_{}'.format(question_map.get(int(o['content'][9:]), 0).pk)
sender.settings.set('ticketoutput_pdf_layout', list(layout))