From 58e706b721190be4741e890b2c2fe513f51e1f65 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 4 Aug 2016 18:00:28 +0200 Subject: [PATCH] Fixed bug in quota calculation (thanks @rixx!) --- src/pretix/base/models/items.py | 1 + src/tests/base/test_models.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 09ee726f19..fb750b2e24 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -527,6 +527,7 @@ class Quota(LoggedModel): return Voucher.objects.filter( Q(block_quota=True) & Q(redeemed=False) & + Q(Q(valid_until__isnull=True) | Q(valid_until__gte=now())) & Q(Q(self._position_lookup) | Q(quota=self)) ).distinct().count() diff --git a/src/tests/base/test_models.py b/src/tests/base/test_models.py index 8923361f61..557d2a0664 100644 --- a/src/tests/base/test_models.py +++ b/src/tests/base/test_models.py @@ -214,6 +214,22 @@ class QuotaTestCase(BaseQuotaTestCase): v.save() self.assertEqual(self.var1.check_quotas(), (Quota.AVAILABILITY_ORDERED, 0)) + def test_voucher_quota_expiring_soon(self): + self.quota.variations.add(self.var1) + self.quota.size = 1 + self.quota.save() + Voucher.objects.create(quota=self.quota, event=self.event, valid_until=now() + timedelta(days=5), + block_quota=True) + self.assertEqual(self.var1.check_quotas(), (Quota.AVAILABILITY_ORDERED, 0)) + + def test_voucher_quota_expired(self): + self.quota.variations.add(self.var1) + self.quota.size = 1 + self.quota.save() + Voucher.objects.create(quota=self.quota, event=self.event, valid_until=now() - timedelta(days=5), + block_quota=True) + self.assertEqual(self.var1.check_quotas(), (Quota.AVAILABILITY_OK, 1)) + class OrderTestCase(BaseQuotaTestCase): def setUp(self):