diff --git a/addons/pos_loyalty/static/src/overrides/models/loyalty.js b/addons/pos_loyalty/static/src/overrides/models/loyalty.js index 8b68da7807d..d22dd0f1d3c 100644 --- a/addons/pos_loyalty/static/src/overrides/models/loyalty.js +++ b/addons/pos_loyalty/static/src/overrides/models/loyalty.js @@ -432,6 +432,7 @@ patch(Order.prototype, { args: { product: line.reward_product_id, }, + reward_identifier_code: line.reward_identifier_code, }; if ( claimedReward.reward.program_id.program_type === "gift_card" || @@ -440,7 +441,7 @@ patch(Order.prototype, { paymentRewards.push(claimedReward); } else if (claimedReward.reward.reward_type === "product") { productRewards.push(claimedReward); - } else { + } else if (!otherRewards.some(reward => reward.reward_identifier_code === claimedReward.reward_identifier_code)) { otherRewards.push(claimedReward); } this.orderlines.remove(line); diff --git a/addons/pos_loyalty/static/tests/tours/PosLoyaltyTour.js b/addons/pos_loyalty/static/tests/tours/PosLoyaltyTour.js index 54e2865fdbb..21e2cb5c38a 100644 --- a/addons/pos_loyalty/static/tests/tours/PosLoyaltyTour.js +++ b/addons/pos_loyalty/static/tests/tours/PosLoyaltyTour.js @@ -269,7 +269,6 @@ registry.category("web_tour.tours").add('PosLoyaltyTour8', { ].flat(), }); - registry .category("web_tour.tours") .add("PosLoyaltySpecificDiscountCategoryTour", { @@ -288,3 +287,24 @@ registry PosLoyalty.orderTotalIs('40.00'), ].flat(), }); + +registry.category("web_tour.tours").add('PosLoyaltyTour9', { + test: true, + url: '/pos/web', + steps: () => + [ + ProductScreen.clickHomeCategory(), + ProductScreen.confirmOpeningPopup(), + + ProductScreen.clickPartnerButton(), + ProductScreen.clickCustomer('AAA Partner'), + ProductScreen.clickDisplayedProduct('Product B'), + ProductScreen.clickDisplayedProduct('Product A'), + PosLoyalty.clickRewardButton(), + SelectionPopup.clickItem("$ 5"), + ProductScreen.totalAmountIs('205.00'), + PosLoyalty.clickRewardButton(), + SelectionPopup.clickItem("$ 5"), + ProductScreen.totalAmountIs('200.00'), + ].flat(), +}); diff --git a/addons/pos_loyalty/tests/test_frontend.py b/addons/pos_loyalty/tests/test_frontend.py index c2d01abc2c8..2b920a81924 100644 --- a/addons/pos_loyalty/tests/test_frontend.py +++ b/addons/pos_loyalty/tests/test_frontend.py @@ -1380,3 +1380,51 @@ class TestUi(TestPointOfSaleHttpCommon): "PosLoyaltySpecificDiscountCategoryTour", login="pos_user", ) + + def test_promo_with_different_taxes(self): + self.env['loyalty.program'].search([]).write({'active': False}) + self.tax01 = self.env["account.tax"].create({ + "name": "C01 Tax", + "amount": "10.00", + }) + self.product_a = self.env["product.product"].create( + { + "name": "Product A", + "type": "product", + "list_price": 100, + "available_in_pos": True, + "taxes_id": [(6, 0, self.tax01.ids)], + } + ) + self.product_b = self.env["product.product"].create( + { + "name": "Product B", + "type": "product", + "list_price": 100, + "available_in_pos": True, + "taxes_id": False, + } + ) + self.free_product = self.env['loyalty.program'].create({ + 'name': 'Free Product A', + 'program_type': 'loyalty', + 'trigger': 'auto', + 'applies_on': 'both', + 'rule_ids': [(0, 0, { + 'reward_point_mode': 'money', + 'reward_point_amount': 1, + })], + 'reward_ids': [(0, 0, { + 'reward_type': 'discount', + 'required_points': 5, + 'discount_mode': 'per_order', + 'discount': 5, + })], + }) + self.env['res.partner'].create({'name': 'AAA Partner'}) + self.main_pos_config.open_ui() + self.start_tour( + "/pos/web?config_id=%d" % self.main_pos_config.id, + "PosLoyaltyTour9", + login="pos_user", + )