summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/mrp/models/mrp_production.py1
-rw-r--r--addons/mrp/tests/test_procurement.py66
2 files changed, 66 insertions, 1 deletions
diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py
index c62d7ac7657..2926eba8f79 100644
--- a/addons/mrp/models/mrp_production.py
+++ b/addons/mrp/models/mrp_production.py
@@ -685,7 +685,6 @@ class MrpProduction(models.Model):
move = self.move_raw_ids.filtered(lambda x: x.bom_line_id.id == bom_line.id and x.state not in ('done', 'cancel'))
if move:
old_qty = move[0].product_uom_qty
- remaining_qty = move[0].raw_material_production_id.product_qty - move[0].raw_material_production_id.qty_produced
if quantity > 0:
move[0].write({'product_uom_qty': quantity})
move[0]._action_assign()
diff --git a/addons/mrp/tests/test_procurement.py b/addons/mrp/tests/test_procurement.py
index 45fced99320..cf60399acaa 100644
--- a/addons/mrp/tests/test_procurement.py
+++ b/addons/mrp/tests/test_procurement.py
@@ -137,6 +137,72 @@ class TestProcurement(TestMrpCommon):
production_product_4 = production_form.save()
production_product_4.action_confirm()
+ def test_procurement_3(self):
+ warehouse = self.env['stock.warehouse'].search([], limit=1)
+ warehouse.write({'reception_steps': 'three_steps'})
+ self.env['stock.location']._parent_store_compute()
+ warehouse.reception_route_id.rule_ids.filtered(
+ lambda p: p.location_src_id == warehouse.wh_input_stock_loc_id and
+ p.location_id == warehouse.wh_qc_stock_loc_id).write({
+ 'procure_method': 'make_to_stock'
+ })
+
+ finished_product = self.env['product.product'].create({
+ 'name': 'Finished Product',
+ 'type': 'product',
+ })
+ component = self.env['product.product'].create({
+ 'name': 'Component',
+ 'type': 'product',
+ 'route_ids': [(4, warehouse.mto_pull_id.route_id.id)]
+ })
+ self.env['stock.quant']._update_available_quantity(component, warehouse.wh_input_stock_loc_id, 100)
+ bom = self.env['mrp.bom'].create({
+ 'product_id': finished_product.id,
+ 'product_tmpl_id': finished_product.product_tmpl_id.id,
+ 'product_uom_id': self.uom_unit.id,
+ 'product_qty': 1.0,
+ 'type': 'normal',
+ 'bom_line_ids': [
+ (0, 0, {'product_id': component.id, 'product_qty': 1.0})
+ ]})
+ mo_form = Form(self.env['mrp.production'])
+ mo_form.product_id = finished_product
+ mo_form.bom_id = bom
+ mo_form.product_qty = 5
+ mo_form.product_uom_id = finished_product.uom_id
+ mo_form.location_src_id = warehouse.lot_stock_id
+ mo = mo_form.save()
+ mo.action_confirm()
+ pickings = self.env['stock.picking'].search([('product_id', '=', component.id)])
+ self.assertEqual(len(pickings), 2.0)
+ picking_input_to_qc = pickings.filtered(lambda p: p.location_id == warehouse.wh_input_stock_loc_id)
+ picking_qc_to_stock = pickings - picking_input_to_qc
+ self.assertTrue(picking_input_to_qc)
+ self.assertTrue(picking_qc_to_stock)
+ picking_input_to_qc.action_assign()
+ self.assertEqual(picking_input_to_qc.state, 'assigned')
+ picking_input_to_qc.move_line_ids.write({'qty_done': 5.0})
+ picking_input_to_qc._action_done()
+ picking_qc_to_stock.action_assign()
+ self.assertEqual(picking_qc_to_stock.state, 'assigned')
+ picking_qc_to_stock.move_line_ids.write({'qty_done': 3.0})
+ picking_qc_to_stock.with_context(skip_backorder=True, picking_ids_not_to_backorder=picking_qc_to_stock.ids).button_validate()
+ self.assertEqual(picking_qc_to_stock.state, 'done')
+ mo.action_assign()
+ self.assertEqual(mo.move_raw_ids.reserved_availability, 3.0)
+ produce_form = Form(self.env['mrp.product.produce'].with_context({
+ 'active_id': mo.id,
+ 'active_ids': [mo.id],
+ }))
+ produce_form.qty_producing = 3.0
+ produce_wizard = produce_form.save()
+ produce_wizard.do_produce()
+ self.assertEqual(mo.move_raw_ids.quantity_done, 3.0)
+ picking_qc_to_stock.move_line_ids.qty_done = 5.0
+ self.assertEqual(mo.move_raw_ids.reserved_availability, 5.0)
+ self.assertEqual(mo.move_raw_ids.quantity_done, 3.0)
+
def test_date_propagation(self):
""" Check propagation of shedule date for manufaturing route."""