Got the solution by adding a flag variable in action_produce function in mrp.py. Here is the code... but check it once by yourself. def action_produce(self, cr, uid, production_id, production_qty, production_mode, context=None): """ To produce final product based on production mode (consume/consume&produce). If Production mode is consume, all stock move lines of raw materials will be done/consumed. If Production mode is consume & produce, all stock move lines of raw materials will be done/consumed and stock move lines of final product will be also done/produced. @param production_id: the ID of mrp.production object @param production_qty: specify qty to produce @param production_mode: specify production mode (consume/consume&produce). @return: True """ count=0 stock_mov_obj = self.pool.get('stock.move') production = self.browse(cr, uid, production_id, context=context) final_product_todo = [] produced_qty = 0 if production_mode == 'consume_produce': produced_qty = production_qty for produced_product in production.move_created_ids2: if (produced_product.scrapped) or (produced_product.product_id.id <> production.product_id.id): continue produced_qty += produced_product.product_qty if production_mode in ['consume', 'consume_produce']: consumed_products = {} check = {} scrapped = map(lambda x:x.scrapped, production.move_lines2).count(True) for consumed_product in production.move_lines2: consumed = consumed_product.product_qty if consumed_product.scrapped: continue if not consumed_products.get(consumed_product.product_id.id, False): consumed_products[consumed_product.product_id.id] = consumed_product.product_qty check[consumed_product.product_id.id] = 0 for f in production.product_lines: if f.product_id.id == consumed_product.product_id.id: if (len(production.move_lines2) - scrapped) > len(production.product_lines): check[consumed_product.product_id.id] += consumed_product.product_qty consumed = check[consumed_product.product_id.id] rest_consumed = produced_qty * f.product_qty / production.product_qty - consumed consumed_products[consumed_product.product_id.id] = rest_consumed for raw_product in production.move_lines: count=0 for f in production.product_lines: if f.product_id.id == raw_product.product_id.id and count==0: count=count+1 consumed_qty = consumed_products.get(raw_product.product_id.id, 0) if consumed_qty == 0: consumed_qty = production_qty * f.product_qty / production.product_qty if consumed_qty > 0: stock_mov_obj.action_consume(cr, uid, [raw_product.id], consumed_qty, production.location_src_id.id, context=context) if production_mode == 'consume_produce': # To produce remaining qty of final product vals = {'state':'confirmed'} #final_product_todo = [x.id for x in production.move_created_ids] #stock_mov_obj.write(cr, uid, final_product_todo, vals) #stock_mov_obj.action_confirm(cr, uid, final_product_todo, context) produced_products = {} for produced_product in production.move_created_ids2: if produced_product.scrapped: continue if not produced_products.get(produced_product.product_id.id, False): produced_products[produced_product.product_id.id] = 0 produced_products[produced_product.product_id.id] += produced_product.product_qty for produce_product in production.move_created_ids: produced_qty = produced_products.get(produce_product.product_id.id, 0) rest_qty = production.product_qty - produced_qty if rest_qty <= production_qty: production_qty = rest_qty if rest_qty > 0 : stock_mov_obj.action_consume(cr, uid, [produce_product.id], production_qty, context=context) for raw_product in production.move_lines2: new_parent_ids = [] parent_move_ids = [x.id for x in raw_product.move_history_ids] for final_product in production.move_created_ids2: if final_product.id not in parent_move_ids: new_parent_ids.append(final_product.id) for new_parent_id in new_parent_ids: stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4, new_parent_id)]}) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr) return True Hope this will resolve your problem.