diff --git a/modules/purchase_trade/pricing.py b/modules/purchase_trade/pricing.py index 4f0fc9b..ff1ebf6 100755 --- a/modules/purchase_trade/pricing.py +++ b/modules/purchase_trade/pricing.py @@ -1331,17 +1331,23 @@ class Pricing(ModelSQL,ModelView): purchase_lines = PurchaseLine.search([]) sale_lines = SaleLine.search([]) - for line in purchase_lines: - line.check_pricing() - - for sale_line in sale_lines: - sale_line.check_pricing() + cls._update_line_pricing_prices(PurchaseLine, purchase_lines) + cls._update_line_pricing_prices(SaleLine, sale_lines) logger.info( "Updated pricing for %s purchase line(s) and %s sale line(s)", len(purchase_lines), len(sale_lines)) + @classmethod + def _update_line_pricing_prices(cls, Line, lines): + if not lines: + return + for line in lines: + line.check_pricing() + line._recompute_trade_price_fields() + Line.save(lines) + @classmethod def _is_manual_pricing_record(cls, record): component = getattr(record, 'price_component', None) diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index d201210..126fffc 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -1407,8 +1407,8 @@ class PurchaseTradeTestCase(ModuleTestCase): self.assertEqual(generate.call_count, 2) generate_from_sale_line.assert_called_once_with(unmatched_sale_line) - def test_update_daily_pricing_checks_all_purchase_and_sale_lines(self): - 'daily pricing cron refreshes purchase and sale pricing lines' + def test_update_daily_pricing_checks_and_recomputes_all_lines(self): + 'daily pricing cron refreshes pricing and line prices' Pricing = Pool().get('pricing.pricing') PurchaseLine = Mock() SaleLine = Mock() @@ -1431,6 +1431,9 @@ class PurchaseTradeTestCase(ModuleTestCase): SaleLine.search.assert_called_once_with([]) for line in purchase_lines + sale_lines: line.check_pricing.assert_called_once_with() + line._recompute_trade_price_fields.assert_called_once_with() + PurchaseLine.save.assert_called_once_with(purchase_lines) + SaleLine.save.assert_called_once_with(sale_lines) def test_create_pnl_fee_from_line_accepts_missing_rate_amount(self): 'purchase fee valuation treats an uncomputed rate amount as zero' diff --git a/modules/purchase_trade/view/period_form.xml b/modules/purchase_trade/view/period_form.xml index c084571..e04c212 100755 --- a/modules/purchase_trade/view/period_form.xml +++ b/modules/purchase_trade/view/period_form.xml @@ -9,10 +9,12 @@