Fixed issue while updating Requested Qty on stoping material request and patch to recalculate
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 13fb302..adb9b1b 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -152,3 +152,4 @@
 execute:frappe.delete_doc("Page", "stock-ledger")
 execute:frappe.delete_doc("Page","stock-level")
 erpnext.patches.v5_0.reclculate_planned_operating_cost_in_production_order
+erpnext.patches.v5_0.repost_requested_qty
diff --git a/erpnext/patches/v5_0/repost_requested_qty.py b/erpnext/patches/v5_0/repost_requested_qty.py
new file mode 100644
index 0000000..8c1d6f7
--- /dev/null
+++ b/erpnext/patches/v5_0/repost_requested_qty.py
@@ -0,0 +1,21 @@
+# 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 frappe
+
+def execute():
+	from erpnext.utilities.repost_stock import update_bin_qty, get_indented_qty
+
+	count=0
+	for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse 
+		from `tabMaterial Request Item` where docstatus = 1"""):
+			try:
+				count += 1
+				update_bin_qty(item_code, warehouse, {
+					"indented_qty": get_indented_qty(item_code, warehouse),
+				})
+				if count % 200 == 0:
+					frappe.db.commit()
+			except:
+				frappe.db.rollback()
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index d978116..5b61a6c 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -7,7 +7,7 @@
 from __future__ import unicode_literals
 import frappe
 
-from frappe.utils import cstr, flt
+from frappe.utils import cstr, flt, getdate
 from frappe import _
 from frappe.model.mapper import get_mapped_doc
 
@@ -53,7 +53,7 @@
 
 	def validate_schedule_date(self):
 		for d in self.get('items'):
-			if d.schedule_date and d.schedule_date < self.transaction_date:
+			if d.schedule_date and getdate(d.schedule_date) < getdate(self.transaction_date):
 				frappe.throw(_("Expected Date cannot be before Material Request Date"))
 
 	# Validate
@@ -94,8 +94,8 @@
 
 	def update_status(self, status):
 		self.check_modified_date()
-		self.update_requested_qty()
 		frappe.db.set(self, 'status', cstr(status))
+		self.update_requested_qty()
 		frappe.msgprint(_("Status updated to {0}").format(_(status)))
 
 	def on_cancel(self):