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 %}
[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())