mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Fix booked add-ons being hidden in order change due to hide_sold_out
This commit is contained in:
@@ -101,7 +101,8 @@ def item_group_by_category(items):
|
||||
|
||||
|
||||
def get_grouped_items(event, subevent=None, voucher=None, channel='web', require_seat=0, base_qs=None, allow_addons=False,
|
||||
quota_cache=None, filter_items=None, filter_categories=None, memberships=None):
|
||||
quota_cache=None, filter_items=None, filter_categories=None, memberships=None,
|
||||
ignore_hide_sold_out_for_item_ids=None):
|
||||
base_qs_set = base_qs is not None
|
||||
base_qs = base_qs if base_qs is not None else event.items
|
||||
|
||||
@@ -273,7 +274,9 @@ def get_grouped_items(event, subevent=None, voucher=None, channel='web', require
|
||||
item.check_quotas(subevent=subevent, _cache=quota_cache, include_bundled=True)
|
||||
)
|
||||
|
||||
if event.settings.hide_sold_out and item.cached_availability[0] < Quota.AVAILABILITY_RESERVED:
|
||||
if not (
|
||||
ignore_hide_sold_out_for_item_ids and item.pk in ignore_hide_sold_out_for_item_ids
|
||||
) and event.settings.hide_sold_out and item.cached_availability[0] < Quota.AVAILABILITY_RESERVED:
|
||||
item._remove = True
|
||||
continue
|
||||
|
||||
@@ -359,7 +362,7 @@ def get_grouped_items(event, subevent=None, voucher=None, channel='web', require
|
||||
) and not getattr(v, '_remove', False)
|
||||
]
|
||||
|
||||
if event.settings.hide_sold_out:
|
||||
if not (ignore_hide_sold_out_for_item_ids and item.pk in ignore_hide_sold_out_for_item_ids) and event.settings.hide_sold_out:
|
||||
item.available_variations = [v for v in item.available_variations
|
||||
if v.cached_availability[0] >= Quota.AVAILABILITY_RESERVED]
|
||||
|
||||
|
||||
@@ -1238,6 +1238,7 @@ class OrderChange(EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
)
|
||||
if self.order.customer else None
|
||||
),
|
||||
ignore_hide_sold_out_for_item_ids={k[0] for k in current_addon_products.keys()}
|
||||
)
|
||||
item_cache[ckey] = items
|
||||
else:
|
||||
|
||||
@@ -818,6 +818,30 @@ class OrderChangeAddonsTest(BaseOrdersTest):
|
||||
with scopes_disabled():
|
||||
assert self.ticket_pos.addons.count() == 0
|
||||
|
||||
def test_quota_hide_sold_out_do_not_hide_initial(self):
|
||||
self.event.settings.hide_sold_out = True
|
||||
self.workshopquota.size = 1
|
||||
self.workshopquota.save()
|
||||
|
||||
with scopes_disabled():
|
||||
OrderPosition.objects.create(
|
||||
order=self.order,
|
||||
item=self.workshop1,
|
||||
variation=None,
|
||||
price=Decimal("12"),
|
||||
addon_to=self.ticket_pos,
|
||||
attendee_name_parts={'full_name': "Peter"}
|
||||
)
|
||||
self.order.total += Decimal("12")
|
||||
self.order.save()
|
||||
|
||||
response = self.client.get(
|
||||
'/%s/%s/order/%s/%s/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret)
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Workshop 1' in response.content.decode()
|
||||
assert 'Workshop 2' not in response.content.decode()
|
||||
|
||||
def test_quota_sold_out_replace(self):
|
||||
self.workshopquota.size = 1
|
||||
self.workshopquota.save()
|
||||
|
||||
Reference in New Issue
Block a user