Example #1
0
    def validate(self, data):
        data = super().validate(data)

        full_data = self.to_internal_value(
            self.to_representation(self.instance)) if self.instance else {}
        full_data.update(data)

        Voucher.clean_item_properties(full_data, self.context.get('event'),
                                      full_data.get('quota'),
                                      full_data.get('item'),
                                      full_data.get('variation'))
        Voucher.clean_subevent(full_data, self.context.get('event'))
        Voucher.clean_max_usages(
            full_data, self.instance.redeemed if self.instance else 0)
        check_quota = Voucher.clean_quota_needs_checking(
            full_data,
            self.instance,
            item_changed=self.instance
            and (full_data.get('item') != self.instance.item
                 or full_data.get('variation') != self.instance.variation
                 or full_data.get('quota') != self.instance.quota),
            creating=not self.instance)
        if check_quota:
            Voucher.clean_quota_check(full_data, 1, self.instance,
                                      self.context.get('event'),
                                      full_data.get('quota'),
                                      full_data.get('item'),
                                      full_data.get('variation'))
        Voucher.clean_voucher_code(full_data, self.context.get('event'),
                                   self.instance.pk if self.instance else None)

        return data
Example #2
0
    def validate(self, data):
        data = super().validate(data)

        full_data = self.to_internal_value(self.to_representation(self.instance)) if self.instance else {}
        full_data.update(data)

        Voucher.clean_item_properties(
            full_data, self.context.get('event'),
            full_data.get('quota'), full_data.get('item'), full_data.get('variation')
        )
        Voucher.clean_subevent(
            full_data, self.context.get('event')
        )
        Voucher.clean_max_usages(full_data, self.instance.redeemed if self.instance else 0)
        check_quota = Voucher.clean_quota_needs_checking(
            full_data, self.instance,
            item_changed=self.instance and (
                full_data.get('item') != self.instance.item or
                full_data.get('variation') != self.instance.variation or
                full_data.get('quota') != self.instance.quota
            ),
            creating=not self.instance
        )
        if check_quota:
            Voucher.clean_quota_check(
                full_data, 1, self.instance, self.context.get('event'),
                full_data.get('quota'), full_data.get('item'), full_data.get('variation')
            )
        Voucher.clean_voucher_code(full_data, self.context.get('event'), self.instance.pk if self.instance else None)

        return data
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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