[fix] Reserved qty is not calculating properly in BIN for multi sales UOM (#8203)

diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 5c28b92..4aa1f37 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -379,5 +379,5 @@
 erpnext.patches.v7_2.update_attendance_docstatus
 erpnext.patches.v7_2.move_dates_from_salary_structure_to_employee
 erpnext.patches.v7_2.make_all_assessment_group
-
 erpnext.patches.v8_0.manufacturer_childtable_migrate
+erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/__init__.py b/erpnext/patches/v8_0/__init__.py
index e69de29..baffc48 100644
--- a/erpnext/patches/v8_0/__init__.py
+++ b/erpnext/patches/v8_0/__init__.py
@@ -0,0 +1 @@
+from __future__ import unicode_literals
diff --git a/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py b/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
new file mode 100644
index 0000000..3030b8e
--- /dev/null
+++ b/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
@@ -0,0 +1,19 @@
+# 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
+from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
+
+def execute():
+	for doctype in ("Sales Order Item", "Bin"):
+		frappe.reload_doctype(doctype)
+
+	repost_for = frappe.db.sql("""select distinct item_code, warehouse
+		from `tabSales Order Item` where docstatus=1 and uom != stock_uom and
+		exists(select name from tabItem where name=`tabSales Order Item`.item_code and ifnull(is_stock_item, 0)=1)""")
+
+	for item_code, warehouse in repost_for:
+		update_bin_qty(item_code, warehouse, {
+			"reserved_qty": get_reserved_qty(item_code, warehouse)
+		})
\ No newline at end of file
diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py
index 4c8cc26..a9d0522 100644
--- a/erpnext/stock/stock_balance.py
+++ b/erpnext/stock/stock_balance.py
@@ -67,13 +67,13 @@
 def get_reserved_qty(item_code, warehouse):
 	reserved_qty = frappe.db.sql("""
 		select
-			sum((dnpi_qty / so_item_qty) * (so_item_qty - so_item_delivered_qty))
+			sum(dnpi_qty * ((so_item_qty - so_item_delivered_qty) / so_item_qty))
 		from
 			(
 				(select
 					qty as dnpi_qty,
 					(
-						select stock_qty from `tabSales Order Item`
+						select qty from `tabSales Order Item`
 						where name = dnpi.parent_detail_docname
 						and (delivered_by_supplier is null or delivered_by_supplier = 0)
 					) as so_item_qty,
@@ -94,7 +94,7 @@
 					where name = dnpi_in.parent and docstatus = 1 and status != 'Closed')
 				) dnpi)
 			union
-				(select qty as dnpi_qty, stock_qty as so_item_qty,
+				(select stock_qty as dnpi_qty, qty as so_item_qty,
 					delivered_qty as so_item_delivered_qty, parent, name
 				from `tabSales Order Item` so_item
 				where item_code = %s and warehouse = %s