From e7fba2e8a1bfb0d37c132f0c3b8726663493bb34 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 3 Dec 2019 14:28:53 +0000 Subject: [PATCH] [FIX] product: correctly pass pricelist arguments to recursive calls. When computing the price of a product through a pricelist item, if the item was based on anotherp pricelist, the dates and uom weren't given to the subsequent method call. As the majority of the calls to those pricelist methods put all their arguments in the context, it wasn't noticed until now. Functional example: Pricelist A: Rule A1 : 10% discount on Pricelist B, from day 3 to day 6. Pricelist B: Rule B1: 5% discount on Sales price, from day 3 to day 6, Rule B2: 10% discount, from day 7 to day 9. If today was day 8, the call to pricelist(A)._compute_price_rule(day=5) would use rules A1 and B2, but should have used rules A1 and B1. closes odoo/odoo#41295 X-original-commit: df9b113805ed28f274711bb4ba0dd9a2610e5035 Signed-off-by: Victor Feyens (vfe) --- addons/product/models/product_pricelist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/product/models/product_pricelist.py b/addons/product/models/product_pricelist.py index eb50278328c..55dad257b77 100644 --- a/addons/product/models/product_pricelist.py +++ b/addons/product/models/product_pricelist.py @@ -214,7 +214,7 @@ class Pricelist(models.Model): continue if rule.base == 'pricelist' and rule.base_pricelist_id: - price_tmp = rule.base_pricelist_id._compute_price_rule([(product, qty, partner)])[product.id][0] # TDE: 0 = price, 1 = rule + price_tmp = rule.base_pricelist_id._compute_price_rule([(product, qty, partner)], date, uom_id)[product.id][0] # TDE: 0 = price, 1 = rule price = rule.base_pricelist_id.currency_id._convert(price_tmp, self.currency_id, self.env.company, date, round=False) else: # if base option is public price take sale price else cost price of product