Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FW][FIX] pos_restaurant: Grant loyalty points for products only #166099

Conversation

fw-bot
Copy link
Contributor

@fw-bot fw-bot commented May 19, 2024

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
    totalProductQty += lineQty;
  • By doing so, the reward lines are taken into consideration and the rule is triggerd by skipping this if clause
    if (totalProductQty < rule.minimum_qty) {
    // Should also count the points from negative quantities.
    // For example, when refunding an ewallet payment. See TicketScreen override in this addon.
    continue;
    }

opw-3855323

Forward-Port-Of: #165833
Forward-Port-Of: #161503

@robodoo
Copy link
Contributor

robodoo commented May 19, 2024

Pull request status dashboard.

@fw-bot
Copy link
Contributor Author

fw-bot commented May 19, 2024

This PR targets saas-17.1 and is part of the forward-port chain. Further PRs will be created up to master.

More info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port

@robodoo robodoo added the forwardport This PR was created by @fw-bot label May 19, 2024
@C3POdoo C3POdoo added the OE the report is linked to a support ticket (opw-...) label May 19, 2024
@fw-bot
Copy link
Contributor Author

fw-bot commented May 19, 2024

@AH-Yussef @caburj ci/runbot failed on this forward-port PR

@AH-Yussef AH-Yussef force-pushed the saas-17.1-16.0-opw-3855323-grant_loyalty_points_for_products_only-alhy-lmMB-fw branch from cc49366 to 9259490 Compare June 8, 2024 17:46
@fw-bot
Copy link
Contributor Author

fw-bot commented Jun 8, 2024

@AH-Yussef @caburj this PR was modified / updated and has become a normal PR. It must be merged directly.

@C3POdoo C3POdoo requested review from a team and davidmonnom and removed request for a team June 8, 2024 17:48
@davidmonnom davidmonnom requested a review from caburj June 10, 2024 08:07
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

X-original-commit: ccd16cc
@AH-Yussef AH-Yussef force-pushed the saas-17.1-16.0-opw-3855323-grant_loyalty_points_for_products_only-alhy-lmMB-fw branch from 9259490 to 9dedfdb Compare June 11, 2024 09:03
@caburj
Copy link
Contributor

caburj commented Jun 12, 2024

robodoo r+

robodoo pushed a commit that referenced this pull request Jun 12, 2024
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

closes #166099

X-original-commit: ccd16cc
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
robodoo pushed a commit that referenced this pull request Jun 12, 2024
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

closes #166099

X-original-commit: ccd16cc
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
robodoo pushed a commit that referenced this pull request Jun 12, 2024
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

closes #166099

X-original-commit: ccd16cc
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
@robodoo robodoo closed this Jun 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
forwardport This PR was created by @fw-bot OE the report is linked to a support ticket (opw-...)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants