diff --git a/erpnext/healthcare/doctype/inpatient_record/inpatient_record.js b/erpnext/healthcare/doctype/inpatient_record/inpatient_record.js
index b640239..971e166 100644
--- a/erpnext/healthcare/doctype/inpatient_record/inpatient_record.js
+++ b/erpnext/healthcare/doctype/inpatient_record/inpatient_record.js
@@ -11,24 +11,24 @@
 		];
 	},
 	refresh: function(frm) {
-		if(!frm.doc.__islocal && (frm.doc.status == 'Admission Scheduled' || frm.doc.status == 'Admitted')) {
+		if (!frm.doc.__islocal && (frm.doc.status == 'Admission Scheduled' || frm.doc.status == 'Admitted')) {
 			frm.enable_save();
 		} else {
 			frm.disable_save();
 		}
 
-		if(!frm.doc.__islocal && frm.doc.status == 'Admission Scheduled') {
+		if (!frm.doc.__islocal && frm.doc.status == 'Admission Scheduled') {
 			frm.add_custom_button(__('Admit'), function() {
 				admit_patient_dialog(frm);
 			} );
 		}
 
-		if(!frm.doc.__islocal && frm.doc.status == 'Discharge Scheduled') {
+		if (!frm.doc.__islocal && frm.doc.status == 'Discharge Scheduled') {
 			frm.add_custom_button(__('Discharge'), function() {
 				discharge_patient(frm);
 			} );
 		}
-		if(!frm.doc.__islocal && frm.doc.status != 'Admitted') {
+		if (!frm.doc.__islocal && frm.doc.status != 'Admitted') {
 			frm.disable_save();
 			frm.set_df_property('btn_transfer', 'hidden', 1);
 		} else {
@@ -40,22 +40,22 @@
 	}
 });
 
-var discharge_patient = function(frm) {
+let discharge_patient = function(frm) {
 	frappe.call({
 		doc: frm.doc,
 		method: 'discharge',
 		callback: function(data) {
-			if(!data.exc){
+			if (!data.exc) {
 				frm.reload_doc();
 			}
 		},
 		freeze: true,
-		freeze_message: 'Processing Inpatient Discharge'
+		freeze_message: __('Processing Inpatient Discharge')
 	});
 };
 
-var admit_patient_dialog = function(frm){
-	var dialog = new frappe.ui.Dialog({
+let admit_patient_dialog = function(frm) {
+	let dialog = new frappe.ui.Dialog({
 		title: 'Admit Patient',
 		width: 100,
 		fields: [
@@ -74,13 +74,13 @@
 		],
 		primary_action_label: __('Admit'),
 		primary_action : function(){
-			var service_unit = dialog.get_value('service_unit');
-			var check_in = dialog.get_value('check_in');
-			var expected_discharge = null;
-			if(dialog.get_value('expected_discharge')){
+			let service_unit = dialog.get_value('service_unit');
+			let check_in = dialog.get_value('check_in');
+			let expected_discharge = null;
+			if (dialog.get_value('expected_discharge')) {
 				expected_discharge = dialog.get_value('expected_discharge');
 			}
-			if(!service_unit && !check_in){
+			if (!service_unit && !check_in) {
 				return;
 			}
 			frappe.call({
@@ -92,12 +92,12 @@
 					'expected_discharge': expected_discharge
 				},
 				callback: function(data) {
-					if(!data.exc){
+					if (!data.exc) {
 						frm.reload_doc();
 					}
 				},
 				freeze: true,
-				freeze_message: 'Processing Patient Admission'
+				freeze_message: __('Processing Patient Admission')
 			});
 			frm.refresh_fields();
 			dialog.hide();
@@ -126,21 +126,21 @@
 	dialog.show();
 };
 
-var transfer_patient_dialog = function(frm){
-	var dialog = new frappe.ui.Dialog({
+let transfer_patient_dialog = function(frm) {
+	let dialog = new frappe.ui.Dialog({
 		title: 'Transfer Patient',
 		width: 100,
 		fields: [
-			{fieldtype: "Link", label: "Leave From", fieldname: "leave_from", options: "Healthcare Service Unit", reqd: 1, read_only:1},
-			{fieldtype: "Link", label: "Service Unit Type", fieldname: "service_unit_type", options: "Healthcare Service Unit Type"},
-			{fieldtype: "Link", label: "Transfer To", fieldname: "service_unit", options: "Healthcare Service Unit", reqd: 1},
-			{fieldtype: "Datetime", label: "Check In", fieldname: "check_in", reqd: 1}
+			{fieldtype: 'Link', label: 'Leave From', fieldname: 'leave_from', options: 'Healthcare Service Unit', reqd: 1, read_only:1},
+			{fieldtype: 'Link', label: 'Service Unit Type', fieldname: 'service_unit_type', options: 'Healthcare Service Unit Type'},
+			{fieldtype: 'Link', label: 'Transfer To', fieldname: 'service_unit', options: 'Healthcare Service Unit', reqd: 1},
+			{fieldtype: 'Datetime', label: 'Check In', fieldname: 'check_in', reqd: 1}
 		],
-		primary_action_label: __("Transfer"),
-		primary_action : function(){
-			var service_unit = null;
-			var check_in = dialog.get_value('check_in');
-			var leave_from = null;
+		primary_action_label: __('Transfer'),
+		primary_action : function() {
+			let service_unit = null;
+			let check_in = dialog.get_value('check_in');
+			let leave_from = null;
 			if(dialog.get_value('leave_from')){
 				leave_from = dialog.get_value('leave_from');
 			}
@@ -159,47 +159,47 @@
 					'leave_from': leave_from
 				},
 				callback: function(data) {
-					if(!data.exc){
+					if (!data.exc) {
 						frm.reload_doc();
 					}
 				},
 				freeze: true,
-				freeze_message: "Process Transfer"
+				freeze_message: __('Process Transfer')
 			});
 			frm.refresh_fields();
 			dialog.hide();
 		}
 	});
 
-	dialog.fields_dict["leave_from"].get_query = function(){
+	dialog.fields_dict['leave_from'].get_query = function(){
 		return {
-			query : "erpnext.healthcare.doctype.inpatient_record.inpatient_record.get_leave_from",
+			query : 'erpnext.healthcare.doctype.inpatient_record.inpatient_record.get_leave_from',
 			filters: {docname:frm.doc.name}
 		};
 	};
-	dialog.fields_dict["service_unit_type"].get_query = function(){
+	dialog.fields_dict['service_unit_type'].get_query = function(){
 		return {
 			filters: {
-				"inpatient_occupancy": 1,
-				"allow_appointments": 0
+				'inpatient_occupancy': 1,
+				'allow_appointments': 0
 			}
 		};
 	};
-	dialog.fields_dict["service_unit"].get_query = function(){
+	dialog.fields_dict['service_unit'].get_query = function(){
 		return {
 			filters: {
-				"is_group": 0,
-				"service_unit_type": dialog.get_value("service_unit_type"),
-				"occupancy_status" : "Vacant"
+				'is_group': 0,
+				'service_unit_type': dialog.get_value('service_unit_type'),
+				'occupancy_status' : 'Vacant'
 			}
 		};
 	};
 
 	dialog.show();
 
-	var not_left_service_unit = null;
-	for(let inpatient_occupancy in frm.doc.inpatient_occupancies){
-		if(frm.doc.inpatient_occupancies[inpatient_occupancy].left != 1){
+	let not_left_service_unit = null;
+	for (let inpatient_occupancy in frm.doc.inpatient_occupancies) {
+		if (frm.doc.inpatient_occupancies[inpatient_occupancy].left != 1) {
 			not_left_service_unit = frm.doc.inpatient_occupancies[inpatient_occupancy].service_unit;
 		}
 	}
