Skip to content

Commit

Permalink
Resend link option for admin
Browse files Browse the repository at this point in the history
  • Loading branch information
raphaelm committed Feb 11, 2016
1 parent 6b25dea commit 417539d
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 8 deletions.
13 changes: 13 additions & 0 deletions src/pretix/base/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,19 @@
'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,
Expand Down
6 changes: 6 additions & 0 deletions src/pretix/control/forms/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."),
Expand Down
28 changes: 20 additions & 8 deletions src/pretix/control/templates/pretixcontrol/order/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ <h1>
{% if can_download %}
{% for b in download_buttons %}
<a href="{% url "control:event.order.download" organizer=request.event.organizer.slug event=request.event.slug code=order.code output=b.identifier %}"
class="btn btn-default">
class="btn btn-default">
<span class="fa {{ b.icon }}"></span> {{ b.text }}
</a>
{% endfor %}
Expand Down Expand Up @@ -67,7 +67,16 @@ <h3 class="panel-title">
<dd>{{ order.expires }}</dd>
{% endif %}
<dt>{% trans "User" %}</dt>
<dd>{{ order.email }}</dd>
<dd>
{{ order.email }}&nbsp;&nbsp;
<form class="form-inline" style="display: inline;" method="post"
action="{% url "control:event.order.resendlink" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% csrf_token %}
<button class="btn btn-default btn-xs">
{% trans "Resend link" %}
</button>
</form>
</dd>
</dl>
</div>
</div>
Expand All @@ -86,7 +95,7 @@ <h3 class="panel-title">
– {{ line.variation }}
{% endif %}
{% if line.voucher %}
<br /><span class="fa fa-ticket"></span> {% trans "Voucher code used:" %}
<br/><span class="fa fa-ticket"></span> {% trans "Voucher code used:" %}
<a href="{% url "control:event.voucher" event=request.event.slug organizer=request.event.organizer.slug voucher=line.voucher.pk %}">
{{ line.voucher.code }}
</a>
Expand All @@ -95,11 +104,13 @@ <h3 class="panel-title">
<dl>
{% if line.item.admission and event.settings.attendee_names_asked %}
<dt>{% trans "Attendee name" %}</dt>
<dd>{% if line.attendee_name %}{{ line.attendee_name }}{% else %}<em>{% trans "not answered" %}</em>{% endif %}</dd>
<dd>{% if line.attendee_name %}{{ line.attendee_name }}{% else %}
<em>{% trans "not answered" %}</em>{% endif %}</dd>
{% endif %}
{% for q in line.questions %}
<dt>{{ q.question }}</dt>
<dd>{% if q.answer %}{{ q.answer }}{% else %}<em>{% trans "not answered" %}</em>{% endif %}</dd>
<dd>{% if q.answer %}{{ q.answer }}{% else %}
<em>{% trans "not answered" %}</em>{% endif %}</dd>
{% endfor %}
</dl>
{% endif %}
Expand All @@ -113,9 +124,10 @@ <h3 class="panel-title">
<div class="col-md-3 col-xs-6 price">
<strong>{{ event.currency }} {{ line.total|floatformat:2 }}</strong>
{% if line.item.tax_rate %}
<br /><small>{% blocktrans trimmed with rate=line.item.tax_rate %}
incl. {{ rate }}% taxes
{% endblocktrans %}</small>
<br/>
<small>{% blocktrans trimmed with rate=line.item.tax_rate %}
incl. {{ rate }}% taxes
{% endblocktrans %}</small>
{% endif %}
</div>
<div class="clearfix"></div>
Expand Down
2 changes: 2 additions & 0 deletions src/pretix/control/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
url(r'^vouchers/add$', vouchers.VoucherCreate.as_view(), name='event.vouchers.add'),
url(r'^orders/(?P<code>[0-9A-Z]+)/transition$', orders.OrderTransition.as_view(),
name='event.order.transition'),
url(r'^orders/(?P<code>[0-9A-Z]+)/resend$', orders.OrderResendLink.as_view(),
name='event.order.resendlink'),
url(r'^orders/(?P<code>[0-9A-Z]+)/extend$', orders.OrderExtend.as_view(),
name='event.order.extend'),
url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
Expand Down
23 changes: 23 additions & 0 deletions src/pretix/control/views/orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
)
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 (
Expand All @@ -25,6 +26,7 @@
)
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):
Expand Down Expand Up @@ -198,6 +200,27 @@ def get(self, *args, **kwargs):
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
Expand Down

0 comments on commit 417539d

Please sign in to comment.