Removed multi-dimensional item variations [backwards-incompatible]

This commit is contained in:
Raphael Michel
2015-12-13 15:03:56 +01:00
parent bc13ba9517
commit f748752391
36 changed files with 616 additions and 2019 deletions

View File

@@ -109,7 +109,7 @@
<div class="col-md-2 col-xs-6 availability-box available">
<input type="number" class="form-control input-item-count" placeholder="0" min="0"
max="{{ var.cached_availability.1 }}"
name="variation_{{ item.id }}_{{ var.variation.id }}">
name="variation_{{ item.id }}_{{ var.id }}">
</div>
{% else %}
{% include "pretixpresale/event/fragment_availability.html" with avail=var.cached_availability.0 %}

View File

@@ -21,7 +21,6 @@ class CartMixin:
).select_related(
'item', 'variation'
).prefetch_related(
'variation__values', 'variation__values__prop',
'item__questions', 'answers'
))
@@ -30,7 +29,7 @@ class CartMixin:
cart_id=self.request.session.session_key, event=self.request.event
)
prefetch = ['variation__values', 'variation__values__prop']
prefetch = []
if answers:
prefetch.append('item__questions')
prefetch.append('answers')

View File

@@ -20,35 +20,32 @@ class EventIndex(EventViewMixin, CartMixin, TemplateView):
).select_related(
'category', # for re-grouping
).prefetch_related(
'properties', # for .get_all_available_variations()
'quotas', 'variations__quotas', 'quotas__event' # for .availability()
).annotate(quotac=Count('quotas')).filter(
quotac__gt=0
).order_by('category__position', 'category_id', 'position', 'name')
for item in items:
item.available_variations = sorted(item.get_all_available_variations(),
key=lambda vd: vd.ordered_values())
item.has_variations = (len(item.available_variations) != 1
or not item.available_variations[0].empty())
item.available_variations = list(item.variations.filter(active=True, quotas__isnull=False).distinct())
item.has_variations = item.variations.exists()
if not item.has_variations:
item.cached_availability = list(item.check_quotas())
item.cached_availability[1] = min((item.cached_availability[1]
if item.cached_availability[1] is not None else sys.maxsize),
int(self.request.event.settings.max_items_per_order))
item.price = item.available_variations[0]['price']
item.price = item.default_price
else:
for var in item.available_variations:
var.cached_availability = list(var['variation'].check_quotas())
var.cached_availability = list(var.check_quotas())
var.cached_availability[1] = min(var.cached_availability[1]
if var.cached_availability[1] is not None else sys.maxsize,
int(self.request.event.settings.max_items_per_order))
var.price = var.get('price', item.default_price)
var.price = var.default_price if var.default_price is not None else item.default_price
if len(item.available_variations) > 0:
item.min_price = min([v.price for v in item.available_variations])
item.max_price = max([v.price for v in item.available_variations])
items = [item for item in items if len(item.available_variations) > 0]
items = [item for item in items if len(item.available_variations) > 0 or not item.has_variations]
# Regroup those by category
context['items_by_category'] = sorted(