changeset b3dcbadef720 in modules/sale_price_list:5.6
details:
https://hg.tryton.org/modules/sale_price_list?cmd=changeset;node=b3dcbadef720
description:
Compute price list with raw sale unit price
The price list expect to have a unit price in the default unit and
company
currency otherwise non proportional operations provide wrong result
when a
different unit or currency is used.
issue9929
review345161002
(grafted from d25fcd781a7cbfa614b30de965e77e4850d7b66c)
diffstat:
product.py | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
diffs (58 lines):
diff -r 8811c38328a1 -r b3dcbadef720 product.py
--- a/product.py Fri Dec 11 15:44:42 2020 +0100
+++ b/product.py Thu Dec 17 21:30:26 2020 +0100
@@ -8,39 +8,38 @@
class Product(metaclass=PoolMeta):
__name__ = 'product.product'
- @classmethod
- def get_sale_price(cls, products, quantity=0):
+ def _get_sale_unit_price(self, quantity=0):
pool = Pool()
PriceList = pool.get('product.price_list')
Party = pool.get('party.party')
Uom = pool.get('product.uom')
Tax = pool.get('account.tax')
+ User = pool.get('res.user')
context = Transaction().context
- prices = super(Product, cls).get_sale_price(products,
- quantity=quantity)
+ unit_price = super()._get_sale_unit_price(quantity=quantity)
+
if context.get('price_list'):
- price_list = PriceList(Transaction().context['price_list'])
+ price_list = PriceList(context['price_list'])
+ assert price_list.company == User(Transaction().user).company
if context.get('customer'):
customer = Party(context['customer'])
else:
customer = None
context_uom = None
if context.get('uom'):
- context_uom = Uom(Transaction().context['uom'])
+ context_uom = Uom(context['uom'])
taxes = None
if context.get('taxes'):
taxes = Tax.browse(context.get('taxes'))
- for product in products:
- uom = context_uom or product.sale_uom
- if uom.category != product.sale_uom.category:
- uom = product.sale_uom
- price = price_list.compute(
- customer, product, prices[product.id], quantity, uom)
- if price_list.tax_included and taxes:
- price = Tax.reverse_compute(price, taxes)
- prices[product.id] = price
- return prices
+ uom = context_uom or self.sale_uom
+ if uom.category != self.sale_uom.category:
+ uom = self.sale_uom
+ unit_price = price_list.compute(
+ customer, self, unit_price, quantity, uom)
+ if price_list.tax_included and taxes:
+ unit_price = Tax.reverse_compute(unit_price, taxes)
+ return unit_price
class PriceList(metaclass=PoolMeta):