diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
index 1e2cb10..40f9c1c 100644
--- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
+++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
@@ -198,22 +198,10 @@
 				callback: function (data) {
 					frm.set_value('medical_department', data.message.medical_department);
 					frm.set_value('consume_stock', data.message.consume_stock);
-					if (!frm.doc.warehouse) {
-						frappe.call({
-							method: 'frappe.client.get_value',
-							args: {
-								doctype: 'Stock Settings',
-								fieldname: 'default_warehouse'
-							},
-							callback: function (data) {
-								frm.set_value('warehouse', data.message.default_warehouse);
-							}
-						});
-					}
+					frm.events.set_warehouse(frm);
+					frm.events.set_procedure_consumables(frm);
 				}
 			});
-		} else {
-			frm.set_value('consume_stock', 0);
 		}
 	},
 
@@ -248,7 +236,50 @@
 				}
 			});
 		}
+	},
+
+	set_warehouse: function(frm) {
+		if (!frm.doc.warehouse) {
+			frappe.call({
+				method: 'frappe.client.get_value',
+				args: {
+					doctype: 'Stock Settings',
+					fieldname: 'default_warehouse'
+				},
+				callback: function (data) {
+					frm.set_value('warehouse', data.message.default_warehouse);
+				}
+			});
+		}
+	},
+
+	set_procedure_consumables: function(frm) {
+		frappe.call({
+			method: 'erpnext.healthcare.doctype.clinical_procedure.clinical_procedure.get_procedure_consumables',
+			args: {
+				procedure_template: frm.doc.procedure_template
+			},
+			callback: function(data) {
+				if (data.message) {
+					frm.doc.items = []
+					$.each(data.message, function(i, v) {
+						let item = frm.add_child('items');
+						item.item_code = v.item_code;
+						item.item_name = v.item_name;
+						item.uom = v.uom;
+						item.stock_uom = v.stock_uom;
+						item.qty = flt(v.qty);
+						item.transfer_qty = v.transfer_qty;
+						item.conversion_factor = v.conversion_factor;
+						item.invoice_separately_as_consumables = v.invoice_separately_as_consumables;
+						item.batch_no = v.batch_no;
+					});
+					refresh_field('items');
+				}
+			}
+		});
 	}
+
 });
 
 cur_frm.set_query('procedure_template', function(doc) {
diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py
index f45ea78..708e041 100644
--- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py
+++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py
@@ -15,7 +15,7 @@
 class ClinicalProcedure(Document):
 	def validate(self):
 		self.set_status()
-		if self.consume_stock and not self.status == 'Draft':
+		if self.consume_stock:
 			if not self.warehouse:
 				frappe.throw(_('Set warehouse for Procedure {0} ').format(self.name))
 			self.set_actual_qty()
@@ -28,7 +28,6 @@
 
 	def before_insert(self):
 		if self.consume_stock:
-			set_stock_items(self, self.procedure_template, 'Clinical Procedure Template')
 			self.set_actual_qty()
 
 	def after_insert(self):
@@ -145,11 +144,17 @@
 		'posting_time': nowtime()
 	}).get('qty_after_transaction') or 0
 
+
+@frappe.whitelist()
+def get_procedure_consumables(procedure_template):
+	return get_items('Clinical Procedure Item', procedure_template, 'Clinical Procedure Template')
+
+
 @frappe.whitelist()
 def set_stock_items(doc, stock_detail_parent, parenttype):
-	item_dict = get_item_dict('Clinical Procedure Item', stock_detail_parent, parenttype)
+	items = get_items('Clinical Procedure Item', stock_detail_parent, parenttype)
 
-	for d in item_dict:
+	for d in items:
 		se_child = doc.append('items')
 		se_child.item_code = d['item_code']
 		se_child.item_name = d['item_name']
@@ -165,10 +170,13 @@
 			se_child.invoice_separately_as_consumables = d['invoice_separately_as_consumables']
 	return doc
 
-def get_item_dict(table, parent, parenttype):
-	query = '''select * from `tab{table}` where parent = '{parent}' and parenttype = '{parenttype}' '''
+def get_items(table, parent, parenttype):
+	items = frappe.db.get_all(table, filters={
+		'parent': parent,
+		'parenttype': parenttype
+	}, fields=['*'])
 
-	return frappe.db.sql(query.format(table=table, parent=parent, parenttype=parenttype), as_dict=True)
+	return items
 
 @frappe.whitelist()
 def make_stock_entry(doc):
