diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py
index ab0ea17e1e..5023f61d25 100644
--- a/src/pretix/base/forms/questions.py
+++ b/src/pretix/base/forms/questions.py
@@ -275,10 +275,11 @@ class BaseInvoiceAddressForm(forms.ModelForm):
class Meta:
model = InvoiceAddress
fields = ('is_business', 'company', 'name_parts', 'street', 'zipcode', 'city', 'country', 'vat_id',
- 'internal_reference')
+ 'internal_reference', 'beneficiary')
widgets = {
'is_business': BusinessBooleanRadio,
'street': forms.Textarea(attrs={'rows': 2, 'placeholder': _('Street and Number')}),
+ 'beneficiary': forms.Textarea(attrs={'rows': 3}),
'company': forms.TextInput(attrs={'data-display-dependency': '#id_is_business_1'}),
'vat_id': forms.TextInput(attrs={'data-display-dependency': '#id_is_business_1'}),
'internal_reference': forms.TextInput,
@@ -325,6 +326,9 @@ class BaseInvoiceAddressForm(forms.ModelForm):
self.fields['name_parts'].widget.attrs['data-no-required-attr'] = '1'
self.fields['company'].widget.attrs['data-required-if'] = '#id_is_business_1'
+ if not event.settings.invoice_address_beneficiary:
+ del self.fields['beneficiary']
+
def clean(self):
data = self.cleaned_data
if not data.get('is_business'):
diff --git a/src/pretix/base/invoice.py b/src/pretix/base/invoice.py
index cfda29054d..fed07a9c0b 100644
--- a/src/pretix/base/invoice.py
+++ b/src/pretix/base/invoice.py
@@ -4,6 +4,7 @@ from decimal import Decimal
from io import BytesIO
from typing import Tuple
+import bleach
import vat_moss.exchange_rates
from django.contrib.staticfiles import finders
from django.dispatch import receiver
@@ -392,6 +393,13 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
self.stylesheet['Normal']
))
+ if self.invoice.invoice_to_beneficiary:
+ story.append(Paragraph(
+ pgettext('invoice', 'Beneficiary') + ':
' +
+ bleach.clean(self.invoice.invoice_to_beneficiary, tags=[]).replace("\n", "
\n"),
+ self.stylesheet['Normal']
+ ))
+
if self.invoice.introductory_text:
story.append(Paragraph(self.invoice.introductory_text, self.stylesheet['Normal']))
story.append(Spacer(1, 10 * mm))
diff --git a/src/pretix/base/migrations/0105_auto_20190112_1512.py b/src/pretix/base/migrations/0105_auto_20190112_1512.py
new file mode 100644
index 0000000000..aa5bb9010b
--- /dev/null
+++ b/src/pretix/base/migrations/0105_auto_20190112_1512.py
@@ -0,0 +1,27 @@
+# Generated by Django 2.1 on 2019-01-12 15:12
+
+import django.db.models.deletion
+import jsonfallback.fields
+from django.db import migrations, models
+
+import pretix.base.models.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('pretixbase', '0104_auto_20181114_1526'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='invoiceaddress',
+ name='beneficiary',
+ field=models.TextField(blank=True, verbose_name='Beneficiary'),
+ ),
+ migrations.AddField(
+ model_name='invoice',
+ name='invoice_to_beneficiary',
+ field=models.TextField(blank=True, null=True, verbose_name='Beneficiary'),
+ ),
+ ]
diff --git a/src/pretix/base/models/invoices.py b/src/pretix/base/models/invoices.py
index d9cebc7ff1..22510eb1b3 100644
--- a/src/pretix/base/models/invoices.py
+++ b/src/pretix/base/models/invoices.py
@@ -91,6 +91,7 @@ class Invoice(models.Model):
invoice_to_city = models.TextField(null=True)
invoice_to_country = CountryField(null=True)
invoice_to_vat_id = models.TextField(null=True)
+ invoice_to_beneficiary = models.TextField(null=True)
date = models.DateField(default=today)
locale = models.CharField(max_length=50, default='en')
introductory_text = models.TextField(blank=True)
diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py
index e75fca252c..a3a9c96239 100644
--- a/src/pretix/base/models/orders.py
+++ b/src/pretix/base/models/orders.py
@@ -1643,6 +1643,10 @@ class InvoiceAddress(models.Model):
help_text=_('This reference will be printed on your invoice for your convenience.'),
blank=True
)
+ beneficiary = models.TextField(
+ verbose_name=_('Beneficiary'),
+ blank=True
+ )
def save(self, **kwargs):
if self.order:
diff --git a/src/pretix/base/services/invoices.py b/src/pretix/base/services/invoices.py
index 0817ee82e5..ba9248a9d0 100644
--- a/src/pretix/base/services/invoices.py
+++ b/src/pretix/base/services/invoices.py
@@ -81,6 +81,7 @@ def build_invoice(invoice: Invoice) -> Invoice:
invoice.invoice_to_zipcode = ia.zipcode
invoice.invoice_to_city = ia.city
invoice.invoice_to_country = ia.country
+ invoice.invoice_to_beneficiary = ia.beneficiary
if ia.vat_id:
invoice.invoice_to += "\n" + pgettext("invoice", "VAT-ID: %s") % ia.vat_id
@@ -310,6 +311,7 @@ def build_preview_invoice_pdf(event):
invoice.invoice_to_name, invoice.invoice_to_street,
invoice.invoice_to_zipcode, invoice.invoice_to_city
)
+ invoice.invoice_to_beneficiary = ''
invoice.file = None
invoice.save()
invoice.lines.all().delete()
diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py
index 7edd2522e2..4151c533f1 100644
--- a/src/pretix/base/settings.py
+++ b/src/pretix/base/settings.py
@@ -64,6 +64,10 @@ DEFAULTS = {
'default': 'False',
'type': bool,
},
+ 'invoice_address_beneficiary': {
+ 'default': 'False',
+ 'type': bool,
+ },
'invoice_address_vatid': {
'default': 'False',
'type': bool,
diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py
index 4aceb92a42..9badc03fee 100644
--- a/src/pretix/control/forms/event.py
+++ b/src/pretix/control/forms/event.py
@@ -567,6 +567,11 @@ class InvoiceSettingsForm(SettingsForm):
widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}),
required=False
)
+ invoice_address_beneficiary = forms.BooleanField(
+ label=_("Ask for beneficiary"),
+ widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}),
+ required=False
+ )
invoice_include_free = forms.BooleanField(
label=_("Show free products on invoices"),
help_text=_("Note that invoices will never be generated for orders that contain only free "
diff --git a/src/pretix/control/templates/pretixcontrol/event/invoicing.html b/src/pretix/control/templates/pretixcontrol/event/invoicing.html
index 9d57921445..e32129d58e 100644
--- a/src/pretix/control/templates/pretixcontrol/event/invoicing.html
+++ b/src/pretix/control/templates/pretixcontrol/event/invoicing.html
@@ -23,6 +23,7 @@
{% bootstrap_field form.invoice_name_required layout="control" %}
{% bootstrap_field form.invoice_address_company_required layout="control" %}
{% bootstrap_field form.invoice_address_vatid layout="control" %}
+ {% bootstrap_field form.invoice_address_beneficiary layout="control" %}