Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py
index 3c43c1e..baa8850 100644
--- a/selling/doctype/sales_common/sales_common.py
+++ b/selling/doctype/sales_common/sales_common.py
@@ -340,7 +340,7 @@
 					and batch_no like '%(txt)s' 
 					and exists(select * from `tabBatch` 
 							where name = sle.batch_no 
-								and expiry_date >= '%(posting_date)s' 
+								and (ifnull(expiry_date, '')='' or expiry_date >= '%(posting_date)s') 
 								and docstatus != 2) 
 					%(mcond)s
 				group by batch_no having sum(actual_qty) > 0 
@@ -353,11 +353,11 @@
 		return webnotes.conn.sql("""select name from tabBatch 
 				where docstatus != 2 
 					and item = '%(item_code)s' 
-					and expiry_date >= '%(posting_date)s' 
+					and (ifnull(expiry_date, '')='' or expiry_date >= '%(posting_date)s')
 					and name like '%(txt)s' 
 					%(mcond)s 
 				order by name desc 
 				limit %(start)s, %(page_len)s""" % {'item_code': filters['item_code'], 
 				'posting_date': filters['posting_date'], 'txt': "%%%s%%" % txt, 
 				'mcond':get_match_cond(doctype, searchfield),'start': start, 
-				'page_len': page_len})
\ No newline at end of file
+				'page_len': page_len})
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index ec2406f..8e3ed70 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -152,7 +152,8 @@
 	def validate_warehouse_user(self):
 		from stock.utils import validate_warehouse_user
 		
-		warehouses = list(set([d.reserved_warehouse for d in self.doclist.get({"doctype": self.tname})]))
+		warehouses = list(set([d.reserved_warehouse for d in 
+			self.doclist.get({"doctype": self.tname}) if d.reserved_warehouse]))
 				
 		for w in warehouses:
 			validate_warehouse_user(w)
diff --git a/utilities/demo/make_demo.py b/utilities/demo/make_demo.py
index 7600b2b..3d7d648 100644
--- a/utilities/demo/make_demo.py
+++ b/utilities/demo/make_demo.py
@@ -406,7 +406,7 @@
 	
 	for doctype in dt:
 		print "Importing", doctype.replace("_", " "), "..."
-		webnotes.form_dict = {}
+		webnotes.form_dict = webnotes._dict()
 		if submit:
 			webnotes.form_dict["params"] = json.dumps({"_submit": 1})
 		webnotes.uploaded_file = os.path.join(os.path.dirname(__file__), "demo_docs", doctype+".csv")
diff --git a/utilities/demo/make_erpnext_demo.py b/utilities/demo/make_erpnext_demo.py
index 16d57bb..31dc400 100644
--- a/utilities/demo/make_erpnext_demo.py
+++ b/utilities/demo/make_erpnext_demo.py
@@ -9,6 +9,23 @@
 	utilities.demo.make_demo.make(reset=True)
 
 def make_demo_user():
+	roles = ["Accounts Manager", "Analytics", "Expense Approver", "Accounts User", 
+		"Leave Approver", "Blogger", "Customer", "Sales Manager", "Employee", "Support Manager", 
+		"HR Manager", "HR User", "Maintenance Manager", "Maintenance User", "Material Manager", 
+		"Material Master Manager", "Material User", "Partner", "Manufacturing Manager", 
+		"Manufacturing User", "Projects User", "Purchase Manager", "Purchase Master Manager", 
+		"Purchase User", "Quality Manager", "Report Manager", "Sales Master Manager", 
+		"Sales User", "Supplier", "Support Team"]
+		
+	def add_roles(bean):
+		for role in roles:
+			p.doclist.append({
+				"doctype": "UserRole",
+				"parentfield": "user_roles",
+				"role": role
+			})
+	
+	# make demo user
 	if webnotes.conn.exists("Profile", "demo@erpnext.com"):
 		webnotes.delete_doc("Profile", "demo@erpnext.com")
 
@@ -21,25 +38,31 @@
 	p.doc.send_invite_email = 0
 	p.doc.new_password = "demo"
 	p.insert()
+	add_roles(p)
+	p.save()
 	
-	for role in ("Accounts Manager", "Analytics", "Expense Approver", "Accounts User", 
-		"Leave Approver", "Blogger", "Customer", "Sales Manager", "Employee", "Support Manager", 
-		"HR Manager", "HR User", "Maintenance Manager", "Maintenance User", "Material Manager", 
-		"Material Master Manager", "Material User", "Partner", "Manufacturing Manager", 
-		"Manufacturing User", "Projects User", "Purchase Manager", "Purchase Master Manager", 
-		"Purchase User", "Quality Manager", "Report Manager", "Sales Master Manager", "Sales User", 
-		"Supplier", "Support Team"):
-		p.doclist.append({
-			"doctype": "UserRole",
-			"parentfield": "user_roles",
-			"role": role
-		})
-
+	# make system manager user
+	if webnotes.conn.exists("Profile", "admin@erpnext.com"):
+		webnotes.delete_doc("Profile", "admin@erpnext.com")
+	
+	p = webnotes.new_bean("Profile")
+	p.doc.email = "admin@erpnext.com"
+	p.doc.first_name = "Admin"
+	p.doc.last_name = "User"
+	p.doc.enabled = 1
+	p.doc.user_type = "System User"
+	p.doc.send_invite_email = 0
+	p.doc.new_password = "admin010123"
+	p.insert()
+	roles.append("System Manager")
+	add_roles(p)
 	p.save()
 	
 	# only read for newsletter
 	webnotes.conn.sql("""update `tabDocPerm` set `write`=0, `create`=0, `cancel`=0
 		where parent='Newsletter'""")
+	webnotes.conn.sql("""update `tabDocPerm` set `write`=0, `create`=0, `cancel`=0
+		where parent='Profile' and role='All'""")
 	
 	webnotes.conn.commit()
 
@@ -66,6 +89,7 @@
 	p.insert()
 	
 	webnotes.conn.set_value("Website Settings", None, "home_page", "demo-login")
+	webnotes.conn.set_value("Website Settings", None, "disable_signup", 1)
 	
 	webnotes.conn.commit()
 
@@ -77,6 +101,10 @@
 	with open(os.path.join(os.path.dirname(__file__), "demo_control_panel.py"), "r") as dfile:
 		s.doc.script = dfile.read()
 	s.insert()
+	
+	cp = webnotes.bean("Control Panel")
+	cp.doc.custom_startup_code = """wn.ui.toolbar.show_banner('You are using ERPNext Demo. To start your own ERPNext Trial, <a href="https://erpnext.com/pricing-and-signup" target="_blank">click here</a>')"""
+	cp.save()
 
 	webnotes.conn.commit()
 
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index d2bffcf..aace0cb 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -55,6 +55,8 @@
 		return self._party_type_and_name
 			
 	def get_customer_defaults(self):
+		if not self.doc.customer: return {}
+		
 		out = self.get_default_address_and_contact("customer")
 
 		customer = webnotes.doc("Customer", self.doc.customer)