registrasion/controllers/cart.py
def validate_cart(self):
        ''' Determines whether the status of the current cart is valid;
        this is normally called before generating or paying an invoice '''

        cart = self.cart
        user = self.cart.user
        errors = []

        try:
            self._test_vouchers(self.cart.vouchers.all())
        except ValidationError as ve:
            errors.append(ve)

        items = commerce.ProductItem.objects.filter(cart=cart)
        items = items.select_related("product", "product__category")

        product_quantities = list((i.product, i.quantity) for i in items)
        try:
            self._test_limits(product_quantities)
        except ValidationError as ve:
            self._append_errors(errors, ve)

        try:
            self._test_required_categories()
        except ValidationError as ve:
            self._append_errors(errors, ve)

        # Validate the discounts
        # TODO: refactor in terms of available_discounts
        # why aren't we doing that here?!

        #     def available_discounts(cls, user, categories, products):

        products = [i.product for i in items]
        discounts_with_quantity = DiscountController.available_discounts(
            user,
            [],
            products,
        )
        discounts = set(i.discount.id for i in discounts_with_quantity)

        discount_items = commerce.DiscountItem.objects.filter(cart=cart)
        for discount_item in discount_items:
            discount = discount_item.discount

            if discount.id not in discounts:
                errors.append(
                    ValidationError("Discounts are no longer available")
                )

        if errors:
            raise ValidationError(errors)
def validate_cart(self):
        ''' Determines whether the status of the current cart is valid;
        this is normally called before generating or paying an invoice '''

        cart = self.cart
        user = self.cart.user
        errors = []

        try:
            self._test_vouchers(self.cart.vouchers.all())
        except ValidationError as ve:
            errors.append(ve)

        items = commerce.ProductItem.objects.filter(cart=cart)
        items = items.select_related("product", "product__category")

        product_quantities = list((i.product, i.quantity) for i in items)
        try:
            self._test_limits(product_quantities)
        except ValidationError as ve:
            self._append_errors(errors, ve)

        try:
            self._test_required_categories()
        except ValidationError as ve:
            self._append_errors(errors, ve)

        # Validate the discounts
        # TODO: refactor in terms of available_discounts
        # why aren't we doing that here?!

        #     def available_discounts(cls, user, categories, products):

        products = [i.product for i in items]
        discounts_with_quantity = DiscountController.available_discounts(
            user,
            [],
            products,
        )
        discounts = set(i.discount.id for i in discounts_with_quantity)

        discount_items = commerce.DiscountItem.objects.filter(cart=cart)
        for discount_item in discount_items:
            discount = discount_item.discount

            if discount.id not in discounts:
                errors.append(
                    ValidationError("Discounts are no longer available")
                )

        if errors:
            raise ValidationError(errors)
def validate_cart ( self ) : cart = self . cart user = self . cart . user errors = [ ] try : self . _test_vouchers ( self . cart . vouchers . all ( ) ) except ValidationError as ve : errors . append ( ve ) items = commerce . ProductItem . objects . filter ( cart = cart ) items = items . select_related ( "product" , "product__category" ) product_quantities = list ( ( i . product , i . quantity ) for i in items ) try : self . _test_limits ( product_quantities ) except ValidationError as ve : self . _append_errors ( errors , ve ) try : self . _test_required_categories ( ) except ValidationError as ve : self . _append_errors ( errors , ve ) # Validate the discounts # TODO: refactor in terms of available_discounts # why aren't we doing that here?! #     def available_discounts(cls, user, categories, products): products = [ i . product for i in items ] discounts_with_quantity = DiscountController . available_discounts ( user , [ ] , products , ) discounts = set ( i . discount . id for i in discounts_with_quantity ) discount_items = commerce . DiscountItem . objects . filter ( cart = cart ) for discount_item in discount_items : discount = discount_item . discount if discount . id not in discounts : errors . append ( ValidationError ( "Discounts are no longer available" ) ) if errors : raise ValidationError ( errors )
Determines whether the status of the current cart is valid;
        this is normally called before generating or paying an invoice
Determines whether the status of the current cart is valid ; this is normally called before generating or paying an invoice