Fix booked add-ons being hidden in order change due to hide_sold_out

This commit is contained in:
Raphael Michel
2022-01-05 17:58:21 +01:00
parent 30c1771d29
commit 223b160c0c
3 changed files with 31 additions and 3 deletions

View File

@@ -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]

View File

@@ -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:

View File

@@ -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()