Exemplo n.º 1
0
    def apply_voucher_to_basket(self, voucher):
        """
        Validates and applies voucher on basket.
        """
        self.request.basket.clear_vouchers()
        username = self.request.user and self.request.user.username
        is_valid, message = validate_voucher(voucher, self.request.user,
                                             self.request.basket,
                                             self.request.site)
        if not is_valid:
            logger.warning(
                '[Code Redemption Failure] The voucher is not valid for this basket. '
                'User: %s, Basket: %s, Code: %s, Message: %s', username,
                self.request.basket.id, voucher.code, message)
            messages.error(self.request, message)
            self.request.basket.vouchers.remove(voucher)
            return

        valid, msg = apply_voucher_on_basket_and_check_discount(
            voucher, self.request, self.request.basket)

        if not valid:
            logger.warning(
                '[Code Redemption Failure] The voucher could not be applied to this basket. '
                'User: %s, Basket: %s, Code: %s, Message: %s', username,
                self.request.basket.id, voucher.code, msg)
            messages.warning(self.request, msg)
            self.request.basket.vouchers.remove(voucher)
        else:
            messages.info(self.request, msg)
Exemplo n.º 2
0
 def _apply_voucher(self, voucher):
     username = self.request.user and self.request.user.username
     valid, message = apply_voucher_on_basket_and_check_discount(voucher, self.request, self.request.basket)
     if not valid:
         logger.warning('[Code Redemption Failure] The voucher could not be applied to this basket. '
                        'User: %s, Basket: %s, Code: %s, Message: %s',
                        username, self.request.basket.id, voucher.code, message)
         messages.warning(self.request, message)
         self.request.basket.vouchers.remove(voucher)
     else:
         messages.info(self.request, message)
Exemplo n.º 3
0
 def test_apply_voucher_on_basket_and_check_discount_with_valid_voucher(self):
     """
     Tests apply_voucher_on_basket_and_check_discount when called with valid voucher
     applies voucher and returns the correct values.
     """
     basket = BasketFactory(owner=self.request.user, site=self.request.site)
     voucher, product = prepare_voucher()
     basket.add_product(product, 1)
     applied, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, basket)
     self.assertEqual(applied, True)
     self.assertIsNotNone(basket.applied_offers())
     self.assertEqual(msg, "Coupon code '{code}' added to basket.".format(code=voucher.code))
Exemplo n.º 4
0
 def test_apply_voucher_on_basket_and_check_discount_with_invalid_product(self):
     """
     Tests apply_voucher_on_basket_and_check_discount when called with invalid product
     does not apply voucher and returns the correct values.
     """
     basket = BasketFactory(owner=self.request.user, site=self.request.site)
     product = ProductFactory(stockrecords__partner__short_code='test1', stockrecords__price_excl_tax=0)
     voucher, __ = prepare_voucher(_range=RangeFactory(products=[product]))
     basket.add_product(product, 1)
     applied, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, basket)
     self.assertEqual(applied, False)
     self.assertEqual(basket.applied_offers(), {})
     self.assertEqual(msg, 'Basket does not qualify for coupon code {code}.'.format(code=voucher.code))
Exemplo n.º 5
0
 def test_apply_voucher_on_basket_and_check_discount_with_multiple_vouchers(self):
     """
     Tests apply_voucher_on_basket_and_check_discount when called with a basket already
     containing a valid voucher it only checks the new voucher.
     """
     basket = BasketFactory(owner=self.request.user, site=self.request.site)
     product = ProductFactory(stockrecords__partner__short_code='test1', stockrecords__price_excl_tax=10)
     invalid_voucher, __ = prepare_voucher(code='TEST1')
     valid_voucher, __ = prepare_voucher(code='TEST2', _range=RangeFactory(products=[product]))
     basket.add_product(product, 1)
     basket.vouchers.add(valid_voucher)
     applied, msg = apply_voucher_on_basket_and_check_discount(invalid_voucher, self.request, basket)
     self.assertEqual(applied, False)
     self.assertEqual(msg, 'Basket does not qualify for coupon code {code}.'.format(code=invalid_voucher.code))
Exemplo n.º 6
0
    def apply_voucher_to_basket(self, voucher):
        """
        Validates and applies voucher on basket.

        Returns:
            message (dict): Dict containing `user_message` and `message_type` (e.g. 'error', 'warning', or 'info')
        """
        self.request.basket.clear_vouchers()
        username = self.request.user and self.request.user.username
        is_valid, message = validate_voucher(voucher, self.request.user,
                                             self.request.basket,
                                             self.request.site)
        if not is_valid:
            logger.warning(
                '[Code Redemption Failure] The voucher is not valid for this basket. '
                'User: %s, Basket: %s, Code: %s, Message: %s', username,
                self.request.basket.id, voucher.code, message)
            message_response = {
                'message_type': 'error',
                'user_message': message,
            }
            self.request.basket.vouchers.remove(voucher)
            return message_response

        valid, message = apply_voucher_on_basket_and_check_discount(
            voucher, self.request, self.request.basket)

        if not valid:
            logger.warning(
                '[Code Redemption Failure] The voucher could not be applied to this basket. '
                'User: %s, Basket: %s, Code: %s, Message: %s', username,
                self.request.basket.id, voucher.code, message)
            message_response = {
                'message_type': 'warning',
                'user_message': message,
            }
            self.request.basket.vouchers.remove(voucher)
        else:
            message_response = {
                'message_type': 'info',
                'user_message': message,
            }
        return message_response
Exemplo n.º 7
0
    def apply_voucher_to_basket(self, voucher):
        """
        Validates and applies voucher on basket.
        """
        self.request.basket.clear_vouchers()

        is_valid, message = validate_voucher(voucher, self.request.user, self.request.basket, self.request.site)
        if not is_valid:
            messages.error(self.request, message)
            self.request.basket.vouchers.remove(voucher)
            return

        valid, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, self.request.basket)

        if not valid:
            messages.warning(self.request, msg)
            self.request.basket.vouchers.remove(voucher)
        else:
            messages.info(self.request, msg)