diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index 58a8d370d..e3a7526bd 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -766,6 +766,7 @@ class EventSettingsSerializer(SettingsSerializer): 'invoice_footer_text', 'invoice_eu_currencies', 'invoice_logo_image', + 'invoice_renderer_highlight_order_code', 'cancel_allow_user', 'cancel_allow_user_until', 'cancel_allow_user_unpaid_keep', diff --git a/src/pretix/base/invoice.py b/src/pretix/base/invoice.py index 19b02b3e7..b77c0125c 100644 --- a/src/pretix/base/invoice.py +++ b/src/pretix/base/invoice.py @@ -859,8 +859,12 @@ class Modern1Renderer(ClassicInvoiceRenderer): def _get_first_page_frames(self, doc): footer_length = 3.5 * len(self.invoice.footer_text.split('\n')) * mm + if self.event.settings.invoice_renderer_highlight_order_code: + margin_top = 100 * mm + else: + margin_top = 95 * mm return [ - Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - 95 * mm, + Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - margin_top, leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=footer_length, id='normal') ] @@ -871,21 +875,31 @@ class Modern1Renderer(ClassicInvoiceRenderer): # the font size until it fits. begin_top = 100 * mm - def _draw(label, value, value_size, x, width): + def _draw(label, value, value_size, x, width, bold=False, sublabel=None): if canvas.stringWidth(value, self.font_regular, value_size) > width and value_size > 6: return False textobject = canvas.beginText(x, self.pagesize[1] - begin_top) textobject.setFont(self.font_regular, 8) textobject.textLine(label) textobject.moveCursor(0, 5) - textobject.setFont(self.font_regular, value_size) + textobject.setFont(self.font_bold if bold else self.font_regular, value_size) textobject.textLine(value) + + if sublabel: + textobject.moveCursor(0, 1) + textobject.setFont(self.font_regular, 8) + textobject.textLine(sublabel) + return textobject value_size = 10 while value_size >= 5: + if self.event.settings.invoice_renderer_highlight_order_code: + kwargs = dict(bold=True, sublabel=pgettext('invoice', '(Please quote at all times.)')) + else: + kwargs = {} objects = [ - _draw(pgettext('invoice', 'Order code'), self.invoice.order.full_code, value_size, self.left_margin, 45 * mm) + _draw(pgettext('invoice', 'Order code'), self.invoice.order.full_code, value_size, self.left_margin, 45 * mm, **kwargs) ] p = Paragraph( diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 34a16ec85..5ce088fca 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -625,6 +625,7 @@ class Event(EventMixin, LoggedModel): """ self.settings.invoice_renderer = 'modern1' self.settings.invoice_include_expire_date = True + self.settings.invoice_renderer_highlight_order_code = True self.settings.ticketoutput_pdf__enabled = True self.settings.ticketoutput_passbook__enabled = True self.settings.event_list_type = 'calendar' diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 3e35c0ae8..76e132489 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -634,6 +634,16 @@ DEFAULTS = { "the same numbering scheme will be used that you configured for regular invoices."), ) }, + 'invoice_renderer_highlight_order_code': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Highlight order code to make it stand out visibly"), + help_text=_("Only respected by some invoice renderers."), + ) + }, 'invoice_renderer': { 'default': 'classic', # default for new events is 'modern1' 'type': str, diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 2c73e7e8b..85c3883ab 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -856,6 +856,7 @@ class InvoiceSettingsForm(EventSettingsValidationMixin, SettingsForm): 'invoice_footer_text', 'invoice_eu_currencies', 'invoice_logo_image', + 'invoice_renderer_highlight_order_code', ] invoice_generate_sales_channels = forms.MultipleChoiceField( diff --git a/src/pretix/control/templates/pretixcontrol/event/invoicing.html b/src/pretix/control/templates/pretixcontrol/event/invoicing.html index f573889f6..d3fc957f8 100644 --- a/src/pretix/control/templates/pretixcontrol/event/invoicing.html +++ b/src/pretix/control/templates/pretixcontrol/event/invoicing.html @@ -54,6 +54,7 @@ {% bootstrap_field form.invoice_additional_text layout="control" %} {% bootstrap_field form.invoice_footer_text layout="control" %} {% bootstrap_field form.invoice_logo_image layout="control" %} + {% bootstrap_field form.invoice_renderer_highlight_order_code layout="control" %} {% bootstrap_field form.invoice_eu_currencies layout="control" %}