Merge pull request #11147 from rohitwaghchaure/total_amount_and_barcode_issue_pos

[Fix] Barcode and total amount issue in online POS
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index c042244..8bbbc3f 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -101,16 +101,13 @@
 						if (!this.payment) {
 							this.make_payment_modal();
 						} else {
-							const mop_field = this.payment.default_mop;
-							let amount = 0.0;
 							this.frm.doc.payments.map(p => {
-								if (p.mode_of_payment == mop_field) {
-									amount = p.amount;
-									return;
+								if (p.amount) {
+									this.payment.dialog.set_value(p.mode_of_payment, p.amount);
 								}
 							});
 
-							this.payment.dialog.set_value(mop_field, flt(amount));
+							this.payment.set_title();
 						}
 						this.payment.open_modal();
 					}
@@ -1185,12 +1182,7 @@
 
 	make() {
 		this.set_flag();
-
-		let title = __('Total Amount {0}',
-			[format_currency(this.frm.doc.grand_total, this.frm.doc.currency)]);
-
 		this.dialog = new frappe.ui.Dialog({
-			title: title,
 			fields: this.get_fields(),
 			width: 800
 		});
@@ -1213,6 +1205,13 @@
 		});
 	}
 
+	set_title() {
+		let title = __('Total Amount {0}',
+			[format_currency(this.frm.doc.grand_total, this.frm.doc.currency)]);
+
+		this.dialog.set_title(title);
+	}
+
 	bind_events() {
 		var me = this;
 		$(this.dialog.body).find('.input-with-feedback').focusin(function() {
@@ -1234,10 +1233,6 @@
 		const me = this;
 
 		let fields = this.frm.doc.payments.map(p => {
-			if (p.default) {
-				this.default_mop = p.mode_of_payment;
-			}
-
 			return {
 				fieldtype: 'Currency',
 				label: __(p.mode_of_payment),
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py
index 5694ad9..b92c653 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -9,6 +9,8 @@
 def get_items(start, page_length, price_list, item_group, search_value=""):
 	serial_no = ""
 	batch_no = ""
+	barcode = ""
+
 	item_code = search_value
 	if not frappe.db.exists('Item Group', item_group):
 		item_group = get_root_of('Item Group')
@@ -24,7 +26,12 @@
 			if batch_no_data:
 				batch_no, item_code = batch_no_data
 
-	item_code, condition = get_conditions(item_code, serial_no, batch_no)
+		if not serial_no and not batch_no:
+			barcode_data = frappe.db.get_value('Item', {'barcode': search_value}, ['name', 'barcode'])
+			if barcode_data:
+				item_code, barcode = barcode_data
+
+	item_code, condition = get_conditions(item_code, serial_no, batch_no, barcode)
 
 	lft, rgt = frappe.db.get_value('Item Group', item_group, ['lft', 'rgt'])
 	# locate function is used to sort by closest match from the beginning of the value
@@ -62,12 +69,12 @@
 
 	return res
 
-def get_conditions(item_code, serial_no, batch_no):
-	if serial_no or batch_no:
+def get_conditions(item_code, serial_no, batch_no, barcode):
+	if serial_no or batch_no or barcode:
 		return frappe.db.escape(item_code), "i.item_code = %(item_code)s"
 
 	condition = """(i.item_code like %(item_code)s
-			or i.item_name like %(item_code)s or i.barcode like %(item_code)s)"""
+			or i.item_name like %(item_code)s)"""
 
 	return '%%%s%%'%(frappe.db.escape(item_code)), condition