diff --git a/src/pretix/control/forms/vouchers.py b/src/pretix/control/forms/vouchers.py index 4fbccea21..1d7d405cc 100644 --- a/src/pretix/control/forms/vouchers.py +++ b/src/pretix/control/forms/vouchers.py @@ -71,7 +71,7 @@ class VoucherForm(I18nModelForm): self.instance.item = None self.instance.variation = None - if not self.instance.pk and Voucher.objects.filter(code=data['code'], event=self.instance.event).exists(): + if 'code' in data and not self.instance.pk and Voucher.objects.filter(code=data['code'], event=self.instance.event).exists(): raise ValidationError(_('A voucher with this code already exists.')) return data @@ -80,3 +80,29 @@ class VoucherForm(I18nModelForm): super().save(commit) return ['item'] + + +class VoucherBulkForm(VoucherForm): + codes = forms.CharField( + widget=forms.Textarea, + label=_("Codes"), + help_text=_( + "Add one voucher code per line" + ) + ) + + class Meta: + model = Voucher + localized_fields = '__all__' + fields = [ + 'valid_until', 'block_quota', 'allow_ignore_quota', 'price', 'tag', 'comment' + ] + + def clean(self): + data = super().clean() + data['codes'] = [a.strip() for a in data['codes'].strip().split("\n")] + + if Voucher.objects.filter(code__in=data['codes'], event=self.instance.event).exists(): + raise ValidationError(_('A voucher with one of this codes already exists.')) + + return data diff --git a/src/pretix/control/templates/pretixcontrol/vouchers/bulk.html b/src/pretix/control/templates/pretixcontrol/vouchers/bulk.html new file mode 100644 index 000000000..81274e393 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/vouchers/bulk.html @@ -0,0 +1,43 @@ +{% extends "pretixcontrol/items/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "Voucher" %}{% endblock %} +{% block inside %} +
{% trans "Create a new voucher" %} + + {% trans "Create multiple new vouchers" %}