[pos] [cleanup]
diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js
index c27adc3..126b887 100644
--- a/accounts/doctype/sales_invoice/pos.js
+++ b/accounts/doctype/sales_invoice/pos.js
@@ -7,56 +7,66 @@
 		this.frm = frm;
 		this.wrapper.html('<div class="container">\
 			<div class="row">\
-				<div class="col-lg-4">\
-					<div class="customer-area"></div>\
-					<div class="button-area">\
-						<div class="col-lg-6">\
-							<a class="btn btn-danger col-lg-12 delete-items">\
-							<i class="icon-trash icon-large"></i></a></div>\
-						<div class="col-lg-6">\
-							<a class="btn btn-success col-lg-12 make-payment">\
-							<i class="icon-money icon-large"></i></a></div>\
-					</div>\
-					<div>&nbsp;</div>\
-					<div class="item-cart">\
-						<table class="table table-condensed">\
-							<tr>\
-								<th>Item</th>\
-								<th>#</th>\
-								<th>Rate</th>\
-								<th>Amount</th>\
-							</tr>\
-						</table>\
-						<div>\
-							<table id="cart" class="table table-condensed table-hover">\
+				<div class="customer-area col-sm-3 col-xs-6"></div>\
+				<div class="barcode-area col-sm-3 col-xs-6"></div>\
+				<div class="search-area col-sm-3 col-xs-6"></div>\
+				<div class="item-group-area col-sm-3 col-xs-6"></div>\
+			</div>\
+			<div class="row">\
+				<div class="col-sm-6">\
+					<div class="pos-bill">\
+						<div class="item-cart">\
+							<table class="table table-condensed table-hover" id="cart"  style="table-layout: fixed;">\
+								<thead>\
+									<tr>\
+										<th style="width: 50%">Item</th>\
+										<th style="width: 25%; text-align: right;">Qty</th>\
+										<th style="width: 25%; text-align: right;">Rate</th>\
+									</tr>\
+								</thead>\
+								<tbody>\
+								</tbody>\
+							</table>\
+						</div>\
+						<br>\
+						<div class="net-total-area" style="margin-left: 40%;">\
+							<table class="table table-condensed">\
+								<tr>\
+									<td><b>Net Total</b></td>\
+									<td style="text-align: right;" class="net-total"></td>\
+								</tr>\
+							</table>\
+							<div class="tax-table" style="display: none;">\
+								<table class="table table-condensed">\
+									<thead>\
+										<tr>\
+											<th style="width: 60%">Taxes</th>\
+											<th style="width: 40%; text-align: right;"></th>\
+										</tr>\
+									</thead>\
+									<tbody>\
+									</tbody>\
+								</table>\
+							</div>\
+							<table class="table table-condensed">\
+								<tr>\
+									<td style="vertical-align: middle;"><b>Grand Total</b></td>\
+									<td style="text-align: right; font-size: 200%; \
+										font-size: bold;" class="grand-total"></td>\
+								</tr>\
 							</table>\
 						</div>\
 					</div>\
-					<div>&nbsp;</div>\
-					<div class="net-total-area" style="font-weight:bold;">\
-						<div class="col-lg-6">Net Total</div>\
-						<div class="col-lg-6 net-total">&nbsp;</div>\
-					</div>\
-					<div class="tax-area" style="font-weight:bold;">\
-						<div class="col-lg-6">Tax</div>\
-						<div class="col-lg-6 tax">&nbsp;</div>\
-					</div>\
-					<div class="grand-total-area" style="font-weight:bold;">\
-						<div class="col-lg-6">Grand Total</div>\
-						<div class="col-lg-6 grand-total">&nbsp;</div>\
-					</div>\
+					<br><br>\
+					<button class="btn btn-success btn-lg make-payment">\
+					<i class="icon-money"></i> Make Payment</button>\
+					<button class="btn btn-default btn-lg delete-items pull-right" style="display: none;">\
+					<i class="icon-trash"></i> Del</button>\
+					<br><br>\
 				</div>\
-				<div class="col-lg-8">\
-					<div class="search-fields-area">\
-						<div class="col-lg-4">\
-							<div class="barcode-area"></div></div>\
-						<div class="col-lg-4">\
-							<div class="search-area"></div></div>\
-						<div class="col-lg-4">\
-							<div class="item-group-area"></div></div>\
-					</div>\
+				<div class="col-sm-6">\
 					<div class="item-list-area">\
-						<div class="col-lg-12">\
+						<div class="col-sm-12">\
 							<div class="row item-list"></div></div>\
 					</div>\
 				</div>\
@@ -91,7 +101,8 @@
 				"fieldtype": "Link",
 				"options": "Customer",
 				"label": "Customer",
-				"fieldname": "pos_customer"
+				"fieldname": "pos_customer",
+				"placeholder": "Customer"
 			},
 			parent: this.wrapper.find(".customer-area")
 		});
@@ -108,7 +119,8 @@
 				"fieldtype": "Link",
 				"options": "Item Group",
 				"label": "Item Group",
-				"fieldname": "pos_item_group"
+				"fieldname": "pos_item_group",
+				"placeholder": "Filter by Item Group"
 			},
 			parent: this.wrapper.find(".item-group-area")
 		});
@@ -125,7 +137,8 @@
 				"fieldtype": "Link",
 				"options": "Item",
 				"label": "Item",
-				"fieldname": "pos_item"
+				"fieldname": "pos_item",
+				"placeholder": "Select Item"
 			},
 			parent: this.wrapper.find(".search-area")
 		});
@@ -141,7 +154,8 @@
 			df: {
 				"fieldtype": "Data",
 				"label": "Barcode",
-				"fieldname": "pos_barcode"
+				"fieldname": "pos_barcode",
+				"placeholder": "Select Barcode"
 			},
 			parent: this.wrapper.find(".barcode-area")
 		});
@@ -164,28 +178,30 @@
 				me.wrapper.find(".item-list").empty();
 				$.each(r.message, function(index, obj) {
 					if (obj.image)
-						image = "<img src='" + obj.image + "' width='112px' height='125px'>";
+						image = "<img src='" + obj.image + "' class='img-responsive'>";
 					else
-						image = "<div class='missing-image'><i class='icon-camera'></i></div>";
+						image = '<div class="missing-image"><i class="icon-camera"></i></div>';
 
-					$(repl('<div class="col-lg-3 item">\
-							<a data-item_code="%(item_code)s">\
-							<table>\
-							<tr><td colspan="2">%(item_image)s</td></tr>\
-							<tr><td>%(item_code)s</td>\
-							<td rowspan="2">%(item_price)s</td></tr>\
-							<tr><td>%(item_name)s</td>\
-							</tr></table></a></div>', 
+					$(repl('<div class="col-xs-3 pos-item" data-item_code="%(item_code)s">\
+								%(item_image)s\
+								<div class="small">%(item_code)s</div>\
+								<div class="small">%(item_name)s</div>\
+								<div class="small">%(item_price)s</div>\
+							</div>', 
 						{
 							item_code: obj.name,
 							item_price: format_currency(obj.ref_rate, obj.ref_currency),
-							item_name: obj.item_name,
+							item_name: obj.name===obj.item_name ? "" : obj.item_name,
 							item_image: image
 						})).appendTo($wrap);
 				});
 
-				$("div.item").on("click", function() {
-					me.add_to_cart($(this).find("a").attr("data-item_code"));
+				$("div.pos-item").on("click", function() {
+					if(!cur_frm.doc.customer) {
+						msgprint("Please select customer first.");
+						return;
+					}
+					me.add_to_cart($(this).attr("data-item_code"));
 				});
 			}
 		});
@@ -195,7 +211,7 @@
 		var caught = false;
 
 		// get no_of_items
-		no_of_items = me.wrapper.find("#cart tr").length;
+		no_of_items = me.wrapper.find("#cart tbody").length;
 
 		// check whether the item is already added
 		if (no_of_items != 0) {
@@ -214,7 +230,7 @@
 			var child = wn.model.add_child(me.frm.doc, "Sales Invoice Item", "entries");
 			child.item_code = item_code;
 			me.frm.cscript.item_code(me.frm.doc, child.doctype, child.name);
-			me.refresh();
+			//me.refresh();
 		}
 	},
 	update_qty: function(item_code, qty) {
@@ -238,18 +254,19 @@
 		this.barcode.set_input("");
 
 		// add items
-		var $items = me.wrapper.find("#cart").empty();
+		var $items = me.wrapper.find("#cart tbody").empty();
 
 		$.each(wn.model.get_children("Sales Invoice Item", this.frm.doc.name, "entries", 
-		"Sales Invoice"), function(i, d) {
+			"Sales Invoice"), function(i, d) {
 			$(repl('<tr id="%(item_code)s" data-selected="false">\
-				<td>%(item_code)s <br> %(item_name)s</td>\
-				<td><input type="text" value="%(qty)s" class="form-control qty"></td>\
-				<td>%(rate)s</td>\
-				<td>%(amount)s</td></tr>',
+					<td>%(item_code)s%(item_name)s</td>\
+					<td><input type="text" value="%(qty)s" \
+						class="form-control qty" style="text-align: right;"></td>\
+					<td style="text-align: right;">%(rate)s<br><b>%(amount)s</b></td>\
+				</tr>',
 				{
 					item_code: d.item_code,
-					item_name: d.item_name,
+					item_name: d.item_name===d.item_code ? "" : ("<br>" + d.item_name),
 					qty: d.qty,
 					rate: format_currency(d.ref_rate, cur_frm.doc.price_list_currency),
 					amount: format_currency(d.export_amount, cur_frm.doc.price_list_currency)
@@ -257,11 +274,26 @@
 			)).appendTo($items);
 		});
 
+		// taxes
+		var taxes = wn.model.get_children("Sales Taxes and Charges", this.frm.doc.name, "other_charges", 
+			"Sales Invoice");
+		$(".tax-table")
+			.toggle((taxes && taxes.length) ? true : false)
+			.find("tbody").empty();
+		
+		$.each(taxes, function(i, d) {
+			$(repl('<tr>\
+				<td>%(description)s</td>\
+				<td style="text-align: right;">%(tax_amount)s</td>\
+			<tr>', {
+				description: d.description,
+				tax_amount: format_currency(d.tax_amount, me.frm.doc.price_list_currency)
+			})).appendTo(".tax-table tbody")
+		});
+
 		// set totals
 		this.wrapper.find(".net-total").text(format_currency(this.frm.doc.net_total_export, 
 			cur_frm.doc.price_list_currency));
-		this.wrapper.find(".tax").text(format_currency(this.frm.doc.other_charges_total_export, 
-			cur_frm.doc.price_list_currency));
 		this.wrapper.find(".grand-total").text(format_currency(this.frm.doc.grand_total_export, 
 			cur_frm.doc.price_list_currency));
 
@@ -282,7 +314,14 @@
 				row.prop("class", null);
 				row.attr("data-selected", "false");
 			}
+			me.refresh_delete_btn();
+			
 		});
+		
+		me.refresh_delete_btn();
+	},
+	refresh_delete_btn: function() {
+		$(".delete-items").toggle($(".item-cart .warning").length ? true : false);		
 	},
 	add_item_thru_barcode: function() {
 		var me = this;
@@ -302,9 +341,9 @@
 	remove_selected_item: function() {
 		var me = this;
 		var selected_items = [];
-		var no_of_items = $("#cart tr").length;
+		var no_of_items = $("#cart tbody tr").length;
 		for(var x=0; x<=no_of_items - 1; x++) {
-			var row = $("#cart tr:eq(" + x + ")");
+			var row = $("#cart tbody tr:eq(" + x + ")");
 			if(row.attr("data-selected") == "true") {
 				selected_items.push(row.attr("id"));
 			}
@@ -327,7 +366,7 @@
 	},
 	make_payment: function() {
 		var me = this;
-		var no_of_items = $("#cart tr").length;
+		var no_of_items = $("#cart tbody tr").length;
 		var mode_of_payment = [];
 		
 		if (no_of_items == 0)
@@ -356,6 +395,8 @@
 					});
 					dialog.show();
 					
+					dialog.get_input("total_amount").attr("disabled", "disabled");
+					
 					dialog.fields_dict.pay.input.onclick = function() {
 						cur_frm.set_value("mode_of_payment", dialog.get_values().mode_of_payment);
 						cur_frm.set_value("paid_amount", dialog.get_values().total_amount);
diff --git a/accounts/doctype/sales_invoice/pos.py b/accounts/doctype/sales_invoice/pos.py
index f7dacf1..2f2ad6a 100644
--- a/accounts/doctype/sales_invoice/pos.py
+++ b/accounts/doctype/sales_invoice/pos.py
@@ -9,14 +9,18 @@
 	condition = ""
 	
 	if item_group and item_group != "All Item Groups":
-		condition = "where i.item_group='%s'" % item_group
+		condition = "and i.item_group='%s'" % item_group
 
 	if item:
-		condition = "where i.name='%s'" % item
+		condition = "and i.name='%s'" % item
 
-	return webnotes.conn.sql("""select i.name, i.item_name, i.image, ip.ref_rate, 
-		ip.ref_currency from `tabItem` i LEFT JOIN `tabItem Price` ip ON ip.parent=i.name 
-		and ip.price_list=%s %s""" % ('%s', condition), (price_list), as_dict=1)
+	return webnotes.conn.sql("""select 
+		i.name, i.item_name, i.image, ip.ref_rate, ip.ref_currency 
+		from `tabItem` i LEFT JOIN `tabItem Price` ip 
+			ON ip.parent=i.name 
+			and ip.price_list=%s 
+		where
+			i.is_sales_item='Yes'%s""" % ('%s', condition), (price_list), as_dict=1)
 
 @webnotes.whitelist()
 def get_item_from_barcode(barcode):
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index 3baa226..5d11ecb 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -26,8 +26,7 @@
 			}
 		}
 		
-		pos_view = cint(sys_defaults.fs_pos_view);
-		if(this.frm.doc.is_pos && this.frm.doc.docstatus===0 && pos_view===1) {
+		if(this.frm.doc.is_pos && this.frm.doc.docstatus===0) {
 			cur_frm.cscript.toggle_pos(true);
 		}
 	},
@@ -60,7 +59,7 @@
 				cur_frm.add_custom_button('Make Payment Entry', cur_frm.cscript.make_bank_voucher);
 		}
 
-		if (this.frm.doc.docstatus===0) {
+		if (doc.docstatus===0) {
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
 				function() {
 					wn.model.map_current_doc({
@@ -97,11 +96,18 @@
 			
 			if (cint(sys_defaults.fs_pos_view)===1)
 				cur_frm.cscript.pos_btn();
+				
+			setTimeout(function() { cur_frm.$pos_btn.click(); }, 1000);
+				
+		} else {
+			// hide shown pos for submitted records
+			if(cur_frm.pos_active) cur_frm.cscript.toggle_pos(false);
 		}
 	},
 
 	pos_btn: function() {
-		if(cur_frm.$pos_btn) cur_frm.$pos_btn.remove();
+		if(cur_frm.$pos_btn) 
+			cur_frm.$pos_btn.remove();
 
 		if(!cur_frm.pos_active) {
 			var btn_label = wn._("POS View"),
@@ -111,11 +117,11 @@
 				icon = "icon-file-text";
 		}
 
-		cur_frm.add_custom_button(btn_label, function() {
-			cur_frm.$pos_btn = $(this);
+		cur_frm.$pos_btn = cur_frm.add_custom_button(btn_label, function() {
 			cur_frm.cscript.toggle_pos();
 			cur_frm.cscript.pos_btn();
 		}, icon);
+		
 	},
 
 	toggle_pos: function(show) {
diff --git a/startup/install.py b/startup/install.py
index 7e9273c..ea281b8 100644
--- a/startup/install.py
+++ b/startup/install.py
@@ -72,7 +72,7 @@
 		'fs_exports', 'fs_imports', 'fs_discounts', 'fs_purchase_discounts',
 		'fs_after_sales_installations', 'fs_projects', 'fs_sales_extras',
 		'fs_recurring_invoice', 'fs_pos', 'fs_manufacturing', 'fs_quality',
-		'fs_page_break', 'fs_more_info'
+		'fs_page_break', 'fs_more_info', 'fs_pos_view'
 	]
 	doc.fields.update(dict(zip(flds, [1]*len(flds))))
 	doc.save()
diff --git a/utilities/make_demo.py b/utilities/make_demo.py
index 809a12b..2884144 100644
--- a/utilities/make_demo.py
+++ b/utilities/make_demo.py
@@ -24,13 +24,14 @@
 runs_for = 20
 prob = {
 	"default": { "make": 0.6, "qty": (1,5) },
+	"Sales Order": { "make": 0.4, "qty": (1,3) },
 	"Purchase Order": { "make": 0.7, "qty": (1,15) },
 	"Purchase Receipt": { "make": 0.7, "qty": (1,15) },
 }
 
 def make(reset=False):
 	webnotes.connect()
-	webnotes.print_messages = True
+	#webnotes.print_messages = True
 	webnotes.mute_emails = True
 	webnotes.rollback_on_exception = True