diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 97d3f29186..97a7e70972 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -97,6 +97,19 @@ DEFAULTS = { 'default': settings.MAIL_FROM, 'type': str }, + 'mail_text_resend_link': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(ugettext_noop("""Hello, + +you receive this message because you asked us to send you the link +to your order for {event}. + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, 'mail_text_order_placed': { 'type': LazyI18nString, 'default': LazyI18nString.from_gettext(ugettext_noop("""Hello, diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index b22501e0dc..44f0b7e116 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -212,6 +212,12 @@ class MailSettingsForm(SettingsForm): widget=I18nTextarea, help_text=_("Available placeholders: {event}, {url}") ) + mail_text_order_resend = I18nFormField( + label=_("Resend link"), + required=False, + widget=I18nTextarea, + help_text=_("Available placeholders: {event}, {url}") + ) smtp_use_custom = forms.BooleanField( label=_("Use custom SMTP server"), help_text=_("All mail related to your event will be sent over the smtp server specified by you."), diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html index 9c985d6e71..3fd1033b21 100644 --- a/src/pretix/control/templates/pretixcontrol/order/index.html +++ b/src/pretix/control/templates/pretixcontrol/order/index.html @@ -37,7 +37,7 @@ {% if can_download %} {% for b in download_buttons %} + class="btn btn-default"> {{ b.text }} {% endfor %} @@ -67,7 +67,16 @@
[0-9A-Z]+)/transition$', orders.OrderTransition.as_view(),
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]+)/extend$', orders.OrderExtend.as_view(),
name='event.order.extend'),
url(r'^orders/(?P[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py
index c533636596..40c3d40e81 100644
--- a/src/pretix/control/views/orders.py
+++ b/src/pretix/control/views/orders.py
@@ -17,6 +17,7 @@ from pretix.base.models import (
)
from pretix.base.services import tickets
from pretix.base.services.export import export
+from pretix.base.services.mail import mail
from pretix.base.services.orders import cancel_order, mark_order_paid
from pretix.base.services.stats import order_overview
from pretix.base.signals import (
@@ -25,6 +26,7 @@ from pretix.base.signals import (
)
from pretix.control.forms.orders import ExtendForm
from pretix.control.permissions import EventPermissionRequiredMixin
+from pretix.multidomain.urlreverse import build_absolute_uri
class OrderList(EventPermissionRequiredMixin, ListView):
@@ -198,6 +200,27 @@ class OrderTransition(OrderView):
return HttpResponseNotAllowed(['POST'])
+class OrderResendLink(OrderView):
+ permission = 'can_change_orders'
+
+ def post(self, *args, **kwargs):
+ mail(
+ self.order.email, _('Your order: %(code)s') % {'code': self.order.code},
+ self.order.event.settings.mail_text_resend_link,
+ {
+ 'event': self.order.event.name,
+ 'url': build_absolute_uri(self.order.event, 'presale:event.order', kwargs={
+ 'order': self.order.code,
+ 'secret': self.order.secret
+ }),
+ },
+ self.order.event, locale=self.order.locale
+ )
+ messages.success(self.request, _('The order has been marked as paid.'))
+ self.order.log_action('pretix.base.order.resend', user=self.request.user)
+ return redirect(self.get_order_url())
+
+
class OrderDownload(OrderView):
@cached_property