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/tests/test_cancel_mo.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mrp/tests/test_cancel_mo.py')
| -rw-r--r-- | addons/mrp/tests/test_cancel_mo.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/addons/mrp/tests/test_cancel_mo.py b/addons/mrp/tests/test_cancel_mo.py new file mode 100644 index 00000000..d305571c --- /dev/null +++ b/addons/mrp/tests/test_cancel_mo.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import Form +from datetime import datetime, timedelta + +from odoo.fields import Datetime as Dt +from odoo.exceptions import UserError +from odoo.addons.mrp.tests.common import TestMrpCommon + + +class TestMrpCancelMO(TestMrpCommon): + + def test_cancel_mo_without_routing_1(self): + """ Cancel a Manufacturing Order with no routing, no production. + """ + # Create MO + manufacturing_order = self.generate_mo()[0] + # Do nothing, cancel it + manufacturing_order.action_cancel() + # Check the MO and its moves are cancelled + self.assertEqual(manufacturing_order.state, 'cancel', "MO should be in cancel state.") + self.assertEqual(manufacturing_order.move_raw_ids[0].state, 'cancel', + "Cancelled MO raw moves must be cancelled as well.") + self.assertEqual(manufacturing_order.move_raw_ids[1].state, 'cancel', + "Cancelled MO raw moves must be cancelled as well.") + self.assertEqual(manufacturing_order.move_finished_ids.state, 'cancel', + "Cancelled MO finished move must be cancelled as well.") + + def test_cancel_mo_without_routing_2(self): + """ Cancel a Manufacturing Order with no routing but some productions. + """ + # Create MO + manufacturing_order = self.generate_mo()[0] + # Produce some quantity + mo_form = Form(manufacturing_order) + mo_form.qty_producing = 2 + manufacturing_order = mo_form.save() + # Cancel it + manufacturing_order.action_cancel() + # Check it's cancelled + self.assertEqual(manufacturing_order.state, 'cancel', "MO should be in cancel state.") + self.assertEqual(manufacturing_order.move_raw_ids[0].state, 'cancel', + "Cancelled MO raw moves must be cancelled as well.") + self.assertEqual(manufacturing_order.move_raw_ids[1].state, 'cancel', + "Cancelled MO raw moves must be cancelled as well.") + self.assertEqual(manufacturing_order.move_finished_ids.state, 'cancel', + "Cancelled MO finished move must be cancelled as well.") + + def test_cancel_mo_without_routing_3(self): + """ Cancel a Manufacturing Order with no routing but some productions + after post inventory. + """ + # Create MO + manufacturing_order = self.generate_mo(consumption='strict')[0] + # Produce some quantity (not all to avoid to done the MO when post inventory) + mo_form = Form(manufacturing_order) + mo_form.qty_producing = 2 + manufacturing_order = mo_form.save() + # Post Inventory + manufacturing_order._post_inventory() + # Cancel the MO + manufacturing_order.action_cancel() + # Check MO is marked as done and its SML are done or cancelled + self.assertEqual(manufacturing_order.state, 'done', "MO should be in done state.") + self.assertEqual(manufacturing_order.move_raw_ids[0].state, 'done', + "Due to 'post_inventory', some move raw must stay in done state") + self.assertEqual(manufacturing_order.move_raw_ids[1].state, 'done', + "Due to 'post_inventory', some move raw must stay in done state") + self.assertEqual(manufacturing_order.move_raw_ids[2].state, 'cancel', + "The other move raw are cancelled like their MO.") + self.assertEqual(manufacturing_order.move_raw_ids[3].state, 'cancel', + "The other move raw are cancelled like their MO.") + self.assertEqual(manufacturing_order.move_finished_ids[0].state, 'done', + "Due to 'post_inventory', a move finished must stay in done state") + self.assertEqual(manufacturing_order.move_finished_ids[1].state, 'cancel', + "The other move finished is cancelled like its MO.") + + def test_unlink_mo(self): + """ Try to unlink a Manufacturing Order, and check it's possible or not + depending of the MO state (must be in cancel state to be unlinked, but + the unlink method will try to cancel MO before unlink them). + """ + # Case #1: Create MO, do nothing and try to unlink it (can be deleted) + manufacturing_order = self.generate_mo()[0] + self.assertEqual(manufacturing_order.exists().state, 'confirmed') + manufacturing_order.unlink() + # Check the MO is deleted. + self.assertEqual(manufacturing_order.exists().state, False) + + # Case #2: Create MO, make and post some production, then try to unlink + # it (cannot be deleted) + manufacturing_order = self.generate_mo()[0] + # Produce some quantity (not all to avoid to done the MO when post inventory) + mo_form = Form(manufacturing_order) + mo_form.qty_producing = 2 + manufacturing_order = mo_form.save() + # Post Inventory + manufacturing_order._post_inventory() + # Unlink the MO must raises an UserError since it cannot be really cancelled + self.assertEqual(manufacturing_order.exists().state, 'progress') + with self.assertRaises(UserError): + manufacturing_order.unlink() |
