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')