Files
stock-logistics-warehouse/stock_request_mrp/tests/test_stock_request_mrp.py
hveficent d3d11b12fe [13.0][ADD] stock_request_mrp
[UPD] Update stock_request_mrp.pot

[UPD] README.rst
2023-01-13 12:46:50 +01:00

219 lines
7.9 KiB
Python

# Copyright 2016-20 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0).
from odoo import fields
from odoo.tests import Form, common
class TestStockRequestMrp(common.TransactionCase):
def setUp(self):
super().setUp()
# common models
self.stock_request = self.env["stock.request"]
self.produce_wiz = self.env["mrp.product.produce"]
# refs
self.stock_request_user_group = self.env.ref(
"stock_request.group_stock_request_user"
)
self.stock_request_manager_group = self.env.ref(
"stock_request.group_stock_request_manager"
)
self.mrp_user_group = self.env.ref("mrp.group_mrp_user")
self.main_company = self.env.ref("base.main_company")
self.warehouse = self.env.ref("stock.warehouse0")
self.categ_unit = self.env.ref("uom.product_uom_categ_unit")
# common data
self.company_2 = self.env["res.company"].create({"name": "Comp2"})
self.wh2 = self.env["stock.warehouse"].search(
[("company_id", "=", self.company_2.id)], limit=1
)
self.stock_request_user = self._create_user(
"stock_request_user",
[self.stock_request_user_group.id, self.mrp_user_group.id],
[self.main_company.id, self.company_2.id],
)
self.stock_request_manager = self._create_user(
"stock_request_manager",
[self.stock_request_manager_group.id, self.mrp_user_group.id],
[self.main_company.id, self.company_2.id],
)
self.route_manufacture = self.warehouse.manufacture_pull_id.route_id
self.product = self._create_product(
"SH", "Shoes", False, self.route_manufacture.ids
)
self.raw_1 = self._create_product("SL", "Sole", False, [])
self._update_qty_in_location(self.warehouse.lot_stock_id, self.raw_1, 10)
self.raw_2 = self._create_product("LC", "Lace", False, [])
self._update_qty_in_location(self.warehouse.lot_stock_id, self.raw_2, 10)
self.bom = self._create_mrp_bom(self.product, [self.raw_1, self.raw_2])
self.uom_pair = self.env["uom.uom"].create(
{
"name": "Test-Pair",
"category_id": self.categ_unit.id,
"factor_inv": 2,
"uom_type": "bigger",
"rounding": 0.001,
}
)
def _update_qty_in_location(self, location, product, quantity):
self.env["stock.quant"]._update_available_quantity(product, location, quantity)
def _create_user(self, name, group_ids, company_ids):
return (
self.env["res.users"]
.with_context({"no_reset_password": True})
.create(
{
"name": name,
"password": "demo",
"login": name,
"email": str(name) + "@test.com",
"groups_id": [(6, 0, group_ids)],
"company_ids": [(6, 0, company_ids)],
}
)
)
def _create_product(self, default_code, name, company_id, route_ids):
return self.env["product.product"].create(
{
"name": name,
"default_code": default_code,
"uom_id": self.env.ref("uom.product_uom_unit").id,
"company_id": company_id,
"type": "product",
"route_ids": [(6, 0, route_ids)],
}
)
def _create_mrp_bom(self, product_id, raw_materials):
bom = self.env["mrp.bom"].create(
{
"product_id": product_id.id,
"product_tmpl_id": product_id.product_tmpl_id.id,
"product_uom_id": product_id.uom_id.id,
"product_qty": 1.0,
"type": "normal",
}
)
for raw_mat in raw_materials:
self.env["mrp.bom.line"].create(
{"bom_id": bom.id, "product_id": raw_mat.id, "product_qty": 1}
)
return bom
def _produce(self, mo, qty=0.0):
wiz = Form(
self.produce_wiz.with_context({"active_id": mo.id, "active_ids": [mo.id]})
)
wiz.qty_producing = qty or mo.product_qty
produce_wizard = wiz.save()
produce_wizard.do_produce()
return True
def test_create_request_01(self):
"""Single Stock request with buy rule"""
expected_date = fields.Datetime.now()
vals = {
"company_id": self.main_company.id,
"warehouse_id": self.warehouse.id,
"location_id": self.warehouse.lot_stock_id.id,
"expected_date": expected_date,
"stock_request_ids": [
(
0,
0,
{
"product_id": self.product.id,
"product_uom_id": self.product.uom_id.id,
"product_uom_qty": 5.0,
"company_id": self.main_company.id,
"warehouse_id": self.warehouse.id,
"location_id": self.warehouse.lot_stock_id.id,
"expected_date": expected_date,
},
)
],
}
order = (
self.env["stock.request.order"]
.with_user(self.stock_request_user)
.create(vals)
)
order.action_confirm()
self.assertEqual(order.state, "open")
self.assertEqual(order.stock_request_ids.state, "open")
order.refresh()
self.assertEqual(len(order.production_ids), 1)
self.assertEqual(len(order.stock_request_ids.production_ids), 1)
self.assertEqual(order.stock_request_ids.qty_in_progress, 5.0)
manufacturing_order = order.production_ids[0]
self.assertEqual(
manufacturing_order.company_id, order.stock_request_ids[0].company_id
)
self._produce(manufacturing_order, 5.0)
self.assertEqual(order.stock_request_ids.qty_in_progress, 5.0)
self.assertEqual(order.stock_request_ids.qty_done, 0.0)
manufacturing_order.button_mark_done()
self.assertEqual(order.stock_request_ids.qty_in_progress, 0.0)
self.assertEqual(order.stock_request_ids.qty_done, 5.0)
def test_view_actions(self):
expected_date = fields.Datetime.now()
vals = {
"company_id": self.main_company.id,
"warehouse_id": self.warehouse.id,
"location_id": self.warehouse.lot_stock_id.id,
"expected_date": expected_date,
"stock_request_ids": [
(
0,
0,
{
"product_id": self.product.id,
"product_uom_id": self.product.uom_id.id,
"product_uom_qty": 5.0,
"company_id": self.main_company.id,
"warehouse_id": self.warehouse.id,
"location_id": self.warehouse.lot_stock_id.id,
"expected_date": expected_date,
},
)
],
}
order = self.env["stock.request.order"].create(vals)
order.action_confirm()
stock_request = order.stock_request_ids
action = stock_request.action_view_mrp_production()
self.assertEqual("views" in action.keys(), True)
self.assertEqual(action["res_id"], stock_request.production_ids[0].id)
action = stock_request.production_ids[0].action_view_stock_request()
self.assertEqual(action["type"], "ir.actions.act_window")
self.assertEqual(action["res_id"], stock_request.id)
action = order.action_view_mrp_production()
self.assertEqual("views" in action.keys(), True)
self.assertEqual(action["res_id"], order.production_ids[0].id)