reorder level checking based on stores and reserved warehouse
diff --git a/erpnext/patches/jan_mar_2012/reload_item.py b/erpnext/patches/jan_mar_2012/reload_item.py
new file mode 100644
index 0000000..158b67d
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/reload_item.py
@@ -0,0 +1,6 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('stock', 'doctype', 'item')
+
+	webnotes.conn.sql("update `tabItem` set re_order_qty = min_order_qty")
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 6a228c1..8f1bdf2 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -36,8 +36,8 @@
 		self.doc.planned_qty = flt(self.doc.planned_qty) + flt(planned_qty)
 		self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty)
 		self.doc.save()
-		if(( flt(actual_qty)<0 or flt(reserved_qty)>0 )and is_cancelled == 'No' and is_amended=='No'):
-			self.reorder_item(doc_type,doc_name)	
+		if(( flt(actual_qty)<0 or flt(reserved_qty)>0 ) and is_cancelled == 'No' and is_amended=='No'):
+			self.reorder_item(doc_type,doc_name)
 		
 		if actual_qty:
 			# check actual qty with total number of serial no
@@ -304,26 +304,37 @@
 				(flt(val_rate), cqty, flt(stock_val), self.doc.name))
 
 
-	# item re-order
-	# -------------
+
 	def reorder_item(self,doc_type,doc_name):
+		""" Reorder item if stock reaches reorder level"""
+
 		if get_value('Manage Account', None, 'auto_indent'):
 			#check if re-order is required
-			indent_detail_fields = sql("select re_order_level,item_name,description,brand,item_group,lead_time_days,min_order_qty,email_notify from tabItem where item_code = %s",(self.doc.item_code),as_dict=1)
-			i =	indent_detail_fields[0] 
-			item_reorder_level = i['re_order_level'] or 0	 
-			if ((flt(item_reorder_level) > flt(self.doc.projected_qty)) and item_reorder_level) :
-				self.reorder_indent(i,item_reorder_level,doc_type,doc_name,email_notify=i['email_notify'])
+			ret = sql("select re_order_level, item_name, description, brand, item_group, lead_time_days, min_order_qty, email_notify, re_order_qty from tabItem where item_code = %s", (self.doc.item_code), as_dict=1)
+			
+			current_qty = sql("""
+				select sum(t1.actual_qty) + sum(t1.indented_qty) + sum(t1.ordered_qty) -sum(t1.reserved_qty)
+				from tabBin t1, tabWarehouse t2
+				where t1.item_code = %s 
+				and t1.warehouse = t2.name
+				and t2.warehouse_type in ('Stores', 'Reserved', 'Default Warehouse Type')
+				and t1.docstatus != 2
+			""", self.doc.item_code)
 
-		
-	# Re order Auto Intent Generation
-	def reorder_indent(self,i,item_reorder_level,doc_type,doc_name,email_notify=1):
+			if ((flt(ret[0]['re_order_level']) > flt(current_qty)) and ret[0]['re_order_level']):
+				self.create_auto_indent(ret[0], doc_type, doc_name)
+
+	
+
+	def create_auto_indent(self, i , doc_type, doc_name):
+		"""	Create indent on reaching reorder level	"""
+
 		indent = Document('Indent')
 		indent.transaction_date = nowdate()
 		indent.naming_series = 'IDT'
 		indent.company = get_defaults()['company']
 		indent.fiscal_year = get_defaults()['fiscal_year']
-		indent.remark = "This is an auto generated Indent. It was raised because the projected quantity has fallen below the minimum re-order level when %s %s was created"%(doc_type,doc_name)
+		indent.remark = "This is an auto generated Indent. It was raised because the (actual + ordered + indented - reserved) quantity reaches re-order level when %s %s was created"%(doc_type,doc_name)
 		indent.save(1)
 		indent_obj = get_obj('Indent',indent.name,with_children=1)
 		indent_details_child = addchild(indent_obj.doc,'indent_details','Indent Detail',0)
@@ -334,26 +345,29 @@
 		indent_details_child.item_name = i['item_name']
 		indent_details_child.description = i['description']
 		indent_details_child.item_group = i['item_group']
-		if (i['min_order_qty'] < ( flt(item_reorder_level)-flt(self.doc.projected_qty) )):
-			indent_details_child.qty =flt(flt(item_reorder_level)-flt(self.doc.projected_qty))
-		else:
-			indent_details_child.qty = i['min_order_qty']
+		indent_details_child.qty = i['re_order_qty']
 		indent_details_child.brand = i['brand']
 		indent_details_child.save()
 		indent_obj = get_obj('Indent',indent.name,with_children=1)
 		indent_obj.validate()
 		set(indent_obj.doc,'docstatus',1)
 		indent_obj.on_submit()
-		msgprint("Item: " + self.doc.item_code + " is to be re-ordered. Indent %s raised.Was generated from %s %s"%(indent.name,doc_type, doc_name ))
-		if(email_notify):
+		msgprint("Item: " + self.doc.item_code + " is to be re-ordered. Indent %s raised. It was generated from %s %s"%(indent.name,doc_type, doc_name ))
+		if(i['email_notify']):
 			send_email_notification(doc_type,doc_name)
 			
+
+
 	def send_email_notification(self,doc_type,doc_name):
+		""" Notify user about auto creation of indent"""
+
 		email_list=[d for d in sql("select parent from tabUserRole where role in ('Purchase Manager','Material Manager') ")]
 		msg1='An Indent has been raised for item %s: %s on %s '%(doc_type, doc_name, nowdate())
 		sendmail(email_list, sender='automail@webnotestech.com', \
 		subject='Auto Indent Generation Notification', parts=[['text/plain',msg1]])	
-	# validate
+
+
+
 	def validate(self):
 		self.validate_mandatory()