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)
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()
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
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)
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))