changeset d2aea7b05984 in modules/product_cost_history:5.6
details: 
https://hg.tryton.org/modules/product_cost_history?cmd=changeset;node=d2aea7b05984
description:
        Ensure get_cost_price_at uses company context or pattern

        and filter cost price history table by company context.

        issue9651
        review322291002
        (grafted from 1de1a1a9d22e35598125ea095317a8b0be00f6aa)
diffstat:

 product.py |  22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diffs (51 lines):

diff -r 4bddeff80042 -r d2aea7b05984 product.py
--- a/product.py        Mon May 04 12:20:29 2020 +0200
+++ b/product.py        Mon Oct 19 00:30:10 2020 +0200
@@ -34,18 +34,21 @@
                 and context.get('_datetime')
                 and self.type in ['goods', 'assets']):
             cost_price = self.get_cost_price_at(
-                context['_datetime'].date())
+                context['_datetime'].date(), **pattern)
             if cost_price is not None:
                 return cost_price
         return super().get_multivalue(name, **pattern)
 
-    def get_cost_price_at(self, date):
+    def get_cost_price_at(self, date, **pattern):
         pool = Pool()
         CostHistory = pool.get('product.product.cost_history')
-        records = CostHistory.search([
-                ('date', '<=', date),
-                ('product', '=', self.id),
-                ], limit=1, order=[('date', 'DESC')])
+        company = pattern.get(
+            'company', Transaction().context.get('company'))
+        with Transaction().set_context(company=company):
+            records = CostHistory.search([
+                    ('date', '<=', date),
+                    ('product', '=', self.id),
+                    ], limit=1, order=[('date', 'DESC')])
         if records:
             record, = records
             return round_price(record.cost_price)
@@ -134,7 +137,8 @@
                 price_date.as_('date'),
                 history.product.as_('product'),
                 cost_price.as_('cost_price'),
-                where=~template.type.in_(['goods', 'assets'])))
+                where=~template.type.in_(['goods', 'assets'])
+                & cls._non_moves_clause(history)))
 
         query |= price_history.select(
             Max(price_history.id).as_('id'),
@@ -148,5 +152,9 @@
             group_by=[price_history.date, price_history.product])
         return query
 
+    @classmethod
+    def _non_moves_clause(cls, history_table):
+        return history_table.company == Transaction().context.get('company')
+
     def get_rec_name(self, name):
         return str(self.date)

Reply via email to