forked from CGM_Public/pretix_original
Generate invoice after expired order is extended
This commit is contained in:
@@ -91,34 +91,32 @@ def extend_order(order: Order, new_date: datetime, force: bool=False, user: User
|
|||||||
"""
|
"""
|
||||||
if new_date < now():
|
if new_date < now():
|
||||||
raise OrderError(_('The new expiry date needs to be in the future.'))
|
raise OrderError(_('The new expiry date needs to be in the future.'))
|
||||||
if order.status == Order.STATUS_PENDING:
|
|
||||||
|
def change(was_expired=True):
|
||||||
order.expires = new_date
|
order.expires = new_date
|
||||||
order.save(update_fields=['expires'])
|
if was_expired:
|
||||||
|
order.status = Order.STATUS_PENDING
|
||||||
|
order.save(update_fields=['expires'] + (['status'] if was_expired else []))
|
||||||
order.log_action(
|
order.log_action(
|
||||||
'pretix.event.order.expirychanged',
|
'pretix.event.order.expirychanged',
|
||||||
user=user,
|
user=user,
|
||||||
auth=auth,
|
auth=auth,
|
||||||
data={
|
data={
|
||||||
'expires': order.expires,
|
'expires': order.expires,
|
||||||
'state_change': False
|
'state_change': was_expired
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
if was_expired:
|
||||||
|
if order.invoices.filter(is_cancellation=True).count() >= order.invoices.filter(is_cancellation=False).count():
|
||||||
|
generate_invoice(order)
|
||||||
|
|
||||||
|
if order.status == Order.STATUS_PENDING:
|
||||||
|
change(was_expired=False)
|
||||||
else:
|
else:
|
||||||
with order.event.lock() as now_dt:
|
with order.event.lock() as now_dt:
|
||||||
is_available = order._is_still_available(now_dt, count_waitinglist=False)
|
is_available = order._is_still_available(now_dt, count_waitinglist=False)
|
||||||
if is_available is True or force is True:
|
if is_available is True or force is True:
|
||||||
order.expires = new_date
|
change(was_expired=True)
|
||||||
order.status = Order.STATUS_PENDING
|
|
||||||
order.save(update_fields=['expires', 'status'])
|
|
||||||
order.log_action(
|
|
||||||
'pretix.event.order.expirychanged',
|
|
||||||
user=user,
|
|
||||||
auth=auth,
|
|
||||||
data={
|
|
||||||
'expires': order.expires,
|
|
||||||
'state_change': True
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
raise OrderError(is_available)
|
raise OrderError(is_available)
|
||||||
|
|
||||||
|
|||||||
@@ -468,10 +468,12 @@ def test_order_extend_expired_quota_left(client, env):
|
|||||||
o.expires = now() - timedelta(days=5)
|
o.expires = now() - timedelta(days=5)
|
||||||
o.status = Order.STATUS_EXPIRED
|
o.status = Order.STATUS_EXPIRED
|
||||||
o.save()
|
o.save()
|
||||||
|
generate_cancellation(generate_invoice(o))
|
||||||
q = Quota.objects.create(event=env[0], size=3)
|
q = Quota.objects.create(event=env[0], size=3)
|
||||||
q.items.add(env[3])
|
q.items.add(env[3])
|
||||||
newdate = (now() + timedelta(days=20)).strftime("%Y-%m-%d %H:%M:%S")
|
newdate = (now() + timedelta(days=20)).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||||
|
assert o.invoices.count() == 2
|
||||||
response = client.post('/control/event/dummy/dummy/orders/FOO/extend', {
|
response = client.post('/control/event/dummy/dummy/orders/FOO/extend', {
|
||||||
'expires': newdate
|
'expires': newdate
|
||||||
}, follow=True)
|
}, follow=True)
|
||||||
@@ -479,6 +481,7 @@ 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)
|
||||||
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"
|
||||||
assert o.status == Order.STATUS_PENDING
|
assert o.status == Order.STATUS_PENDING
|
||||||
|
assert o.invoices.count() == 3
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|||||||
Reference in New Issue
Block a user