forked from CGM_Public/pretix_original
Resend link option for admin
This commit is contained in:
@@ -97,6 +97,19 @@ DEFAULTS = {
|
|||||||
'default': settings.MAIL_FROM,
|
'default': settings.MAIL_FROM,
|
||||||
'type': str
|
'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': {
|
'mail_text_order_placed': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
||||||
|
|||||||
@@ -212,6 +212,12 @@ class MailSettingsForm(SettingsForm):
|
|||||||
widget=I18nTextarea,
|
widget=I18nTextarea,
|
||||||
help_text=_("Available placeholders: {event}, {url}")
|
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(
|
smtp_use_custom = forms.BooleanField(
|
||||||
label=_("Use custom SMTP server"),
|
label=_("Use custom SMTP server"),
|
||||||
help_text=_("All mail related to your event will be sent over the smtp server specified by you."),
|
help_text=_("All mail related to your event will be sent over the smtp server specified by you."),
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
{% if can_download %}
|
{% if can_download %}
|
||||||
{% for b in download_buttons %}
|
{% 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 %}"
|
<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 }}
|
<span class="fa {{ b.icon }}"></span> {{ b.text }}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -67,7 +67,16 @@
|
|||||||
<dd>{{ order.expires }}</dd>
|
<dd>{{ order.expires }}</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<dt>{% trans "User" %}</dt>
|
<dt>{% trans "User" %}</dt>
|
||||||
<dd>{{ order.email }}</dd>
|
<dd>
|
||||||
|
{{ order.email }}
|
||||||
|
<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>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,7 +95,7 @@
|
|||||||
– {{ line.variation }}
|
– {{ line.variation }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if line.voucher %}
|
{% 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 %}">
|
<a href="{% url "control:event.voucher" event=request.event.slug organizer=request.event.organizer.slug voucher=line.voucher.pk %}">
|
||||||
{{ line.voucher.code }}
|
{{ line.voucher.code }}
|
||||||
</a>
|
</a>
|
||||||
@@ -95,11 +104,13 @@
|
|||||||
<dl>
|
<dl>
|
||||||
{% if line.item.admission and event.settings.attendee_names_asked %}
|
{% if line.item.admission and event.settings.attendee_names_asked %}
|
||||||
<dt>{% trans "Attendee name" %}</dt>
|
<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 %}
|
{% endif %}
|
||||||
{% for q in line.questions %}
|
{% for q in line.questions %}
|
||||||
<dt>{{ q.question }}</dt>
|
<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 %}
|
{% endfor %}
|
||||||
</dl>
|
</dl>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -113,9 +124,10 @@
|
|||||||
<div class="col-md-3 col-xs-6 price">
|
<div class="col-md-3 col-xs-6 price">
|
||||||
<strong>{{ event.currency }} {{ line.total|floatformat:2 }}</strong>
|
<strong>{{ event.currency }} {{ line.total|floatformat:2 }}</strong>
|
||||||
{% if line.item.tax_rate %}
|
{% if line.item.tax_rate %}
|
||||||
<br /><small>{% blocktrans trimmed with rate=line.item.tax_rate %}
|
<br/>
|
||||||
incl. {{ rate }}% taxes
|
<small>{% blocktrans trimmed with rate=line.item.tax_rate %}
|
||||||
{% endblocktrans %}</small>
|
incl. {{ rate }}% taxes
|
||||||
|
{% endblocktrans %}</small>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ urlpatterns = [
|
|||||||
url(r'^vouchers/add$', vouchers.VoucherCreate.as_view(), name='event.vouchers.add'),
|
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(),
|
url(r'^orders/(?P<code>[0-9A-Z]+)/transition$', orders.OrderTransition.as_view(),
|
||||||
name='event.order.transition'),
|
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(),
|
url(r'^orders/(?P<code>[0-9A-Z]+)/extend$', orders.OrderExtend.as_view(),
|
||||||
name='event.order.extend'),
|
name='event.order.extend'),
|
||||||
url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
|
url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from pretix.base.models import (
|
|||||||
)
|
)
|
||||||
from pretix.base.services import tickets
|
from pretix.base.services import tickets
|
||||||
from pretix.base.services.export import export
|
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.orders import cancel_order, mark_order_paid
|
||||||
from pretix.base.services.stats import order_overview
|
from pretix.base.services.stats import order_overview
|
||||||
from pretix.base.signals import (
|
from pretix.base.signals import (
|
||||||
@@ -25,6 +26,7 @@ from pretix.base.signals import (
|
|||||||
)
|
)
|
||||||
from pretix.control.forms.orders import ExtendForm
|
from pretix.control.forms.orders import ExtendForm
|
||||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||||
|
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||||
|
|
||||||
|
|
||||||
class OrderList(EventPermissionRequiredMixin, ListView):
|
class OrderList(EventPermissionRequiredMixin, ListView):
|
||||||
@@ -198,6 +200,27 @@ class OrderTransition(OrderView):
|
|||||||
return HttpResponseNotAllowed(['POST'])
|
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):
|
class OrderDownload(OrderView):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
|
|||||||
Reference in New Issue
Block a user