From 586e544fce996b2b61b81072c6583bb6de10165e Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 10 Sep 2019 11:44:20 +0200 Subject: [PATCH] Add "resend link" option to attendees --- src/pretix/base/models/orders.py | 45 ++++++++++++++++--- .../templates/pretixcontrol/order/index.html | 16 ++++++- src/pretix/control/urls.py | 2 + src/pretix/control/views/orders.py | 6 ++- 4 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 9dc46747b9..30a94afc63 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -1914,25 +1914,26 @@ class OrderPosition(AbstractPosition): """ from pretix.base.services.mail import SendMailException, mail, render_mail - if not self.email: + if not self.attendee_email: return for k, v in self.event.meta_data.items(): context['meta_' + k] = v - with language(self.locale): - recipient = self.email + with language(self.order.locale): + recipient = self.attendee_email try: email_content = render_mail(template, context) mail( recipient, subject, template, context, - self.event, self.locale, self, headers, sender, + self.event, self.order.locale, order=self.order, headers=headers, sender=sender, + position=self, invoices=invoices, attach_tickets=attach_tickets ) except SendMailException: raise else: - self.log_action( + self.order.log_action( log_entry_type, user=user, auth=auth, @@ -1945,6 +1946,40 @@ class OrderPosition(AbstractPosition): } ) + def resend_link(self, user=None, auth=None): + from pretix.multidomain.urlreverse import build_absolute_uri + + with language(self.order.locale): + try: + invoice_name = self.order.invoice_address.name + invoice_company = self.order.invoice_address.company + except InvoiceAddress.DoesNotExist: + invoice_name = "" + invoice_company = "" + if self.attendee_name: + invoice_name = self.attendee_name + email_template = self.event.settings.mail_text_resend_link + email_context = { + 'event': self.event.name, + 'url': build_absolute_uri(self.event, 'presale:event.order.position', kwargs={ + 'order': self.order.code, + 'secret': self.web_secret, + 'position': self.positionid + }), + 'invoice_name': invoice_name, + 'invoice_company': invoice_company, + 'attendee_name': self.attendee_name, + } + name_scheme = PERSON_NAME_SCHEMES[self.event.settings.name_scheme] + for f, l, w in name_scheme['fields']: + email_context['attendee_name_%s' % f] = self.attendee_name_parts.get(f, '') + email_subject = _('Your event registration: %(code)s') % {'code': self.order.code} + self.send_mail( + email_subject, email_template, email_context, + 'pretix.event.order.email.resend', user=user, auth=auth, + attach_tickets=True + ) + class CartPosition(AbstractPosition): """ diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html index 64e40e08bf..323531800d 100644 --- a/src/pretix/control/templates/pretixcontrol/order/index.html +++ b/src/pretix/control/templates/pretixcontrol/order/index.html @@ -315,8 +315,20 @@ {% endif %} {% if line.item.admission and event.settings.attendee_emails_asked %}
{% trans "Attendee email" %}
-
{% if line.attendee_email %}{{ line.attendee_email }}{% else %} - {% trans "not answered" %}{% endif %}
+
+ {% if line.attendee_email and not line.addon_to %} + {{ line.attendee_email }} +
+ {% csrf_token %} + +
+ {% else %} + {% trans "not answered" %} + {% endif %} +
{% endif %} {% for q in line.questions %}
diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 3b82cbb25e..9aced408c3 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -196,6 +196,8 @@ urlpatterns = [ name='event.order.transition'), url(r'^orders/(?P[0-9A-Z]+)/resend$', orders.OrderResendLink.as_view(), name='event.order.resendlink'), + url(r'^orders/(?P[0-9A-Z]+)/(?P\d+)/resend$', orders.OrderResendLink.as_view(), + name='event.order.resendlink'), url(r'^orders/(?P[0-9A-Z]+)/invoice$', orders.OrderInvoiceCreate.as_view(), name='event.order.geninvoice'), url(r'^orders/(?P[0-9A-Z]+)/invoices/(?P\d+)/regenerate$', orders.OrderInvoiceRegenerate.as_view(), diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 8a612895f6..3b98da021a 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -1067,7 +1067,11 @@ class OrderResendLink(OrderView): def post(self, *args, **kwargs): try: - self.order.resend_link(user=self.request.user) + if 'position' in kwargs: + p = get_object_or_404(self.order.positions, pk=kwargs['position']) + p.resend_link(user=self.request.user) + else: + self.order.resend_link(user=self.request.user) except SendMailException: messages.error(self.request, _('There was an error sending the mail. Please try again later.')) return redirect(self.get_order_url())