[fix] [pos] pos view only for draft docs
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index fda6548..76092ed 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -73,8 +73,9 @@
 						return item.delivery_note ? true : false;
 					});
 
-				if(!from_delivery_note)
+				if(!from_delivery_note) {
 					cur_frm.appframe.add_primary_action(__('Make Delivery'), cur_frm.cscript['Make Delivery Note'], "icon-truck")
+				}
 			}
 
 			if(doc.outstanding_amount!=0) {
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index 44835ce..915bbd9 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -57,27 +57,32 @@
 		this.set_dynamic_labels();
 
 		// Show POS button only if it is enabled from features setup
-		if(cint(sys_defaults.fs_pos_view)===1 && this.frm.doctype!="Material Request" && this.frm.doc.docstatus===0)
+		if(cint(sys_defaults.fs_pos_view)===1 && this.frm.doctype!="Material Request")
 			this.make_pos_btn();
 	},
 
 	make_pos_btn: function() {
-		if(!this.pos_active) {
-			var btn_label = __("POS View"),
-				icon = "icon-th";
-		} else {
-			var btn_label = __("Form View"),
-				icon = "icon-file-text";
-		}
 		var me = this;
+		if(this.frm.doc.docstatus===0) {
+			if(!this.pos_active) {
+				var btn_label = __("POS View"),
+					icon = "icon-th";
+			} else {
+				var btn_label = __("Form View"),
+					icon = "icon-file-text";
+			}
 
-		this.$pos_btn = this.frm.appframe.add_primary_action(btn_label, function() {
-			me.toggle_pos();
-		}, icon, "btn-default");
+			if(erpnext.open_as_pos) {
+				me.toggle_pos(true);
+				erpnext.open_as_pos = false;
+			}
 
-		if(erpnext.open_as_pos) {
-			me.toggle_pos(true);
-			erpnext.open_as_pos = false;
+			this.$pos_btn = this.frm.appframe.add_primary_action(btn_label, function() {
+				me.toggle_pos();
+			}, icon, "btn-default");
+		} else {
+			// hack: will avoid calling refresh from refresh
+			setTimeout(function() { me.toggle_pos(false); }, 100);
 		}
 	},
 
@@ -86,26 +91,27 @@
 		var price_list = frappe.meta.has_field(cur_frm.doc.doctype, "selling_price_list") ?
 			this.frm.doc.selling_price_list : this.frm.doc.buying_price_list;
 
-		if (!price_list)
-			msgprint(__("Please select Price List"))
-		else {
-			if((show===true && this.pos_active) || (show===false && !this.pos_active)) return;
+		if((show===true && this.pos_active) || (show===false && !this.pos_active))
+			return;
 
-			// make pos
-			if(!this.frm.pos) {
-				this.frm.layout.add_view("pos");
-				this.frm.pos = new erpnext.POS(this.frm.layout.views.pos, this.frm);
-			}
-
-			// toggle view
-			this.frm.layout.set_view(this.pos_active ? "" : "pos");
-			this.pos_active = !this.pos_active;
-
-			// refresh
-			if(this.pos_active)
-				this.frm.pos.refresh();
-			this.frm.refresh();
+		if(show && !price_list) {
+			frappe.throw(__("Please select Price List"));
 		}
+
+		// make pos
+		if(!this.frm.pos) {
+			this.frm.layout.add_view("pos");
+			this.frm.pos = new erpnext.POS(this.frm.layout.views.pos, this.frm);
+		}
+
+		// toggle view
+		this.frm.layout.set_view(this.pos_active ? "" : "pos");
+		this.pos_active = !this.pos_active;
+
+		// refresh
+		if(this.pos_active)
+			this.frm.pos.refresh();
+		this.frm.refresh();
 	},