summaryrefslogtreecommitdiff
path: root/addons/mrp_subcontracting/tests
diff options
context:
space:
mode:
authorArnold Moyaux <arm@odoo.com>2019-07-31 13:57:34 +0000
committerArnold Moyaux <arm@odoo.com>2019-08-19 15:03:59 +0000
commitc3dc552185d9830ed2df528f36490c5478cfbc45 (patch)
tree352d39840b2fd05119f57a988bae9edaf143981f /addons/mrp_subcontracting/tests
parent8c2b0a937f1fc552063c384392cee11baa742e19 (diff)
[ADD] mrp_subcontracting: lot tracked flow test
Add a test for the following usecase: - Subcontracted product and components tracked by lot. - Create a receipt - Use the register components button in order to prefill quantity - Correct the final lot on details operation form
Diffstat (limited to 'addons/mrp_subcontracting/tests')
-rw-r--r--addons/mrp_subcontracting/tests/test_subcontracting.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/addons/mrp_subcontracting/tests/test_subcontracting.py b/addons/mrp_subcontracting/tests/test_subcontracting.py
index 8be96692ca6..9a4601f9325 100644
--- a/addons/mrp_subcontracting/tests/test_subcontracting.py
+++ b/addons/mrp_subcontracting/tests/test_subcontracting.py
@@ -330,6 +330,7 @@ class TestSubcontractingFlows(SavepointCase):
subcontractor_partner2 = self.env['res.partner'].create({
'name': 'subcontractor_partner',
'parent_id': main_partner_2.id,
+ 'company_id': self.env.ref('base.main_company').id,
})
self.env.cache.invalidate()
@@ -378,6 +379,97 @@ class TestSubcontractingFlows(SavepointCase):
self.assertEqual(sum(move_finished.mapped('product_uom_qty')), 3.0)
self.assertEqual(sum(move_finished.mapped('quantity_done')), 3.0)
+ def test_flow_6(self):
+ """ Process a subcontracting receipt with tracked component and
+ finished product. Simulate the regiter components button.
+ Once the components are registered, try to do a correction on exisiting
+ move lines and check that the subcontracting document is updated.
+ """
+ # Create a receipt picking from the subcontractor
+ (self.comp1 | self.comp2 | self.finished).write({'tracking': 'lot'})
+ picking_form = Form(self.env['stock.picking'])
+ picking_form.picking_type_id = self.env.ref('stock.picking_type_in')
+ picking_form.partner_id = self.subcontractor_partner1
+ with picking_form.move_ids_without_package.new() as move:
+ move.product_id = self.finished
+ move.product_uom_qty = 5
+ picking_receipt = picking_form.save()
+ picking_receipt.action_confirm()
+ mo = picking_receipt.move_lines.move_orig_ids.production_id
+ move_comp1 = mo.move_raw_ids.filtered(lambda m: m.product_id == self.comp1)
+ move_comp2 = mo.move_raw_ids.filtered(lambda m: m.product_id == self.comp2)
+ # move_finished is linked to receipt and not MO finished move.
+ move_finished = picking_receipt.move_lines
+
+ self.assertEqual(move_comp1.quantity_done, 0)
+ self.assertEqual(move_comp2.quantity_done, 0)
+
+ lot_c1 = self.env['stock.production.lot'].create({
+ 'name': 'LOT C1',
+ 'product_id': self.comp1.id
+ })
+ lot_c2 = self.env['stock.production.lot'].create({
+ 'name': 'LOT C2',
+ 'product_id': self.comp2.id
+ })
+ lot_f1 = self.env['stock.production.lot'].create({
+ 'name': 'LOT F1',
+ 'product_id': self.finished.id
+ })
+
+ register_form = Form(self.env['mrp.product.produce'].with_context(
+ active_id=picking_receipt._get_subcontracted_productions().id,
+ default_subcontract_move_id=picking_receipt.move_lines.id
+ ))
+ register_form.qty_producing = 3.0
+ self.assertEqual(len(register_form._values['raw_workorder_line_ids']), 2,
+ 'Register Components Form should contains one line per component.')
+ self.assertTrue(all(p[2]['product_id'] in (self.comp1 | self.comp2).ids for p in register_form._values['raw_workorder_line_ids']),
+ 'Register Components Form should contains component.')
+ with register_form.raw_workorder_line_ids.edit(0) as pl:
+ pl.lot_id = lot_c1
+ with register_form.raw_workorder_line_ids.edit(1) as pl:
+ pl.lot_id = lot_c2
+ register_form.finished_lot_id = lot_f1
+ register_wizard = register_form.save()
+ action = register_wizard.continue_production()
+ register_form = Form(self.env['mrp.product.produce'].with_context(
+ **action['context']
+ ))
+ with register_form.raw_workorder_line_ids.edit(0) as pl:
+ pl.lot_id = lot_c1
+ with register_form.raw_workorder_line_ids.edit(1) as pl:
+ pl.lot_id = lot_c2
+ register_form.finished_lot_id = lot_f1
+ register_wizard = register_form.save()
+ register_wizard.do_produce()
+
+ self.assertEqual(move_comp1.quantity_done, 5.0)
+ self.assertEqual(move_comp1.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_id.name, 'LOT C1')
+ self.assertEqual(move_comp2.quantity_done, 5.0)
+ self.assertEqual(move_comp2.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_id.name, 'LOT C2')
+ self.assertEqual(move_finished.quantity_done, 5.0)
+ self.assertEqual(move_finished.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_id.name, 'LOT F1')
+
+ corrected_final_lot = self.env['stock.production.lot'].create({
+ 'name': 'LOT F2',
+ 'product_id': self.finished.id
+ })
+
+ details_operation_form = Form(picking_receipt.move_lines, view=self.env.ref('mrp_subcontracting.view_stock_move_operations_inherit_mrp_subcontracting'))
+ for i in range(len(details_operation_form._values['move_line_ids'])):
+ with details_operation_form.move_line_ids.edit(i) as ml:
+ if ml._values['qty_done']:
+ ml.lot_id = corrected_final_lot
+ for i in range(len(details_operation_form._values['subcontract_components_ids'])):
+ with details_operation_form.subcontract_components_ids.edit(i) as sc:
+ if sc._values['qty_done']:
+ sc.lot_produced_ids.remove(index=0)
+ sc.lot_produced_ids.add(corrected_final_lot)
+ details_operation_form.save()
+
+ self.assertEqual(move_comp1.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_produced_ids.name, 'LOT F2')
+ self.assertEqual(move_comp2.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_produced_ids.name, 'LOT F2')
class TestSubcontractingTracking(TransactionCase):
def setUp(self):