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):

Reply via email to