Fixed rounding issue in subcontracting (#11802)

diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 9aff118..fcf6a80 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -202,7 +202,8 @@
 			if not exists:
 				rm = self.append(raw_material_table, {})
 
-			required_qty = flt(bom_item.qty_consumed_per_unit) * flt(item.qty) * flt(item.conversion_factor)
+			required_qty = flt(flt(bom_item.qty_consumed_per_unit) * flt(item.qty) *
+				flt(item.conversion_factor), rm.precision("required_qty"))
 			rm.reference_name = item.name
 			rm.bom_detail_no = bom_item.name
 			rm.main_item_code = item.item_code
diff --git a/erpnext/domains/retail.py b/erpnext/domains/retail.py
index 897c4d9..07b2e27 100644
--- a/erpnext/domains/retail.py
+++ b/erpnext/domains/retail.py
@@ -9,9 +9,6 @@
 		'Task',
 		'ToDo'
 	],
-	'properties': [
-		{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}
-	],
 	'set_value': [
 		['Stock Settings', None, 'show_barcode_field', 1]
 	],
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 4d79e13..368e869 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -356,7 +356,7 @@
 				if not total_allowed:
 					frappe.throw(_("Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1}")
 						.format(se_item.item_code, self.purchase_order))
-				total_supplied = frappe.db.sql("""select sum(qty)
+				total_supplied = frappe.db.sql("""select sum(transfer_qty)
 					from `tabStock Entry Detail`, `tabStock Entry`
 					where `tabStock Entry`.purchase_order = %s
 						and `tabStock Entry`.docstatus = 1
@@ -365,8 +365,8 @@
 							(self.purchase_order, se_item.item_code))[0][0]
 
 				if total_supplied > total_allowed:
-					frappe.throw(_("Not allowed to tranfer more {0} than {1} against Purchase Order {2}").format(se_item.item_code,
-						total_allowed, self.purchase_order))
+					frappe.throw(_("Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3}")
+						.format(se_item.idx, se_item.item_code, total_allowed, self.purchase_order))
 
 	def validate_bom(self):
 		for d in self.get('items'):
@@ -767,7 +767,7 @@
 			se_child.description = item_dict[d]["description"]
 			se_child.uom = stock_uom
 			se_child.stock_uom = stock_uom
-			se_child.qty = flt(item_dict[d]["qty"])
+			se_child.qty = flt(item_dict[d]["qty"], se_child.precision("qty"))
 			se_child.expense_account = item_dict[d].get("expense_account") or expense_account
 			se_child.cost_center = item_dict[d].get("cost_center") or cost_center
 
@@ -777,7 +777,7 @@
 				se_child.t_warehouse = self.to_warehouse
 
 			# in stock uom
-			se_child.transfer_qty = flt(item_dict[d]["qty"])
+			se_child.transfer_qty = flt(item_dict[d]["qty"], se_child.precision("qty"))
 			se_child.conversion_factor = 1.00
 
 			# to be assigned for finished item