From 2f847c46292c409547cde402ae1dd38128eed4d2 Mon Sep 17 00:00:00 2001 From: AH-Yussef Date: Thu, 15 Feb 2024 18:27:17 +0200 Subject: [PATCH] [FIX] stock_account: correct revaluation statement at general ledger report Steps to reproduce: - Install Sales, Accounting and Inventory apps. - Go to Inventory > Configuration > Products > Product Categories. - Open All / Saleable / Office Furniture and: - Set the Inventory Valuation as Automated - Set the Costing Method as First In First Out (FIFO) - Go to Inventory > Reporting > Inventory Valuation - Open the toggle header then Click on the plus button at the header. - In the popup shown -Notice how the current value is 0-, set: - Added Value to 1000 - Counterpart Account to 600000 Expenses - Click on REVALUE, a new report appears. - Open the newly created report > Other Info, open the Journal Entry - In the Journal Items tab, notice the label says that `the valuation was changed from 1000 to 2000` while it should be `the valuation was changed from 0 to 2000`. Investigation: - the `current_value_svl` field is related to `product_id.value_svl` https://github.com/odoo/odoo/blob/7152fa4fb4a8b66ae72bbdc8177f2a787161f594/addons/stock_account/wizard/stock_valuation_layer_revaluation.py#L34 - Which get computend using `_compute_value_svl()` depending on `stock_valuation_layer_ids` - When we revaluate, we trigger `action_validate_revaluation` that performs this line https://github.com/odoo/odoo/blob/7152fa4fb4a8b66ae72bbdc8177f2a787161f594/addons/stock_account/wizard/stock_valuation_layer_revaluation.py#L110 creating new stock.valuation.layer triggering the `_compute_value_svl()` method setting the product `value_svl` to the updated value (current + added) which then updates `current_value_svl` being a related field - That's why now `current_value_svl` is the new value and not the old one. opw-3715522 closes odoo/odoo#157450 X-original-commit: 065b6632b133d780543c9f40beb536c2ff37ff52 Signed-off-by: William Henrotin (whe) Signed-off-by: Ali Hassan Youssef (alhy) --- .../tests/test_stockvaluation.py | 19 +++++++++++++++++++ .../stock_valuation_layer_revaluation.py | 9 +++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/addons/stock_account/tests/test_stockvaluation.py b/addons/stock_account/tests/test_stockvaluation.py index cdeb2156375..27fefc06df0 100644 --- a/addons/stock_account/tests/test_stockvaluation.py +++ b/addons/stock_account/tests/test_stockvaluation.py @@ -4048,3 +4048,22 @@ class TestStockValuation(TestStockValuationBase): with self.assertRaises(UserError): revaluation.action_validate_revaluation() + + def test_manual_revaluation_statement(self): + self.product1.categ_id.property_cost_method = 'fifo' + self.product1.categ_id.property_valuation = 'real_time' + + self._make_in_move(self.product1, 1, unit_cost=15) + + revaluation_form = Form(self.env['stock.valuation.layer.revaluation'].with_context({ + 'default_product_id': self.product1.id, + 'default_company_id': self.env.company.id, + })) + revaluation_form.added_value = 10.0 + revaluation_form.account_id = self.stock_valuation_account + revaluation = revaluation_form.save() + revaluation.action_validate_revaluation() + + account_move = self.env['account.move'].search([('journal_id', '=', revaluation.account_journal_id.id)]) + + self.assertEqual(account_move.line_ids[0].name, 'OdooBot changed stock valuation from 15.0 to 25.0 - [prda] Product A') diff --git a/addons/stock_account/wizard/stock_valuation_layer_revaluation.py b/addons/stock_account/wizard/stock_valuation_layer_revaluation.py index e46927e1efc..5f71ebf16a0 100644 --- a/addons/stock_account/wizard/stock_valuation_layer_revaluation.py +++ b/addons/stock_account/wizard/stock_valuation_layer_revaluation.py @@ -107,6 +107,7 @@ class StockValuationLayerRevaluation(models.TransientModel): remaining_value -= taken_remaining_value remaining_qty -= svl.remaining_qty + previous_value_svl = self.current_value_svl revaluation_svl = self.env['stock.valuation.layer'].create(revaluation_svl_vals) # Update the stardard price in case of AVCO/FIFO @@ -136,8 +137,8 @@ class StockValuationLayerRevaluation(models.TransientModel): 'line_ids': [(0, 0, { 'name': _('%(user)s changed stock valuation from %(previous)s to %(new_value)s - %(product)s', user=self.env.user.name, - previous=self.current_value_svl, - new_value=self.current_value_svl + self.added_value, + previous=previous_value_svl, + new_value=previous_value_svl + self.added_value, product=product_id.display_name, ), 'account_id': debit_account_id, @@ -147,8 +148,8 @@ class StockValuationLayerRevaluation(models.TransientModel): }), (0, 0, { 'name': _('%(user)s changed stock valuation from %(previous)s to %(new_value)s - %(product)s', user=self.env.user.name, - previous=self.current_value_svl, - new_value=self.current_value_svl + self.added_value, + previous=previous_value_svl, + new_value=previous_value_svl + self.added_value, product=product_id.display_name, ), 'account_id': credit_account_id,