Added setting to disable order cancelling for users

This commit is contained in:
Raphael Michel
2016-08-15 16:42:39 +02:00
parent 3dfdfdf5d0
commit 1cb956d508
7 changed files with 33 additions and 7 deletions

View File

@@ -227,6 +227,10 @@ class Order(LoggedModel):
return False # nothing there to modify
@property
def can_user_cancel(self) -> bool:
return self.event.settings.cancel_allow_user
@property
def is_expired_by_time(self):
return (

View File

@@ -121,6 +121,10 @@ DEFAULTS = {
'default': None,
'type': datetime
},
'cancel_allow_user': {
'default': 'True',
'type': bool
},
'contact_mail': {
'default': None,
'type': str

View File

@@ -160,6 +160,11 @@ class EventSettingsForm(SettingsForm):
required=False,
help_text=_("Public email address for contacting the organizer")
)
cancel_allow_user = forms.BooleanField(
label=_("Allow user to cancel unpaid orders"),
help_text=_("If unchecked, users cannot cancel orders by themselves"),
required=False
)
def clean(self):
data = super().clean()

View File

@@ -39,6 +39,7 @@
{% bootstrap_field sform.max_items_per_order layout="horizontal" %}
{% bootstrap_field sform.attendee_names_asked layout="horizontal" %}
{% bootstrap_field sform.attendee_names_required layout="horizontal" %}
{% bootstrap_field sform.cancel_allow_user layout="horizontal" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -178,7 +178,7 @@
{% endif %}
<div class="clearfix"></div>
</div>
{% if order.status == "n" %}
{% if order.status == "n" and order.can_user_cancel %}
<div class="row">
<div class="col-md-12 text-right">
<p>

View File

@@ -295,7 +295,7 @@ class OrderCancel(EventViewMixin, OrderDetailMixin, TemplateView):
self.kwargs = kwargs
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))
if self.order.status not in (Order.STATUS_PENDING, Order.STATUS_EXPIRED):
if self.order.status not in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) or not self.order.can_user_cancel:
messages.error(request, _('You cannot cancel this order.'))
return redirect(self.get_order_url())
return super().dispatch(request, *args, **kwargs)
@@ -321,6 +321,9 @@ class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View):
def post(self, request, *args, **kwargs):
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))
if not self.order.can_user_cancel:
messages.error(request, _('You cannot cancel this order.'))
return redirect(self.get_order_url())
return self.do(self.order.pk)
def get_context_data(self, **kwargs):