[FIX] website_sale_loyalty: match correct coupon code on checkout
Versions: --------- - saas-16.3+ Steps to Reproduce: ------------------- 1. go to Sales / Products / Discount & Loyalty; 2. go to 10% Discount Coupons; 3. click on Generate Coupons; 4. generate for Selected Customers (yourself); 5. repeat to get a second coupon; 6. go to webshop and try to buy something; 7. at checkout, try to apply the first coupon. Issue: ------ Clicking the coupon's "Use" button doesn't seem to do anything. Cause: ------ The `claim_reward` method iterates over all potential coupons, always selecting the last, most recent one, only to reject it if the code doesn't match the coupon selected by the user. Solution: --------- Return as soon as a matching coupon is found. opw-3562615 X-original-commit: 17d3862b27a5d388f37566d77a1790ef1b319589 Part-of: odoo/odoo#143256
This commit is contained in:
@@ -85,22 +85,19 @@ class WebsiteSale(main.WebsiteSale):
|
||||
if not reward_sudo or reward_sudo.multi_product:
|
||||
return request.redirect(redirect)
|
||||
|
||||
program_sudo = reward_sudo.program_id
|
||||
claimable_rewards = order_sudo._get_claimable_and_showable_rewards()
|
||||
coupon = request.env['loyalty.card']
|
||||
for coupon_, rewards in claimable_rewards.items():
|
||||
if reward_sudo in rewards:
|
||||
coupon = coupon_
|
||||
|
||||
if not coupon:
|
||||
return request.redirect(redirect)
|
||||
program_sudo = reward_sudo.program_id
|
||||
if code == coupon.code and (
|
||||
program_sudo.trigger == 'with_code'
|
||||
or (program_sudo.trigger == 'auto' and program_sudo.applies_on == 'future')
|
||||
):
|
||||
return self.pricelist(code)
|
||||
|
||||
self._apply_reward(order_sudo, reward_sudo, coupon)
|
||||
if code == coupon.code and (
|
||||
program_sudo.trigger == 'with_code'
|
||||
or (program_sudo.trigger == 'auto' and program_sudo.applies_on == 'future')
|
||||
):
|
||||
return self.pricelist(code)
|
||||
if coupon:
|
||||
self._apply_reward(order_sudo, reward_sudo, coupon)
|
||||
return request.redirect(redirect)
|
||||
|
||||
def _apply_reward(self, order, reward, coupon):
|
||||
|
||||
Reference in New Issue
Block a user