Merge branch 'master' into develop
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index edbd9a2..ef1e4ed 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -4,7 +4,7 @@
 import frappe
 from erpnext.hooks import regional_overrides
 
-__version__ = '9.0.7'
+__version__ = '9.0.8'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/subscription/subscription.js b/erpnext/accounts/doctype/subscription/subscription.js
index 9c5b264..15927d5 100644
--- a/erpnext/accounts/doctype/subscription/subscription.js
+++ b/erpnext/accounts/doctype/subscription/subscription.js
@@ -3,6 +3,12 @@
 
 frappe.ui.form.on('Subscription', {
 	setup: function(frm) {
+		frm.fields_dict['reference_doctype'].get_query = function(doc) {
+			return {
+				query: "erpnext.accounts.doctype.subscription.subscription.subscription_doctype_query"
+			};
+		};
+
 		frm.fields_dict['reference_document'].get_query = function() {
 			return {
 				filters: {
diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py
index 69010dd..8745ac6 100644
--- a/erpnext/accounts/doctype/subscription/subscription.py
+++ b/erpnext/accounts/doctype/subscription/subscription.py
@@ -291,4 +291,20 @@
 	doc.update_status(status)
 	doc.save()
 
-	return doc.status
\ No newline at end of file
+	return doc.status
+
+def subscription_doctype_query(doctype, txt, searchfield, start, page_len, filters):
+	return frappe.db.sql("""select parent from `tabDocField`
+		where fieldname = 'subscription'
+			and parent like %(txt)s
+		order by
+			if(locate(%(_txt)s, parent), locate(%(_txt)s, parent), 99999),
+			parent
+		limit %(start)s, %(page_len)s""".format(**{
+			'key': searchfield,
+		}), {
+			'txt': "%%%s%%" % txt,
+			'_txt': txt.replace("%", ""),
+			'start': start,
+			'page_len': page_len
+		})
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/job_opening.py b/erpnext/hr/doctype/job_opening/job_opening.py
index 3d935f5..60c911a 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.py
+++ b/erpnext/hr/doctype/job_opening/job_opening.py
@@ -21,7 +21,7 @@
 			self.route = frappe.scrub(self.job_title).replace('_', '-')
 
 	def get_context(self, context):
-		context.parents = [{'name': 'jobs', 'title': _('All Jobs') }]
+		context.parents = [{'route': 'jobs', 'title': _('All Jobs') }]
 
 def get_list_context(context):
 	context.title = _("Jobs")
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 31aedb3..f4d3776 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -626,4 +626,4 @@
 	frappe.msgprint(_("Production Order has been {0}").format(status))
 	pro_order.notify_update()
 
-	return pro_order.status
\ No newline at end of file
+	return pro_order.status
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 5eb8226..1b0b9eb 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -763,28 +763,41 @@
 		// });
 
 		this.wrapper.find('.additional_discount_percentage').on('change', (e) => {
+			const discount_percentage = flt(e.target.value,
+				precision("additional_discount_percentage"));
+
 			frappe.model.set_value(this.frm.doctype, this.frm.docname,
-				'additional_discount_percentage', e.target.value)
+				'additional_discount_percentage', discount_percentage)
 				.then(() => {
 					let discount_wrapper = this.wrapper.find('.discount_amount');
-					discount_wrapper.val(this.frm.doc.discount_amount);
+					discount_wrapper.val(flt(this.frm.doc.discount_amount,
+						precision('discount_amount')));
 					discount_wrapper.trigger('change');
 				});
 		});
 
 		this.wrapper.find('.discount_amount').on('change', (e) => {
+			const discount_amount = flt(e.target.value, precision('discount_amount'));
 			frappe.model.set_value(this.frm.doctype, this.frm.docname,
-				'discount_amount', flt(e.target.value));
+				'discount_amount', discount_amount);
 			this.frm.trigger('discount_amount')
 				.then(() => {
-					let discount_wrapper = this.wrapper.find('.additional_discount_percentage');
-					discount_wrapper.val(this.frm.doc.additional_discount_percentage);
+					this.update_discount_fields();
 					this.update_taxes_and_totals();
 					this.update_grand_total();
 				});
 		});
 	}
 
+	update_discount_fields() {
+		let discount_wrapper = this.wrapper.find('.additional_discount_percentage');
+		let discount_amt_wrapper = this.wrapper.find('.discount_amount');
+		discount_wrapper.val(flt(this.frm.doc.additional_discount_percentage,
+			precision('additional_discount_percentage')));
+		discount_amt_wrapper.val(flt(this.frm.doc.discount_amount,
+			precision('discount_amount')));
+	}
+
 	set_selected_item($item) {
 		this.selected_item = $item;
 		this.$cart_items.find('.list-item').removeClass('current-item qty disc rate');
@@ -848,7 +861,7 @@
 		this.search_field = frappe.ui.form.make_control({
 			df: {
 				fieldtype: 'Data',
-				label: 'Search Item (Ctrl + I)',
+				label: 'Search Item ( Ctrl + i )',
 				placeholder: 'Search by item code, serial number, batch no or barcode'
 			},
 			parent: this.wrapper.find('.search-field'),
@@ -945,16 +958,21 @@
 				if(serial_no) {
 					this.events.update_cart(items[0].item_code,
 						'serial_no', serial_no);
-					this.search_field.set_value('');
+					this.reset_search_field();
 				}
 				if(batch_no) {
 					this.events.update_cart(items[0].item_code,
 						'batch_no', batch_no);
-					this.search_field.set_value('');
+					this.reset_search_field();
 				}
 			});
 	}
 
+	reset_search_field() {
+		this.search_field.set_value('');
+		this.search_field.$input.trigger("input");
+	}
+
 	bind_events() {
 		var me = this;
 		this.wrapper.on('click', '.pos-item-wrapper', function() {
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 d74f1f0..5694ad9 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -24,6 +24,8 @@
 			if batch_no_data:
 				batch_no, item_code = batch_no_data
 
+	item_code, condition = get_conditions(item_code, serial_no, batch_no)
+
 	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
 	res = frappe.db.sql("""select i.name as item_code, i.item_name, i.image as item_image,
@@ -36,11 +38,11 @@
 		where
 			i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1
 			and i.item_group in (select name from `tabItem Group` where lft >= {lft} and rgt <= {rgt})
-			and (i.item_code like %(item_code)s
-			or i.item_name like %(item_code)s or i.barcode like %(item_code)s)
-		limit {start}, {page_length}""".format(start=start, page_length=page_length, lft=lft, rgt=rgt),
+			and {condition}
+		limit {start}, {page_length}""".format(start=start,
+			page_length=page_length, lft=lft, rgt=rgt, condition=condition),
 		{
-			'item_code': '%%%s%%'%(frappe.db.escape(item_code)),
+			'item_code': item_code,
 			'price_list': price_list
 		} , as_dict=1)
 
@@ -60,6 +62,15 @@
 
 	return res
 
+def get_conditions(item_code, serial_no, batch_no):
+	if serial_no or batch_no:
+		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)"""
+
+	return '%%%s%%'%(frappe.db.escape(item_code)), condition
+
 @frappe.whitelist()
 def submit_invoice(doc):
 	if isinstance(doc, basestring):