diff --git a/src/pretixpresale/static/pretixpresale/less/event.less b/src/pretixpresale/static/pretixpresale/less/event.less index 2f9d3297ff..a6560c3293 100644 --- a/src/pretixpresale/static/pretixpresale/less/event.less +++ b/src/pretixpresale/static/pretixpresale/less/event.less @@ -32,13 +32,17 @@ display: inline; } .price, .count { - text-align: center; + text-align: right; } .price small, .availability-box small { display: block; line-height: 1; } + + &.total { + border-top: 1px solid @table-border-color; + } } .checkout-button-row { padding: 15px 0; diff --git a/src/pretixpresale/templates/pretixpresale/event/fragment_cart.html b/src/pretixpresale/templates/pretixpresale/event/fragment_cart.html index 4d3b80e0ee..d894589785 100644 --- a/src/pretixpresale/templates/pretixpresale/event/fragment_cart.html +++ b/src/pretixpresale/templates/pretixpresale/event/fragment_cart.html @@ -1,59 +1,63 @@ {% load i18n %} -{% if cart %} -
-
-

{% trans "Your cart" %}

+{% for line in cart.positions %} +
+
+ {{ line.item }} + {% if line.variation %} + – {{ line.variation }} + {% endif %}
-
- {% for line in cart %} -
-
- {{ line.item }} - {% if line.variation %} - – {{ line.variation }} - {% endif %} -
-
- {{ event.currency }} {{ line.price|floatformat:2 }} -
-
-
- {% csrf_token %} - {% if line.variation %} - - {% else %} - - {% endif %} - -
- {{ line.count }} -
- {% csrf_token %} - {% if line.variation %} - - {% else %} - - {% endif %} - -
-
-
- {{ event.currency }} {{ line.total|floatformat:2 }} - {% if line.item.tax_rate %} -
{% blocktrans trimmed with rate=line.item.tax_rate %} - incl. {{ rate }}% taxes - {% endblocktrans %} - {% endif %} -
-
-
- {% endfor %} +
+ {{ event.currency }} {{ line.price|floatformat:2 }}
+
+ {% if editable %} +
+ {% csrf_token %} + {% if line.variation %} + + {% else %} + + {% endif %} + +
+ {% endif %} + {{ line.count }} + {% if editable %} +
+ {% csrf_token %} + {% if line.variation %} + + {% else %} + + {% endif %} + +
+ {% endif %} +
+
+ {{ event.currency }} {{ line.total|floatformat:2 }} + {% if line.item.tax_rate %} +
{% blocktrans trimmed with rate=line.item.tax_rate %} + incl. {{ rate }}% taxes + {% endblocktrans %} + {% endif %} +
+
-{% endif %} \ No newline at end of file +{% endfor %} +
+
+ {% trans "Total" %} +
+
+ {{ event.currency }} {{ cart.total|floatformat:2 }} +
+
+
diff --git a/src/pretixpresale/templates/pretixpresale/event/index.html b/src/pretixpresale/templates/pretixpresale/event/index.html index d4bbe47b08..5fe06c58ac 100644 --- a/src/pretixpresale/templates/pretixpresale/event/index.html +++ b/src/pretixpresale/templates/pretixpresale/event/index.html @@ -2,7 +2,16 @@ {% load i18n %} {% block content %} - {% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event %} + {% if cart.positions %} +
+
+

{% trans "Your cart" %}

+
+
+ {% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=True %} +
+
+ {% endif %}
{% csrf_token %} diff --git a/src/pretixpresale/views/__init__.py b/src/pretixpresale/views/__init__.py index 89b69edff9..2ea8d8fb2a 100644 --- a/src/pretixpresale/views/__init__.py +++ b/src/pretixpresale/views/__init__.py @@ -38,15 +38,18 @@ class CartDisplayMixin(CartMixin): def keyfunc(pos): return pos.item_id, pos.variation_id, pos.price - cart = [] + positions = [] for k, g in groupby(sorted(cartpos, key=keyfunc), key=keyfunc): g = list(g) group = g[0] group.count = len(g) group.total = group.count * group.price - cart.append(group) + positions.append(group) - return cart + return { + 'positions': positions, + 'total': sum(p.total for p in positions), + } class EventViewMixin: diff --git a/src/pretixpresale/views/cart.py b/src/pretixpresale/views/cart.py index cbf561f174..dda833823f 100644 --- a/src/pretixpresale/views/cart.py +++ b/src/pretixpresale/views/cart.py @@ -17,6 +17,8 @@ class CartActionMixin(CartMixin): def get_next_url(self): if "next" in self.request.GET and '://' not in self.request.GET: return self.request.GET.get('next') + elif "HTTP_REFERER" in self.request.META: + return self.request.META.get('HTTP_REFERER') else: return reverse('presale:event.index', kwargs={ 'event': self.request.event.slug,