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 _validate_voucher(self, voucher):
     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)
         raise VoucherException()
Exemplo n.º 3
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.º 4
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)
Exemplo n.º 5
0
    def apply_voucher_to_basket(self, voucher):
        code = voucher.code

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

        # Reset any site offers that are applied so that only one offer is active.
        self.request.basket.reset_offer_applications()
        self.request.basket.vouchers.add(voucher)

        # Raise signal
        self.add_signal.send(sender=self,
                             basket=self.request.basket,
                             voucher=voucher)

        # Recalculate discounts to see if the voucher gives any
        Applicator().apply(self.request.basket, self.request.user,
                           self.request)
        discounts_after = self.request.basket.offer_applications

        # Look for discounts from this new voucher
        found_discount = False
        for discount in discounts_after:
            if discount['voucher'] and discount['voucher'] == voucher:
                found_discount = True
                break
        if not found_discount:
            messages.warning(
                self.request,
                _('Your basket does not qualify for a coupon code discount.'))
            self.request.basket.vouchers.remove(voucher)
        else:
            messages.info(
                self.request,
                _("Coupon code '{code}' added to basket.").format(code=code))