Sunday, May 19, 2024
1 change · 17.0
Resolved issues and error corrections
This fix corrects a bug in the POS loyalty program where loyalty points were being incorrectly calculated when applying discounts. Previously, discount lines were being counted as products, causing customers to earn extra loyalty points they shouldn't receive. Now, loyalty points are only granted for actual products purchased, not for discount rewards applied to the order.
Original PR description
### Steps to reproduce: - Install **POS** app. - Go to **POS** > **Products** > **Discount & Loyalty** - Create a New program with: - **Program Type:** Loyalty Cards - Conditional rules: - **Minimum…
### Steps to reproduce:
- Install **POS** app.
- Go to **POS** > **Products** > **Discount & Loyalty**
- Create a New program with:
- **Program Type:** Loyalty Cards
- Conditional rules:
- **Minimum Quantity:** 2
- **Grant:** 1 Loyalty Points per unit paid
- Rewards:
- **Reward Type:** Discount
- **Discount:** 100 % one Cheapest Product
- **In exchange of:** 2 Loyalty Points
- Start a new POS session
- Select a Customer
- Add two different products.
- Notice the Loyalty Points of **+2** shown. This is _Correct_
- Click on the **Reward** button
- Notice how the Loyalty Points are now **+3** which is obviously _wrong_ given we only have two products. Basically it's as if the reward line (100% discount) is taken into consideration as the cheapest product.
### Investigation:
- Inside `_updatePrograms`, `pointsForPrograms()` are calculated.
- we sum the lines quantities regardless of whether it's a reward line or not https://github.com/odoo/odoo/blob/e5c3ba58964f47cfd41d337e39e1bf25eaa25379/addons/pos_loyalty/static/src/js/Loyalty.js#L906
- By doing so, the reward lines are taken into consideration and the rule is triggerd by skipping this if clause https://github.com/odoo/odoo/blob/e5c3ba58964f47cfd41d337e39e1bf25eaa25379/addons/pos_loyalty/static/src/js/Loyalty.js#L917-L921
opw-3855323
Forward-Port-Of: odoo/odoo#165770
Forward-Port-Of: odoo/odoo#161503