Source code for shuup.campaigns.admin_module.forms._coupon

from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

from shuup.admin.shop_provider import get_shop
from shuup.admin.supplier_provider import get_supplier
from shuup.campaigns.models.campaigns import Coupon


[docs] class CouponForm(forms.ModelForm): autogenerate = forms.BooleanField(label=_("Autogenerate code"), required=False)
[docs] class Meta: model = Coupon fields = [ "code", "usage_limit_customer", "usage_limit", "active", "shop", "supplier", ]
[docs] def __init__(self, *args, **kwargs): self.request = kwargs.pop("request") super().__init__(*args, **kwargs) if self.instance.pk and self.instance.has_been_used(): self.fields["code"].readonly = True if self.request.GET.get("mode") == "iframe": self.fields["active"].disabled = True self.fields["active"].widget.disabled = True if not self.request.user.is_superuser: self.fields["shop"].widget = forms.HiddenInput() self.fields["shop"].required = False if get_supplier(self.request): self.fields["supplier"].widget = forms.HiddenInput() self.fields["supplier"].required = False
[docs] def clean_code(self): code = self.cleaned_data["code"] qs = Coupon.objects.filter(code=code) if self.instance.pk: qs = qs.exclude(pk=self.instance.pk) if qs.exists(): raise ValidationError(_("Discount Code is already in use.")) return code
[docs] def clean_shop(self): return self.cleaned_data.get("shop") or get_shop(self.request)
[docs] def clean_supplier(self): return self.cleaned_data.get("supplier") or get_supplier(self.request)