summaryrefslogtreecommitdiff
path: root/addons/stock_account/tests/test_stock_valuation_layer_revaluation.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/stock_account/tests/test_stock_valuation_layer_revaluation.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/stock_account/tests/test_stock_valuation_layer_revaluation.py')
-rw-r--r--addons/stock_account/tests/test_stock_valuation_layer_revaluation.py173
1 files changed, 173 insertions, 0 deletions
diff --git a/addons/stock_account/tests/test_stock_valuation_layer_revaluation.py b/addons/stock_account/tests/test_stock_valuation_layer_revaluation.py
new file mode 100644
index 00000000..d84f8652
--- /dev/null
+++ b/addons/stock_account/tests/test_stock_valuation_layer_revaluation.py
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.exceptions import UserError
+from odoo.tests import Form
+from odoo.addons.stock_account.tests.test_stockvaluation import _create_accounting_data
+from odoo.addons.stock_account.tests.test_stockvaluationlayer import TestStockValuationCommon
+
+
+class TestStockValuationLayerRevaluation(TestStockValuationCommon):
+ @classmethod
+ def setUpClass(cls):
+ super(TestStockValuationLayerRevaluation, cls).setUpClass()
+ cls.stock_input_account, cls.stock_output_account, cls.stock_valuation_account, cls.expense_account, cls.stock_journal = _create_accounting_data(cls.env)
+ cls.product1.write({
+ 'property_account_expense_id': cls.expense_account.id,
+ })
+ cls.product1.categ_id.write({
+ 'property_stock_account_input_categ_id': cls.stock_input_account.id,
+ 'property_stock_account_output_categ_id': cls.stock_output_account.id,
+ 'property_stock_valuation_account_id': cls.stock_valuation_account.id,
+ 'property_stock_journal': cls.stock_journal.id,
+ })
+
+ cls.product1.categ_id.property_valuation = 'real_time'
+
+ def test_stock_valuation_layer_revaluation_avco(self):
+ self.product1.categ_id.property_cost_method = 'average'
+ context = {
+ 'default_product_id': self.product1.id,
+ 'default_company_id': self.env.company.id,
+ 'default_added_value': 0.0
+ }
+ # Quantity of product1 is zero, raise
+ with self.assertRaises(UserError):
+ Form(self.env['stock.valuation.layer.revaluation'].with_context(context)).save()
+
+ self._make_in_move(self.product1, 10, unit_cost=2)
+ self._make_in_move(self.product1, 10, unit_cost=4)
+
+ self.assertEqual(self.product1.standard_price, 3)
+ self.assertEqual(self.product1.quantity_svl, 20)
+
+ old_layers = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc")
+
+ self.assertEqual(len(old_layers), 2)
+ self.assertEqual(old_layers[0].remaining_value, 40)
+
+ revaluation_wizard = Form(self.env['stock.valuation.layer.revaluation'].with_context(context))
+ revaluation_wizard.added_value = 20
+ revaluation_wizard.account_id = self.stock_valuation_account
+ revaluation_wizard.save().action_validate_revaluation()
+
+ # Check standard price change
+ self.assertEqual(self.product1.standard_price, 4)
+ self.assertEqual(self.product1.quantity_svl, 20)
+
+ # Check the creation of stock.valuation.layer
+ new_layer = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc", limit=1)
+ self.assertEqual(new_layer.value, 20)
+
+ # Check the remaing value of current layers
+ self.assertEqual(old_layers[0].remaining_value, 50)
+ self.assertEqual(sum(slv.remaining_value for slv in old_layers), 80)
+
+ # Check account move
+ self.assertTrue(bool(new_layer.account_move_id))
+ self.assertEqual(len(new_layer.account_move_id.line_ids), 2)
+
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("debit")), 20)
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("credit")), 20)
+
+ credit_lines = [l for l in new_layer.account_move_id.line_ids if l.credit > 0]
+ self.assertEqual(len(credit_lines), 1)
+ self.assertEqual(credit_lines[0].account_id.id, self.stock_valuation_account.id)
+
+ def test_stock_valuation_layer_revaluation_avco_rounding(self):
+ self.product1.categ_id.property_cost_method = 'average'
+ context = {
+ 'default_product_id': self.product1.id,
+ 'default_company_id': self.env.company.id,
+ 'default_added_value': 0.0
+ }
+ # Quantity of product1 is zero, raise
+ with self.assertRaises(UserError):
+ Form(self.env['stock.valuation.layer.revaluation'].with_context(context)).save()
+
+ self._make_in_move(self.product1, 1, unit_cost=1)
+ self._make_in_move(self.product1, 1, unit_cost=1)
+ self._make_in_move(self.product1, 1, unit_cost=1)
+
+ self.assertEqual(self.product1.standard_price, 1)
+ self.assertEqual(self.product1.quantity_svl, 3)
+
+ old_layers = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc")
+
+ self.assertEqual(len(old_layers), 3)
+ self.assertEqual(old_layers[0].remaining_value, 1)
+
+ revaluation_wizard = Form(self.env['stock.valuation.layer.revaluation'].with_context(context))
+ revaluation_wizard.added_value = 1
+ revaluation_wizard.account_id = self.stock_valuation_account
+ revaluation_wizard.save().action_validate_revaluation()
+
+ # Check standard price change
+ self.assertEqual(self.product1.standard_price, 1.33)
+ self.assertEqual(self.product1.quantity_svl, 3)
+
+ # Check the creation of stock.valuation.layer
+ new_layer = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc", limit=1)
+ self.assertEqual(new_layer.value, 1)
+
+ # Check the remaing value of current layers
+ self.assertEqual(sum(slv.remaining_value for slv in old_layers), 4)
+ self.assertTrue(1.34 in old_layers.mapped("remaining_value"))
+
+ # Check account move
+ self.assertTrue(bool(new_layer.account_move_id))
+ self.assertEqual(len(new_layer.account_move_id.line_ids), 2)
+
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("debit")), 1)
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("credit")), 1)
+
+ credit_lines = [l for l in new_layer.account_move_id.line_ids if l.credit > 0]
+ self.assertEqual(len(credit_lines), 1)
+ self.assertEqual(credit_lines[0].account_id.id, self.stock_valuation_account.id)
+
+ def test_stock_valuation_layer_revaluation_fifo(self):
+ self.product1.categ_id.property_cost_method = 'fifo'
+ context = {
+ 'default_product_id': self.product1.id,
+ 'default_company_id': self.env.company.id,
+ 'default_added_value': 0.0
+ }
+ # Quantity of product1 is zero, raise
+ with self.assertRaises(UserError):
+ Form(self.env['stock.valuation.layer.revaluation'].with_context(context)).save()
+
+ self._make_in_move(self.product1, 10, unit_cost=2)
+ self._make_in_move(self.product1, 10, unit_cost=4)
+
+ self.assertEqual(self.product1.standard_price, 2)
+ self.assertEqual(self.product1.quantity_svl, 20)
+
+ old_layers = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc")
+
+ self.assertEqual(len(old_layers), 2)
+ self.assertEqual(old_layers[0].remaining_value, 40)
+
+ revaluation_wizard = Form(self.env['stock.valuation.layer.revaluation'].with_context(context))
+ revaluation_wizard.added_value = 20
+ revaluation_wizard.account_id = self.stock_valuation_account
+ revaluation_wizard.save().action_validate_revaluation()
+
+ self.assertEqual(self.product1.standard_price, 2)
+
+ # Check the creation of stock.valuation.layer
+ new_layer = self.env['stock.valuation.layer'].search([('product_id', '=', self.product1.id)], order="create_date desc, id desc", limit=1)
+ self.assertEqual(new_layer.value, 20)
+
+ # Check the remaing value of current layers
+ self.assertEqual(old_layers[0].remaining_value, 50)
+ self.assertEqual(sum(slv.remaining_value for slv in old_layers), 80)
+
+ # Check account move
+ self.assertTrue(bool(new_layer.account_move_id))
+ self.assertTrue(len(new_layer.account_move_id.line_ids), 2)
+
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("debit")), 20)
+ self.assertEqual(sum(new_layer.account_move_id.line_ids.mapped("credit")), 20)
+
+ credit_lines = [l for l in new_layer.account_move_id.line_ids if l.credit > 0]
+ self.assertEqual(len(credit_lines), 1)