Voucher form: Fix quota check for partially redeemed vouchers

This commit is contained in:
Raphael Michel
2023-11-29 16:08:50 +01:00
parent b92feb382b
commit 82704b60c7
2 changed files with 15 additions and 0 deletions

View File

@@ -201,6 +201,8 @@ class VoucherForm(I18nModelForm):
cnt = len(data['codes']) * data.get('max_usages', 0)
else:
cnt = data.get('max_usages', 0)
if self.instance and self.instance.pk:
cnt -= self.instance.redeemed # these do not need quota any more
Voucher.clean_item_properties(
data, self.instance.event,

View File

@@ -365,6 +365,19 @@ class VoucherFormTest(SoupTestMixin, TransactionTestCase):
v.refresh_from_db()
assert v.valid_until < now()
def test_change_voucher_validity_to_valid_quota_full_already_redeemed(self):
self.quota_tickets.size = 1
self.quota_tickets.save()
with scopes_disabled():
v = self.event.vouchers.create(item=self.ticket, valid_until=now() - datetime.timedelta(days=3),
block_quota=True, redeemed=1, max_usages=2)
self._change_voucher(v, {
'valid_until_0': (now() + datetime.timedelta(days=3)).strftime('%Y-%m-%d'),
'valid_until_1': (now() + datetime.timedelta(days=3)).strftime('%H:%M:%S')
})
v.refresh_from_db()
assert v.valid_until > now()
def test_change_voucher_validity_to_valid_quota_free(self):
with scopes_disabled():
v = self.event.vouchers.create(item=self.ticket, valid_until=now() - datetime.timedelta(days=3),