From 177906e2acee38f8b09621ec6194f925b00a95ab Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 30 Sep 2021 12:15:55 +0200 Subject: [PATCH] Custom order emails: Allow to attach tickets and invoices --- src/pretix/base/models/invoices.py | 3 +++ src/pretix/control/forms/orders.py | 16 +++++++++++++++- .../templates/pretixcontrol/order/sendmail.html | 4 ++++ src/pretix/control/views/orders.py | 7 +++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/models/invoices.py b/src/pretix/base/models/invoices.py index 8e2a81b6a..a4344cea1 100644 --- a/src/pretix/base/models/invoices.py +++ b/src/pretix/base/models/invoices.py @@ -300,6 +300,9 @@ class Invoice(models.Model): def __repr__(self): return ''.format(self.full_invoice_no, self.pk) + def __str__(self): + return self.full_invoice_no + class InvoiceLine(models.Model): """ diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py index e21b4dcdc..d94da09d1 100644 --- a/src/pretix/control/forms/orders.py +++ b/src/pretix/control/forms/orders.py @@ -57,7 +57,8 @@ from pretix.base.forms.widgets import ( DatePickerWidget, SplitDateTimePickerWidget, ) from pretix.base.models import ( - InvoiceAddress, ItemAddOn, Order, OrderFee, OrderPosition, TaxRule, + Invoice, InvoiceAddress, ItemAddOn, Order, OrderFee, OrderPosition, + TaxRule, ) from pretix.base.models.event import SubEvent from pretix.base.services.pricing import get_price @@ -609,6 +610,17 @@ class OrderMailForm(forms.Form): label=_("Subject"), required=True ) + attach_tickets = forms.BooleanField( + label=_("Attach tickets"), + help_text=_("Will be ignored if all tickets in this order exceed a given size limit to ensure email deliverability."), + required=False + ) + attach_invoices = forms.ModelMultipleChoiceField( + label=_("Attach invoices"), + widget=forms.CheckboxSelectMultiple, + required=False, + queryset=Invoice.objects.none() + ) def _set_field_placeholders(self, fn, base_parameters): phs = [ @@ -641,6 +653,7 @@ class OrderMailForm(forms.Form): widget=forms.Textarea, initial=order.event.settings.mail_text_order_custom_mail.localize(order.locale), ) + self.fields['attach_invoices'].queryset = order.invoices.all() self._set_field_placeholders('message', ['event', 'order']) @@ -648,6 +661,7 @@ class OrderPositionMailForm(OrderMailForm): def __init__(self, *args, **kwargs): position = self.position = kwargs.pop('position') super().__init__(*args, **kwargs) + del self.fields['attach_invoices'] self.fields['sendto'].initial = position.attendee_email self.fields['message'] = forms.CharField( label=_("Message"), diff --git a/src/pretix/control/templates/pretixcontrol/order/sendmail.html b/src/pretix/control/templates/pretixcontrol/order/sendmail.html index 15ebe429b..66a619c75 100644 --- a/src/pretix/control/templates/pretixcontrol/order/sendmail.html +++ b/src/pretix/control/templates/pretixcontrol/order/sendmail.html @@ -18,6 +18,10 @@ {% bootstrap_field form.sendto layout='horizontal' %} {% bootstrap_field form.subject layout='horizontal' %} {% bootstrap_field form.message layout='horizontal' %} + {% bootstrap_field form.attach_tickets layout='horizontal' %} + {% if form.attach_invoices %} + {% bootstrap_field form.attach_invoices layout='horizontal' %} + {% endif %} {% if request.method == "POST" %}
{% trans "E-mail preview" %} diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 68184273a..eff84da2e 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -1982,7 +1982,9 @@ class OrderSendMail(EventPermissionRequiredMixin, OrderViewMixin, FormView): order.send_mail( form.cleaned_data['subject'], email_template, email_context, 'pretix.event.order.email.custom_sent', - self.request.user, auto_email=False + self.request.user, auto_email=False, + attach_tickets=form.cleaned_data.get('attach_tickets', False), + invoices=form.cleaned_data.get('attach_invoices', []), ) messages.success(self.request, _('Your message has been queued and will be sent to {}.'.format(order.email))) @@ -2047,7 +2049,8 @@ class OrderPositionSendMail(OrderSendMail): email_template, email_context, 'pretix.event.order.position.email.custom_sent', - self.request.user + self.request.user, + attach_tickets=form.cleaned_data.get('attach_tickets', False), ) messages.success(self.request, _('Your message has been queued and will be sent to {}.'.format(position.attendee_email)))