diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index 0ab39b6..f56c9b4 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -29,14 +29,12 @@
 
 	refresh: function(frm, cdt, cdn) {
 		if (frm.doc.docstatus === 1) {
-			frm.add_custom_button(__('Create'),
-				function(){ frm.trigger("make_suppplier_quotation") }, __("Supplier Quotation"));
 
-			frm.add_custom_button(__("View"),
-				function(){ frappe.set_route('List', 'Supplier Quotation',
-					{'request_for_quotation': frm.doc.name}) }, __("Supplier Quotation"));
+			frm.add_custom_button(__('Supplier Quotation'),
+				function(){ frm.trigger("make_suppplier_quotation") }, __("Create"));
 
-			frm.add_custom_button(__("Send Supplier Emails"), function() {
+
+			frm.add_custom_button(__("Send Emails to Suppliers"), function() {
 				frappe.call({
 					method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.send_supplier_emails',
 					freeze: true,
@@ -47,150 +45,82 @@
 						frm.reload_doc();
 					}
 				});
-			});
+			}, __("Tools"));
+
+			frm.add_custom_button(__('Download PDF'), () => {
+				var suppliers = [];
+				const fields = [{
+					fieldtype: 'Link',
+					label: __('Select a Supplier'),
+					fieldname: 'supplier',
+					options: 'Supplier',
+					reqd: 1,
+					get_query: () => {
+						return {
+							filters: [
+								["Supplier", "name", "in", frm.doc.suppliers.map((row) => {return row.supplier;})]
+							]
+						}
+					}
+				}];
+
+				frappe.prompt(fields, data => {
+					var child = locals[cdt][cdn]
+
+					var w = window.open(
+						frappe.urllib.get_full_url("/api/method/erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_pdf?"
+						+"doctype="+encodeURIComponent(frm.doc.doctype)
+						+"&name="+encodeURIComponent(frm.doc.name)
+						+"&supplier="+encodeURIComponent(data.supplier)
+						+"&no_letterhead=0"));
+					if(!w) {
+						frappe.msgprint(__("Please enable pop-ups")); return;
+					}
+				},
+				'Download PDF for Supplier',
+				'Download');
+			},
+			__("Tools"));
+
+			frm.page.set_inner_btn_group_as_primary(__('Create'));
 		}
 
 	},
 
-	get_suppliers_button: function (frm) {
-		var doc = frm.doc;
-		var dialog = new frappe.ui.Dialog({
-			title: __("Get Suppliers"),
-			fields: [
-				{
-					"fieldtype": "Select", "label": __("Get Suppliers By"),
-					"fieldname": "search_type",
-					"options": ["Tag","Supplier Group"],
-					"reqd": 1,
-					onchange() {
-						if(dialog.get_value('search_type') == 'Tag'){
-							frappe.call({
-								method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag',
-							}).then(r => {
-								dialog.set_df_property("tag", "options", r.message)
-						});
-						}
-					}
-				},
-				{
-					"fieldtype": "Link", "label": __("Supplier Group"),
-					"fieldname": "supplier_group",
-					"options": "Supplier Group",
-					"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Supplier Group'"
-				},
-				{
-					"fieldtype": "Select", "label": __("Tag"),
-					"fieldname": "tag",
-					"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Tag'",
-				},
-				{
-					"fieldtype": "Button", "label": __("Add All Suppliers"),
-					"fieldname": "add_suppliers"
-				},
-			]
-		});
-
-		dialog.fields_dict.add_suppliers.$input.click(function() {
-			var args = dialog.get_values();
-			if(!args) return;
-			dialog.hide();
-
-			//Remove blanks
-			for (var j = 0; j < frm.doc.suppliers.length; j++) {
-				if(!frm.doc.suppliers[j].hasOwnProperty("supplier")) {
-					frm.get_field("suppliers").grid.grid_rows[j].remove();
-				}
-			}
-
-			 function load_suppliers(r) {
-				if(r.message) {
-					for (var i = 0; i < r.message.length; i++) {
-						var exists = false;
-						if (r.message[i].constructor === Array){
-							var supplier = r.message[i][0];
-						} else {
-							var supplier = r.message[i].name;
-						}
-
-						for (var j = 0; j < doc.suppliers.length;j++) {
-							if (supplier === doc.suppliers[j].supplier) {
-								exists = true;
-							}
-						}
-						if(!exists) {
-							var d = frm.add_child('suppliers');
-							d.supplier = supplier;
-							frm.script_manager.trigger("supplier", d.doctype, d.name);
-						}
-					}
-				}
-				frm.refresh_field("suppliers");
-			}
-
-			if (args.search_type === "Tag" && args.tag) {
-				return frappe.call({
-					type: "GET",
-					method: "frappe.desk.doctype.tag.tag.get_tagged_docs",
-					args: {
-						"doctype": "Supplier",
-						"tag": args.tag
-					},
-					callback: load_suppliers
-				});
-			} else if (args.supplier_group) {
-				return frappe.call({
-					method: "frappe.client.get_list",
-					args: {
-						doctype: "Supplier",
-						order_by: "name",
-						fields: ["name"],
-						filters: [["Supplier", "supplier_group", "=", args.supplier_group]]
-
-					},
-					callback: load_suppliers
-				});
-			}
-		});
-		dialog.show();
-
-	},
 	make_suppplier_quotation: function(frm) {
 		var doc = frm.doc;
 		var dialog = new frappe.ui.Dialog({
-			title: __("For Supplier"),
+			title: __("Create Supplier Quotation"),
 			fields: [
 				{	"fieldtype": "Select", "label": __("Supplier"),
 					"fieldname": "supplier",
 					"options": doc.suppliers.map(d => d.supplier),
 					"reqd": 1,
 					"default": doc.suppliers.length === 1 ? doc.suppliers[0].supplier_name : "" },
-				{	"fieldtype": "Button", "label": __('Create Supplier Quotation'),
-					"fieldname": "make_supplier_quotation", "cssClass": "btn-primary" },
-			]
+			],
+			primary_action_label: __("Create"),
+			primary_action: (args) => {
+				if(!args) return;
+				dialog.hide();
+
+				return frappe.call({
+					type: "GET",
+					method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
+					args: {
+						"source_name": doc.name,
+						"for_supplier": args.supplier
+					},
+					freeze: true,
+					callback: function(r) {
+						if(!r.exc) {
+							var doc = frappe.model.sync(r.message);
+							frappe.set_route("Form", r.message.doctype, r.message.name);
+						}
+					}
+				});
+			}
 		});
 
-		dialog.fields_dict.make_supplier_quotation.$input.click(function() {
-			var args = dialog.get_values();
-			if(!args) return;
-			dialog.hide();
-			return frappe.call({
-				type: "GET",
-				method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
-				args: {
-					"source_name": doc.name,
-					"for_supplier": args.supplier
-				},
-				freeze: true,
-				callback: function(r) {
-					if(!r.exc) {
-						var doc = frappe.model.sync(r.message);
-						frappe.set_route("Form", r.message.doctype, r.message.name);
-					}
-				}
-			});
-		});
 		dialog.show()
 	},
 
@@ -273,42 +203,6 @@
 		})
 	},
 
-	download_pdf: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn]
-
-		var w = window.open(
-			frappe.urllib.get_full_url("/api/method/erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_pdf?"
-			+"doctype="+encodeURIComponent(frm.doc.doctype)
-			+"&name="+encodeURIComponent(frm.doc.name)
-			+"&supplier_idx="+encodeURIComponent(child.idx)
-			+"&no_letterhead=0"));
-		if(!w) {
-			frappe.msgprint(__("Please enable pop-ups")); return;
-		}
-	},
-	no_quote: function(frm, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if (d.no_quote) {
-			if (d.quote_status != __('Received')) {
-				frappe.model.set_value(cdt, cdn, 'quote_status', 'No Quote');
-			} else {
-				frappe.msgprint(__("Cannot set a received RFQ to No Quote"));
-				frappe.model.set_value(cdt, cdn, 'no_quote', 0);
-			}
-		} else {
-			d.quote_status = __('Pending');
-			frm.call({
-				method:"update_rfq_supplier_status",
-				doc: frm.doc,
-				args: {
-					sup_name: d.supplier
-				},
-				callback: function(r) {
-					frm.refresh_field("suppliers");
-				}
-			});
-		}
-	}
 })
 
 erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.extend({
@@ -332,7 +226,8 @@
 							per_ordered: ["<", 99.99]
 						}
 					})
-				}, __("Get items from"));
+				}, __("Get Items From"));
+
 			// Get items from Opportunity
 			this.frm.add_custom_button(__('Opportunity'),
 				function() {
@@ -344,7 +239,8 @@
 							company: me.frm.doc.company
 						},
 					})
-				}, __("Get items from"));
+				}, __("Get Items From"));
+
 			// Get items from open Material Requests based on supplier
 			this.frm.add_custom_button(__('Possible Supplier'), function() {
 				// Create a dialog window for the user to pick their supplier
@@ -382,8 +278,13 @@
 					}
 				}
 				d.show();
-			}, __("Get items from"));
+			}, __("Get Items From"));
 
+			// Get Suppliers
+			this.frm.add_custom_button(__('Get Suppliers'),
+				function() {
+					me.get_suppliers_button(me.frm);
+				});
 		}
 	},
 
@@ -393,9 +294,108 @@
 
 	tc_name: function() {
 		this.get_terms();
-	}
-});
+	},
 
+	get_suppliers_button: function (frm) {
+		var doc = frm.doc;
+		var dialog = new frappe.ui.Dialog({
+			title: __("Get Suppliers"),
+			fields: [
+				{
+					"fieldtype": "Select", "label": __("Get Suppliers By"),
+					"fieldname": "search_type",
+					"options": ["Tag","Supplier Group"],
+					"reqd": 1,
+					onchange() {
+						if(dialog.get_value('search_type') == 'Tag'){
+							frappe.call({
+								method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag',
+							}).then(r => {
+								dialog.set_df_property("tag", "options", r.message)
+						});
+						}
+					}
+				},
+				{
+					"fieldtype": "Link", "label": __("Supplier Group"),
+					"fieldname": "supplier_group",
+					"options": "Supplier Group",
+					"reqd": 0,
+					"depends_on": "eval:doc.search_type == 'Supplier Group'"
+				},
+				{
+					"fieldtype": "Select", "label": __("Tag"),
+					"fieldname": "tag",
+					"reqd": 0,
+					"depends_on": "eval:doc.search_type == 'Tag'",
+				}
+			],
+			primary_action_label: __("Add Suppliers"),
+			primary_action : (args) => {
+				if(!args) return;
+				dialog.hide();
+
+				//Remove blanks
+				for (var j = 0; j < frm.doc.suppliers.length; j++) {
+					if(!frm.doc.suppliers[j].hasOwnProperty("supplier")) {
+						frm.get_field("suppliers").grid.grid_rows[j].remove();
+					}
+				}
+
+				function load_suppliers(r) {
+					if(r.message) {
+						for (var i = 0; i < r.message.length; i++) {
+							var exists = false;
+							if (r.message[i].constructor === Array){
+								var supplier = r.message[i][0];
+							} else {
+								var supplier = r.message[i].name;
+							}
+
+							for (var j = 0; j < doc.suppliers.length;j++) {
+								if (supplier === doc.suppliers[j].supplier) {
+									exists = true;
+								}
+							}
+							if(!exists) {
+								var d = frm.add_child('suppliers');
+								d.supplier = supplier;
+								frm.script_manager.trigger("supplier", d.doctype, d.name);
+							}
+						}
+					}
+					frm.refresh_field("suppliers");
+				}
+
+				if (args.search_type === "Tag" && args.tag) {
+					return frappe.call({
+						type: "GET",
+						method: "frappe.desk.doctype.tag.tag.get_tagged_docs",
+						args: {
+							"doctype": "Supplier",
+							"tag": args.tag
+						},
+						callback: load_suppliers
+					});
+				} else if (args.supplier_group) {
+					return frappe.call({
+						method: "frappe.client.get_list",
+						args: {
+							doctype: "Supplier",
+							order_by: "name",
+							fields: ["name"],
+							filters: [["Supplier", "supplier_group", "=", args.supplier_group]]
+
+						},
+						callback: load_suppliers
+					});
+				}
+			}
+		});
+
+		dialog.show();
+	},
+});
 
 // for backward compatibility: combine new and previous states
 $.extend(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({frm: cur_frm}));
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
index 5f01f6e..4e09a7e 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
@@ -12,9 +12,10 @@
   "vendor",
   "column_break1",
   "transaction_date",
+  "status",
+  "amended_from",
   "suppliers_section",
   "suppliers",
-  "get_suppliers_button",
   "items_section",
   "items",
   "link_to_mrs",
@@ -31,11 +32,7 @@
   "terms",
   "printing_settings",
   "select_print_heading",
-  "letter_head",
-  "more_info",
-  "status",
-  "column_break3",
-  "amended_from"
+  "letter_head"
  ],
  "fields": [
   {
@@ -83,6 +80,7 @@
    "width": "50%"
   },
   {
+   "default": "Today",
    "fieldname": "transaction_date",
    "fieldtype": "Date",
    "in_list_view": 1,
@@ -99,17 +97,12 @@
   {
    "fieldname": "suppliers",
    "fieldtype": "Table",
-   "label": "Supplier Detail",
+   "label": "Suppliers",
    "options": "Request for Quotation Supplier",
    "print_hide": 1,
    "reqd": 1
   },
   {
-   "fieldname": "get_suppliers_button",
-   "fieldtype": "Button",
-   "label": "Get Suppliers"
-  },
-  {
    "fieldname": "items_section",
    "fieldtype": "Section Break",
    "oldfieldtype": "Section Break",
@@ -144,6 +137,7 @@
    "print_hide": 1
   },
   {
+   "allow_on_submit": 1,
    "fetch_from": "email_template.response",
    "fetch_if_empty": 1,
    "fieldname": "message_for_supplier",
@@ -207,14 +201,6 @@
    "print_hide": 1
   },
   {
-   "collapsible": 1,
-   "fieldname": "more_info",
-   "fieldtype": "Section Break",
-   "label": "More Information",
-   "oldfieldtype": "Section Break",
-   "options": "fa fa-file-text"
-  },
-  {
    "fieldname": "status",
    "fieldtype": "Select",
    "label": "Status",
@@ -228,10 +214,6 @@
    "search_index": 1
   },
   {
-   "fieldname": "column_break3",
-   "fieldtype": "Column Break"
-  },
-  {
    "fieldname": "amended_from",
    "fieldtype": "Link",
    "label": "Amended From",
@@ -275,9 +257,10 @@
   }
  ],
  "icon": "fa fa-shopping-cart",
+ "index_web_pages_for_search": 1,
  "is_submittable": 1,
  "links": [],
- "modified": "2020-10-01 14:54:50.888729",
+ "modified": "2020-10-16 17:49:09.561929",
  "modified_by": "Administrator",
  "module": "Buying",
  "name": "Request for Quotation",
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
index 7784a7b..a51498e 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
@@ -28,6 +28,10 @@
 		super(RequestforQuotation, self).set_qty_as_per_stock_uom()
 		self.update_email_id()
 
+		if self.docstatus < 1:
+			# after amend and save, status still shows as cancelled, until submit
+			frappe.db.set(self, 'status', 'Draft')
+
 	def validate_duplicate_supplier(self):
 		supplier_list = [d.supplier for d in self.suppliers]
 		if len(supplier_list) != len(set(supplier_list)):
@@ -82,7 +86,7 @@
 				# make new user if required
 				update_password_link, contact = self.update_supplier_contact(rfq_supplier, self.get_link())
 
-				self.update_supplier_part_no(rfq_supplier)
+				self.update_supplier_part_no(rfq_supplier.supplier)
 				self.supplier_rfq_mail(rfq_supplier, update_password_link, self.get_link())
 				rfq_supplier.email_sent = 1
 				if not rfq_supplier.contact:
@@ -93,11 +97,11 @@
 		# RFQ link for supplier portal
 		return get_url("/rfq/" + self.name)
 
-	def update_supplier_part_no(self, args):
-		self.vendor = args.supplier
+	def update_supplier_part_no(self, supplier):
+		self.vendor = supplier
 		for item in self.items:
 			item.supplier_part_no = frappe.db.get_value('Item Supplier',
-				{'parent': item.item_code, 'supplier': args.supplier}, 'supplier_part_no')
+				{'parent': item.item_code, 'supplier': supplier}, 'supplier_part_no')
 
 	def update_supplier_contact(self, rfq_supplier, link):
 		'''Create a new user for the supplier if not set in contact'''
@@ -197,23 +201,22 @@
 	def update_rfq_supplier_status(self, sup_name=None):
 		for supplier in self.suppliers:
 			if sup_name == None or supplier.supplier == sup_name:
-				if supplier.quote_status != _('No Quote'):
-					quote_status = _('Received')
-					for item in self.items:
-						sqi_count = frappe.db.sql("""
-							SELECT
-								COUNT(sqi.name) as count
-							FROM
-								`tabSupplier Quotation Item` as sqi,
-								`tabSupplier Quotation` as sq
-							WHERE sq.supplier = %(supplier)s
-								AND sqi.docstatus = 1
-								AND sqi.request_for_quotation_item = %(rqi)s
-								AND sqi.parent = sq.name""",
-							{"supplier": supplier.supplier, "rqi": item.name}, as_dict=1)[0]
-						if (sqi_count.count) == 0:
-							quote_status = _('Pending')
-					supplier.quote_status = quote_status
+				quote_status = _('Received')
+				for item in self.items:
+					sqi_count = frappe.db.sql("""
+						SELECT
+							COUNT(sqi.name) as count
+						FROM
+							`tabSupplier Quotation Item` as sqi,
+							`tabSupplier Quotation` as sq
+						WHERE sq.supplier = %(supplier)s
+							AND sqi.docstatus = 1
+							AND sqi.request_for_quotation_item = %(rqi)s
+							AND sqi.parent = sq.name""",
+						{"supplier": supplier.supplier, "rqi": item.name}, as_dict=1)[0]
+					if (sqi_count.count) == 0:
+						quote_status = _('Pending')
+				supplier.quote_status = quote_status
 
 
 @frappe.whitelist()
@@ -322,16 +325,15 @@
 	})
 
 @frappe.whitelist()
-def get_pdf(doctype, name, supplier_idx):
-	doc = get_rfq_doc(doctype, name, supplier_idx)
+def get_pdf(doctype, name, supplier):
+	doc = get_rfq_doc(doctype, name, supplier)
 	if doc:
 		download_pdf(doctype, name, doc=doc)
 
-def get_rfq_doc(doctype, name, supplier_idx):
-	if cint(supplier_idx):
+def get_rfq_doc(doctype, name, supplier):
+	if supplier:
 		doc = frappe.get_doc(doctype, name)
-		args = doc.get('suppliers')[cint(supplier_idx) - 1]
-		doc.update_supplier_part_no(args)
+		doc.update_supplier_part_no(supplier)
 		return doc
 
 @frappe.whitelist()
diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
index ea38129..36f87b0 100644
--- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
@@ -25,14 +25,10 @@
 		sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[0].supplier)
 		sq.submit()
 
-		# No Quote first supplier quotation
-		rfq.get('suppliers')[1].no_quote = 1
-		rfq.get('suppliers')[1].quote_status = 'No Quote'
-
 		rfq.update_rfq_supplier_status() #rfq.get('suppliers')[1].supplier)
 
 		self.assertEqual(rfq.get('suppliers')[0].quote_status, 'Received')
-		self.assertEqual(rfq.get('suppliers')[1].quote_status, 'No Quote')
+		self.assertEqual(rfq.get('suppliers')[1].quote_status, 'Pending')
 
 	def test_make_supplier_quotation(self):
 		rfq = make_request_for_quotation()
diff --git a/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js b/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js
index 1a9cd35..2e1652d 100644
--- a/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js
+++ b/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js
@@ -84,9 +84,6 @@
 			cur_frm.fields_dict.suppliers.grid.grid_rows[0].toggle_view();
 		},
 		() => frappe.timeout(1),
-		() => {
-			frappe.click_check('No Quote');
-		},
 		() => frappe.timeout(1),
 		() => {
 			cur_frm.cur_grid.toggle_view();
@@ -125,7 +122,6 @@
 		() => frappe.timeout(1),
 		() => {
 			assert.ok(cur_frm.fields_dict.suppliers.grid.grid_rows[1].doc.quote_status == "Received");
-			assert.ok(cur_frm.fields_dict.suppliers.grid.grid_rows[0].doc.no_quote == 1);
 		},
 		() => done()
 	]);
diff --git a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
index 408f49f..e07f462 100644
--- a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
+++ b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
@@ -27,10 +27,11 @@
   "stock_qty",
   "warehouse_and_reference",
   "warehouse",
-  "project_name",
   "col_break4",
   "material_request",
   "material_request_item",
+  "section_break_24",
+  "project_name",
   "section_break_23",
   "page_break"
  ],
@@ -161,7 +162,7 @@
   {
    "fieldname": "project_name",
    "fieldtype": "Link",
-   "label": "Project Name",
+   "label": "Project",
    "options": "Project",
    "print_hide": 1
   },
@@ -249,11 +250,18 @@
    "no_copy": 1,
    "print_hide": 1,
    "read_only": 1
+  },
+  {
+   "collapsible": 1,
+   "fieldname": "section_break_24",
+   "fieldtype": "Section Break",
+   "label": "Accounting Dimensions"
   }
  ],
+ "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2020-06-12 19:10:36.333441",
+ "modified": "2020-09-24 17:26:46.276934",
  "modified_by": "Administrator",
  "module": "Buying",
  "name": "Request for Quotation Item",
diff --git a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json
index ce9316f..96d7e2d 100644
--- a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json
+++ b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json
@@ -9,19 +9,19 @@
   "email_sent",
   "supplier",
   "contact",
-  "no_quote",
   "quote_status",
   "column_break_3",
   "supplier_name",
-  "email_id",
-  "download_pdf"
+  "email_id"
  ],
  "fields": [
   {
    "allow_on_submit": 1,
+   "columns": 2,
    "default": "1",
    "fieldname": "send_email",
    "fieldtype": "Check",
+   "in_list_view": 1,
    "label": "Send Email"
   },
   {
@@ -35,7 +35,7 @@
    "read_only": 1
   },
   {
-   "columns": 4,
+   "columns": 2,
    "fieldname": "supplier",
    "fieldtype": "Link",
    "in_list_view": 1,
@@ -45,7 +45,7 @@
   },
   {
    "allow_on_submit": 1,
-   "columns": 3,
+   "columns": 2,
    "fieldname": "contact",
    "fieldtype": "Link",
    "in_list_view": 1,
@@ -55,19 +55,11 @@
   },
   {
    "allow_on_submit": 1,
-   "default": "0",
-   "depends_on": "eval:doc.docstatus >= 1 && doc.quote_status != 'Received'",
-   "fieldname": "no_quote",
-   "fieldtype": "Check",
-   "label": "No Quote"
-  },
-  {
-   "allow_on_submit": 1,
-   "depends_on": "eval:doc.docstatus >= 1 && !doc.no_quote",
+   "depends_on": "eval:doc.docstatus >= 1",
    "fieldname": "quote_status",
    "fieldtype": "Select",
    "label": "Quote Status",
-   "options": "Pending\nReceived\nNo Quote",
+   "options": "Pending\nReceived",
    "read_only": 1
   },
   {
@@ -90,17 +82,12 @@
    "in_list_view": 1,
    "label": "Email Id",
    "no_copy": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "download_pdf",
-   "fieldtype": "Button",
-   "label": "Download PDF"
   }
  ],
+ "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2020-09-28 19:31:11.855588",
+ "modified": "2020-10-16 12:23:41.769820",
  "modified_by": "Administrator",
  "module": "Buying",
  "name": "Request for Quotation Supplier",
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index baf2457..ae5611f 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -91,12 +91,7 @@
 					for my_item in self.items) if include_me else 0
 				if (sqi_count.count + self_count) == 0:
 					quote_status = _('Pending')
-			if quote_status == _('Received') and doc_sup.quote_status == _('No Quote'):
-				frappe.msgprint(_("{0} indicates that {1} will not provide a quotation, but all items \
-					have been quoted. Updating the RFQ quote status.").format(doc.name, self.supplier))
-				frappe.db.set_value('Request for Quotation Supplier', doc_sup.name, 'quote_status', quote_status)
-				frappe.db.set_value('Request for Quotation Supplier', doc_sup.name, 'no_quote', 0)
-			elif doc_sup.quote_status != _('No Quote'):
+
 				frappe.db.set_value('Request for Quotation Supplier', doc_sup.name, 'quote_status', quote_status)
 
 def get_list_context(context=None):
