[Enhancement] Supplier quotation added on supplier portal
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 b01d3e8..482a2ae 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
@@ -210,7 +210,7 @@
 		frappe.msgprint(_("Supplier Quotation {0} created").format(sq_doc.name))
 		return sq_doc.name
 	except Exception:
-		return
+		return None
 
 def add_items(sq_doc, supplier, items):
 	for data in items:
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index 206dfa3..144e982 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
+from frappe import _
 from frappe.utils import flt
 from frappe.model.mapper import get_mapped_doc
 
@@ -54,6 +55,18 @@
 		pc = frappe.get_doc('Purchase Common')
 		pc.validate_for_items(self)
 
+def get_list_context(context=None):
+	from erpnext.controllers.website_list_for_contact import get_list_context
+	list_context = get_list_context(context)
+	list_context.update({
+		'show_sidebar': True,
+		'show_search': True,
+		'no_breadcrumbs': True,
+		'title': _('Supplier Quotation'),
+	})
+
+	return list_context
+
 @frappe.whitelist()
 def make_purchase_order(source_name, target_doc=None):
 	def set_missing_values(source, target):
diff --git a/erpnext/controllers/website_list_for_contact.py b/erpnext/controllers/website_list_for_contact.py
index 75c6e08..1abb7e7 100644
--- a/erpnext/controllers/website_list_for_contact.py
+++ b/erpnext/controllers/website_list_for_contact.py
@@ -25,7 +25,10 @@
 
 	if not filters: filters = []
 
-	filters.append((doctype, "docstatus", "=", 1))
+	if doctype == 'Supplier Quotation':
+		filters.append((doctype, "docstatus", "<", 2))
+	else:
+		filters.append((doctype, "docstatus", "=", 1))
 
 	if user != "Guest" and is_website_user():
 		parties_doctype = 'Request for Quotation Supplier' if doctype == 'Request for Quotation' else doctype
@@ -112,7 +115,8 @@
 		return frappe.get_all(doctype, filters=[(doctype, "customer", "in", customers),
 			(doctype, "name", "=", doc.name)]) and True or False
 	elif suppliers:
-		return frappe.get_all(doctype, filters=[(doctype, "suppliers", "in", suppliers),
+		fieldname = 'suppliers' if doctype == 'Request for Quotation' else 'supplier'
+		return frappe.get_all(doctype, filters=[(doctype, fieldname, "in", suppliers),
 			(doctype, "name", "=", doc.name)]) and True or False
 	else:
 		return False
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 19e915e..43ae234 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -67,6 +67,13 @@
 			"parents": [{"title": _("Invoices"), "name": "invoices"}]
 		}
 	},
+	{"from_route": "/quotations", "to_route": "Supplier Quotation"},
+	{"from_route": "/quotations/<path:name>", "to_route": "order",
+		"defaults": {
+			"doctype": "Supplier Quotation",
+			"parents": [{"title": _("Supplier Quotation"), "name": "quotations"}]
+		}
+	},
 	{"from_route": "/shipments", "to_route": "Delivery Note"},
 	{"from_route": "/shipments/<path:name>", "to_route": "order",
 		"defaults": {
@@ -95,6 +102,7 @@
 portal_menu_items = [
 	{"title": _("Projects"), "route": "/project", "reference_doctype": "Project"},
 	{"title": _("Request for Quotations"), "route": "/rfq", "reference_doctype": "Request for Quotation"},
+	{"title": _("Supplier Quotation"), "route": "/quotations", "reference_doctype": "Supplier Quotation"},
 	{"title": _("Orders"), "route": "/orders", "reference_doctype": "Sales Order"},
 	{"title": _("Invoices"), "route": "/invoices", "reference_doctype": "Sales Invoice"},
 	{"title": _("Shipments"), "route": "/shipments", "reference_doctype": "Delivery Note"},
@@ -109,6 +117,7 @@
 has_website_permission = {
 	"Sales Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
 	"Sales Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
+	"Supplier Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission",
 	"Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission",
 	"Issue": "erpnext.support.doctype.issue.issue.has_website_permission",
 	"Address": "erpnext.utilities.doctype.address.address.has_website_permission",
diff --git a/erpnext/templates/includes/rfq.js b/erpnext/templates/includes/rfq.js
index c63226c..42dcc3a 100644
--- a/erpnext/templates/includes/rfq.js
+++ b/erpnext/templates/includes/rfq.js
@@ -81,8 +81,11 @@
 				},
 				btn: this,
 				callback: function(r){
-					$('.btn-sm').hide()
 					frappe.unfreeze();
+					if(r.message){
+						$('.btn-sm').hide()
+						window.location.href = "/quotations/" + encodeURIComponent(r.message);
+					}
 				}
 			})
 		})
diff --git a/erpnext/templates/pages/order.py b/erpnext/templates/pages/order.py
index d390ebf..1a40280 100644
--- a/erpnext/templates/pages/order.py
+++ b/erpnext/templates/pages/order.py
@@ -16,8 +16,8 @@
 	context.parents = frappe.form_dict.parents
 	context.payment_ref = frappe.db.get_value("Payment Request", 
 		{"reference_name": frappe.form_dict.name}, "name")
-	
+
 	context.enabled_checkout = frappe.get_doc("Shopping Cart Settings").enable_checkout
-			
+
 	if not context.doc.has_website_permission("read"):
 		frappe.throw(_("Not Permitted"), frappe.PermissionError)