def clean(self): data = super().clean() if not self._errors: itemid = quotaid = None iv = self.data.get('itemvar', '') if iv.startswith('q-'): quotaid = iv[2:] elif '-' in iv: itemid, varid = iv.split('-') else: itemid, varid = iv, None if itemid: self.instance.item = Item.objects.get( pk=itemid, event=self.instance.event) if varid: self.instance.variation = ItemVariation.objects.get( pk=varid, item=self.instance.item) else: self.instance.variation = None self.instance.quota = None else: self.instance.quota = Quota.objects.get( pk=quotaid, event=self.instance.event) self.instance.item = None self.instance.variation = None if 'codes' in data: data['codes'] = [ a.strip() for a in data.get('codes', '').strip().split("\n") if a ] cnt = len(data['codes']) * data['max_usages'] else: cnt = data['max_usages'] Voucher.clean_item_properties(data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation) Voucher.clean_subevent(data, self.instance.event) Voucher.clean_max_usages(data, self.instance.redeemed) check_quota = Voucher.clean_quota_needs_checking( data, self.initial_instance_data, item_changed=data.get('itemvar') != self.initial.get('itemvar'), creating=not self.instance.pk) if check_quota: Voucher.clean_quota_check(data, cnt, self.initial_instance_data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation) Voucher.clean_voucher_code(data, self.instance.event, self.instance.pk) voucher_form_validation.send(sender=self.instance.event, form=self, data=data) return data
def clean(self): data = super().clean() if not self._errors: try: itemid = quotaid = None iv = self.data.get('itemvar', '') if iv.startswith('q-'): quotaid = iv[2:] elif '-' in iv: itemid, varid = iv.split('-') else: itemid, varid = iv, None if itemid: self.instance.item = self.instance.event.items.get(pk=itemid) if varid: self.instance.variation = self.instance.item.variations.get(pk=varid) else: self.instance.variation = None self.instance.quota = None else: self.instance.quota = self.instance.event.quotas.get(pk=quotaid) self.instance.item = None self.instance.variation = None except ObjectDoesNotExist: raise ValidationError(_("Invalid product selected.")) if 'codes' in data: data['codes'] = [a.strip() for a in data.get('codes', '').strip().split("\n") if a] cnt = len(data['codes']) * data.get('max_usages', 0) else: cnt = data['max_usages'] Voucher.clean_item_properties( data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation ) Voucher.clean_subevent( data, self.instance.event ) Voucher.clean_max_usages(data, self.instance.redeemed) check_quota = Voucher.clean_quota_needs_checking( data, self.initial_instance_data, item_changed=data.get('itemvar') != self.initial.get('itemvar'), creating=not self.instance.pk ) if check_quota: Voucher.clean_quota_check( data, cnt, self.initial_instance_data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation ) Voucher.clean_voucher_code(data, self.instance.event, self.instance.pk) voucher_form_validation.send(sender=self.instance.event, form=self, data=data) return data
def clean(self): data = super().clean() if not self._errors: try: itemid = quotaid = None iv = self.data.get('itemvar', '') if iv.startswith('q-'): quotaid = iv[2:] elif '-' in iv: itemid, varid = iv.split('-') else: itemid, varid = iv, None if itemid: self.instance.item = self.instance.event.items.get( pk=itemid) if varid: self.instance.variation = self.instance.item.variations.get( pk=varid) else: self.instance.variation = None self.instance.quota = None else: self.instance.quota = self.instance.event.quotas.get( pk=quotaid) self.instance.item = None self.instance.variation = None except ObjectDoesNotExist: raise ValidationError(_("Invalid product selected.")) if 'codes' in data: data['codes'] = [ a.strip() for a in data.get('codes', '').strip().split("\n") if a ] cnt = len(data['codes']) * data.get('max_usages', 0) else: cnt = data.get('max_usages', 0) Voucher.clean_item_properties(data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation) if not self.instance.show_hidden_items and ( (self.instance.quota and all(i.hide_without_voucher for i in self.instance.quota.items.all())) or (self.instance.item and self.instance.item.hide_without_voucher)): raise ValidationError({ 'show_hidden_items': [ _('The voucher only matches hidden products but you have not selected that it should show ' 'them.') ] }) Voucher.clean_subevent(data, self.instance.event) Voucher.clean_max_usages(data, self.instance.redeemed) check_quota = Voucher.clean_quota_needs_checking( data, self.initial_instance_data, item_changed=data.get('itemvar') != self.initial.get('itemvar'), creating=not self.instance.pk) if check_quota: Voucher.clean_quota_check(data, cnt, self.initial_instance_data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation) Voucher.clean_voucher_code(data, self.instance.event, self.instance.pk) voucher_form_validation.send(sender=self.instance.event, form=self, data=data) return data
def clean(self): data = super().clean() if not self._errors: itemid = quotaid = None iv = self.data.get('itemvar', '') if iv.startswith('q-'): quotaid = iv[2:] elif '-' in iv: itemid, varid = iv.split('-') else: itemid, varid = iv, None if itemid: self.instance.item = Item.objects.get( pk=itemid, event=self.instance.event) if varid: self.instance.variation = ItemVariation.objects.get( pk=varid, item=self.instance.item) else: self.instance.variation = None self.instance.quota = None if self.instance.item.category and self.instance.item.category.is_addon: raise ValidationError( _('It is currently not possible to create vouchers for add-on products.' )) else: self.instance.quota = Quota.objects.get( pk=quotaid, event=self.instance.event) self.instance.item = None self.instance.variation = None if data.get('max_usages', 0) < self.instance.redeemed: raise ValidationError(_( 'This voucher has already been redeemed %(redeemed)s times. You cannot reduce the maximum number of ' 'usages below this number.'), params={'redeemed': self.instance.redeemed}) if 'codes' in data: data['codes'] = [ a.strip() for a in data.get('codes', '').strip().split("\n") if a ] cnt = len(data['codes']) * data['max_usages'] else: cnt = data['max_usages'] if self.instance.event.has_subevents and data[ 'block_quota'] and not data.get('subevent'): raise ValidationError( pgettext_lazy( 'subevent', 'If you want this voucher to block quota, you need to select a specific date.' )) if self._clean_quota_needs_checking(data): self._clean_quota_check(data, cnt) if 'code' in data and Voucher.objects.filter( Q(code=data['code']) & Q(event=self.instance.event) & ~Q(pk=self.instance.pk)).exists(): raise ValidationError( _('A voucher with this code already exists.')) voucher_form_validation.send(sender=self.instance.event, form=self, data=data) return data
def clean(self): data = super().clean() if not self._errors: try: itemid = quotaid = None iv = self.data.get('itemvar', '') if iv.startswith('q-'): quotaid = iv[2:] elif '-' in iv: itemid, varid = iv.split('-') else: itemid, varid = iv, None if itemid: self.instance.item = self.instance.event.items.get(pk=itemid) if varid: self.instance.variation = self.instance.item.variations.get(pk=varid) else: self.instance.variation = None self.instance.quota = None else: self.instance.quota = self.instance.event.quotas.get(pk=quotaid) self.instance.item = None self.instance.variation = None except ObjectDoesNotExist: raise ValidationError(_("Invalid product selected.")) if 'codes' in data: data['codes'] = [a.strip() for a in data.get('codes', '').strip().split("\n") if a] cnt = len(data['codes']) * data.get('max_usages', 0) else: cnt = data.get('max_usages', 0) Voucher.clean_item_properties( data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation ) if self.instance.quota: if all(i.hide_without_voucher for i in self.instance.quota.items.all()): raise ValidationError({ 'itemvar': [ _('The quota you selected only contains hidden products. Hidden products can currently only be ' 'shown by using vouchers that directly apply to the product, not via a quota.') ] }) Voucher.clean_subevent( data, self.instance.event ) Voucher.clean_max_usages(data, self.instance.redeemed) check_quota = Voucher.clean_quota_needs_checking( data, self.initial_instance_data, item_changed=data.get('itemvar') != self.initial.get('itemvar'), creating=not self.instance.pk ) if check_quota: Voucher.clean_quota_check( data, cnt, self.initial_instance_data, self.instance.event, self.instance.quota, self.instance.item, self.instance.variation ) Voucher.clean_voucher_code(data, self.instance.event, self.instance.pk) voucher_form_validation.send(sender=self.instance.event, form=self, data=data) return data