[fix] company listing context
diff --git a/erpnext/hub_node/__init__.py b/erpnext/hub_node/__init__.py
index 371a23f..89ee926 100644
--- a/erpnext/hub_node/__init__.py
+++ b/erpnext/hub_node/__init__.py
@@ -135,7 +135,7 @@
 	connection = get_client_connection()
 	details = connection.get_doc(doctype, hub_sync_id)
 	reviews = details.get('reviews')
-	if len(reviews):
+	if reviews and len(reviews):
 		for r in reviews:
 			r.setdefault('pretty_date', frappe.utils.pretty_date(r.get('modified')))
 		details.setdefault('reviews', reviews)
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.py b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
index dc69056..15ee4b7 100644
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.py
+++ b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
@@ -10,12 +10,10 @@
 from erpnext.utilities.product import get_price, get_qty_in_stock
 from six import string_types
 
-# hub_url = "https://hubmarket.org"
-hub_url = "http://159.89.175.122"
+hub_url = "https://hubmarket.org"
+# hub_url = "http://159.89.175.122"
 # hub_url = "http://erpnext.hub:8000"
 
-# test_hub_url = "https://hubmarket.org"
-
 class OAuth2Session():
 	def __init__(self, headers):
 		self.headers = headers
diff --git a/erpnext/hub_node/page/__init__.py b/erpnext/hub_node/page/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/hub_node/page/__init__.py
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index f829041..ce208ad 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -515,4 +515,5 @@
 erpnext.patches.v10_0.set_student_party_type
 erpnext.patches.v10_0.update_project_in_sle
 erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
-erpnext.patches.v11_0.add_index_on_nestedset_doctypes
\ No newline at end of file
+erpnext.patches.v11_0.add_index_on_nestedset_doctypes
+erpnext.patches.v11_0.remove_modules_setup_page
diff --git a/erpnext/patches/v11_0/remove_modules_setup_page.py b/erpnext/patches/v11_0/remove_modules_setup_page.py
new file mode 100644
index 0000000..bb0bdf5
--- /dev/null
+++ b/erpnext/patches/v11_0/remove_modules_setup_page.py
@@ -0,0 +1,8 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.delete_doc("Page", "modules_setup")
diff --git a/erpnext/public/images/hub_logo.svg b/erpnext/public/images/hub_logo.svg
index 4af4821..1612c6d 100644
--- a/erpnext/public/images/hub_logo.svg
+++ b/erpnext/public/images/hub_logo.svg
@@ -1,112 +1,37 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="330"
-   height="345.43808"
    viewBox="0 0 87.312496 91.397155"
-   version="1.1"
-   id="svg4635"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="hub-logo.svg"
-   inkscape:export-filename="/home/raghu/Desktop/hub-logo.png"
-   inkscape:export-xdpi="95.878258"
-   inkscape:export-ydpi="95.878258">
-  <defs
-     id="defs4629" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.7"
-     inkscape:cx="234.27717"
-     inkscape:cy="167.57445"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     units="px"
-     inkscape:window-width="1920"
-     inkscape:window-height="1149"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4632">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Reproduction" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Distribution" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#Notice" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#Attribution" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
+   class="hub-icon"
+   height="345.43808"
+   width="330">
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(121.51931,-138.66452)">
+     transform="translate(121.51931,-138.66452)"
+     id="layer1">
     <rect
-       rx="13.229166"
-       inkscape:export-ydpi="96"
-       inkscape:export-xdpi="96"
-       inkscape:export-filename="/home/raghu/Desktop/send/hub-02.png"
-       style="opacity:1;vector-effect:none;fill:#89da29;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
-       id="rect828"
-       width="87.3125"
-       height="87.3125"
-       x="-121.51931"
+       ry="13.229166"
        y="142.74918"
-       ry="13.229166" />
+       x="-121.51931"
+       height="87.3125"
+       width="87.3125"
+       id="rect828"
+       style="opacity:1;vector-effect:none;fill:#89da29;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+       rx="13.229166" />
     <path
-       style="opacity:1;vector-effect:none;fill:#63c923;fill-opacity:1;stroke:none;stroke-width:3.96875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
-       clip-path="none"
-       d="m -121.51931,202.96343 v 13.86892 c 0,7.32897 5.90017,13.22917 13.22916,13.22917 h 60.854162 c 6.610072,0 12.056133,-4.80013 13.061216,-11.1187 -43.339761,0.1608 -54.359752,-16.03276 -87.144538,-15.97939 z"
        id="path830"
-       inkscape:connector-curvature="0" />
-    <path
-       style="opacity:1;vector-effect:none;fill:#59b81c;fill-opacity:1;stroke:none;stroke-width:3.96875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+       d="m -121.51931,202.96343 v 13.86892 c 0,7.32897 5.90017,13.22917 13.22916,13.22917 h 60.854162 c 6.610072,0 12.056133,-4.80013 13.061216,-11.1187 -43.339761,0.1608 -54.359752,-16.03276 -87.144538,-15.97939 z"
        clip-path="none"
-       d="m -34.20681,202.96343 c -32.784694,-0.0533 -43.804846,16.14019 -87.14455,15.97939 1.00509,6.31857 6.45115,11.1187 13.06122,11.1187 h 60.854164 c 7.328992,0 13.229166,-5.9002 13.229166,-13.22917 z"
+       style="opacity:1;vector-effect:none;fill:#63c923;fill-opacity:1;stroke:none;stroke-width:3.96875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
+    <path
        id="path832"
-       inkscape:connector-curvature="0" />
+       d="m -34.20681,202.96343 c -32.784694,-0.0533 -43.804846,16.14019 -87.14455,15.97939 1.00509,6.31857 6.45115,11.1187 13.06122,11.1187 h 60.854164 c 7.328992,0 13.229166,-5.9002 13.229166,-13.22917 z"
+       clip-path="none"
+       style="opacity:1;vector-effect:none;fill:#59b81c;fill-opacity:1;stroke:none;stroke-width:3.96875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
     <path
-       id="path834"
-       d="m -84.351263,175.75725 c -1.30945,0 -2.376091,1.06665 -2.376091,2.37608 v 10.02885 0.001 c 0.06583,4.83083 4.01156,8.73477 8.857351,8.73486 4.8718,5e-5 8.846821,-3.94421 8.871295,-8.81134 v -0.001 -9.95288 c 0,-1.30943 -1.066113,-2.37557 -2.375589,-2.37557 -1.309396,0 -2.376064,1.06614 -2.376064,2.37557 v 9.8888 c 0,2.26045 -1.858169,4.10983 -4.119642,4.10983 -2.263616,0 -4.105699,-1.82766 -4.105699,-4.08968 v -9.90844 c 0,-1.30943 -1.066138,-2.37608 -2.375561,-2.37608 z m -20.887107,0.0925 c -1.30943,0 -2.37609,1.06717 -2.37609,2.3766 v 16.45119 c 0,1.30944 1.06666,2.37609 2.37609,2.37609 1.30945,0 2.37556,-1.06665 2.37556,-2.37609 v -5.97327 h 8.22534 v 5.97327 c 0,1.30944 1.066641,2.37609 2.376091,2.37609 1.309423,0 2.375561,-1.06665 2.375561,-2.37609 v -16.45119 c 0,-1.30943 -1.066138,-2.3766 -2.375561,-2.3766 -1.30945,0 -2.376091,1.06717 -2.376091,2.3766 v 5.72627 h -8.22534 v -5.72627 c 0,-1.30943 -1.06611,-2.3766 -2.37556,-2.3766 z m 41.77419,0 c -0.654712,0 -1.248675,0.26711 -1.678967,0.69764 -0.05368,0.0537 -0.105119,0.10983 -0.153458,0.16846 v 5.3e-4 c -0.04839,0.0586 -0.09427,0.11929 -0.136949,0.18242 v 5.3e-4 c -0.256381,0.37936 -0.406691,0.83617 -0.406691,1.32705 v 16.45119 c 0,0.1635 0.01693,0.3242 0.04858,0.47852 0.09512,0.46331 0.32594,0.87828 0.64852,1.20096 0.161369,0.16136 0.345308,0.29938 0.547264,0.40928 v 0 c 0.134567,0.0732 0.276781,0.13403 0.425318,0.18035 v 0 c 0.148537,0.0463 0.303186,0.0783 0.462518,0.0946 v 0 c 0.07959,0.008 0.160708,0.0124 0.242358,0.0124 h 8.33181 c 0.08747,0 0.167931,-0.0145 0.251142,-0.0238 l 0.09509,0.005 c 0.06019,0.003 0.119407,0.005 0.178779,0.006 h 0.0037 0.0048 c 3.578305,-2e-5 6.487954,-2.90916 6.487981,-6.48747 v -0.001 c -0.0026,-1.51334 -0.578009,-2.9475 -1.540484,-4.10673 0.962448,-1.15892 1.537785,-2.59314 1.540484,-4.10621 v -0.001 c -2.7e-5,-3.57831 -2.909676,-6.48744 -6.487981,-6.48746 h -0.533294 z m 8.865103,4.75062 c 0.96393,0 1.736831,0.77394 1.736831,1.73788 0,0.96394 -0.772901,1.73684 -1.736831,1.73684 v 0 h -0.532792 -5.955718 v -3.47317 h 5.956248 z m 0,8.21552 v 0 c 0.963507,5.3e-4 1.735799,0.77373 1.735799,1.73736 0,0.96394 -0.772901,1.73684 -1.736831,1.73684 h -0.0048 l -0.533294,0.0119 h -5.951591 v -3.4742 h 5.959846 z"
        style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.79375005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
-       inkscape:connector-curvature="0" />
+       d="m -84.351263,175.75725 c -1.30945,0 -2.376091,1.06665 -2.376091,2.37608 v 10.02885 0.001 c 0.06583,4.83083 4.01156,8.73477 8.857351,8.73486 4.8718,5e-5 8.846821,-3.94421 8.871295,-8.81134 v -0.001 -9.95288 c 0,-1.30943 -1.066113,-2.37557 -2.375589,-2.37557 -1.309396,0 -2.376064,1.06614 -2.376064,2.37557 v 9.8888 c 0,2.26045 -1.858169,4.10983 -4.119642,4.10983 -2.263616,0 -4.105699,-1.82766 -4.105699,-4.08968 v -9.90844 c 0,-1.30943 -1.066138,-2.37608 -2.375561,-2.37608 z m -20.887107,0.0925 c -1.30943,0 -2.37609,1.06717 -2.37609,2.3766 v 16.45119 c 0,1.30944 1.06666,2.37609 2.37609,2.37609 1.30945,0 2.37556,-1.06665 2.37556,-2.37609 v -5.97327 h 8.22534 v 5.97327 c 0,1.30944 1.066641,2.37609 2.376091,2.37609 1.309423,0 2.375561,-1.06665 2.375561,-2.37609 v -16.45119 c 0,-1.30943 -1.066138,-2.3766 -2.375561,-2.3766 -1.30945,0 -2.376091,1.06717 -2.376091,2.3766 v 5.72627 h -8.22534 v -5.72627 c 0,-1.30943 -1.06611,-2.3766 -2.37556,-2.3766 z m 41.77419,0 c -0.654712,0 -1.248675,0.26711 -1.678967,0.69764 -0.05368,0.0537 -0.105119,0.10983 -0.153458,0.16846 v 5.3e-4 c -0.04839,0.0586 -0.09427,0.11929 -0.136949,0.18242 v 5.3e-4 c -0.256381,0.37936 -0.406691,0.83617 -0.406691,1.32705 v 16.45119 c 0,0.1635 0.01693,0.3242 0.04858,0.47852 0.09512,0.46331 0.32594,0.87828 0.64852,1.20096 0.161369,0.16136 0.345308,0.29938 0.547264,0.40928 v 0 c 0.134567,0.0732 0.276781,0.13403 0.425318,0.18035 v 0 c 0.148537,0.0463 0.303186,0.0783 0.462518,0.0946 v 0 c 0.07959,0.008 0.160708,0.0124 0.242358,0.0124 h 8.33181 c 0.08747,0 0.167931,-0.0145 0.251142,-0.0238 l 0.09509,0.005 c 0.06019,0.003 0.119407,0.005 0.178779,0.006 h 0.0037 0.0048 c 3.578305,-2e-5 6.487954,-2.90916 6.487981,-6.48747 v -0.001 c -0.0026,-1.51334 -0.578009,-2.9475 -1.540484,-4.10673 0.962448,-1.15892 1.537785,-2.59314 1.540484,-4.10621 v -0.001 c -2.7e-5,-3.57831 -2.909676,-6.48744 -6.487981,-6.48746 h -0.533294 z m 8.865103,4.75062 c 0.96393,0 1.736831,0.77394 1.736831,1.73788 0,0.96394 -0.772901,1.73684 -1.736831,1.73684 v 0 h -0.532792 -5.955718 v -3.47317 h 5.956248 z m 0,8.21552 v 0 c 0.963507,5.3e-4 1.735799,0.77373 1.735799,1.73736 0,0.96394 -0.772901,1.73684 -1.736831,1.73684 h -0.0048 l -0.533294,0.0119 h -5.951591 v -3.4742 h 5.959846 z"
+       id="path834" />
     <path
-       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#63c923;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.93750048;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m -77.859375,138.66406 c -9.653316,0 -18.439915,3.93483 -24.767575,10.28125 a 3.9691471,3.9691471 0 1 0 5.621091,5.60352 c 4.899576,-4.9141 11.6422,-7.94727 19.146484,-7.94727 7.501101,0 14.241542,3.03098 19.140625,7.94141 a 3.9691471,3.9691471 0 1 0 5.619141,-5.60547 c -6.327038,-6.34169 -15.110547,-10.27344 -24.759766,-10.27344 z"
        id="path838"
-       inkscape:connector-curvature="0" />
+       d="m -77.859375,138.66406 c -9.653316,0 -18.439915,3.93483 -24.767575,10.28125 a 3.9691471,3.9691471 0 1 0 5.621091,5.60352 c 4.899576,-4.9141 11.6422,-7.94727 19.146484,-7.94727 7.501101,0 14.241542,3.03098 19.140625,7.94141 a 3.9691471,3.9691471 0 1 0 5.619141,-5.60547 c -6.327038,-6.34169 -15.110547,-10.27344 -24.759766,-10.27344 z"
+       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#63c923;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.93750048;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
   </g>
 </svg>
diff --git a/erpnext/public/js/hub/hub_form.js b/erpnext/public/js/hub/hub_form.js
index 5fdcadb..62c44fc 100644
--- a/erpnext/public/js/hub/hub_form.js
+++ b/erpnext/public/js/hub/hub_form.js
@@ -40,10 +40,6 @@
 			wrapper: this.$page.find('.layout-side-section'),
 			css_class: 'hub-form-sidebar'
 		});
-
-		this.attachFooter();
-		this.attachTimeline();
-		this.attachReviewArea();
 	}
 
 	setup_filter_area() { }
@@ -132,8 +128,8 @@
 		this.form.set_values(this.data);
 		this.$result.show();
 
-		this.$timelineList.empty();
-		if(this.data.reviews.length) {
+		this.$timelineList && this.$timelineList.empty();
+		if(this.data.reviews && this.data.reviews.length) {
 			this.data.reviews.map(review => {
 				this.addReviewToTimeline(review);
 			})
@@ -323,6 +319,58 @@
 		this.image_field_name = 'image';
 	}
 
+	setup_page_head() {
+		super.setup_page_head();
+		this.set_primary_action();
+	}
+
+	setup_side_bar() {
+		this.setup_side_bar();
+		this.attachFooter();
+		this.attachTimeline();
+		this.attachReviewArea();
+	}
+
+	set_primary_action() {
+		let item = this.data;
+		this.page.set_primary_action(__('Request a Quote'), () => {
+			this.show_rfq_modal()
+				.then(values => {
+					item.item_code = values.item_code;
+					delete values.item_code;
+
+					const supplier = values;
+					return [item, supplier];
+				})
+				.then(([item, supplier]) => {
+					return this.make_rfq(item, supplier, this.page.btn_primary);
+				})
+				.then(r => {
+					console.log(r);
+					if (r.message && r.message.rfq) {
+						this.page.btn_primary.addClass('disabled').html(`<span><i class='fa fa-check'></i> ${__('Quote Requested')}</span>`);
+					} else {
+						throw r;
+					}
+				})
+				.catch((e) => {
+					console.log(e); //eslint-disable-line
+				});
+		}, 'octicon octicon-plus');
+	}
+
+	make_rfq(item, supplier, btn) {
+		console.log(supplier);
+		return new Promise((resolve, reject) => {
+			frappe.call({
+				method: 'erpnext.hub_node.make_rfq_and_send_opportunity',
+				args: { item, supplier },
+				callback: resolve,
+				btn,
+			}).fail(reject);
+		});
+	}
+
 	postRender() {
 		this.categoryDialog = new frappe.ui.Dialog({
 			title: __('Suggest Category'),
@@ -345,6 +393,7 @@
 						category: values.category
 					},
 					callback: () => {
+						this.categoryDialog.hide();
 						this.refresh();
 					},
 					freeze: true
@@ -383,6 +432,36 @@
 		];
 		this.formFields = colOneFields.concat(miscFields, colTwoFields);
 	}
+
+	show_rfq_modal() {
+		let item = this.data;
+		return new Promise(res => {
+			let fields = [
+				{ label: __('Item Code'), fieldtype: 'Data', fieldname: 'item_code', default: item.item_code },
+				{ fieldtype: 'Column Break' },
+				{ label: __('Item Group'), fieldtype: 'Link', fieldname: 'item_group', default: item.item_group },
+				{ label: __('Supplier Details'), fieldtype: 'Section Break' },
+				{ label: __('Supplier Name'), fieldtype: 'Data', fieldname: 'supplier_name', default: item.company_name },
+				{ label: __('Supplier Email'), fieldtype: 'Data', fieldname: 'supplier_email', default: item.seller },
+				{ fieldtype: 'Column Break' },
+				{ label: __('Supplier Type'), fieldname: 'supplier_type',
+					fieldtype: 'Link', options: 'Supplier Type' }
+			];
+			fields = fields.map(f => { f.reqd = 1; return f; });
+
+			const d = new frappe.ui.Dialog({
+				title: __('Request for Quotation'),
+				fields: fields,
+				primary_action_label: __('Send'),
+				primary_action: (values) => {
+					res(values);
+					d.hide();
+				}
+			});
+
+			d.show();
+		});
+	}
 }
 
 erpnext.hub.CompanyPage = class CompanyPage extends erpnext.hub.HubDetailsPage {
diff --git a/erpnext/public/js/hub/hub_listing.js b/erpnext/public/js/hub/hub_listing.js
index 9e19f73..a979d28 100644
--- a/erpnext/public/js/hub/hub_listing.js
+++ b/erpnext/public/js/hub/hub_listing.js
@@ -152,9 +152,8 @@
 		var html = this.data.map(this.item_html.bind(this)).join("");
 
 		if (this.start === 0) {
-			// this.renderHeader();
+			// ${this.getHeaderHtml()}
 			this.$result.html(`
-				${this.getHeaderHtml()}
 				<div class="image-view-container small">
 					${html}
 				</div>
@@ -173,17 +172,21 @@
 		});
 	}
 
-	getHeaderHtml() {
+	getHeaderHtml(title, image, content) {
 		// let company_html =
 		return `
 			<header class="list-row-head text-muted small">
 				<div style="display: flex;">
 					<div class="list-header-icon">
-						<img title="Riadco%20Group" alt="Riadco Group" src="https://cdn.pbrd.co/images/HdaPxcg.png">
+						<img title="${title}" alt="${title}" src="${image}">
 					</div>
 					<div class="list-header-info">
-						<h5>Riadco Group</h5>
-						<span class="margin-vertical-10 level-item">Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam</span>
+						<h5>
+							${title}
+						</h5>
+						<span class="margin-vertical-10 level-item">
+							${content}
+						</span>
 					</div>
 				</div>
 			</header>
@@ -246,69 +249,6 @@
 		)
 	}
 
-	item_html(item) {
-		item._name = encodeURI(item.name);
-		const encoded_name = item._name;
-		const title = strip_html(item[this.meta.title_field || 'name']);
-		const _class = !item[this.imageFieldName] ? 'no-image' : '';
-		const route = `#Hub/Item/${item.hub_item_code}`;
-		const company_name = item['company_name'];
-
-		const reviewLength = (item.reviews || []).length;
-		const ratingAverage = reviewLength
-			? item.reviews
-				.map(r => r.rating)
-				.reduce((a, b) => (a + b, 0))/reviewLength
-			: -1;
-
-		let ratingHtml = ``;
-
-		for(var i = 0; i < 5; i++) {
-			let starClass = 'fa-star';
-			if(i >= ratingAverage) starClass = 'fa-star-o';
-			ratingHtml += `<i class='fa fa-fw ${starClass} star-icon' data-index=${i}></i>`;
-		}
-
-		let item_html = `
-			<div class="image-view-item">
-				<div class="image-view-header">
-					<div class="list-row-col list-subject ellipsis level">
-						<span class="level-item bold ellipsis" title="McGuffin">
-							<a href="${route}">${title}</a>
-						</span>
-					</div>
-					<div class="text-muted small" style="margin: 5px 0px;">
-						${ratingHtml}
-						(${reviewLength})
-					</div>
-					<div class="list-row-col">
-						<a href="${'#Hub/Company/'+company_name}"><p>${ company_name }</p></a>
-					</div>
-				</div>
-				<div class="image-view-body">
-					<a  data-name="${encoded_name}"
-						title="${encoded_name}"
-						href="${route}"
-					>
-						<div class="image-field ${_class}"
-							data-name="${encoded_name}"
-						>
-							<button class="btn btn-default zoom-view" data-name="${encoded_name}">
-								<i class="octicon octicon-eye" data-name="${encoded_name}"></i>
-							</button>
-							<button class="btn btn-default like-button" data-name="${encoded_name}">
-								<i class="octicon octicon-heart" data-name="${encoded_name}"></i>
-							</button>
-						</div>
-					</a>
-				</div>
-
-			</div>
-		`;
-
-		return item_html;
-	}
-
 	setup_quick_view() {
 		if(this.quick_view) return;
 
@@ -316,6 +256,31 @@
 			title: 'Quick View',
 			fields: this.formFields
 		});
+		this.quick_view.set_primary_action(__('Request a Quote'), () => {
+			this.show_rfq_modal()
+				.then(values => {
+					item.item_code = values.item_code;
+					delete values.item_code;
+
+					const supplier = values;
+					return [item, supplier];
+				})
+				.then(([item, supplier]) => {
+					return this.make_rfq(item, supplier, this.page.btn_primary);
+				})
+				.then(r => {
+					console.log(r);
+					if (r.message && r.message.rfq) {
+						this.page.btn_primary.addClass('disabled').html(`<span><i class='fa fa-check'></i> ${__('Quote Requested')}</span>`);
+					} else {
+						throw r;
+					}
+				})
+				.catch((e) => {
+					console.log(e); //eslint-disable-line
+				});
+		}, 'octicon octicon-plus');
+
 		this.$result.on('click', '.btn.zoom-view', (e) => {
 			e.preventDefault();
 			e.stopPropagation();
@@ -400,6 +365,14 @@
 		this.filters = [];
 	}
 
+	render() {
+		this.data_dict = {};
+		this.render_image_view();
+
+		this.setup_quick_view();
+		this.setup_like();
+	}
+
 	bootstrap_data(response) {
 		let companies = response.companies.map(d => d.name);
 		this.custom_filter_configs = [
@@ -486,6 +459,11 @@
 			label: __("Favourites"),
 			on_click: () => frappe.set_route('Hub', 'Favourites')
 		}, __("Account"));
+
+		this.sidebar.add_item({
+			label: __("Settings"),
+			on_click: () => frappe.set_route('Form', 'Hub Settings')
+		}, __("Account"));
 	}
 
 	update_category(label) {
@@ -514,6 +492,70 @@
 			this.data_dict[d.hub_item_code] = d;
 		});
 	}
+
+	item_html(item) {
+		item._name = encodeURI(item.name);
+		const encoded_name = item._name;
+		const title = strip_html(item[this.meta.title_field || 'name']);
+		const _class = !item[this.imageFieldName] ? 'no-image' : '';
+		const route = `#Hub/Item/${item.hub_item_code}`;
+		const company_name = item['company_name'];
+
+		const reviewLength = (item.reviews || []).length;
+		const ratingAverage = reviewLength
+			? item.reviews
+				.map(r => r.rating)
+				.reduce((a, b) => a + b, 0)/reviewLength
+			: -1;
+
+		let ratingHtml = ``;
+
+		for(var i = 0; i < 5; i++) {
+			let starClass = 'fa-star';
+			if(i >= ratingAverage) starClass = 'fa-star-o';
+			ratingHtml += `<i class='fa fa-fw ${starClass} star-icon' data-index=${i}></i>`;
+		}
+
+		let item_html = `
+			<div class="image-view-item">
+				<div class="image-view-header">
+					<div class="list-row-col list-subject ellipsis level">
+						<span class="level-item bold ellipsis" title="McGuffin">
+							<a href="${route}">${title}</a>
+						</span>
+					</div>
+					<div class="text-muted small" style="margin: 5px 0px;">
+						${ratingHtml}
+						(${reviewLength})
+					</div>
+					<div class="list-row-col">
+						<a href="${'#Hub/Company/'+company_name}"><p>${ company_name }</p></a>
+					</div>
+				</div>
+				<div class="image-view-body">
+					<a  data-name="${encoded_name}"
+						title="${encoded_name}"
+						href="${route}"
+					>
+						<div class="image-field ${_class}"
+							data-name="${encoded_name}"
+						>
+							<button class="btn btn-default zoom-view" data-name="${encoded_name}">
+								<i class="octicon octicon-eye" data-name="${encoded_name}"></i>
+							</button>
+							<button class="btn btn-default like-button" data-name="${encoded_name}">
+								<i class="octicon octicon-heart" data-name="${encoded_name}"></i>
+							</button>
+						</div>
+					</a>
+				</div>
+
+			</div>
+		`;
+
+		return item_html;
+	}
+
 };
 
 erpnext.hub.Favourites = class Favourites extends erpnext.hub.ItemListing {
@@ -564,16 +606,6 @@
 			label: __('Back to Products'),
 			on_click: () => frappe.set_route('Hub', 'Item')
 		});
-
-		// this.sidebar.add_item({
-		// 	label: this.hub_settings.company,
-		// 	on_click: () => frappe.set_route('Form', 'Company', this.hub_settings.company)
-		// }, __("Account"));
-
-		// this.sidebar.add_item({
-		// 	label: __("My Orders"),
-		// 	on_click: () => frappe.set_route('List', 'Request for Quotation')
-		// }, __("Account"));
 	}
 
 	update_category(label) {
@@ -610,6 +642,11 @@
 		this.show();
 	}
 
+	render() {
+		this.data_dict = {};
+		this.render_image_view();
+	}
+
 	setup_defaults() {
 		super.setup_defaults();
 		this.doctype = 'Hub Company';
@@ -628,6 +665,18 @@
 		this.imageFieldName = 'company_logo';
 	}
 
+	setup_side_bar() {
+		this.sidebar = new frappe.ui.Sidebar({
+			wrapper: this.page.wrapper.find('.layout-side-section'),
+			css_class: 'hub-sidebar'
+		});
+
+		this.sidebar.add_item({
+			label: __('Back to Products'),
+			on_click: () => frappe.set_route('Hub', 'Item')
+		});
+	}
+
 	get_filters_for_args() {
 		let filters = {};
 		this.filter_area.get().forEach(f => {
@@ -637,29 +686,41 @@
 		return filters;
 	}
 
-	card_html(company) {
-		company._name = encodeURI(company.name);
-		const route = `#Hub/Company/${company.company_name}`;
+	item_html(company) {
+		company._name = encodeURI(company.company_name);
+		const encoded_name = company._name;
+		const title = strip_html(company.company_name);
+		const _class = !company[this.imageFieldName] ? 'no-image' : '';
+		const company_name = company['company_name'];
+		const route = `#Hub/Company/${company_name}`;
 
 		let image_html = company.company_logo ?
 			`<img src="${company.company_logo}"><span class="helper"></span>` :
 			`<div class="standard-image">${frappe.get_abbr(company.company_name)}</div>`;
 
-		return `
-			<div class="hub-item-wrapper margin-bottom" style="width: 200px;">
-				<a href="${route}">
-					<div class="hub-item-image">
-						<div class="img-wrapper" style="height: 200px; width: 200px">
-							${ image_html }
+		let item_html = `
+			<div class="image-view-item">
+				<div class="image-view-header">
+					<div class="list-row-col list-subject ellipsis level">
+						<span class="level-item bold ellipsis" title="McGuffin">
+							<a href="${route}">${title}</a>
+						</span>
+					</div>
+				</div>
+				<div class="image-view-body">
+					<a  data-name="${encoded_name}"
+						title="${encoded_name}"
+						href="${route}">
+						<div class="image-field ${_class}"
+							data-name="${encoded_name}">
 						</div>
-					</div>
-					<div class="hub-item-title">
-						<h5 class="bold">
-							${ company.company_name }
-						</h5>
-					</div>
-				</a>
+					</a>
+				</div>
+
 			</div>
 		`;
+
+		return item_html;
 	}
+
 };
\ No newline at end of file
diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less
index 711a40a..e962e91 100644
--- a/erpnext/public/less/erpnext.less
+++ b/erpnext/public/less/erpnext.less
@@ -23,6 +23,20 @@
 	margin-top: -3px;
 }
 
+.app-icon-svg {
+	display: inline-block;
+    margin: auto;
+    text-align: center;
+    border-radius: 16px;
+    cursor: pointer;
+	box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.15);
+}
+
+.app-icon-svg .hub-icon {
+	height: 72px;
+	width: 72px;
+}
+
 .dashboard-list-item {
 	background-color: inherit;
 	padding: 5px 0px;
diff --git a/erpnext/public/less/hub.less b/erpnext/public/less/hub.less
index f202fa4..bdca28f 100644
--- a/erpnext/public/less/hub.less
+++ b/erpnext/public/less/hub.less
@@ -3,6 +3,7 @@
 body[data-route^="Hub/"] {
 	.hub-icon {
 		width: 40px;
+		height: 40px;
 	}
 
 	.hub-page-title {
@@ -73,6 +74,67 @@
 	.frappe-list .result {
 		min-height: 100px;
 	}
+
+	.frappe-control[data-fieldtype="Attach Image"] {
+		width: 140px;
+		height: 180px;
+		margin-top: 20px;
+	}
+
+	.frappe-control[data-fieldtype="Attach Image"] .form-group {
+		display: none;
+	}
+
+	.frappe-control[data-fieldtype="Attach Image"] .clearfix {
+		display: none;
+	}
+
+	.missing-image {
+		display: block;
+		position: relative;
+		border-radius: 4px;
+		border: 1px solid #d1d8dd;
+		border-radius: 6px;
+		box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+	}
+	.missing-image .octicon {
+		position: relative;
+		top: 50%;
+		transform: translate(0px, -50%);
+		-webkit-transform: translate(0px, -50%);
+	}
+	.attach-image-display {
+		display: block;
+		position: relative;
+		border-radius: 4px;
+	}
+	.img-container {
+		height: 100%;
+		width: 100%;
+		padding: 2px;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		position: relative;
+		border: 1px solid #d1d8dd;
+		border-radius: 6px;
+		box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+	}
+	.img-overlay {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		color: #777777;
+		background-color: rgba(255, 255, 255, 0.7);
+		opacity: 0;
+	}
+	.img-overlay:hover {
+		opacity: 1;
+		cursor: pointer;
+	}
 }
 
 .image-view-container {