[listview] issue: open, close | so, po: stop, unstop
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 9e2d34e..15a6fd1 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
+import json
 from frappe.utils import cstr, flt
 from frappe import msgprint, _, throw
 from frappe.model.mapper import get_mapped_doc
@@ -217,6 +218,25 @@
 	def on_update(self):
 		pass
 
+@frappe.whitelist()
+def stop_or_unstop_purchase_orders(names, status):
+	if not frappe.has_permission("Purchase Order", "write"):
+		frappe.throw(_("Not permitted"), frappe.PermissionError)
+
+	names = json.loads(names)
+	for name in names:
+		po = frappe.get_doc("Purchase Order", name)
+		if po.docstatus == 1:
+			if status=="Stopped":
+				if po.status not in ("Stopped", "Cancelled") and (po.per_received < 100 or po.per_billed < 100):
+					po.update_status("Stopped")
+			else:
+				if po.status == "Stopped":
+					po.update_status("Submitted")
+
+	frappe.local.message_log = []
+
+
 def set_missing_values(source, target):
 	target.ignore_pricing_rule = 1
 	target.run_method("set_missing_values")
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_list.js b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
index 2c28eec..08bf0fe 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order_list.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
@@ -3,7 +3,7 @@
 		"supplier_name", "per_received", "per_billed", "status"],
 	get_indicator: function(doc) {
         if(doc.status==="Stopped") {
-			return [__("Stopped"), "red", "status,=,Stopped"];
+			return [__("Stopped"), "darkgrey", "status,=,Stopped"];
 		} else if(flt(doc.per_received) < 100 && doc.status!=="Stopped") {
 			return [__("Not Received"), "orange", "per_received,<,100|status,!=,Stopped"];
 		} else if(flt(doc.per_received) == 100 && flt(doc.per_billed) < 100 && doc.status!=="Stopped") {
@@ -12,5 +12,17 @@
 			return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Stopped"];
 		}
 	},
-	order_by: "per_received asc, modified desc"
+	order_by: "per_received asc, modified desc",
+	onload: function(listview) {
+		var method = "erpnext.buying.doctype.purchase_order.purchase_order.stop_or_unstop_purchase_orders";
+
+		listview.page.add_menu_item(__("Set as Stopped"), function() {
+			listview.call_for_selected_items(method, {"status": "Stopped"});
+		});
+
+		listview.page.add_menu_item(__("Set as Unstopped"), function() {
+			listview.call_for_selected_items(method, {"status": "Submitted"});
+		});
+
+	}
 };
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index a06f3d7..890f39a 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
+import json
 import frappe.utils
 from frappe.utils import cstr, flt, getdate, comma_and
 from frappe import _
@@ -238,6 +239,24 @@
 	return list_context
 
 @frappe.whitelist()
+def stop_or_unstop_sales_orders(names, status):
+	if not frappe.has_permission("Sales Order", "write"):
+		frappe.throw(_("Not permitted"), frappe.PermissionError)
+
+	names = json.loads(names)
+	for name in names:
+		so = frappe.get_doc("Sales Order", name)
+		if so.docstatus == 1:
+			if status=="Stop":
+				if so.status not in ("Stopped", "Cancelled") and (so.per_delivered < 100 or so.per_billed < 100):
+					so.stop_sales_order()
+			else:
+				if so.status == "Stopped":
+					so.unstop_sales_order()
+
+	frappe.local.message_log = []
+
+@frappe.whitelist()
 def make_material_request(source_name, target_doc=None):
 	def postprocess(source, doc):
 		doc.material_request_type = "Purchase"
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index 702c300..085d0e8 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -3,7 +3,7 @@
 		"status"],
 	get_indicator: function(doc) {
         if(doc.status==="Stopped") {
-			return [__("Stopped"), "red", "status,=,Stopped"];
+			return [__("Stopped"), "darkgrey", "status,=,Stopped"];
         } else if(flt(doc.per_delivered) < 100 && frappe.datetime.get_diff(doc.delivery_date) < 0) {
 			return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Stopped"];
 		} else if(flt(doc.per_delivered) < 100 && doc.status!=="Stopped") {
@@ -14,5 +14,17 @@
 			return [__("Completed"), "green", "per_delivered,=,100|per_billed,=,100|status,!=,Stopped"];
 		}
 	},
-	order_by: "per_delivered asc, modified desc"
+	order_by: "per_delivered asc, modified desc",
+	onload: function(listview) {
+		var method = "erpnext.selling.doctype.sales_order.sales_order.stop_or_unstop_sales_orders";
+
+		listview.page.add_menu_item(__("Set as Stopped"), function() {
+			listview.call_for_selected_items(method, {"status": "Stop"});
+		});
+
+		listview.page.add_menu_item(__("Set as Unstopped"), function() {
+			listview.call_for_selected_items(method, {"status": "Unstop"});
+		});
+
+	}
 };
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 841d905..dc6809f 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
+import json
 from frappe import _
 
 from frappe.model.document import Document
@@ -75,3 +76,9 @@
 	frappe.db.sql("""update `tabIssue` set status = 'Closed'
 		where status = 'Replied'
 		and date_sub(curdate(),interval 15 Day) > modified""")
+
+@frappe.whitelist()
+def set_multiple_status(names, status):
+	names = json.loads(names)
+	for name in names:
+		set_status(name, status)
diff --git a/erpnext/support/doctype/issue/issue_list.js b/erpnext/support/doctype/issue/issue_list.js
index 02fd40c..7198b0c 100644
--- a/erpnext/support/doctype/issue/issue_list.js
+++ b/erpnext/support/doctype/issue/issue_list.js
@@ -1,3 +1,14 @@
 frappe.listview_settings['Issue'] = {
-	colwidths: {"subject": 6}
+	colwidths: {"subject": 6},
+	onload: function(listview) {
+		var method = "erpnext.support.doctype.issue.issue.set_multiple_status";
+
+		listview.page.add_menu_item(__("Set as Open"), function() {
+			listview.call_for_selected_items(method, {"status": "Open"});
+		});
+
+		listview.page.add_menu_item(__("Set as Closed"), function() {
+			listview.call_for_selected_items(method, {"status": "Closed"});
+		});
+	}
 }