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)