From e5728662c514ff49cdebf574af800068c7fdd4c1 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 12 Sep 2017 18:50:13 +0200 Subject: [PATCH] Allow to extend expired order even if waiting list entries exist --- src/pretix/base/models/orders.py | 4 ++-- src/pretix/control/views/orders.py | 2 +- src/tests/control/test_orders.py | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index d9dd910fe..46d1787dc 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -333,7 +333,7 @@ class Order(LoggedModel): return self._is_still_available() - def _is_still_available(self, now_dt: datetime=None) -> Union[bool, str]: + def _is_still_available(self, now_dt: datetime=None, count_waitinglist=True) -> Union[bool, str]: error_messages = { 'unavailable': _('The ordered product "{item}" is no longer available.'), } @@ -351,7 +351,7 @@ class Order(LoggedModel): for quota in quotas: if quota.id not in quota_cache: quota_cache[quota.id] = quota - quota.cached_availability = quota.availability(now_dt)[1] + quota.cached_availability = quota.availability(now_dt, count_waitinglist=count_waitinglist)[1] else: # Use cached version quota = quota_cache[quota.id] diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index ffb9f1a75..e1021e28c 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -469,7 +469,7 @@ class OrderExtend(OrderView): else: try: with self.order.event.lock() as now_dt: - is_available = self.order._is_still_available(now_dt) + is_available = self.order._is_still_available(now_dt, count_waitinglist=False) if is_available is True: self.form.save() self.order.status = Order.STATUS_PENDING diff --git a/src/tests/control/test_orders.py b/src/tests/control/test_orders.py index 52bd89d58..843097622 100644 --- a/src/tests/control/test_orders.py +++ b/src/tests/control/test_orders.py @@ -360,6 +360,27 @@ def test_order_extend_overdue_quota_empty(client, env): assert o.expires.strftime("%Y-%m-%d %H:%M:%S") == newdate[:10] + " 23:59:59" +@pytest.mark.django_db +def test_order_extend_overdue_quota_blocked_by_waiting_list(client, env): + o = Order.objects.get(id=env[2].id) + o.status = Order.STATUS_EXPIRED + o.expires = now() - timedelta(days=5) + o.save() + q = Quota.objects.create(event=env[0], size=1) + q.items.add(env[3]) + env[0].waitinglistentries.create(item=env[3], email='foo@bar.com') + + newdate = (now() + timedelta(days=20)).strftime("%Y-%m-%d %H:%M:%S") + client.login(email='dummy@dummy.dummy', password='dummy') + response = client.post('/control/event/dummy/dummy/orders/FOO/extend', { + 'expires': newdate + }, follow=True) + assert 'alert-success' in response.rendered_content + o = Order.objects.get(id=env[2].id) + assert o.expires.strftime("%Y-%m-%d %H:%M:%S") == newdate[:10] + " 23:59:59" + assert o.status == Order.STATUS_PENDING + + @pytest.mark.django_db def test_order_extend_expired_quota_left(client, env): o = Order.objects.get(id=env[2].id)