diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst
index 1beb5ed81c..44e87be9a8 100644
--- a/doc/api/resources/orders.rst
+++ b/doc/api/resources/orders.rst
@@ -399,6 +399,7 @@ List of all orders
"created": "2017-12-01T10:00:00Z",
"payment_date": "2017-12-04T12:13:12Z",
"payment_url": null,
+ "details": {},
"provider": "banktransfer"
}
],
@@ -545,6 +546,7 @@ Fetching individual orders
"created": "2017-12-01T10:00:00Z",
"payment_date": "2017-12-04T12:13:12Z",
"payment_url": null,
+ "details": {},
"provider": "banktransfer"
}
],
@@ -1580,6 +1582,7 @@ Order payment endpoints
"created": "2017-12-01T10:00:00Z",
"payment_date": "2017-12-04T12:13:12Z",
"payment_url": null,
+ "details": {},
"provider": "banktransfer"
}
]
@@ -1621,6 +1624,7 @@ Order payment endpoints
"created": "2017-12-01T10:00:00Z",
"payment_date": "2017-12-04T12:13:12Z",
"payment_url": null,
+ "details": {},
"provider": "banktransfer"
}
diff --git a/doc/api/resources/questions.rst b/doc/api/resources/questions.rst
index 061fb7e5a3..7fed162ef0 100644
--- a/doc/api/resources/questions.rst
+++ b/doc/api/resources/questions.rst
@@ -41,6 +41,8 @@ ask_during_checkin boolean If ``true``, th
the ticket instead.
hidden boolean If ``true``, the question will only be shown in the
backend.
+print_on_invoice boolean If ``true``, the question will only be shown on
+ invoices.
options list of objects In case of question type ``C`` or ``M``, this lists the
available objects. Only writable during creation,
use separate endpoint to modify this later.
@@ -80,6 +82,10 @@ dependency_value string An old version
The attribute ``dependency_values`` has been added.
+.. versionchanged:: 3.1
+
+ The attribute ``print_on_invoice`` has been added.
+
Endpoints
---------
@@ -123,6 +129,7 @@ Endpoints
"identifier": "WY3TP9SL",
"ask_during_checkin": false,
"hidden": false,
+ "print_on_invoice": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
@@ -192,6 +199,7 @@ Endpoints
"identifier": "WY3TP9SL",
"ask_during_checkin": false,
"hidden": false,
+ "print_on_invoice": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
@@ -245,6 +253,7 @@ Endpoints
"position": 1,
"ask_during_checkin": false,
"hidden": false,
+ "print_on_invoice": false,
"dependency_question": null,
"dependency_values": [],
"options": [
@@ -279,6 +288,7 @@ Endpoints
"identifier": "WY3TP9SL",
"ask_during_checkin": false,
"hidden": false,
+ "print_on_invoice": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
@@ -352,6 +362,7 @@ Endpoints
"identifier": "WY3TP9SL",
"ask_during_checkin": false,
"hidden": false,
+ "print_on_invoice": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py
index 44e6c4a4f4..aa5a0d6dab 100644
--- a/src/pretix/api/serializers/item.py
+++ b/src/pretix/api/serializers/item.py
@@ -219,7 +219,7 @@ class QuestionSerializer(I18nAwareModelSerializer):
model = Question
fields = ('id', 'question', 'type', 'required', 'items', 'options', 'position',
'ask_during_checkin', 'identifier', 'dependency_question', 'dependency_values',
- 'hidden', 'dependency_value')
+ 'hidden', 'dependency_value', 'print_on_invoice')
def validate_identifier(self, value):
Question._clean_identifier(self.context['event'], value, self.instance)
diff --git a/src/pretix/base/migrations/0133_auto_20190830_1513.py b/src/pretix/base/migrations/0133_auto_20190830_1513.py
new file mode 100644
index 0000000000..d998139841
--- /dev/null
+++ b/src/pretix/base/migrations/0133_auto_20190830_1513.py
@@ -0,0 +1,21 @@
+# Generated by Django 2.2.4 on 2019-08-30 15:13
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+import pretix.base.models.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('pretixbase', '0132_auto_20190808_1253'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='question',
+ name='print_on_invoice',
+ field=models.BooleanField(default=False),
+ ),
+ ]
diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py
index a6faa3d9ad..ad8d3cb4c5 100644
--- a/src/pretix/base/models/items.py
+++ b/src/pretix/base/models/items.py
@@ -1034,6 +1034,10 @@ class Question(LoggedModel):
help_text=_('This question will only show up in the backend.'),
default=False
)
+ print_on_invoice = models.BooleanField(
+ verbose_name=_('Print answer on invoices'),
+ default=False
+ )
dependency_question = models.ForeignKey(
'Question', null=True, blank=True, on_delete=models.SET_NULL, related_name='dependent_questions'
)
diff --git a/src/pretix/base/services/invoices.py b/src/pretix/base/services/invoices.py
index 44c4c193d3..18c642c231 100644
--- a/src/pretix/base/services/invoices.py
+++ b/src/pretix/base/services/invoices.py
@@ -129,7 +129,7 @@ def build_invoice(invoice: Invoice) -> Invoice:
positions = list(
invoice.order.positions.select_related('addon_to', 'item', 'tax_rule', 'subevent', 'variation').annotate(
addon_c=Count('addons')
- ).order_by('positionid', 'id')
+ ).prefetch_related('answers', 'answers__question').order_by('positionid', 'id')
)
reverse_charge = False
@@ -146,6 +146,16 @@ def build_invoice(invoice: Invoice) -> Invoice:
desc = " + " + desc
if invoice.event.settings.invoice_attendee_name and p.attendee_name:
desc += "
" + pgettext("invoice", "Attendee: {name}").format(name=p.attendee_name)
+
+ for answ in p.answers.all():
+ if not answ.question.print_on_invoice:
+ continue
+ desc += "
{}{} {}".format(
+ answ.question.question,
+ "" if str(answ.question.question).endswith("?") else ":",
+ str(answ)
+ )
+
if invoice.event.has_subevents:
desc += "
" + pgettext("subevent", "Date: {}").format(p.subevent)
InvoiceLine.objects.create(
diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py
index 18b3cae87f..7799b6306b 100644
--- a/src/pretix/control/forms/item.py
+++ b/src/pretix/control/forms/item.py
@@ -94,7 +94,8 @@ class QuestionForm(I18nModelForm):
'identifier',
'items',
'dependency_question',
- 'dependency_values'
+ 'dependency_values',
+ 'print_on_invoice',
]
widgets = {
'items': forms.CheckboxSelectMultiple(
diff --git a/src/pretix/control/templates/pretixcontrol/items/question_edit.html b/src/pretix/control/templates/pretixcontrol/items/question_edit.html
index 0fa1549f0b..d2b1ef5323 100644
--- a/src/pretix/control/templates/pretixcontrol/items/question_edit.html
+++ b/src/pretix/control/templates/pretixcontrol/items/question_edit.html
@@ -112,6 +112,7 @@
{% bootstrap_field form.identifier layout="control" %}
{% bootstrap_field form.ask_during_checkin layout="control" %}
{% bootstrap_field form.hidden layout="control" %}
+ {% bootstrap_field form.print_on_invoice layout="control" %}