Merge pull request #15279 from netchampfaris/marketplace-fixes-3

- feat: Add disable marketplace option in Hub Settings
- fix: Rename Hub Settings -> Marketplace Settings
diff --git a/erpnext/config/hub_node.py b/erpnext/config/hub_node.py
index c9d5b97..9b9fcc4 100644
--- a/erpnext/config/hub_node.py
+++ b/erpnext/config/hub_node.py
@@ -8,16 +8,16 @@
 			"items": [
 				{
 					"type": "doctype",
-					"name": "Hub Settings"
+					"name": "Marketplace Settings"
 				},
 			]
 		},
 		{
-			"label": _("Hub"),
+			"label": _("Marketplace"),
 			"items": [
 				{
 					"type": "page",
-					"name": "hub"
+					"name": "marketplace/home"
 				},
 			]
 		},
diff --git a/erpnext/hub_node/__init__.py b/erpnext/hub_node/__init__.py
index 0ebbec7..85ffe29 100644
--- a/erpnext/hub_node/__init__.py
+++ b/erpnext/hub_node/__init__.py
@@ -6,12 +6,12 @@
 
 @frappe.whitelist()
 def enable_hub():
-	hub_settings = frappe.get_doc('Hub Settings')
+	hub_settings = frappe.get_doc('Marketplace Settings')
 	hub_settings.register()
 	frappe.db.commit()
 	return hub_settings
 
 @frappe.whitelist()
 def sync():
-	hub_settings = frappe.get_doc('Hub Settings')
+	hub_settings = frappe.get_doc('Marketplace Settings')
 	hub_settings.sync()
diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
index 2a05dd2..fe41919 100644
--- a/erpnext/hub_node/api.py
+++ b/erpnext/hub_node/api.py
@@ -24,7 +24,7 @@
 	field_mappings = get_field_mappings()
 	table_fields = [d.fieldname for d in frappe.get_meta('Item').get_table_fields()]
 
-	hub_seller = frappe.db.get_value('Hub Settings' , 'Hub Settings', 'company_email')
+	hub_seller = frappe.db.get_value('Marketplace Settings' , 'Marketplace Settings', 'company_email')
 
 	for item in items:
 		for fieldname in table_fields:
@@ -106,7 +106,7 @@
 	})
 
 	if response:
-		frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 1)
+		frappe.db.set_value("Marketplace Settings", "Marketplace Settings", "sync_in_progress", 1)
 		return response
 	else:
 		frappe.throw('Unable to update remote activity')
@@ -114,11 +114,11 @@
 def item_sync_postprocess():
 	response = call_hub_method('post_items_publish', {})
 	if response:
-		frappe.db.set_value('Hub Settings', 'Hub Settings', 'last_sync_datetime', frappe.utils.now())
+		frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'last_sync_datetime', frappe.utils.now())
 	else:
 		frappe.throw('Unable to update remote activity')
 
-	frappe.db.set_value('Hub Settings', 'Hub Settings', 'sync_in_progress', 0)
+	frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'sync_in_progress', 0)
 
 
 def load_base64_image_from_items(items):
@@ -162,7 +162,7 @@
 
 	# read-only connection
 	if read_only:
-		hub_url = frappe.db.get_single_value('Hub Settings', 'hub_url')
+		hub_url = frappe.db.get_single_value('Marketplace Settings', 'hub_url')
 		hub_connection = FrappeClient(hub_url)
 		return hub_connection
 
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.js b/erpnext/hub_node/doctype/hub_settings/hub_settings.js
deleted file mode 100644
index 089f499..0000000
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.js
+++ /dev/null
@@ -1,3 +0,0 @@
-frappe.ui.form.on("Hub Settings", {
-	onload_post_render: function() {},
-});
diff --git a/erpnext/hub_node/doctype/hub_settings/test_hub_settings.js b/erpnext/hub_node/doctype/hub_settings/test_hub_settings.js
deleted file mode 100644
index 546ce15..0000000
--- a/erpnext/hub_node/doctype/hub_settings/test_hub_settings.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable */
-// rename this file from _test_[name] to test_[name] to activate
-// and remove above this line
-
-QUnit.test("test: Hub Settings", function (assert) {
-	let done = assert.async();
-
-	// number of asserts
-	assert.expect(1);
-
-	frappe.run_serially('Hub Settings', [
-		// insert a new Hub Settings
-		() => frappe.tests.make([
-			// values to be set
-			{key: 'value'}
-		]),
-		() => {
-			assert.equal(cur_frm.doc.key, 'value');
-		},
-		() => done()
-	]);
-
-});
diff --git a/erpnext/hub_node/doctype/hub_settings/test_hub_settings.py b/erpnext/hub_node/doctype/hub_settings/test_hub_settings.py
deleted file mode 100644
index 1299adc..0000000
--- a/erpnext/hub_node/doctype/hub_settings/test_hub_settings.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-import frappe
-import unittest
-
-class TestHubSettings(unittest.TestCase):
-	pass
diff --git a/erpnext/hub_node/doctype/hub_settings/__init__.py b/erpnext/hub_node/doctype/marketplace_settings/__init__.py
similarity index 100%
rename from erpnext/hub_node/doctype/hub_settings/__init__.py
rename to erpnext/hub_node/doctype/marketplace_settings/__init__.py
diff --git a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.js b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.js
new file mode 100644
index 0000000..36da832
--- /dev/null
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('Marketplace Settings', {
+	refresh: function(frm) {
+		$('#toolbar-user .marketplace-link').toggle(!frm.doc.disable_marketplace);
+	},
+});
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.json b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
similarity index 94%
rename from erpnext/hub_node/doctype/hub_settings/hub_settings.json
rename to erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
index e230515..febb549 100644
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.json
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
@@ -4,13 +4,14 @@
  "allow_import": 0, 
  "allow_rename": 0, 
  "beta": 1, 
- "creation": "2015-02-18 00:59:34.560476", 
+ "creation": "2018-08-31 15:54:38.795263", 
  "custom": 0, 
  "description": "", 
  "docstatus": 0, 
  "doctype": "DocType", 
  "document_type": "", 
  "editable_grid": 0, 
+ "engine": "InnoDB", 
  "fields": [
   {
    "allow_bulk_edit": 0, 
@@ -19,8 +20,73 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "disable_marketplace", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Disable Marketplace", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "translatable": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "depends_on": "eval:!doc.disable_marketplace", 
+   "fieldname": "marketplace_settings_section", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Marketplace Settings", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "translatable": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "default": "https://hubmarket.org", 
-   "fieldname": "hub_url", 
+   "fieldname": "marketplace_url", 
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -29,7 +95,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Hub URL", 
+   "label": "Marketplace URL", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -86,7 +152,7 @@
    "columns": 0, 
    "fieldname": "sync_in_progress", 
    "fieldtype": "Check", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -401,72 +467,6 @@
    "set_only_once": 0, 
    "translatable": 0, 
    "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 1, 
-   "collapsible_depends_on": "", 
-   "columns": 0, 
-   "depends_on": "enabled", 
-   "fieldname": "unregister_section", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Unregister", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "unregister_from_hub", 
-   "fieldtype": "Button", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Unregister from Hub", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
   }
  ], 
  "has_web_view": 0, 
@@ -479,12 +479,12 @@
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-08-29 17:46:30.413159", 
- "modified_by": "Administrator", 
+ "modified": "2018-08-31 15:54:38.795263", 
+ "modified_by": "netchamp@rawcoderz.com", 
  "module": "Hub Node", 
- "name": "Hub Settings", 
+ "name": "Marketplace Settings", 
  "name_case": "", 
- "owner": "Administrator", 
+ "owner": "netchamp@rawcoderz.com", 
  "permissions": [
   {
    "amend": 0, 
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.py b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
similarity index 83%
rename from erpnext/hub_node/doctype/hub_settings/hub_settings.py
rename to erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
index ab0a7d2..9b83898 100644
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.py
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors and contributors
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
@@ -10,15 +10,13 @@
 from erpnext.utilities.product import get_price, get_qty_in_stock
 from six import string_types
 
-class HubSetupError(frappe.ValidationError): pass
-
-class HubSettings(Document):
+class MarketplaceSettings(Document):
 
 	def validate(self):
 		self.site_name = frappe.utils.get_url()
 
-	def get_hub_url(self):
-		return self.hub_url
+	def get_marketplace_url(self):
+		return self.marketplace_url
 
 	def register(self):
 		""" Create a User on hub.erpnext.org and return username/password """
@@ -34,7 +32,7 @@
 		data = {
 			'profile': self.as_json()
 		}
-		post_url = self.get_hub_url() + '/api/method/hub.hub.api.register'
+		post_url = self.get_marketplace_url() + '/api/method/hub.hub.api.register'
 
 		response = requests.post(post_url, data=data, headers = {'accept': 'application/json'})
 
@@ -68,7 +66,7 @@
 	def create_hub_connector(self, message):
 		if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
 			hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
-			hub_connector.hostname = self.get_hub_url()
+			hub_connector.hostname = self.get_marketplace_url()
 			hub_connector.username = message['email']
 			hub_connector.password = message['password']
 			hub_connector.save()
@@ -78,19 +76,19 @@
 			'doctype': 'Data Migration Connector',
 			'connector_type': 'Frappe',
 			'connector_name': 'Hub Connector',
-			'hostname': self.get_hub_url(),
+			'hostname': self.get_marketplace_url(),
 			'username': message['email'],
 			'password': message['password']
 		}).insert()
 
 def reset_hub_publishing_settings(last_sync_datetime = ""):
-	doc = frappe.get_doc("Hub Settings", "Hub Settings")
+	doc = frappe.get_doc("Marketplace Settings", "Marketplace Settings")
 	doc.reset_publishing_settings(last_sync_datetime)
 	doc.in_callback = 1
 	doc.save()
 
 def reset_hub_settings(last_sync_datetime = ""):
-	doc = frappe.get_doc("Hub Settings", "Hub Settings")
+	doc = frappe.get_doc("Marketplace Settings", "Marketplace Settings")
 	doc.reset_publishing_settings(last_sync_datetime)
 	doc.reset_enable()
 	doc.in_callback = 1
@@ -99,7 +97,7 @@
 
 @frappe.whitelist()
 def register_seller(**kwargs):
-	settings = frappe.get_doc('Hub Settings')
+	settings = frappe.get_doc('Marketplace Settings')
 	settings.update(kwargs)
 	message = settings.register()
 
diff --git a/erpnext/hub_node/legacy.py b/erpnext/hub_node/legacy.py
index 7218d3f..9daee27 100644
--- a/erpnext/hub_node/legacy.py
+++ b/erpnext/hub_node/legacy.py
@@ -101,7 +101,7 @@
 		'doctype': 'Request for Quotation',
 		'transaction_date': nowdate(),
 		'status': 'Draft',
-		'company': frappe.db.get_single_value('Hub Settings', 'company'),
+		'company': frappe.db.get_single_value('Marketplace Settings', 'company'),
 		'message_for_supplier': 'Please supply the specified items at the best possible rates',
 		'suppliers': [
 			{ 'supplier': supplier.name, 'contact': contact.name }
@@ -126,8 +126,8 @@
 	# Make Hub Message on Hub with lead data
 	doc = {
 		'doctype': 'Lead',
-		'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
-		'email_id': frappe.db.get_single_value('Hub Settings', 'user')
+		'lead_name': frappe.db.get_single_value('Marketplace Settings', 'company'),
+		'email_id': frappe.db.get_single_value('Marketplace Settings', 'user')
 	}
 
 	args = frappe._dict(dict(
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 358c072..1af75e8 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -560,6 +560,6 @@
 erpnext.patches.v11_0.add_expense_claim_default_account
 execute:frappe.delete_doc("Page", "hub")
 erpnext.patches.v11_0.reset_publish_in_hub_for_all_items
-erpnext.patches.v11_0.update_hub_url
+erpnext.patches.v11_0.update_hub_url # 2018-08-31
 erpnext.patches.v10_0.set_discount_amount
 erpnext.patches.v10_0.recalculate_gross_margin_for_project
diff --git a/erpnext/patches/v11_0/update_hub_url.py b/erpnext/patches/v11_0/update_hub_url.py
index ced2aaf..abddfd6 100644
--- a/erpnext/patches/v11_0/update_hub_url.py
+++ b/erpnext/patches/v11_0/update_hub_url.py
@@ -1,5 +1,5 @@
 import frappe
 
 def execute():
-	frappe.reload_doc('hub_node', 'doctype', 'Hub Settings')
-	frappe.db.set_value('Hub Settings', 'Hub Settings', 'hub_url', 'https://hubmarket.org')
+	frappe.reload_doc('hub_node', 'doctype', 'Marketplace Settings')
+	frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'hub_url', 'https://hubmarket.org')
diff --git a/erpnext/public/js/hub/hub_factory.js b/erpnext/public/js/hub/hub_factory.js
index 57f27f9..506d374 100644
--- a/erpnext/public/js/hub/hub_factory.js
+++ b/erpnext/public/js/hub/hub_factory.js
@@ -2,12 +2,20 @@
 
 frappe.views.marketplaceFactory = class marketplaceFactory extends frappe.views.Factory {
 	show() {
-		if (frappe.pages.marketplace) {
-			frappe.container.change_to('marketplace');
-			erpnext.hub.marketplace.refresh();
-		} else {
-			this.make('marketplace');
-		}
+		is_marketplace_disabled()
+			.then(disabled => {
+				if (disabled) {
+					frappe.show_not_found('Marketplace');
+					return;
+				}
+
+				if (frappe.pages.marketplace) {
+					frappe.container.change_to('marketplace');
+					erpnext.hub.marketplace.refresh();
+				} else {
+					this.make('marketplace');
+				}
+			});
 	}
 
 	make(page_name) {
@@ -23,10 +31,22 @@
 	}
 };
 
+function is_marketplace_disabled() {
+	return frappe.model.with_doc('Marketplace Settings')
+		.then(doc => doc.disable_marketplace);
+}
+
 $(document).on('toolbar_setup', () => {
 	$('#toolbar-user .navbar-reload').after(`
 		<li>
-			<a href="#marketplace/home">${__('Marketplace')}
+			<a class="marketplace-link" href="#marketplace/home">${__('Marketplace')}
 		</li>
 	`);
+
+	is_marketplace_disabled()
+		.then(disabled => {
+			if (disabled) {
+				$('#toolbar-user .marketplace-link').hide();
+			}
+		});
 });
diff --git a/erpnext/public/js/hub/marketplace.js b/erpnext/public/js/hub/marketplace.js
index cdf3d23..e062c6a 100644
--- a/erpnext/public/js/hub/marketplace.js
+++ b/erpnext/public/js/hub/marketplace.js
@@ -20,20 +20,19 @@
 		this.$parent = $(parent);
 		this.page = parent.page;
 
-		frappe.db.get_doc('Hub Settings')
-		.then(doc => {
-				hub.settings = doc;
-				const is_registered = hub.settings.registered;
-				const is_registered_seller = hub.settings.company_email === frappe.session.user;
-				this.setup_header();
-				this.make_sidebar();
-				this.make_body();
-				this.setup_events();
-				this.refresh();
-				if (!is_registered && !is_registered_seller && frappe.user_roles.includes('System Manager')) {
-					this.page.set_primary_action('Become a Seller', this.show_register_dialog.bind(this))
-				}
-			});
+		frappe.model.with_doc('Marketplace Settings').then(doc => {
+			hub.settings = doc;
+			const is_registered = hub.settings.registered;
+			const is_registered_seller = hub.settings.company_email === frappe.session.user;
+			this.setup_header();
+			this.make_sidebar();
+			this.make_body();
+			this.setup_events();
+			this.refresh();
+			if (!is_registered && !is_registered_seller && frappe.user_roles.includes('System Manager')) {
+				this.page.set_primary_action('Become a Seller', this.show_register_dialog.bind(this))
+			}
+		});
 	}
 
 	setup_header() {
@@ -78,7 +77,7 @@
 
 		erpnext.hub.on('seller-registered', () => {
 			this.page.clear_primary_action()
-			frappe.db.get_doc('Hub Settings').then((doc)=> {
+			frappe.model.with_doc('Marketplace Settings').then((doc)=> {
 				hub.settings = doc;
 			});
 		});
diff --git a/erpnext/public/js/hub/pages/Publish.vue b/erpnext/public/js/hub/pages/Publish.vue
index b05f12a..735f2b9 100644
--- a/erpnext/public/js/hub/pages/Publish.vue
+++ b/erpnext/public/js/hub/pages/Publish.vue
@@ -138,7 +138,7 @@
 			)
 			.then((r) => {
 				this.selected_items = [];
-				return frappe.db.get_doc('Hub Settings');
+				return frappe.db.get_doc('Marketplace Settings');
 			})
 			.then(doc => {
 				hub.settings = doc;