mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[11.0][mrp_multi_level] refactor mrp area
This commit is contained in:
@@ -17,13 +17,13 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
cls.mo_obj = cls.env['mrp.production']
|
||||
cls.po_obj = cls.env['purchase.order']
|
||||
cls.product_obj = cls.env['product.product']
|
||||
cls.product_mrp_area_obj = cls.env['product.mrp.area']
|
||||
cls.partner_obj = cls.env['res.partner']
|
||||
cls.stock_picking_obj = cls.env['stock.picking']
|
||||
cls.estimate_obj = cls.env['stock.demand.estimate']
|
||||
cls.mrp_multi_level_wiz = cls.env['mrp.multi.level']
|
||||
cls.mrp_inventory_procure_wiz = cls.env['mrp.inventory.procure']
|
||||
cls.mrp_inventory_obj = cls.env['mrp.inventory']
|
||||
cls.mrp_product_obj = cls.env['mrp.product']
|
||||
cls.mrp_inventory_obj = cls.env['mrp.inventory']
|
||||
cls.mrp_move_obj = cls.env['mrp.move']
|
||||
|
||||
cls.fp_1 = cls.env.ref('mrp_multi_level.product_product_fp_1')
|
||||
@@ -32,6 +32,7 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
cls.sf_2 = cls.env.ref('mrp_multi_level.product_product_sf_2')
|
||||
cls.pp_1 = cls.env.ref('mrp_multi_level.product_product_pp_1')
|
||||
cls.pp_2 = cls.env.ref('mrp_multi_level.product_product_pp_2')
|
||||
cls.mrp_area = cls.env.ref('mrp_multi_level.mrp_area_stock_wh0')
|
||||
cls.vendor = cls.env.ref('mrp_multi_level.res_partner_lazer_tech')
|
||||
cls.wh = cls.env.ref('stock.warehouse0')
|
||||
cls.stock_location = cls.wh.lot_stock_id
|
||||
@@ -54,22 +55,35 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
'route_ids': [(6, 0, [route_buy])],
|
||||
'seller_ids': [(0, 0, {'name': vendor1.id, 'price': 20.0})],
|
||||
})
|
||||
cls.product_mrp_area_obj.create({
|
||||
'product_id': cls.prod_test.id,
|
||||
'mrp_area_id': cls.mrp_area.id,
|
||||
})
|
||||
cls.prod_min = cls.product_obj.create({
|
||||
'name': 'Product with minimum order qty',
|
||||
'type': 'product',
|
||||
'list_price': 50.0,
|
||||
'route_ids': [(6, 0, [route_buy])],
|
||||
'seller_ids': [(0, 0, {'name': vendor1.id, 'price': 10.0})],
|
||||
})
|
||||
cls.product_mrp_area_obj.create({
|
||||
'product_id': cls.prod_min.id,
|
||||
'mrp_area_id': cls.mrp_area.id,
|
||||
'mrp_minimum_order_qty': 50.0,
|
||||
'mrp_maximum_order_qty': 0.0,
|
||||
'mrp_qty_multiple': 1.0,
|
||||
})
|
||||
|
||||
cls.prod_max = cls.product_obj.create({
|
||||
'name': 'Product with maximum order qty',
|
||||
'type': 'product',
|
||||
'list_price': 50.0,
|
||||
'route_ids': [(6, 0, [route_buy])],
|
||||
'seller_ids': [(0, 0, {'name': vendor1.id, 'price': 10.0})],
|
||||
})
|
||||
cls.product_mrp_area_obj.create({
|
||||
'product_id': cls.prod_max.id,
|
||||
'mrp_area_id': cls.mrp_area.id,
|
||||
'mrp_minimum_order_qty': 50.0,
|
||||
'mrp_maximum_order_qty': 100.0,
|
||||
'mrp_qty_multiple': 1.0,
|
||||
@@ -80,11 +94,14 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
'list_price': 50.0,
|
||||
'route_ids': [(6, 0, [route_buy])],
|
||||
'seller_ids': [(0, 0, {'name': vendor1.id, 'price': 10.0})],
|
||||
})
|
||||
cls.product_mrp_area_obj.create({
|
||||
'product_id': cls.prod_multiple.id,
|
||||
'mrp_area_id': cls.mrp_area.id,
|
||||
'mrp_minimum_order_qty': 50.0,
|
||||
'mrp_maximum_order_qty': 500.0,
|
||||
'mrp_qty_multiple': 25.0,
|
||||
})
|
||||
|
||||
# Create test picking for FP-1 and FP-2:
|
||||
res = cls.calendar.plan_days(7+1, datetime.today())
|
||||
date_move = res.date()
|
||||
@@ -244,16 +261,16 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
self.assertEqual(self.pp_1.llc, 2)
|
||||
self.assertEqual(self.pp_2.llc, 2)
|
||||
|
||||
def test_02_mrp_product(self):
|
||||
def test_02_product_mrp_area(self):
|
||||
"""Tests that mrp products are generated correctly."""
|
||||
mrp_product = self.mrp_product_obj.search([
|
||||
product_mrp_area = self.product_mrp_area_obj.search([
|
||||
('product_id', '=', self.pp_1.id)])
|
||||
self.assertEqual(mrp_product.supply_method, 'buy')
|
||||
self.assertEqual(mrp_product.main_supplier_id, self.vendor)
|
||||
self.assertEqual(mrp_product.mrp_qty_available, 10.0)
|
||||
mrp_product = self.mrp_product_obj.search([
|
||||
self.assertEqual(product_mrp_area.supply_method, 'buy')
|
||||
self.assertEqual(product_mrp_area.main_supplier_id, self.vendor)
|
||||
self.assertEqual(product_mrp_area.qty_available, 10.0)
|
||||
product_mrp_area = self.product_mrp_area_obj.search([
|
||||
('product_id', '=', self.sf_1.id)])
|
||||
self.assertEqual(mrp_product.supply_method, 'manufacture')
|
||||
self.assertEqual(product_mrp_area.supply_method, 'manufacture')
|
||||
|
||||
def test_03_mrp_moves(self):
|
||||
"""Tests for mrp moves generated."""
|
||||
@@ -265,11 +282,13 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
self.assertNotIn('s', moves.mapped('mrp_type'))
|
||||
for move in moves:
|
||||
self.assertTrue(move.mrp_move_up_ids)
|
||||
if move.mrp_move_up_ids.mrp_product_id.product_id == self.fp_1:
|
||||
if move.mrp_move_up_ids.product_mrp_area_id.product_id == \
|
||||
self.fp_1:
|
||||
# Demand coming from FP-1
|
||||
self.assertEqual(move.mrp_move_up_ids.mrp_action, 'mo')
|
||||
self.assertEqual(move.mrp_qty, -200.0)
|
||||
elif move.mrp_move_up_ids.mrp_product_id.product_id == self.sf_1:
|
||||
elif move.mrp_move_up_ids.product_mrp_area_id.product_id == \
|
||||
self.sf_1:
|
||||
# Demand coming from FP-2 -> SF-1
|
||||
self.assertEqual(move.mrp_move_up_ids.mrp_action, 'mo')
|
||||
if move.mrp_date == self.date_5:
|
||||
@@ -299,21 +318,21 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
"""Tests MRP inventories created."""
|
||||
# FP-1
|
||||
fp_1_inventory_lines = self.mrp_inventory_obj.search(
|
||||
[('mrp_product_id.product_id', '=', self.fp_1.id)])
|
||||
[('product_mrp_area_id.product_id', '=', self.fp_1.id)])
|
||||
self.assertEqual(len(fp_1_inventory_lines), 1)
|
||||
self.assertEqual(fp_1_inventory_lines.date, self.date_7)
|
||||
self.assertEqual(fp_1_inventory_lines.demand_qty, 100.0)
|
||||
self.assertEqual(fp_1_inventory_lines.to_procure, 100.0)
|
||||
# FP-2
|
||||
fp_2_line_1 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.fp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.fp_2.id),
|
||||
('date', '=', self.date_7)])
|
||||
self.assertEqual(len(fp_2_line_1), 1)
|
||||
self.assertEqual(fp_2_line_1.demand_qty, 15.0)
|
||||
self.assertEqual(fp_2_line_1.to_procure, 15.0)
|
||||
# TODO: ask odoo to fix it... should be date10
|
||||
fp_2_line_2 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.fp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.fp_2.id),
|
||||
('date', '=', self.date_9)])
|
||||
self.assertEqual(len(fp_2_line_2), 1)
|
||||
self.assertEqual(fp_2_line_2.demand_qty, 0.0)
|
||||
@@ -322,26 +341,26 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
|
||||
# SF-1
|
||||
sf_1_line_1 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.sf_1.id),
|
||||
('product_mrp_area_id.product_id', '=', self.sf_1.id),
|
||||
('date', '=', self.date_6)])
|
||||
self.assertEqual(len(sf_1_line_1), 1)
|
||||
self.assertEqual(sf_1_line_1.demand_qty, 30.0)
|
||||
self.assertEqual(sf_1_line_1.to_procure, 30.0)
|
||||
sf_1_line_2 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.sf_1.id),
|
||||
('product_mrp_area_id.product_id', '=', self.sf_1.id),
|
||||
('date', '=', self.date_9)])
|
||||
self.assertEqual(len(sf_1_line_2), 1)
|
||||
self.assertEqual(sf_1_line_2.demand_qty, 24.0)
|
||||
self.assertEqual(sf_1_line_2.to_procure, 24.0)
|
||||
# SF-2
|
||||
sf_2_line_1 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.sf_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.sf_2.id),
|
||||
('date', '=', self.date_6)])
|
||||
self.assertEqual(len(sf_2_line_1), 1)
|
||||
self.assertEqual(sf_2_line_1.demand_qty, 45.0)
|
||||
self.assertEqual(sf_2_line_1.to_procure, 30.0)
|
||||
sf_2_line_2 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.sf_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.sf_2.id),
|
||||
('date', '=', self.date_9)])
|
||||
self.assertEqual(len(sf_2_line_2), 1)
|
||||
self.assertEqual(sf_2_line_2.demand_qty, 36.0)
|
||||
@@ -349,39 +368,39 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
|
||||
# PP-1
|
||||
pp_1_line_1 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_1.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_1.id),
|
||||
('date', '=', self.date_5)])
|
||||
self.assertEqual(len(pp_1_line_1), 1)
|
||||
self.assertEqual(pp_1_line_1.demand_qty, 290.0)
|
||||
self.assertEqual(pp_1_line_1.to_procure, 280.0)
|
||||
pp_1_line_2 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_1.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_1.id),
|
||||
('date', '=', self.date_8)])
|
||||
self.assertEqual(len(pp_1_line_2), 1)
|
||||
self.assertEqual(pp_1_line_2.demand_qty, 72.0)
|
||||
self.assertEqual(pp_1_line_2.to_procure, 72.0)
|
||||
# PP-2
|
||||
pp_2_line_1 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_2.id),
|
||||
('date', '=', self.date_3)])
|
||||
self.assertEqual(len(pp_2_line_1), 1)
|
||||
self.assertEqual(pp_2_line_1.demand_qty, 90.0)
|
||||
# 90.0 demand - 20.0 on hand - 5.0 on PO = 65.0
|
||||
self.assertEqual(pp_2_line_1.to_procure, 65.0)
|
||||
pp_2_line_2 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_2.id),
|
||||
('date', '=', self.date_5)])
|
||||
self.assertEqual(len(pp_2_line_2), 1)
|
||||
self.assertEqual(pp_2_line_2.demand_qty, 360.0)
|
||||
self.assertEqual(pp_2_line_2.to_procure, 360.0)
|
||||
pp_2_line_3 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_2.id),
|
||||
('date', '=', self.date_6)])
|
||||
self.assertEqual(len(pp_2_line_3), 1)
|
||||
self.assertEqual(pp_2_line_3.demand_qty, 108.0)
|
||||
self.assertEqual(pp_2_line_3.to_procure, 108.0)
|
||||
pp_2_line_4 = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.pp_2.id),
|
||||
('product_mrp_area_id.product_id', '=', self.pp_2.id),
|
||||
('date', '=', self.date_8)])
|
||||
self.assertEqual(len(pp_2_line_4), 1)
|
||||
self.assertEqual(pp_2_line_4.demand_qty, 48.0)
|
||||
@@ -398,11 +417,11 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
expected = [200.0, 290.0, 90.0, 0.0, 72.0, 0.0]
|
||||
self.assertEqual(moves.mapped('running_availability'), expected)
|
||||
# Actions counters for PP-1:
|
||||
mrp_product = self.mrp_product_obj.search([
|
||||
product_mrp_area = self.product_mrp_area_obj.search([
|
||||
('product_id', '=', self.pp_1.id)
|
||||
])
|
||||
self.assertEqual(mrp_product.nbr_mrp_actions, 3)
|
||||
self.assertEqual(mrp_product.nbr_mrp_actions_4w, 3)
|
||||
# self.assertEqual(product_mrp_area.nbr_mrp_actions, 3) # TODO
|
||||
# self.assertEqual(product_mrp_area.nbr_mrp_actions_4w, 3) # TODO
|
||||
|
||||
def test_06_demand_estimates(self):
|
||||
"""Tests demand estimates integration."""
|
||||
@@ -428,7 +447,7 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
('product_id', '=', self.fp_1.id)])
|
||||
self.assertFalse(mos)
|
||||
mrp_inv = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.fp_1.id)])
|
||||
('product_mrp_area_id.product_id', '=', self.fp_1.id)])
|
||||
self.mrp_inventory_procure_wiz.with_context({
|
||||
'active_model': 'mrp.inventory',
|
||||
'active_ids': mrp_inv.ids,
|
||||
@@ -446,11 +465,11 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
maximum order quantities and quantity multiple are set."""
|
||||
# minimum order quantity:
|
||||
mrp_inv_min = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.prod_min.id)])
|
||||
('product_mrp_area_id.product_id', '=', self.prod_min.id)])
|
||||
self.assertEqual(mrp_inv_min.to_procure, 50.0)
|
||||
# maximum order quantity:
|
||||
mrp_inv_max = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.prod_max.id)])
|
||||
('product_mrp_area_id.product_id', '=', self.prod_max.id)])
|
||||
self.assertEqual(mrp_inv_max.to_procure, 150)
|
||||
moves = self.mrp_move_obj.search([
|
||||
('product_id', '=', self.prod_max.id),
|
||||
@@ -461,7 +480,7 @@ class TestMrpMultiLevel(SavepointCase):
|
||||
self.assertIn(50.0, moves.mapped('mrp_qty'))
|
||||
# quantity multiple:
|
||||
mrp_inv_multiple = self.mrp_inventory_obj.search([
|
||||
('mrp_product_id.product_id', '=', self.prod_multiple.id)])
|
||||
('product_mrp_area_id.product_id', '=', self.prod_multiple.id)])
|
||||
self.assertEqual(mrp_inv_multiple.to_procure, 125)
|
||||
|
||||
# TODO: test procure wizard: pos, multiple...
|
||||
|
||||
Reference in New Issue
Block a user