summaryrefslogtreecommitdiff
path: root/addons/mrp/tests/common.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/mrp/tests/common.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mrp/tests/common.py')
-rw-r--r--addons/mrp/tests/common.py156
1 files changed, 156 insertions, 0 deletions
diff --git a/addons/mrp/tests/common.py b/addons/mrp/tests/common.py
new file mode 100644
index 00000000..502b4a94
--- /dev/null
+++ b/addons/mrp/tests/common.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+
+from odoo.tests import Form
+from odoo.addons.mail.tests.common import mail_new_test_user
+from odoo.addons.stock.tests import common2
+
+
+class TestMrpCommon(common2.TestStockCommon):
+
+ @classmethod
+ def generate_mo(self, tracking_final='none', tracking_base_1='none', tracking_base_2='none', qty_final=5, qty_base_1=4, qty_base_2=1, picking_type_id=False, consumption=False):
+ """ This function generate a manufacturing order with one final
+ product and two consumed product. Arguments allows to choose
+ the tracking/qty for each different products. It returns the
+ MO, used bom and the tree products.
+ """
+ product_to_build = self.env['product.product'].create({
+ 'name': 'Young Tom',
+ 'type': 'product',
+ 'tracking': tracking_final,
+ })
+ product_to_use_1 = self.env['product.product'].create({
+ 'name': 'Botox',
+ 'type': 'product',
+ 'tracking': tracking_base_1,
+ })
+ product_to_use_2 = self.env['product.product'].create({
+ 'name': 'Old Tom',
+ 'type': 'product',
+ 'tracking': tracking_base_2,
+ })
+ bom_1 = self.env['mrp.bom'].create({
+ 'product_id': product_to_build.id,
+ 'product_tmpl_id': product_to_build.product_tmpl_id.id,
+ 'product_uom_id': self.uom_unit.id,
+ 'product_qty': 1.0,
+ 'type': 'normal',
+ 'consumption': consumption if consumption else 'flexible',
+ 'bom_line_ids': [
+ (0, 0, {'product_id': product_to_use_2.id, 'product_qty': qty_base_2}),
+ (0, 0, {'product_id': product_to_use_1.id, 'product_qty': qty_base_1})
+ ]})
+ mo_form = Form(self.env['mrp.production'])
+ if picking_type_id:
+ mo_form.picking_type_id = picking_type_id
+ mo_form.product_id = product_to_build
+ mo_form.bom_id = bom_1
+ mo_form.product_qty = qty_final
+ mo = mo_form.save()
+ mo.action_confirm()
+ return mo, bom_1, product_to_build, product_to_use_1, product_to_use_2
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestMrpCommon, cls).setUpClass()
+
+ # Update demo products
+ (cls.product_2 | cls.product_3 | cls.product_4 | cls.product_5 | cls.product_6 | cls.product_7_3 | cls.product_8).write({
+ 'type': 'product',
+ })
+
+ # User Data: mrp user and mrp manager
+ cls.user_mrp_user = mail_new_test_user(
+ cls.env,
+ name='Hilda Ferachwal',
+ login='hilda',
+ email='h.h@example.com',
+ notification_type='inbox',
+ groups='mrp.group_mrp_user, stock.group_stock_user, mrp.group_mrp_byproducts',
+ )
+ cls.user_mrp_manager = mail_new_test_user(
+ cls.env,
+ name='Gary Youngwomen',
+ login='gary',
+ email='g.g@example.com',
+ notification_type='inbox',
+ groups='mrp.group_mrp_manager, stock.group_stock_user, mrp.group_mrp_byproducts',
+ )
+
+ cls.workcenter_1 = cls.env['mrp.workcenter'].create({
+ 'name': 'Nuclear Workcenter',
+ 'capacity': 2,
+ 'time_start': 10,
+ 'time_stop': 5,
+ 'time_efficiency': 80,
+ })
+
+ cls.bom_1 = cls.env['mrp.bom'].create({
+ 'product_id': cls.product_4.id,
+ 'product_tmpl_id': cls.product_4.product_tmpl_id.id,
+ 'product_uom_id': cls.uom_unit.id,
+ 'product_qty': 4.0,
+ 'consumption': 'flexible',
+ 'operation_ids': [
+ ],
+ 'type': 'normal',
+ 'bom_line_ids': [
+ (0, 0, {'product_id': cls.product_2.id, 'product_qty': 2}),
+ (0, 0, {'product_id': cls.product_1.id, 'product_qty': 4})
+ ]})
+ cls.bom_2 = cls.env['mrp.bom'].create({
+ 'product_id': cls.product_5.id,
+ 'product_tmpl_id': cls.product_5.product_tmpl_id.id,
+ 'product_uom_id': cls.product_5.uom_id.id,
+ 'consumption': 'flexible',
+ 'product_qty': 1.0,
+ 'operation_ids': [
+ (0, 0, {'name': 'Gift Wrap Maching', 'workcenter_id': cls.workcenter_1.id, 'time_cycle': 15, 'sequence': 1}),
+ ],
+ 'type': 'phantom',
+ 'sequence': 2,
+ 'bom_line_ids': [
+ (0, 0, {'product_id': cls.product_4.id, 'product_qty': 2}),
+ (0, 0, {'product_id': cls.product_3.id, 'product_qty': 3})
+ ]})
+ cls.bom_3 = cls.env['mrp.bom'].create({
+ 'product_id': cls.product_6.id,
+ 'product_tmpl_id': cls.product_6.product_tmpl_id.id,
+ 'product_uom_id': cls.uom_dozen.id,
+ 'consumption': 'flexible',
+ 'product_qty': 2.0,
+ 'operation_ids': [
+ (0, 0, {'name': 'Cutting Machine', 'workcenter_id': cls.workcenter_1.id, 'time_cycle': 12, 'sequence': 1}),
+ (0, 0, {'name': 'Weld Machine', 'workcenter_id': cls.workcenter_1.id, 'time_cycle': 18, 'sequence': 2}),
+ ],
+ 'type': 'normal',
+ 'bom_line_ids': [
+ (0, 0, {'product_id': cls.product_5.id, 'product_qty': 2}),
+ (0, 0, {'product_id': cls.product_4.id, 'product_qty': 8}),
+ (0, 0, {'product_id': cls.product_2.id, 'product_qty': 12})
+ ]})
+
+ cls.stock_location_14 = cls.env['stock.location'].create({
+ 'name': 'Shelf 2',
+ 'location_id': cls.env.ref('stock.warehouse0').lot_stock_id.id,
+ })
+ cls.stock_location_components = cls.env['stock.location'].create({
+ 'name': 'Shelf 1',
+ 'location_id': cls.env.ref('stock.warehouse0').lot_stock_id.id,
+ })
+ cls.laptop = cls.env['product.product'].create({
+ 'name': 'Acoustic Bloc Screens',
+ 'uom_id': cls.env.ref("uom.product_uom_unit").id,
+ 'uom_po_id': cls.env.ref("uom.product_uom_unit").id,
+ 'type': 'product',
+ 'tracking': 'none',
+ 'categ_id': cls.env.ref('product.product_category_all').id,
+ })
+ cls.graphics_card = cls.env['product.product'].create({
+ 'name': 'Individual Workplace',
+ 'uom_id': cls.env.ref("uom.product_uom_unit").id,
+ 'uom_po_id': cls.env.ref("uom.product_uom_unit").id,
+ 'type': 'product',
+ 'tracking': 'none',
+ 'categ_id': cls.env.ref('product.product_category_all').id,
+ })