diff --git a/src/pretix/presale/static/pretixpresale/js/ui/main.js b/src/pretix/presale/static/pretixpresale/js/ui/main.js index 80a496acca..5298663db2 100644 --- a/src/pretix/presale/static/pretixpresale/js/ui/main.js +++ b/src/pretix/presale/static/pretixpresale/js/ui/main.js @@ -5,6 +5,11 @@ $(function () { $($(this).attr("data-parent")).find(".collapse.in").collapse('hide'); $($(this).attr("data-target")).collapse('show'); }); + $(".js-only").removeClass("js-only"); + $(".variations").hide(); + $("a[data-toggle=variations]").click(function() { + $(this).parent().parent().parent().find(".variations").slideToggle(); + }); }); diff --git a/src/pretix/presale/static/pretixpresale/less/event.less b/src/pretix/presale/static/pretixpresale/less/event.less index 8a76ffa8c1..42d6d98aec 100644 --- a/src/pretix/presale/static/pretixpresale/less/event.less +++ b/src/pretix/presale/static/pretixpresale/less/event.less @@ -1,11 +1,7 @@ .product-row { border-top: 1px solid @table-border-color; - &.headline, &.simple { - border-top: 2px solid @table-border-color; - } &:last-child { - border-bottom: 2px solid @table-border-color; } p:last-child { margin-bottom: 0; @@ -25,6 +21,12 @@ } } } +.item-with-variations .product-row.headline, .product-row.simple { + border-top: 2px solid @table-border-color; +} +.item-with-variations:last-child { + border-bottom: 2px solid @table-border-color; +} .panel-body address:last-child { margin-bottom: 0; diff --git a/src/pretix/presale/static/pretixpresale/less/main.less b/src/pretix/presale/static/pretixpresale/less/main.less index c5c342be57..1666d57f25 100644 --- a/src/pretix/presale/static/pretixpresale/less/main.less +++ b/src/pretix/presale/static/pretixpresale/less/main.less @@ -17,4 +17,7 @@ footer { position: absolute; right: 0; bottom: 20px; +} +.js-only { + display: none; } \ No newline at end of file diff --git a/src/pretix/presale/templates/pretixpresale/event/index.html b/src/pretix/presale/templates/pretixpresale/event/index.html index a19c8e4802..6bfee2f36c 100644 --- a/src/pretix/presale/templates/pretixpresale/event/index.html +++ b/src/pretix/presale/templates/pretixpresale/event/index.html @@ -38,38 +38,54 @@ {% if tup.0 %}

{{ tup.0.name }}

{% endif %} {% for item in tup.1 %} {% if item.has_variations %} -
-
- {{ item.name }} - {% if item.short_description %}

{{ item.short_description }}

{% endif %} -
-
-
- {% for var in item.available_variations %} -
+
+
- {{ var }} + + {{ item.name }} + + {% if item.short_description %}

{{ item.short_description }}

{% endif %}
- {{ event.currency }} {{ var.price|floatformat:2 }} - {% if item.tax_rate %} -
{% blocktrans trimmed with rate=item.tax_rate %} - incl. {{ rate }}% taxes - {% endblocktrans %} - {% endif %} + {% blocktrans trimmed with minprice=item.min_price|floatformat:2 currency=event.currency %} + from {{ currency }} {{ minprice }} + {% endblocktrans %} +
+ - {% if var.cached_availability.0 == 100 %} -
- -
- {% else %} - {% include "pretixpresale/event/fragment_availability.html" with avail=var.cached_availability.0 %} - {% endif %}
- {% endfor %} +
+ {% for var in item.available_variations %} +
+
+ {{ var }} +
+
+ {{ event.currency }} {{ var.price|floatformat:2 }} + {% if item.tax_rate %} +
{% blocktrans trimmed with rate=item.tax_rate %} + incl. {{ rate }}% taxes + {% endblocktrans %} + {% endif %} +
+ {% if var.cached_availability.0 == 100 %} +
+ +
+ {% else %} + {% include "pretixpresale/event/fragment_availability.html" with avail=var.cached_availability.0 %} + {% endif %} +
+
+ {% endfor %} +
+
{% else %}
diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index efdcb5fa99..ff60e51a8a 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -47,6 +47,7 @@ class EventIndex(EventViewMixin, CartDisplayMixin, TemplateView): var.cached_availability = list(var['variation'].check_quotas()) var.cached_availability[1] = min(var.cached_availability[1], int(self.request.event.settings.max_items_per_order)) + item.min_price = min([var['price'] for v in item.available_variations]) items = [item for item in items if len(item.available_variations) > 0]