diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py
index 4e60477..31f74a6 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.py
+++ b/erpnext/crm/doctype/opportunity/opportunity.py
@@ -84,11 +84,19 @@
 		self.delete_events()
 
 	def has_active_quotation(self):
-		return frappe.db.sql("""
-			select q.name 
-			from `tabQuotation` q, `tabQuotation Item` qi
-			where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s 
-			and q.status not in ('Lost', 'Closed')""", self.name)
+		if not self.with_items:
+			return frappe.get_all('Quotation',
+				{
+					'opportunity': self.name,
+					'status': ("not in", ['Lost', 'Closed']),
+					'docstatus': 1
+				}, 'name')
+		else:
+			return frappe.db.sql("""
+				select q.name
+				from `tabQuotation` q, `tabQuotation Item` qi
+				where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s
+				and q.status not in ('Lost', 'Closed')""", self.name)
 
 	def has_ordered_quotation(self):
 		return frappe.db.sql("""
@@ -186,27 +194,6 @@
 	}
 
 @frappe.whitelist()
-def make_request_for_quotation(source_name, target_doc=None):
-	doclist = get_mapped_doc("Opportunity", source_name, {
-		"Opportunity": {
-			"doctype": "Request for Quotation",
-			"validation": {
-				"enquiry_type": ["=", "Sales"]
-			}
-		},
-		"Opportunity Item": {
-			"doctype": "Request for Quotation Item",
-			"field_map": [
-				["name", "opportunity_item"],
-				["parent", "opportunity"],
-				["uom", "uom"]
-			]
-		}
-	}, target_doc)
-
-	return doclist
-
-@frappe.whitelist()
 def make_quotation(source_name, target_doc=None):
 	def set_missing_values(source, target):
 		from erpnext.controllers.accounts_controller import get_default_taxes_and_charges
@@ -233,6 +220,8 @@
 
 		quotation.run_method("set_missing_values")
 		quotation.run_method("calculate_taxes_and_totals")
+		if not source.with_items:
+			quotation.opportunity = source.name
 
 	doclist = get_mapped_doc("Opportunity", source_name, {
 		"Opportunity": {
@@ -256,6 +245,27 @@
 
 	return doclist
 
+ @frappe.whitelist()
+ def make_request_for_quotation(source_name, target_doc=None):
+ 	doclist = get_mapped_doc("Opportunity", source_name, {
+ 		"Opportunity": {
+ 			"doctype": "Request for Quotation",
+ 			"validation": {
+ 				"enquiry_type": ["=", "Sales"]
+ 			}
+ 		},
+ 		"Opportunity Item": {
+ 			"doctype": "Request for Quotation Item",
+ 			"field_map": [
+ 				["name", "opportunity_item"],
+ 				["parent", "opportunity"],
+ 				["uom", "uom"]
+ 			]
+ 		}
+ 	}, target_doc)
+ 
+ 	return doclist
+
 @frappe.whitelist()
 def make_supplier_quotation(source_name, target_doc=None):
 	doclist = get_mapped_doc("Opportunity", source_name, {
@@ -272,7 +282,8 @@
 			}
 		}
 	}, target_doc)
-        return doclist
+
+	return doclist
 
 @frappe.whitelist()
 def set_multiple_status(names, status):
