diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
index ce795ad..41e7a3f 100644
--- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
+++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js
@@ -8,17 +8,13 @@
 			if (!item.item_code) {
 				frappe.throw(__('Please enter Item Code to get Batch Number'));
 			} else {
+				let filters = {'item_code': item.item_code};
+
 				if (frm.doc.status == 'In Progress') {
-					let filters = {
-						'item_code': item.item_code,
-						'posting_date': frm.doc.start_date || frappe.datetime.nowdate()
-					};
+					filters['posting_date'] = frm.doc.start_date || frappe.datetime.nowdate();
 					if (frm.doc.warehouse) filters['warehouse'] = frm.doc.warehouse;
-				} else {
-					filters = {
-						'item_code': item.item_code
-					};
 				}
+
 				return {
 					query : 'erpnext.controllers.queries.get_batch_no',
 					filters: filters
@@ -64,80 +60,78 @@
 				function(doc) { return (doc.qty<=doc.actual_qty) ? 'green' : 'orange' ; });
 		}
 
-		if (frm.doc.docstatus == 2 && frm.doc.status == 'In Progress') {
-			let btn_label = '';
-			let msg = '';
-			if (frm.doc.consume_stock) {
-				btn_label = 'Complete and Consume';
-				msg = 'Complete '+ frm.doc.name +' and Consume Stock?';
-			} else {
-				btn_label = 'Complete';
-				msg = 'Complete '+ frm.doc.name +'?';
-			}
+		if (frm.doc.docstatus == 2) {
+			if (frm.doc.status == 'In Progress') {
+				let btn_label = '';
+				let msg = '';
+				if (frm.doc.consume_stock) {
+					btn_label = __('Complete and Consume');
+					msg = __('Complete {0} and Consume Stock?', [frm.doc.name]);
+				} else {
+					btn_label = 'Complete';
+					msg = __('Complete {0}?', [frm.doc.name]);
+				}
 
-			frm.add_custom_button(__(btn_label), function () {
-				frappe.confirm(
-					__(msg),
-					function() {
-						frappe.call({
-							doc: frm.doc,
-							method: 'complete',
-							callback: function(r) {
-								if (!r.exc) {
+				frm.add_custom_button(__(btn_label), function () {
+					frappe.confirm(
+						msg,
+						function() {
+							frappe.call({
+								doc: frm.doc,
+								method: 'complete_procedure',
+								callback: function(r) {
+									if (!r.exc) {
+										cur_frm.reload_doc();
+									}
+								}
+							});
+						}
+					);
+				});
+
+			} else if (frm.doc.status == 'Pending') {
+				frm.add_custom_button(__('Start'), function() {
+					frappe.call({
+						doc: frm.doc,
+						method: 'start_procedure',
+						callback: function(r) {
+							if (!r.exc) {
+								if (r.data.message == 'insufficient stock') {
+									frappe.confirm(
+										__('Stock quantity to start the procedure is not available in the warehouse. Do you want to record a Stock Transfer?'),
+										function() {
+											frappe.call({
+												doc: frm.doc,
+												method: 'make_material_transfer',
+												callback: function(r) {
+													if (!r.exc) {
+														cur_frm.reload_doc();
+														let doclist = frappe.model.sync(r.message);
+														frappe.set_route('Form', doclist[0].doctype, doclist[0].name);
+													}
+												}
+											});
+										}
+									);
+								} else {
 									cur_frm.reload_doc();
 								}
 							}
-						});
-					}
-				);
-			});
-		} else if (frm.doc.docstatus == 2 && frm.doc.status == 'Pending') {
-			frm.add_custom_button(__('Start'), function () {
-				frappe.call({
-					doc: frm.doc,
-					method: 'start',
-					callback: function(r) {
-						if (!r.exc) {
-							if (frm.doc.status == 'Draft') {
-								frappe.confirm(
-									__('Stock quantity to start procedure is not available in the warehouse. Do you want to record a Stock Transfer'),
-									function() {
-										frappe.call({
-											doc: frm.doc,
-											method: 'make_material_transfer',
-											callback: function(r) {
-												if (!r.exc) {
-													cur_frm.reload_doc();
-													let doclist = frappe.model.sync(r.message);
-													frappe.set_route('Form', doclist[0].doctype, doclist[0].name);
-												}
-											}
-										});
-									}
-								);
-							} else {
-								cur_frm.reload_doc();
-							}
 						}
-					}
+					});
 				});
-			});
+			}
 		}
-		if (frm.doc.__islocal) {
-			frm.set_df_property('consumables', 'hidden', 1);
-		} else {
-			frm.set_df_property('consumables', 'hidden', 0);
-		}
+
 	},
+
 	onload: function(frm) {
-		if (frm.doc.status == 'Completed') {
-			frm.set_df_property('items', 'read_only', 1);
-		}
 		if (frm.is_new()) {
 			frm.add_fetch('procedure_template', 'medical_department', 'medical_department');
 			frm.set_value('start_time', null);
 		}
 	},
+
 	patient: function(frm) {
 		if (frm.doc.patient) {
 			frappe.call({
@@ -149,10 +143,10 @@
 					let age = '';
 					if (data.message.dob) {
 						age = calculate_age(data.message.dob);
-					}else if (data.message.age) {
+					} else if (data.message.age) {
 						age = data.message.age;
 						if (data.message.age_as_on) {
-							age = age+' as on '+data.message.age_as_on;
+							age = __('{0} as on {1}', [age, data.message.age_as_on]);
 						}
 					}
 					frm.set_value('patient_age', age);
@@ -164,6 +158,7 @@
 			frm.set_value('patient_sex', '');
 		}
 	},
+
 	appointment: function(frm) {
 		if (frm.doc.appointment) {
 			frappe.call({
@@ -184,6 +179,7 @@
 			});
 		}
 	},
+
 	procedure_template: function(frm) {
 		if (frm.doc.procedure_template) {
 			frappe.call({
@@ -213,6 +209,7 @@
 			frm.set_value('consume_stock', 0);
 		}
 	},
+
 	service_unit: function(frm) {
 		if (frm.doc.service_unit) {
 			frappe.call({
@@ -230,6 +227,7 @@
 			});
 		}
 	},
+
 	practitioner: function(frm) {
 		if (frm.doc.practitioner) {
 			frappe.call({
@@ -254,14 +252,6 @@
 	};
 });
 
-cur_frm.set_query('appointment', function() {
-	return {
-		filters: {
-			status:['in',['Open']]
-		}
-	};
-});
-
 frappe.ui.form.on('Clinical Procedure Item', {
 	qty: function(frm, cdt, cdn) {
 		let d = locals[cdt][cdn];
