diff --git a/src/pretix/presale/templates/pretixpresale/event/index.html b/src/pretix/presale/templates/pretixpresale/event/index.html index 32620e05d..b5ab56257 100644 --- a/src/pretix/presale/templates/pretixpresale/event/index.html +++ b/src/pretix/presale/templates/pretixpresale/event/index.html @@ -15,19 +15,32 @@
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=True %} -
-
- - {% if cart.minutes_left > 0 %} - {% blocktrans trimmed with minutes=cart.minutes_left %} - The items in your cart are reserved for you for {{ minutes }} minutes. - {% endblocktrans %} - {% else %} - {% trans "The items in your cart are no longer reserved for you." %} - {% endif %} - + + {% if cart.minutes_left > 0 %} + {% blocktrans trimmed with minutes=cart.minutes_left %} + The items in your cart are reserved for you for {{ minutes }} minutes. + {% endblocktrans %} + {% else %} + {% trans "The items in your cart are no longer reserved for you." %} + {% endif %} + +
+
+
+ {% csrf_token %} + {% for line in cart.positions %} + {% if line.variation %} + + + {% else %} + + + {% endif %} + {% endfor %} + +
-
+
{% trans "Proceed with checkout" %} diff --git a/src/pretix/presale/urls.py b/src/pretix/presale/urls.py index 1a7f3cfad..90efd92f3 100644 --- a/src/pretix/presale/urls.py +++ b/src/pretix/presale/urls.py @@ -14,6 +14,7 @@ import pretix.presale.views.user event_patterns = [ url(r'^cart/add$', pretix.presale.views.cart.CartAdd.as_view(), name='event.cart.add'), url(r'^cart/remove$', pretix.presale.views.cart.CartRemove.as_view(), name='event.cart.remove'), + url(r'^cart/removeall$', pretix.presale.views.cart.CartRemoveAll.as_view(), name='event.cart.remove.all'), url(r'^checkout/start$', pretix.presale.views.checkout.CheckoutView.as_view(), name='event.checkout.start'), url(r'^redeem$', pretix.presale.views.cart.RedeemView.as_view(), name='event.redeem'), diff --git a/src/pretix/presale/views/cart.py b/src/pretix/presale/views/cart.py index d84955eb4..46e6b965d 100644 --- a/src/pretix/presale/views/cart.py +++ b/src/pretix/presale/views/cart.py @@ -126,6 +126,32 @@ class CartRemove(EventViewMixin, CartActionMixin, AsyncAction, View): return redirect(self.get_error_url()) +class CartRemoveAll(EventViewMixin, CartActionMixin, AsyncAction, View): + task = remove_items_from_cart + + def get_success_message(self, value): + return _('Your cart is empty.') + + 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 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): task = add_items_to_cart