Allow to extend expired order even if waiting list entries exist

This commit is contained in:
Raphael Michel
2017-09-12 18:50:13 +02:00
parent 94a97fb0fd
commit e5728662c5
3 changed files with 24 additions and 3 deletions

View File

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

View File

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

View File

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