Refs #118 -- Asynchronous cart position removal

This commit is contained in:
Raphael Michel
2016-01-13 11:51:25 +01:00
parent dc0852f54f
commit 55a501cb93
3 changed files with 48 additions and 18 deletions

View File

@@ -23,7 +23,7 @@
<div class="col-md-2 col-xs-6 count">
{% if editable %}
<form action="{% eventurl event "presale:event.cart.remove" %}"
method="post">
method="post" data-asynctask>
{% csrf_token %}
{% if line.variation %}
<input type="hidden" name="variation_{{ line.item.id }}_{{ line.variation.id }}"

View File

@@ -53,16 +53,30 @@ class CartActionMixin:
return items
class CartRemove(EventViewMixin, CartActionMixin, View):
class CartRemove(EventViewMixin, CartActionMixin, AsyncAction, View):
task = remove_items_from_cart
def post(self, *args, **kwargs):
def get_success_message(self, value):
return _('Your cart has been updated.')
def get_error_message(self, exception):
if isinstance(exception, dict) and exception['exc_type'] == 'CartError':
return exception['exc_message']
elif isinstance(exception, CartError):
return str(exception)
return super().get_error_message(exception)
def post(self, request, *args, **kwargs):
items = self._items_from_post_data()
if not items:
return redirect(self.get_error_url())
remove_items_from_cart(self.request.event.id, items, self.request.session.session_key)
messages.success(self.request, _('Your cart has been updated.'))
return redirect(self.get_success_url())
if items:
return self.do(self.request.event.id, items, self.request.session.session_key)
else:
if 'ajax' in self.request.GET or 'ajax' in self.request.POST:
return JsonResponse({
'redirect': self.get_error_url()
})
else:
return redirect(self.get_error_url())
class CartAdd(EventViewMixin, CartActionMixin, AsyncAction, View):