Refs #82 -- Make order expiry more clear (#116)

This commit is contained in:
Raphael Michel
2016-05-07 17:03:32 +02:00
parent c9350dde40
commit 944b5db0bf
14 changed files with 126 additions and 21 deletions
+9 -3
View File
@@ -117,11 +117,17 @@ class EventSettingsForm(SettingsForm):
"days configured above."),
required=False
)
payment_term_expire_automatically = forms.BooleanField(
label=_('Automatically expire unpaid orders'),
help_text=_("If checked, all unpaid orders will automatically go from 'pending' to 'expired' "
"after the end of their payment deadline. This means that those tickets go back to "
"the pool and can be ordered by other people."),
required=False
)
payment_term_accept_late = forms.BooleanField(
label=_('Accept late payments'),
help_text=_("Accept payments that come after the end of the order's payment term. "
"Payments will only be accepted if the regarding quotas have remaining "
"capacity. No payments will be accepted after the 'Last date of payments' "
help_text=_("Accept payments for orders even when they are in 'expired' state as long as enough "
"capacity is available. No payments will ever be accepted after the 'Last date of payments' "
"configured above."),
required=False
)
+1
View File
@@ -11,6 +11,7 @@ def pretixcontrol_logentry_display(sender, logentry, **kwargs):
'pretix.event.order.unpaid': _('The order has been marked as unpaid.'),
'pretix.event.order.resend': _('The link to the order detail page has been resent to the user.'),
'pretix.event.order.expirychanged': _('The order\'s expiry date has been changed.'),
'pretix.event.order.expired': _('The order has been marked as expired.'),
'pretix.event.order.paid': _('The order has been marked as paid.'),
'pretix.event.order.refunded': _('The order has been refunded.'),
'pretix.event.order.cancelled': _('The order has been cancelled.'),
@@ -33,6 +33,7 @@
{% bootstrap_field sform.show_items_outside_presale_period layout="horizontal" %}
{% bootstrap_field sform.payment_term_days layout="horizontal" %}
{% bootstrap_field sform.payment_term_last layout="horizontal" %}
{% bootstrap_field sform.payment_term_expire_automatically layout="horizontal" %}
{% bootstrap_field sform.payment_term_accept_late layout="horizontal" %}
{% bootstrap_field sform.last_order_modification_date layout="horizontal" %}
</fieldset>
@@ -47,6 +47,17 @@
</form>
{% endif %}
{% endif %}
{% if order.is_expired_by_time %}
<form action="{% url "control:event.order.transition" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}"
method="post">
{% csrf_token %}
<div class="alert alert-info">
<button name="status" value="e" class="btn btn-default pull-right">{% trans "Expire order" %}</button>
{% trans "The payment for this order is overdue, but you have configured not to expire orders automatically. To free quota capacity, you can mark it as expired manually." %}
<div class="clearfix"></div>
</div>
</form>
{% endif %}
<div class="row">
<div class="col-xs-12 col-lg-10">
@@ -5,7 +5,7 @@
{% elif order.status == "p" %}
<span class="label label-success {{ class }}">{% trans "Paid" %}</span>
{% elif order.status == "e" %} {# expired #}
<span class="label label-danger {{ class }}">{% trans "Pending (expired)" %}</span>
<span class="label label-danger {{ class }}">{% trans "Expired" %}</span>
{% elif order.status == "c" %}
<span class="label label-danger {{ class }}">{% trans "Cancelled" %}</span>
{% elif order.status == "r" %}
+11 -6
View File
@@ -167,23 +167,28 @@ class OrderTransition(OrderView):
def post(self, *args, **kwargs):
to = self.request.POST.get('status', '')
if self.order.status == 'n' and to == 'p':
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p':
try:
mark_order_paid(self.order, manual=True, user=self.request.user)
except Quota.QuotaExceededException as e:
messages.error(self.request, str(e))
else:
messages.success(self.request, _('The order has been marked as paid.'))
elif self.order.status == 'n' and to == 'c':
elif self.order.status == Order.STATUS_PENDING and to == 'c':
cancel_order(self.order, user=self.request.user)
messages.success(self.request, _('The order has been cancelled.'))
elif self.order.status == 'p' and to == 'n':
elif self.order.status == Order.STATUS_PAID and to == 'n':
self.order.status = Order.STATUS_PENDING
self.order.payment_manual = True
self.order.save()
self.order.log_action('pretix.event.order.unpaid', user=self.request.user)
messages.success(self.request, _('The order has been marked as not paid.'))
elif self.order.status == 'p' and to == 'r':
elif self.order.status == Order.STATUS_PENDING and to == 'e':
self.order.status = Order.STATUS_EXPIRED
self.order.save()
self.order.log_action('pretix.event.order.expired', user=self.request.user)
messages.success(self.request, _('The order has been marked as expired.'))
elif self.order.status == Order.STATUS_PAID and to == 'r':
ret = self.payment_provider.order_control_refund_perform(self.request, self.order)
if ret:
return redirect(ret)
@@ -191,11 +196,11 @@ class OrderTransition(OrderView):
def get(self, *args, **kwargs):
to = self.request.GET.get('status', '')
if self.order.status == 'n' and to == 'c':
if self.order.status == Order.STATUS_PENDING and to == 'c':
return render(self.request, 'pretixcontrol/order/cancel.html', {
'order': self.order,
})
elif self.order.status == 'p' and to == 'r':
elif self.order.status == Order.STATUS_PAID and to == 'r':
return render(self.request, 'pretixcontrol/order/refund.html', {
'order': self.order,
'payment': self.payment_provider.order_control_refund_render(self.order),