mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
113 lines
4.3 KiB
Python
113 lines
4.3 KiB
Python
# Copyright 2022 Tecnativa - Víctor Martínez
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
from odoo.tests import Form, common
|
|
|
|
|
|
class TestMrpSubcontractingInhibit(common.SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.subcontractor_mto_route = cls.env.ref(
|
|
"mrp_subcontracting.route_resupply_subcontractor_mto"
|
|
)
|
|
cls.subcontractor_mto_route.subcontracting_inhibit = True
|
|
cls.buy_route = cls.env.ref("purchase_stock.route_warehouse0_buy")
|
|
cls.supplier = cls.env["res.partner"].create({"name": "Mr Odoo"})
|
|
cls.product = cls.env["product.product"].create(
|
|
{
|
|
"name": "Test product",
|
|
"type": "product",
|
|
"seller_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": cls.supplier.id,
|
|
"min_qty": 1,
|
|
"price": 10,
|
|
},
|
|
),
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": cls.supplier.id,
|
|
"min_qty": 1,
|
|
"price": 5,
|
|
"subcontracting_inhibit": True,
|
|
},
|
|
),
|
|
],
|
|
}
|
|
)
|
|
cls.component = cls.env["product.product"].create(
|
|
{
|
|
"name": "Test Component",
|
|
"route_ids": [(6, 0, [cls.subcontractor_mto_route.id])],
|
|
}
|
|
)
|
|
cls.bom = cls._create_mrp_bom(cls)
|
|
|
|
def _create_mrp_bom(self):
|
|
mrp_bom_form = Form(self.env["mrp.bom"])
|
|
mrp_bom_form.product_tmpl_id = self.product.product_tmpl_id
|
|
mrp_bom_form.type = "subcontract"
|
|
mrp_bom_form.subcontractor_ids.add(self.supplier)
|
|
with mrp_bom_form.bom_line_ids.new() as line_form:
|
|
line_form.product_id = self.component
|
|
line_form.product_qty = 1
|
|
return mrp_bom_form.save()
|
|
|
|
def _product_replenish(self, product, qty, route_id):
|
|
replenish_form = Form(
|
|
self.env["product.replenish"].with_context(default_product_id=product.id)
|
|
)
|
|
replenish_form.quantity = qty
|
|
replenish_form.route_ids.add(route_id)
|
|
replenish = replenish_form.save()
|
|
replenish.launch_replenishment()
|
|
|
|
def _get_purchase_order(self):
|
|
return self.env["purchase.order"].search(
|
|
[("partner_id", "=", self.supplier.id)]
|
|
)
|
|
|
|
def _get_mrp_production_total(self):
|
|
return self.env["mrp.production"].search_count([("bom_id", "=", self.bom.id)])
|
|
|
|
def test_misc_buy_route(self):
|
|
# Check if the value is correct
|
|
self._product_replenish(self.product, 1, self.buy_route)
|
|
order = self._get_purchase_order()
|
|
self.assertFalse(order.order_line.subcontracting_inhibit)
|
|
# Check if price is correct
|
|
self.assertEqual(order.order_line.price_unit, 10)
|
|
order.order_line.product_qty = 2
|
|
order.order_line._onchange_quantity()
|
|
self.assertEqual(order.order_line.price_unit, 10)
|
|
order.button_confirm()
|
|
self.assertEqual(self._get_mrp_production_total(), 1)
|
|
|
|
def test_misc_buy_subcontractor_route(self):
|
|
# Check if the value is correct
|
|
self._product_replenish(self.product, 1, self.subcontractor_mto_route)
|
|
order = self._get_purchase_order()
|
|
self.assertTrue(order.order_line.subcontracting_inhibit)
|
|
# Check if price is correct
|
|
self.assertEqual(order.order_line.price_unit, 5)
|
|
order.order_line.product_qty = 2
|
|
order.order_line._onchange_quantity()
|
|
self.assertEqual(order.order_line.price_unit, 5)
|
|
order.button_confirm()
|
|
self.assertEqual(self._get_mrp_production_total(), 0)
|
|
|
|
def test_change_purchase_order_line_subcontracting_inhibit(self):
|
|
order_form = Form(self.env["purchase.order"])
|
|
order_form.partner_id = self.supplier
|
|
with order_form.order_line.new() as line_form:
|
|
line_form.product_id = self.product
|
|
line_form.product_qty = 1
|
|
self.assertEqual(line_form.price_unit, 10)
|
|
line_form.subcontracting_inhibit = True
|
|
self.assertEqual(line_form.price_unit, 5)
|