[FIX] website_sale_loyalty: Stop getting succes message after applying invalid coupon
Current Behaviour: In E-commerce, when you apply a ``LoyaltyCard`` which is not applicable on the ``SaleOrder``, in a specific case it displays a success message even if the coupon is not applied. Expected behaviour Don't display a success message when the coupon is not applicable Steps: - Create a program with 'coupon' type, a rule of 'minimum 1' and a reward on a specific product A. - Generate a coupon - Go to shop add product A to the cart, go to checkout and apply the coupon code(Everything goes well). - Delete the coupon and the product, and add a product B. - Go to checkout and try to apply the same coupon code. Issue: Wrong success message Reason: The wrong message is displayed beacause on the python side we just check if there is 'error' in the ``Request.session`` but in this case there is also 'error_promo_code' that should be considered. opw-3355632 closes odoo/odoo#129663 X-original-commit: 6ee60a30e0798ce69152385b08e49b223782d785 Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com> Signed-off-by: Eteil Junior Djoumatchoua (etdj) <etdj@odoo.com>
This commit is contained in:
@@ -15,17 +15,19 @@ class WebsiteSale(main.WebsiteSale):
|
||||
def pricelist(self, promo, **post):
|
||||
order = request.website.sale_get_order()
|
||||
coupon_status = order._try_apply_code(promo)
|
||||
if 'error' not in coupon_status:
|
||||
if len(coupon_status) == 1:
|
||||
coupon, rewards = next(iter(coupon_status.items()))
|
||||
if len(rewards) == 1 and not rewards.multi_product:
|
||||
self._apply_reward(order, rewards, coupon)
|
||||
if coupon_status.get('not_found'):
|
||||
return super(WebsiteSale, self).pricelist(promo, **post)
|
||||
elif coupon_status.get('error'):
|
||||
request.session['error_promo_code'] = coupon_status['error']
|
||||
if 'error' not in coupon_status:
|
||||
request.session['successful_code'] = promo
|
||||
elif 'error' not in coupon_status:
|
||||
reward_successfully_applied = True
|
||||
if len(coupon_status) == 1:
|
||||
coupon, rewards = next(iter(coupon_status.items()))
|
||||
if len(rewards) == 1 and not rewards.multi_product:
|
||||
reward_successfully_applied = self._apply_reward(order, rewards, coupon)
|
||||
|
||||
if reward_successfully_applied:
|
||||
request.session['successful_code'] = promo
|
||||
return request.redirect(post.get('r', '/shop/cart'))
|
||||
|
||||
@http.route()
|
||||
@@ -102,10 +104,20 @@ class WebsiteSale(main.WebsiteSale):
|
||||
return request.redirect(redirect)
|
||||
|
||||
def _apply_reward(self, order, reward, coupon):
|
||||
"""Try to apply the given program reward
|
||||
|
||||
:returns: whether the reward was successfully applied
|
||||
:rtype: bool
|
||||
"""
|
||||
try:
|
||||
order._apply_program_reward(reward, coupon)
|
||||
reward_status = order._apply_program_reward(reward, coupon)
|
||||
except UserError as e:
|
||||
request.session['error_promo_code'] = str(e)
|
||||
return False
|
||||
if 'error' in reward_status:
|
||||
request.session['error_promo_code'] = reward_status['error']
|
||||
return False
|
||||
return True
|
||||
|
||||
@http.route()
|
||||
def cart_update_json(self, *args, set_qty=None, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user