Update ordered qty in blanket order
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index c6a5dae..58f1499 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -244,7 +244,7 @@
 		self.update_requested_qty()
 		self.update_ordered_qty()
 
-		self.update_blanket_order(cancel=True)
+		self.update_blanket_order()
 
 
 	def on_update(self):
@@ -323,6 +323,7 @@
 			else:
 				if po.status == "Closed":
 					po.update_status("Draft")
+			po.update_blanket_order()
 
 	frappe.local.message_log = []
 
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 9d58ce3..4282178 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -342,17 +342,10 @@
 				if self.docstatus==1:
 					raise frappe.ValidationError
 
-	def update_blanket_order(self, cancel=False):
-		for item in self.items:
-			if item.blanket_order:
-				ordered_quantity, doc_name = frappe.db.get_value("Blanket Order Item", {"parent": item.blanket_order}, ["ordered_quantity", "name"])
-				if not cancel:
-					ordered_quantity = ordered_quantity + item.qty
-				else:
-					ordered_quantity = ordered_quantity - item.qty
-				ordered_quantity = flt(ordered_quantity, item.precision("qty"))
-				frappe.db.set_value("Blanket Order Item", doc_name, "ordered_quantity", ordered_quantity)
-
+	def update_blanket_order(self):
+		blanket_orders = list(set([d.blanket_order for d in self.items]))
+		for blanket_order in blanket_orders:
+			frappe.get_doc("Blanket Order", blanket_order).update_ordered_qty()
 
 def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for_items=None,
 		warehouse_account=None):
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 58fb8ee..d71ffcb 100755
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -66,6 +66,10 @@
 
 	def update_user_permissions(self):
 		if not self.create_user_permission: return
+		if has_user_permission_for_employee(self.user_id, self.name) \
+			or not has_permission('User Permission', ptype='write'):
+				return
+
 		add_user_permission("Employee", self.name, self.user_id)
 		set_user_permission_if_allowed("Company", self.company, self.user_id)
 
@@ -207,8 +211,6 @@
 def update_user_permissions(doc, method):
 	# called via User hook
 	if "Employee" in [d.role for d in doc.get("roles")]:
-		employee_name = frappe.get_value('Employee', {'user_id': doc.name}, 'name')
-		if has_user_permission_for_employee(doc.name, employee_name): return
 		if not has_permission('User Permission', ptype='write'): return
 		employee = frappe.get_doc("Employee", {"user_id": doc.name})
 		employee.update_user_permissions()
diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
index f6ef4de..5381abf 100644
--- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
+++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
@@ -10,13 +10,25 @@
 
 
 class BlanketOrder(Document):
-	pass
+	def update_ordered_qty(self):
+		ref_doctype = "Sales Order" if self.blanket_order_type == "Selling" else "Purchase Order"
+		item_ordered_qty = frappe._dict(frappe.db.sql("""
+			select trans_item.item_code, sum(trans_item.stock_qty) as qty
+			from `tab{0} Item` trans_item, `tab{0}` trans
+			where trans.name = trans_item.parent
+				and trans_item.blanket_order=%s
+				and trans.docstatus=1
+				and trans.status not in ('Closed', 'Stopped')
+			group by trans_item.item_code
+		""".format(ref_doctype), self.name))
 
+		for d in self.items:
+			d.db_set("ordered_qty", item_ordered_qty.get(d.item_code, 0))
 
 @frappe.whitelist()
 def make_sales_order(source_name):
 	def update_item(source, target, source_parent):
-		target.qty = source.get("qty") - source.get("ordered_quantity")
+		target.qty = source.get("qty") - source.get("ordered_qty")
 		item = get_item_defaults(target.item_code, source_parent.company)
 		if item:
 			target.item_name = item.get("item_name")
@@ -41,7 +53,7 @@
 @frappe.whitelist()
 def make_purchase_order(source_name):
 	def update_item(source, target, source_parent):
-		target.qty = source.get("qty") - source.get("ordered_quantity")
+		target.qty = source.get("qty") - source.get("ordered_qty")
 		item = get_item_defaults(target.item_code, source_parent.company)
 		if item:
 			target.item_name = item.get("item_name")
@@ -62,4 +74,4 @@
 			"postprocess": update_item
 		}
 	})
-	return target_doc
+	return target_doc
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
index a51c5f4..455ea06 100644
--- a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
+++ b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
@@ -6,6 +6,7 @@
 import frappe
 import unittest
 from frappe.utils import add_months, today
+from erpnext import get_company_currency
 from .blanket_order import make_sales_order, make_purchase_order
 
 class TestBlanketOrder(unittest.TestCase):
@@ -13,6 +14,7 @@
 		bo = make_blanket_order(blanket_order_type="Selling")
 
 		so = make_sales_order(bo.name)
+		so.currency = get_company_currency(so.company)
 		so.delivery_date = today()
 		so.items[0].qty = 10
 		so.submit()
@@ -24,17 +26,19 @@
 		self.assertEqual(so.items[0].rate, bo.items[0].rate)
 
 		bo = frappe.get_doc("Blanket Order", bo.name)
-		self.assertEqual(so.items[0].qty, bo.items[0].ordered_quantity)
+		self.assertEqual(so.items[0].qty, bo.items[0].ordered_qty)
 
 		# test the quantity
 		so1 = make_sales_order(bo.name)
-		self.assertEqual(so1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_quantity))
+		so1.currency = get_company_currency(so1.company)
+		self.assertEqual(so1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))
 
 
 	def test_purchase_order_creation(self):
 		bo = make_blanket_order(blanket_order_type="Purchasing")
 
 		po = make_purchase_order(bo.name)
+		po.currency = get_company_currency(po.company)
 		po.schedule_date = today()
 		po.items[0].qty = 10
 		po.submit()
@@ -46,11 +50,12 @@
 		self.assertEqual(po.items[0].rate, po.items[0].rate)
 
 		bo = frappe.get_doc("Blanket Order", bo.name)
-		self.assertEqual(po.items[0].qty, bo.items[0].ordered_quantity)
+		self.assertEqual(po.items[0].qty, bo.items[0].ordered_qty)
 
 		# test the quantity
 		po1 = make_sales_order(bo.name)
-		self.assertEqual(po1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_quantity))
+		po1.currency = get_company_currency(po1.company)
+		self.assertEqual(po1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))
 
 
 
diff --git a/erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json b/erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json
index 195f57f..099eed4 100644
--- a/erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json
+++ b/erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json
@@ -181,7 +181,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "ordered_quantity", 
+   "fieldname": "ordered_qty", 
    "fieldtype": "Float", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -280,7 +280,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2018-06-04 07:04:14.050836", 
+ "modified": "2018-06-14 07:04:14.050836", 
  "modified_by": "Administrator", 
  "module": "Manufacturing", 
  "name": "Blanket Order Item", 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 95c7c92..1252c1d 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -190,7 +190,7 @@
 
 		frappe.db.set(self, 'status', 'Cancelled')
 
-		self.update_blanket_order(cancel=True)
+		self.update_blanket_order()
 
 	def update_project(self):
 		project_list = []
@@ -414,6 +414,7 @@
 			else:
 				if so.status == "Closed":
 					so.update_status('Draft')
+			so.update_blanket_order()
 
 	frappe.local.message_log = []