[feature] [bom] update cost button
diff --git a/manufacturing/doctype/bom/bom.js b/manufacturing/doctype/bom/bom.js
index 276e883..ce246d9 100644
--- a/manufacturing/doctype/bom/bom.js
+++ b/manufacturing/doctype/bom/bom.js
@@ -20,12 +20,23 @@
 	
 	if (!doc.__islocal && doc.docstatus==0) {
 		cur_frm.set_intro("Submit the BOM to use it for manufacturing or repacking.");
+		cur_frm.add_custom_button("Update Cost", cur_frm.cscript.update_cost);
 	} else cur_frm.set_intro("");
 	
 	cur_frm.cscript.with_operations(doc);
 	set_operation_no(doc);
 }
 
+cur_frm.cscript.update_cost = function() {
+	wn.call({
+		doc: cur_frm.doc,
+		method: "update_cost",
+		callback: function(r) {
+			if(!r.exc) cur_frm.refresh_fields();
+		}
+	})
+}
+
 cur_frm.cscript.with_operations = function(doc) {
 	cur_frm.fields_dict["bom_materials"].grid.set_column_disp("operation_no", doc.with_operations);
 	cur_frm.fields_dict["bom_materials"].grid.toggle_reqd("operation_no", doc.with_operations)
diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py
index b4091b9..e4c81ff 100644
--- a/manufacturing/doctype/bom/bom.py
+++ b/manufacturing/doctype/bom/bom.py
@@ -135,6 +135,17 @@
 				rate = arg['standard_rate']
 
 		return rate
+		
+	def update_cost(self):
+		for d in self.doclist.get({"parentfield": "bom_materials"}):
+			d.rate = self.get_bom_material_detail({
+				'item_code': d.item_code, 
+				'bom_no': d.bom_no,
+				'qty': d.qty
+			})["rate"]
+		
+		self.on_update()
+		
 
 	def get_bom_unitcost(self, bom_no):
 		bom = sql("""select name, total_cost/quantity as unit_cost from `tabBOM`