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 8509d77..ef8f7cb 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -44,100 +44,13 @@
 					freeze: true,
 					args: {
 						rfq_name: frm.doc.name
-					},
-					callback: function(r){
-						frm.reload_doc();
 					}
 				});
 			});
-		}
+		}		
 
 	},
 
-	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\nSupplier Type", "reqd": 1 },
-				{	"fieldtype": "Link", "label": __("Supplier Type"),
-					"fieldname": "supplier_type",
-					"options": "Supplier Type",	"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Supplier Type'"},
-				{	"fieldtype": "Data", "label": __("Tag"),
-					"fieldname": "tag",	"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Tag'" },
-				{	"fieldtype": "Button", "label": __("Add All Suppliers"),
-					"fieldname": "add_suppliers", "cssClass": "btn-primary"},
-			]
-		});
-
-		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.tags.get_tagged_docs",
-					args: {
-						"doctype": "Supplier",
-						"tag": args.tag
-					},
-					callback: load_suppliers
-				});
-			} else if (args.supplier_type) {
-				return frappe.call({
-					method: "frappe.client.get_list",
-					args: {
-						doctype: "Supplier",
-						order_by: "name",
-						fields: ["name"],
-						filters: [["Supplier", "supplier_type", "=", args.supplier_type]]
-
-					},
-					callback: load_suppliers
-				});
-			}
-		});
-		dialog.show();
-
-	},
 	make_suppplier_quotation: function(frm) {
 		var doc = frm.doc;
 		var dialog = new frappe.ui.Dialog({
@@ -206,29 +119,6 @@
 		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");
-				}
-			});
-		}
 	}
 })
 
@@ -254,6 +144,27 @@
 						}
 					})
 				}, __("Get items from"));
+
+			// Get items from Opportunity 
+            this.frm.add_custom_button(__('Opportunity'),
+				function() {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
+						source_doctype: "Opportunity",
+						target: me.frm,
+						setters: {
+							company: me.frm.doc.company
+						},
+						get_query_filters: {
+							enquiry_type: "Sales"
+						}
+					})
+				}, __("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
@@ -294,7 +205,7 @@
 			}, __("Get items from"));
 
 		}
-	},
+   	},
 
 	calculate_taxes_and_totals: function() {
 		return;
