Merge branch 'develop' into develop
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index cc3f277..88600e8 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -5,6 +5,7 @@
 import frappe
 from frappe.desk.reportview import get_match_cond, get_filters_cond
 from frappe.utils import nowdate
+from collections import defaultdict
 
 
  # searches for active employees
@@ -348,3 +349,46 @@
 			'company': filters.get("company", ""),
 			'txt': "%%%s%%" % frappe.db.escape(txt)
 		})
+
+
+@frappe.whitelist()
+def warehouse_query(doctype, txt, searchfield, start, page_len, filters):
+	# Should be used when item code is passed in filters.
+	conditions, bin_conditions = [], []
+	filter_dict = get_doctype_wise_filters(filters)
+
+	sub_query = """ select round(`tabBin`.actual_qty, 2) from `tabBin`
+		where `tabBin`.warehouse = `tabWarehouse`.name
+		{bin_conditions} """.format(
+		bin_conditions=get_filters_cond(doctype, filter_dict.get("Bin"), bin_conditions))
+
+	response = frappe.db.sql("""select `tabWarehouse`.name,
+		CONCAT_WS(" : ", "Actual Qty", ifnull( ({sub_query}), 0) ) as actual_qty
+		from `tabWarehouse`
+		where
+		   `tabWarehouse`.`{key}` like %(txt)s
+			{fcond} {mcond}
+		order by
+			`tabWarehouse`.name desc
+		limit
+			%(start)s, %(page_len)s
+		""".format(
+			sub_query=sub_query,
+			key=frappe.db.escape(searchfield),
+			fcond=get_filters_cond(doctype, filter_dict.get("Warehouse"), conditions),
+			mcond=get_match_cond(doctype)
+		),
+		{
+			"txt": "%%%s%%" % frappe.db.escape(txt),
+			"start": start,
+			"page_len": page_len
+		})
+	return response
+
+
+def get_doctype_wise_filters(filters):
+	# Helper function to seperate filters doctype_wise
+	filter_dict = defaultdict(list)
+	for row in filters:
+		filter_dict[row[0]].append(row)
+	return filter_dict
diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js
index f3167bb..bf7143a 100644
--- a/erpnext/public/js/queries.js
+++ b/erpnext/public/js/queries.js
@@ -133,3 +133,19 @@
 			set_query(df.options, df.fieldname);
 		});
 }
+
+/* 	if item code is selected in child table
+	then list down warehouses with its quantity
+	else apply default filters.
+*/
+erpnext.queries.setup_warehouse_query = function(frm){
+	frm.set_query('warehouse', 'items', function(doc, cdt, cdn) {
+		var row  = locals[cdt][cdn];
+		var filters = erpnext.queries.warehouse(frm.doc);
+		if(row.item_code){
+			$.extend(filters, {"query":"erpnext.controllers.queries.warehouse_query"});
+			filters["filters"].push(["Bin", "item_code", "=", row.item_code]);
+		}
+		return filters
+	});
+}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index f01e484..8130ce8 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -24,6 +24,8 @@
 		// formatter for material request item
 		frm.set_indicator_formatter('item_code',
 			function(doc) { return (doc.qty<=doc.delivered_qty) ? "green" : "orange" })
+
+		erpnext.queries.setup_warehouse_query(frm);
 	}
 });
 
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 8f87198..23806d4 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -13,14 +13,7 @@
 				return (doc.docstatus==1 || doc.qty<=doc.actual_qty) ? "green" : "orange"
 			})
 
-		frm.set_query("warehouse", "items", function() {
-			return {
-				filters: [
-					["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
-					["Warehouse", "is_group", "=", 0]
-				]
-			}
-		})
+		erpnext.queries.setup_warehouse_query(frm);
 
 	}
 });
diff --git a/erpnext/stock/doctype/warehouse/warehouse.json b/erpnext/stock/doctype/warehouse/warehouse.json
index 7272da1..9beea6c 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.json
+++ b/erpnext/stock/doctype/warehouse/warehouse.json
@@ -807,6 +807,7 @@
  "quick_entry": 1, 
  "read_only": 0, 
  "read_only_onload": 0, 
+ "search_fields": "", 
  "show_name_in_global_search": 1, 
  "sort_order": "DESC", 
  "title_field": "warehouse_name",