Fix in Purchase Return - Serial No. status issue
diff --git a/erpnext/patches/jan_mar_2012/serial_no_add_opt.py b/erpnext/patches/jan_mar_2012/serial_no_add_opt.py
new file mode 100644
index 0000000..92011b0
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/serial_no_add_opt.py
@@ -0,0 +1,18 @@
+def execute():
+	import webnotes
+	opts = webnotes.conn.sql("""\
+		SELECT options FROM `tabDocField`
+		WHERE parent='Serial No' AND fieldname='status' AND
+		fieldtype='Select'""")
+	if opts and opts[0][0]:
+		opt_list = opts[0][0].split("\n")
+		if not "Purchase Returned" in opt_list:
+			webnotes.conn.sql("""
+				UPDATE `tabDocField` SET options=%s
+				WHERE parent='Serial No' AND fieldname='status' AND
+				fieldtype='Select'""", "\n".join(opt_list + ["Purchase Returned"]))
+			webnotes.conn.commit()
+			webnotes.conn.begin()
+
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('stock', 'doctype', 'serial_no')
diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py
index d56ba2f..bb2e441 100644
--- a/erpnext/patches/patch_list.py
+++ b/erpnext/patches/patch_list.py
@@ -50,4 +50,9 @@
 		'patch_file': 'email_settings_reload',
 		'description': "Change type of mail_port field to Int and reload email_settings doctype"
 	},
+	{
+		'patch_module': 'patches.jan_mar_2012',
+		'patch_file': 'serial_no_add_opt',
+		'description': "Add option 'Purchase Returned' to Serial No status field"
+	},
 ]
diff --git a/erpnext/stock/doctype/serial_no/serial_no.txt b/erpnext/stock/doctype/serial_no/serial_no.txt
index 277a2ec..df42c7f 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.txt
+++ b/erpnext/stock/doctype/serial_no/serial_no.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:23',
 		'docstatus': 0,
-		'modified': '2011-10-10 17:08:57',
+		'modified': '2012-01-31 15:53:38',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1317365120',
+		'_last_update': '1325570647',
 		'allow_trash': 1,
 		'autoname': 'field:serial_no',
 		'colour': 'White:FFF',
@@ -25,8 +25,9 @@
 		'section_style': 'Tabbed',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
+		'subject': 'Item Code: %(item_code)s, Warehouse: %(warehouse)s',
 		'tag_fields': 'status',
-		'version': 190
+		'version': 191
 	},
 
 	# These values are common for all DocField
@@ -163,7 +164,7 @@
 		'no_copy': 1,
 		'oldfieldname': 'status',
 		'oldfieldtype': 'Select',
-		'options': '\nIn Store\nDelivered\nNot in Use',
+		'options': '\nIn Store\nDelivered\nNot in Use\nPurchase Returned',
 		'permlevel': 1,
 		'reqd': 1,
 		'search_index': 1
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index ce6f7f6..be37880 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -435,7 +435,10 @@
 						sl_obj.update_serial_purchase_details(self, d, serial_no, is_submit, self.doc.purpose)
 					
 					if self.doc.purpose == 'Purchase Return':
-						delete_doc("Serial No", serial_no)
+						#delete_doc("Serial No", serial_no)
+						serial_doc = Document("Serial No", serial_no)
+						serial_doc.status = 'Purchase Returned'
+						serial_doc.save()
 
 
 	def on_submit(self):
diff --git a/erpnext/support/search_criteria/warranty_amc_summary/warranty_amc_summary.py b/erpnext/support/search_criteria/warranty_amc_summary/warranty_amc_summary.py
index 64f6bd2..783f91a 100644
--- a/erpnext/support/search_criteria/warranty_amc_summary/warranty_amc_summary.py
+++ b/erpnext/support/search_criteria/warranty_amc_summary/warranty_amc_summary.py
@@ -26,7 +26,7 @@
   lft_rgt = sql("select lft, rgt from `tab%s` where name = '%s'" % (opt,r[col_idx[opt]].strip()))
   
   
-  det = sql("select COUNT(CASE WHEN t1.amc_expiry_date < '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.amc_expiry_date >= '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.warranty_expiry_date < '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.warranty_expiry_date >= '%s' THEN t1.name ELSE NULL END) from `tabSerial No` t1, `tab%s` t2 where t1.%s = t2.name and t2.lft>= '%s' and t2. rgt <= '%s' and t1.status not in ('In Store', 'Scrapped','Not in Use') and ifnull(item_group,'')!='' and ifnull(territory,'')!=''" %(nowdate,nowdate,nowdate,nowdate,opt, opt_dict[opt], lft_rgt[0][0], lft_rgt[0][1]))
+  det = sql("select COUNT(CASE WHEN t1.amc_expiry_date < '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.amc_expiry_date >= '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.warranty_expiry_date < '%s' THEN t1.name ELSE NULL END), COUNT(CASE WHEN t1.warranty_expiry_date >= '%s' THEN t1.name ELSE NULL END) from `tabSerial No` t1, `tab%s` t2 where t1.%s = t2.name and t2.lft>= '%s' and t2. rgt <= '%s' and t1.status = 'Delivered' and ifnull(item_group,'')!='' and ifnull(territory,'')!=''" %(nowdate,nowdate,nowdate,nowdate,opt, opt_dict[opt], lft_rgt[0][0], lft_rgt[0][1]))
   
   r.append(cint(det[0][0]))
   r.append(cint(det[0][1]))