Serial no status fix: patch to set status not available where no sle exists
diff --git a/patches/1401/fix_serial_no_status_and_warehouse.py b/patches/1401/fix_serial_no_status_and_warehouse.py
new file mode 100644
index 0000000..fe43c28
--- /dev/null
+++ b/patches/1401/fix_serial_no_status_and_warehouse.py
@@ -0,0 +1,17 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+def execute():	
+	serial_nos = webnotes.conn.sql("""select name from `tabSerial No` where docstatus=0 
+		and status in ('Available', 'Sales Returned') and ifnull(warehouse, '') = ''""")
+	for sr in serial_nos:
+		try:
+			sr_bean = webnotes.bean("Serial No", sr[0])
+			sr_bean.make_controller().via_stock_ledger = True
+			sr_bean.save()
+			webnotes.conn.commit()
+		except:
+			pass
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 89e3309..d87d3ad 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -267,4 +267,5 @@
 	"patches.1401.p01_make_buying_selling_as_check_box_in_price_list",
 	"patches.1401.update_billing_status_for_zero_value_order",
 	"patches.1401.enable_all_price_list",
+	"patches.1401.fix_serial_no_status_and_warehouse",
 ]
\ No newline at end of file
diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py
index bd2704d..e6557b4 100644
--- a/stock/doctype/serial_no/serial_no.py
+++ b/stock/doctype/serial_no/serial_no.py
@@ -87,6 +87,8 @@
 					self.doc.status = "Sales Returned"
 				else:
 					self.doc.status = "Available"
+				if not self.doc.warehouse:
+					self.doc.warehouse = last_sle.warehouse
 			else:
 				if document_type == "Purchase Return":
 					self.doc.status = "Purchase Returned"
@@ -94,6 +96,8 @@
 					self.doc.status = "Delivered"
 				else:
 					self.doc.status = "Not Available"
+		else:
+			self.doc.status = "Not Available"
 		
 	def set_purchase_details(self, purchase_sle):
 		if purchase_sle:
@@ -185,10 +189,9 @@
 	def on_stock_ledger_entry(self):
 		if self.via_stock_ledger and not self.doc.fields.get("__islocal"):
 			last_sle = self.get_last_sle()
-			if last_sle:
-				self.set_status(last_sle.get("last_sle"))
-				self.set_purchase_details(last_sle.get("purchase_sle"))
-				self.set_sales_details(last_sle.get("delivery_sle"))
+			self.set_status(last_sle.get("last_sle"))
+			self.set_purchase_details(last_sle.get("purchase_sle"))
+			self.set_sales_details(last_sle.get("delivery_sle"))
 			
 	def on_communication(self):
 		return