| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from django import forms
- from django.db.models.loading import get_model
- from django.utils.translation import ugettext_lazy as _
-
- Voucher = get_model('voucher', 'Voucher')
- Benefit = get_model('offer', 'Benefit')
- Range = get_model('offer', 'Range')
-
-
- class VoucherForm(forms.Form):
- """
- A specialised form for creating a voucher and offer
- model.
- """
- name = forms.CharField(label=_("Name"))
- code = forms.CharField(label=_("Code"))
- start_date = forms.DateField(label=_("Start date"))
- end_date = forms.DateField(label=_("End date"))
- usage = forms.ChoiceField(choices=Voucher.USAGE_CHOICES, label=_("Usage"))
-
- benefit_range = forms.ModelChoiceField(
- label=_('Which products get a discount?'),
- queryset=Range.objects.all(),
- )
- type_choices = (
- (Benefit.PERCENTAGE, _('% off products in range')),
- (Benefit.FIXED, _('Fixed amount off products in range')),
- )
- benefit_type = forms.ChoiceField(
- choices=type_choices,
- label=_('Discount type'),
- )
- benefit_value = forms.DecimalField(
- label=_('Discount value'))
-
- def __init__(self, voucher=None, *args, **kwargs):
- self.voucher = voucher
- super(VoucherForm, self).__init__(*args, **kwargs)
-
- def clean_name(self):
- name = self.cleaned_data['name']
- try:
- voucher = Voucher.objects.get(name=name)
- except Voucher.DoesNotExist:
- pass
- else:
- if (not self.voucher) or (voucher.id != self.voucher.id):
- raise forms.ValidationError(_("The name '%s' is already in use") % name)
- return name
-
- def clean_code(self):
- code = self.cleaned_data['code'].strip().upper()
- if not code:
- raise forms.ValidationError(_("Please enter a voucher code"))
- try:
- voucher = Voucher.objects.get(code=code)
- except Voucher.DoesNotExist:
- pass
- else:
- if (not self.voucher) or (voucher.id != self.voucher.id):
- raise forms.ValidationError(_("The code '%s' is already in use") % code)
- return code
-
- def clean(self):
- cleaned_data = super(VoucherForm, self).clean()
- start_date = cleaned_data['start_date']
- end_date = cleaned_data['end_date']
- if end_date < start_date:
- raise forms.ValidationError(_("The start date must be before the end date"))
- return cleaned_data
-
-
- class VoucherSearchForm(forms.Form):
- name = forms.CharField(required=False, label=_("Name"))
- code = forms.CharField(required=False, label=_("Code"))
- is_active = forms.BooleanField(required=False, label=_("Is Active?"))
-
- def clean_code(self):
- return self.cleaned_data['code'].upper()
|