diff --git a/src/pretix/base/models/vouchers.py b/src/pretix/base/models/vouchers.py
index 503ef5ce34..b1726a8414 100644
--- a/src/pretix/base/models/vouchers.py
+++ b/src/pretix/base/models/vouchers.py
@@ -19,7 +19,8 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# .
#
-
+import datetime
+from dataclasses import dataclass
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
# the Apache License 2.0 can be obtained at .
#
@@ -34,6 +35,7 @@
# License for the specific language governing permissions and limitations under the License.
from decimal import ROUND_HALF_UP, Decimal
+from typing import Union
from django.conf import settings
from django.core.exceptions import ValidationError
@@ -441,7 +443,7 @@ class Voucher(LoggedModel):
return set()
@staticmethod
- def clean_quota_get_ignored(voucher_data):
+ def clean_quota_get_ignored(voucher_data: Union["VoucherBulkData", "Voucher"]):
if voucher_data:
valid = voucher_data.valid_until is None or voucher_data.valid_until >= now()
if valid and voucher_data.block_quota and voucher_data.max_usages > voucher_data.redeemed:
@@ -636,3 +638,16 @@ class Voucher(LoggedModel):
]
).aggregate(s=Sum('voucher_budget_use'))['s'] or Decimal('0.00')
return ops
+
+
+@dataclass
+class VoucherBulkData:
+ item: object
+ variation: object
+ quota: object
+ block_quota: bool
+ valid_until: datetime.datetime
+ subevent: object
+ redeemed: int
+ max_usages: int
+ allow_ignore_quota: bool
diff --git a/src/pretix/control/forms/vouchers.py b/src/pretix/control/forms/vouchers.py
index 1a5bc00692..1ede0cccb4 100644
--- a/src/pretix/control/forms/vouchers.py
+++ b/src/pretix/control/forms/vouchers.py
@@ -34,9 +34,7 @@
import copy
import csv
-import datetime
from collections import Counter, namedtuple
-from dataclasses import dataclass
from io import StringIO
from django import forms
@@ -57,6 +55,7 @@ from pretix.base.forms import (
from pretix.base.forms.widgets import format_placeholders_help_text
from pretix.base.i18n import language
from pretix.base.models import Item, ItemVariation, Quota, SubEvent, Voucher
+from pretix.base.models.vouchers import VoucherBulkData
from pretix.base.services.locking import lock_objects
from pretix.base.services.quotas import QuotaAvailability
from pretix.control.forms import SplitDateTimeField, SplitDateTimePickerWidget
@@ -281,19 +280,6 @@ class VoucherForm(I18nModelForm):
return super().save(commit)
-@dataclass
-class VoucherBulkData:
- item: object
- variation: object
- quota: object
- block_quota: bool
- valid_until: datetime.datetime
- subevent: object
- redeemed: int
- max_usages: int
- allow_ignore_quota: bool
-
-
class VoucherBulkEditForm(VoucherForm):
def __init__(self, *args, **kwargs):
self.mixed_values = kwargs.pop('mixed_values')