forked from CGM_Public/pretix_original
Allow to extend expired order even if waiting list entries exist
This commit is contained in:
@@ -333,7 +333,7 @@ class Order(LoggedModel):
|
|||||||
|
|
||||||
return self._is_still_available()
|
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 = {
|
error_messages = {
|
||||||
'unavailable': _('The ordered product "{item}" is no longer available.'),
|
'unavailable': _('The ordered product "{item}" is no longer available.'),
|
||||||
}
|
}
|
||||||
@@ -351,7 +351,7 @@ class Order(LoggedModel):
|
|||||||
for quota in quotas:
|
for quota in quotas:
|
||||||
if quota.id not in quota_cache:
|
if quota.id not in quota_cache:
|
||||||
quota_cache[quota.id] = quota
|
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:
|
else:
|
||||||
# Use cached version
|
# Use cached version
|
||||||
quota = quota_cache[quota.id]
|
quota = quota_cache[quota.id]
|
||||||
|
|||||||
@@ -469,7 +469,7 @@ class OrderExtend(OrderView):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
with self.order.event.lock() as now_dt:
|
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:
|
if is_available is True:
|
||||||
self.form.save()
|
self.form.save()
|
||||||
self.order.status = Order.STATUS_PENDING
|
self.order.status = Order.STATUS_PENDING
|
||||||
|
|||||||
@@ -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"
|
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
|
@pytest.mark.django_db
|
||||||
def test_order_extend_expired_quota_left(client, env):
|
def test_order_extend_expired_quota_left(client, env):
|
||||||
o = Order.objects.get(id=env[2].id)
|
o = Order.objects.get(id=env[2].id)
|
||||||
|
|||||||
Reference in New Issue
Block a user