diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp_account/tests/test_valuation_layers.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mrp_account/tests/test_valuation_layers.py')
| -rw-r--r-- | addons/mrp_account/tests/test_valuation_layers.py | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/addons/mrp_account/tests/test_valuation_layers.py b/addons/mrp_account/tests/test_valuation_layers.py new file mode 100644 index 00000000..df03cc16 --- /dev/null +++ b/addons/mrp_account/tests/test_valuation_layers.py @@ -0,0 +1,278 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +""" Implementation of "INVENTORY VALUATION TESTS (With valuation layers)" spreadsheet. """ + +from odoo.addons.stock_account.tests.test_stockvaluationlayer import TestStockValuationCommon +from odoo.tests import Form + + +class TestMrpValuationCommon(TestStockValuationCommon): + @classmethod + def setUpClass(cls): + super(TestMrpValuationCommon, cls).setUpClass() + cls.component_category = cls.env['product.category'].create( + {'name': 'category2'} + ) + cls.component = cls.env['product.product'].create({ + 'name': 'component1', + 'type': 'product', + 'categ_id': cls.component_category.id, + }) + cls.bom = cls.env['mrp.bom'].create({ + 'product_id': cls.product1.id, + 'product_tmpl_id': cls.product1.product_tmpl_id.id, + 'product_uom_id': cls.uom_unit.id, + 'product_qty': 1.0, + 'type': 'normal', + 'bom_line_ids': [ + (0, 0, {'product_id': cls.component.id, 'product_qty': 1}) + ]}) + + def _make_mo(self, bom, quantity=1): + mo_form = Form(self.env['mrp.production']) + mo_form.product_id = bom.product_id + mo_form.bom_id = bom + mo_form.product_qty = quantity + mo = mo_form.save() + mo.action_confirm() + return mo + + def _produce(self, mo, quantity=0): + mo_form = Form(mo) + if not quantity: + quantity = mo.product_qty - mo.qty_produced + mo_form.qty_producing += quantity + mo = mo_form.save() + + +class TestMrpValuationStandard(TestMrpValuationCommon): + def test_fifo_fifo_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'fifo' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + action = mo.button_mark_done() + backorder = Form(self.env['mrp.production.backorder'].with_context(**action['context'])) + backorder.save().action_backorder() + mo = mo.procurement_group_id.mrp_production_ids[-1] + self.assertEqual(self.component.value_svl, 20) + self.assertEqual(self.product1.value_svl, 10) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_fifo_fifo_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'fifo' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 15) + + def test_fifo_avco_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + action = mo.button_mark_done() + backorder = Form(self.env['mrp.production.backorder'].with_context(**action['context'])) + backorder.save().action_backorder() + mo = mo.procurement_group_id.mrp_production_ids[-1] + self.assertEqual(self.component.value_svl, 20) + self.assertEqual(self.product1.value_svl, 10) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_fifo_avco_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 15) + + def test_fifo_std_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.standard_price = 8.8 + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + mo._post_inventory() + self.assertEqual(self.component.value_svl, 20) + self.assertEqual(self.product1.value_svl, 8.8) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 8.8 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_fifo_std_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'fifo' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.standard_price = 8.8 + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 8.8 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 8.8) + + def test_std_avco_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + self.component.standard_price = 8.8 + + self._make_in_move(self.component, 1) + self._make_in_move(self.component, 1) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + mo._post_inventory() + self.assertEqual(self.component.value_svl, 8.8) + self.assertEqual(self.product1.value_svl, 8.8) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 8.8 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_std_avco_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + self.component.standard_price = 8.8 + + self._make_in_move(self.component, 1) + self._make_in_move(self.component, 1) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 8.8 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 8.8) + + def test_std_std_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.component.standard_price = 8.8 + self.product1.standard_price = 7.2 + + self._make_in_move(self.component, 1) + self._make_in_move(self.component, 1) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + mo._post_inventory() + self.assertEqual(self.component.value_svl, 8.8) + self.assertEqual(self.product1.value_svl, 7.2) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 7.2 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_std_std_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'standard' + self.component.standard_price = 8.8 + self.product1.standard_price = 7.2 + + self._make_in_move(self.component, 1) + self._make_in_move(self.component, 1) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 7.2 * 2) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 7.2) + + def test_avco_avco_1(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'average' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo, 1) + mo._post_inventory() + self.assertEqual(self.component.value_svl, 15) + self.assertEqual(self.product1.value_svl, 15) + self.assertEqual(self.component.quantity_svl, 1) + self.assertEqual(self.product1.quantity_svl, 1) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + + def test_avco_avco_2(self): + self.component.product_tmpl_id.categ_id.property_cost_method = 'average' + self.product1.product_tmpl_id.categ_id.property_cost_method = 'average' + + self._make_in_move(self.component, 1, 10) + self._make_in_move(self.component, 1, 20) + mo = self._make_mo(self.bom, 2) + self._produce(mo) + mo.button_mark_done() + self.assertEqual(self.component.value_svl, 0) + self.assertEqual(self.product1.value_svl, 30) + self.assertEqual(self.component.quantity_svl, 0) + self.assertEqual(self.product1.quantity_svl, 2) + self._make_out_move(self.product1, 1) + self.assertEqual(self.product1.value_svl, 15) |
