Merge branch 'hotfix'
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 7be524a..7b247f6 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
 from erpnext.hooks import regional_overrides
 from frappe.utils import getdate
 
-__version__ = '10.1.51'
+__version__ = '10.1.52'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py
index 6d4fe02..26bc21e 100644
--- a/erpnext/config/desktop.py
+++ b/erpnext/config/desktop.py
@@ -292,14 +292,6 @@
 			"hidden": 1
 		},
 		{
-			"module_name": "Hub",
-			"color": "#009248",
-			"icon": "/assets/erpnext/images/hub_logo.svg",
-			"type": "page",
-			"link": "hub",
-			"label": _("Hub")
-		},
-		{
 			"module_name": "Data Import",
 			"color": "#FFF168",
 			"reverse": 1,
diff --git a/erpnext/config/hub_node.py b/erpnext/config/hub_node.py
deleted file mode 100644
index c9d5b97..0000000
--- a/erpnext/config/hub_node.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-from frappe import _
-
-def get_data():
-	return [
-		{
-			"label": _("Setup"),
-			"items": [
-				{
-					"type": "doctype",
-					"name": "Hub Settings"
-				},
-			]
-		},
-		{
-			"label": _("Hub"),
-			"items": [
-				{
-					"type": "page",
-					"name": "hub"
-				},
-			]
-		},
-	]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index cec5356..afb7f1a 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -126,7 +126,6 @@
 }
 
 cur_frm.cscript.employee = function(doc,dt,dn){
-	doc.salary_structure = ''
 	get_emp_and_leave_details(doc, dt, dn);
 }
 
@@ -249,4 +248,4 @@
 		frm.refresh_field('gross_pay');
 		calculate_net_pay(frm.doc, dt, dn);
 	});
-}
\ No newline at end of file
+}
diff --git a/erpnext/hub_node/__init__.py b/erpnext/hub_node/__init__.py
deleted file mode 100644
index 8eb1074..0000000
--- a/erpnext/hub_node/__init__.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe, requests, json
-from frappe.utils import now, nowdate, cint
-from frappe.utils.nestedset import get_root_of
-from frappe.contacts.doctype.contact.contact import get_default_contact
-
-@frappe.whitelist()
-def enable_hub():
-	hub_settings = frappe.get_doc('Hub Settings')
-	hub_settings.register()
-	frappe.db.commit()
-	return hub_settings
-
-@frappe.whitelist()
-def get_items(start=0, limit=20, category=None, order_by=None, company=None, text=None):
-	connection = get_client_connection()
-	filters = {
-		'hub_category': category,
-	}
-	if text:
-		filters.update({'item_name': ('like', '%' + text + '%')})
-	if company:
-		filters.update({'company_name': company})
-
-	response = connection.get_list('Hub Item',
-		limit_start=start, limit_page_length=limit,
-		filters=filters)
-	return response
-
-@frappe.whitelist()
-def get_categories():
-	connection = get_client_connection()
-	response = connection.get_list('Hub Category')
-	return response
-
-@frappe.whitelist()
-def get_item_details(hub_sync_id=None):
-	if not hub_sync_id:
-		return
-	connection = get_client_connection()
-	return connection.get_doc('Hub Item', hub_sync_id)
-
-@frappe.whitelist()
-def get_company_details(hub_sync_id):
-	connection = get_client_connection()
-	return connection.get_doc('Hub Company', hub_sync_id)
-
-def get_client_connection():
-	# frappeclient connection
-	hub_connection = get_hub_connection()
-	return hub_connection.connection
-
-def get_hub_connection():
-	hub_connector = frappe.get_doc(
-		'Data Migration Connector', 'Hub Connector')
-	hub_connection = hub_connector.get_connection()
-	return hub_connection
-
-def make_opportunity(buyer_name, email_id):
-	buyer_name = "HUB-" + buyer_name
-
-	if not frappe.db.exists('Lead', {'email_id': email_id}):
-		lead = frappe.new_doc("Lead")
-		lead.lead_name = buyer_name
-		lead.email_id = email_id
-		lead.save(ignore_permissions=True)
-
-	o = frappe.new_doc("Opportunity")
-	o.enquiry_from = "Lead"
-	o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
-	o.save(ignore_permissions=True)
-
-@frappe.whitelist()
-def make_rfq_and_send_opportunity(item, supplier):
-	supplier = make_supplier(supplier)
-	contact = make_contact(supplier)
-	item = make_item(item)
-	rfq = make_rfq(item, supplier, contact)
-	status = send_opportunity(contact)
-
-	return {
-		'rfq': rfq,
-		'hub_document_created': status
-	}
-
-def make_supplier(supplier):
-	# make supplier if not already exists
-	supplier = frappe._dict(json.loads(supplier))
-
-	if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
-		supplier_doc = frappe.get_doc({
-			'doctype': 'Supplier',
-			'supplier_name': supplier.supplier_name,
-			'supplier_type': supplier.supplier_type,
-			'supplier_email': supplier.supplier_email
-		}).insert()
-	else:
-		supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
-
-	return supplier_doc
-
-def make_contact(supplier):
-	contact_name = get_default_contact('Supplier', supplier.supplier_name)
-	# make contact if not already exists
-	if not contact_name:
-		contact = frappe.get_doc({
-			'doctype': 'Contact',
-			'first_name': supplier.supplier_name,
-			'email_id': supplier.supplier_email,
-			'is_primary_contact': 1,
-			'links': [
-				{'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
-			]
-		}).insert()
-	else:
-		contact = frappe.get_doc('Contact', contact_name)
-
-	return contact
-
-def make_item(item):
-	# make item if not already exists
-	item = frappe._dict(json.loads(item))
-
-	if not frappe.db.exists('Item', {'item_code': item.item_code}):
-		item_doc = frappe.get_doc({
-			'doctype': 'Item',
-			'item_code': item.item_code,
-			'item_group': item.item_group,
-			'is_item_from_hub': 1
-		}).insert()
-	else:
-		item_doc = frappe.get_doc('Item', item.item_code)
-
-	return item_doc
-
-def make_rfq(item, supplier, contact):
-	# make rfq
-	rfq = frappe.get_doc({
-		'doctype': 'Request for Quotation',
-		'transaction_date': nowdate(),
-		'status': 'Draft',
-		'company': frappe.db.get_single_value('Hub Settings', 'company'),
-		'message_for_supplier': 'Please supply the specified items at the best possible rates',
-		'suppliers': [
-			{ 'supplier': supplier.name, 'contact': contact.name }
-		],
-		'items': [
-			{
-				'item_code': item.item_code,
-				'qty': 1,
-				'schedule_date': nowdate(),
-				'warehouse': item.default_warehouse or get_root_of("Warehouse"),
-				'description': item.description,
-				'uom': item.stock_uom
-			}
-		]
-	}).insert()
-
-	rfq.save()
-	rfq.submit()
-	return rfq
-
-def send_opportunity(contact):
-	# 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')
-	}
-
-	args = frappe._dict(dict(
-		doctype='Hub Message',
-		reference_doctype='Lead',
-		data=json.dumps(doc),
-		user=contact.email_id
-	))
-
-	connection = get_hub_connection()
-	response = connection.insert('Hub Message', args)
-
-	return response.ok
diff --git a/erpnext/hub_node/data_migration_mapping/__init__.py b/erpnext/hub_node/data_migration_mapping/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/data_migration_mapping/__init__.py
+++ /dev/null
diff --git a/erpnext/hub_node/data_migration_mapping/company_to_hub_company/__init__.py b/erpnext/hub_node/data_migration_mapping/company_to_hub_company/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/data_migration_mapping/company_to_hub_company/__init__.py
+++ /dev/null
diff --git a/erpnext/hub_node/data_migration_mapping/company_to_hub_company/company_to_hub_company.json b/erpnext/hub_node/data_migration_mapping/company_to_hub_company/company_to_hub_company.json
deleted file mode 100644
index 0a916da..0000000
--- a/erpnext/hub_node/data_migration_mapping/company_to_hub_company/company_to_hub_company.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "condition": "{'name': ('=', frappe.db.get_single_value('Hub Settings', 'company'))}", 
- "creation": "2017-09-07 11:38:43.169065", 
- "docstatus": 0, 
- "doctype": "Data Migration Mapping", 
- "fields": [
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "name", 
-   "remote_fieldname": "company_name"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "country", 
-   "remote_fieldname": "country"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "\"city\"", 
-   "remote_fieldname": "seller_city"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "eval:frappe.local.site", 
-   "remote_fieldname": "site_name"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "eval:frappe.session.user", 
-   "remote_fieldname": "user"
-  }
- ], 
- "idx": 2, 
- "local_doctype": "Company", 
- "mapping_name": "Company to Hub Company", 
- "mapping_type": "Push", 
- "migration_id_field": "hub_sync_id", 
- "modified": "2017-10-09 17:30:17.853929", 
- "modified_by": "Administrator", 
- "name": "Company to Hub Company", 
- "owner": "Administrator", 
- "page_length": 10, 
- "remote_objectname": "Hub Company", 
- "remote_primary_key": "name"
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/__init__.py b/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/__init__.py
deleted file mode 100644
index 0ea1bc4..0000000
--- a/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import frappe, json
-
-def pre_process(doc):
-	return json.loads(doc['data'])
-
-def post_process(remote_doc=None, local_doc=None, **kwargs):
-	if not local_doc:
-		return
-
-	hub_message = remote_doc
-	# update hub message on hub
-	hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
-	connection = hub_connector.get_connection()
-	connection.update('Hub Message', dict(
-		status='Synced'
-	), hub_message['name'])
-
-	# make opportunity after lead is created
-	lead = local_doc
-	opportunity = frappe.get_doc({
-		'doctype': 'Opportunity',
-		'naming_series': 'OPTY-',
-		'opportunity_type': 'Hub',
-		'enquiry_from': 'Lead',
-		'status': 'Open',
-		'lead': lead.name,
-		'company': lead.company,
-		'transaction_date': frappe.utils.today()
-	}).insert()
diff --git a/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/hub_message_to_lead.json b/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/hub_message_to_lead.json
deleted file mode 100644
index cd9fb69..0000000
--- a/erpnext/hub_node/data_migration_mapping/hub_message_to_lead/hub_message_to_lead.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "condition": "{'reference_doctype': 'Lead', 'user': frappe.db.get_single_value('Hub Settings', 'user'), 'status': 'Pending'}", 
- "creation": "2017-09-20 15:06:40.279930", 
- "docstatus": 0, 
- "doctype": "Data Migration Mapping", 
- "fields": [
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "email_id", 
-   "remote_fieldname": "email_id"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "lead_name", 
-   "remote_fieldname": "lead_name"
-  }
- ], 
- "idx": 0, 
- "local_doctype": "Lead", 
- "local_primary_key": "email_id", 
- "mapping_name": "Hub Message to Lead", 
- "mapping_type": "Pull", 
- "migration_id_field": "hub_sync_id", 
- "modified": "2017-10-09 17:30:17.908830", 
- "modified_by": "Administrator", 
- "name": "Hub Message to Lead", 
- "owner": "frappetest@gmail.com", 
- "page_length": 10, 
- "remote_objectname": "Hub Message", 
- "remote_primary_key": "name"
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
+++ /dev/null
diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json
deleted file mode 100644
index e4168c7..0000000
--- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "condition": "{\"publish_in_hub\": 1}", 
- "creation": "2017-09-07 13:27:52.726350", 
- "docstatus": 0, 
- "doctype": "Data Migration Mapping", 
- "fields": [
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "item_code", 
-   "remote_fieldname": "item_code"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "item_name", 
-   "remote_fieldname": "item_name"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "eval:frappe.db.get_default(\"company\")", 
-   "remote_fieldname": "company_name"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "image", 
-   "remote_fieldname": "image"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "item_group", 
-   "remote_fieldname": "item_group"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "eval:frappe.session.user", 
-   "remote_fieldname": "seller"
-  }, 
-  {
-   "is_child_table": 0, 
-   "local_fieldname": "eval:frappe.db.get_default(\"country\")", 
-   "remote_fieldname": "country"
-  }
- ], 
- "idx": 1, 
- "local_doctype": "Item", 
- "mapping_name": "Item to Hub Item", 
- "mapping_type": "Push", 
- "migration_id_field": "hub_sync_id", 
- "modified": "2017-10-09 17:30:17.890337", 
- "modified_by": "Administrator", 
- "name": "Item to Hub Item", 
- "owner": "Administrator", 
- "page_length": 10, 
- "remote_objectname": "Hub Item", 
- "remote_primary_key": "item_code"
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json b/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json
deleted file mode 100644
index 40513cd2..0000000
--- a/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "creation": "2017-09-07 11:39:38.445902", 
- "docstatus": 0, 
- "doctype": "Data Migration Plan", 
- "idx": 1, 
- "mappings": [
-  {
-   "enabled": 1, 
-   "mapping": "Company to Hub Company"
-  }, 
-  {
-   "enabled": 1, 
-   "mapping": "Item to Hub Item"
-  }, 
-  {
-   "enabled": 1, 
-   "mapping": "Hub Message to Lead"
-  }
- ], 
- "modified": "2017-10-09 17:30:17.680059", 
- "modified_by": "Administrator", 
- "module": "Hub Node", 
- "name": "Hub Sync", 
- "owner": "Administrator", 
- "plan_name": "Hub Sync"
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/doctype/__init__.py b/erpnext/hub_node/doctype/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/doctype/__init__.py
+++ /dev/null
diff --git a/erpnext/hub_node/doctype/hub_category/__init__.py b/erpnext/hub_node/doctype/hub_category/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/doctype/hub_category/__init__.py
+++ /dev/null
diff --git a/erpnext/hub_node/doctype/hub_category/hub_category.js b/erpnext/hub_node/doctype/hub_category/hub_category.js
deleted file mode 100644
index 9f54166..0000000
--- a/erpnext/hub_node/doctype/hub_category/hub_category.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Hub Category', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hub_node/doctype/hub_category/hub_category.json b/erpnext/hub_node/doctype/hub_category/hub_category.json
deleted file mode 100644
index 4f8d66a..0000000
--- a/erpnext/hub_node/doctype/hub_category/hub_category.json
+++ /dev/null
@@ -1,275 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "field:hub_category_name", 
- "beta": 0, 
- "creation": "2017-08-22 11:31:10.410322", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "hub_category_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Category Name", 
-   "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": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "parent_hub_category", 
-   "fieldtype": "Link", 
-   "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": "Parent Category", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Hub Category", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "is_group", 
-   "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": "Is Group", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Text Editor", 
-   "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": "Description", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lft", 
-   "fieldtype": "Int", 
-   "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": "Left", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "rgt", 
-   "fieldtype": "Int", 
-   "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": "Right", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "old_parent", 
-   "fieldtype": "Data", 
-   "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": "Old Parent", 
-   "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, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-09-03 22:04:22.958831", 
- "modified_by": "Administrator", 
- "module": "Hub Node", 
- "name": "Hub Category", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "hub_category_name", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/doctype/hub_category/hub_category.py b/erpnext/hub_node/doctype/hub_category/hub_category.py
deleted file mode 100644
index 5d19082..0000000
--- a/erpnext/hub_node/doctype/hub_category/hub_category.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils.nestedset import NestedSet
-from frappe.model.document import Document
-
-class HubCategory(NestedSet):
-	pass
diff --git a/erpnext/hub_node/doctype/hub_category/hub_category_tree.js b/erpnext/hub_node/doctype/hub_category/hub_category_tree.js
deleted file mode 100644
index d0309e3..0000000
--- a/erpnext/hub_node/doctype/hub_category/hub_category_tree.js
+++ /dev/null
@@ -1,4 +0,0 @@
-frappe.treeview_settings["Hub Category"] = {
-	title: __("Hub Category"),
-	breadcrumb: "Hub"
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/doctype/hub_category/test_hub_category.js b/erpnext/hub_node/doctype/hub_category/test_hub_category.js
deleted file mode 100644
index 73c06d5..0000000
--- a/erpnext/hub_node/doctype/hub_category/test_hub_category.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 Category", function (assert) {
-	let done = assert.async();
-
-	// number of asserts
-	assert.expect(1);
-
-	frappe.run_serially([
-		// insert a new Hub Category
-		() => frappe.tests.make('Hub Category', [
-			// values to be set
-			{key: 'value'}
-		]),
-		() => {
-			assert.equal(cur_frm.doc.key, 'value');
-		},
-		() => done()
-	]);
-
-});
diff --git a/erpnext/hub_node/doctype/hub_category/test_hub_category.py b/erpnext/hub_node/doctype/hub_category/test_hub_category.py
deleted file mode 100644
index 7df2088..0000000
--- a/erpnext/hub_node/doctype/hub_category/test_hub_category.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 TestHubCategory(unittest.TestCase):
-	pass
diff --git a/erpnext/hub_node/doctype/hub_settings/__init__.py b/erpnext/hub_node/doctype/hub_settings/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hub_node/doctype/hub_settings/__init__.py
+++ /dev/null
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 ce0f8bc..0000000
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.js
+++ /dev/null
@@ -1,87 +0,0 @@
-frappe.ui.form.on("Hub Settings", {
-	refresh: function(frm) {
-		frm.add_custom_button(__('Logs'),
-			() => frappe.set_route('List', 'Data Migration Run', {
-				data_migration_plan: 'Hub Sync'
-			}));
-
-		frm.trigger("enabled");
-		if (frm.doc.enabled) {
-			frm.add_custom_button(__('View Hub'),
-				() => frappe.set_route('hub'));
-			frm.add_custom_button(__('Sync'),
-				() => frm.call('sync'));
-		}
-	},
-	onload: function(frm) {
-		if(!frm.doc.country) {
-			frm.set_value("country", frappe.defaults.get_default("Country"));
-		}
-		if(!frm.doc.company) {
-			frm.set_value("company", frappe.defaults.get_default("Company"));
-		}
-	},
-	onload_post_render: function(frm) {
-		if(frm.get_field("unregister_from_hub").$input)
-			frm.get_field("unregister_from_hub").$input.addClass("btn-danger");
-	},
-	on_update: function(frm) {
-	},
-	enabled: function(frm) {
-		if(!frm.doc.enabled) {
-			frm.trigger("set_enable_hub_primary_button");
-		} else {
-			frm.page.set_primary_action(__("Save Settings"), () => {
-				frm.save();
-			});
-		}
-	},
-
-	hub_user_email: function(frm) {
-		if(frm.doc.hub_user_email){
-			frm.set_value("hub_user_name", frappe.user.full_name(frm.doc.hub_user_email));
-		}
-	},
-
-	set_enable_hub_primary_button: (frm) => {
-		frm.page.set_primary_action(__("Enable Hub"), () => {
-			if(frappe.session.user === "Administrator") {
-				frappe.msgprint("Please login as another user.")
-			} else {
-				frappe.verify_password(() => {
-					this.frm.call({
-						doc: this.frm.doc,
-						method: "register",
-						args: {},
-						freeze: true,
-						callback: function(r) {},
-						onerror: function() {
-							frappe.msgprint(__("Wrong Password"));
-							frm.set_value("enabled", 0);
-						}
-					});
-				} );
-			}
-		});
-	},
-
-	// update_hub: (frm) => {
-	// 	this.frm.call({
-	// 		doc: this.frm.doc,
-	// 		method: "update_hub",
-	// 		args: {},
-	// 		freeze: true,
-	// 		callback: function(r) { },
-	// 		onerror: function() { }
-	// 	});
-	// },
-
-	unregister_from_hub: (frm) => {
-		frappe.verify_password(() => {
-			var d = frappe.confirm(__('Are you sure you want to unregister?'), () => {
-				frm.call('unregister');
-			}, () => {}, __('Confirm Action'));
-			d.get_primary_btn().addClass("btn-danger");
-		});
-	},
-});
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.json b/erpnext/hub_node/doctype/hub_settings/hub_settings.json
deleted file mode 100644
index b96d6b3..0000000
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.json
+++ /dev/null
@@ -1,525 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2015-02-18 00:59:34.560476", 
- "custom": 0, 
- "description": "", 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "enabled", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Enabled", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "suspended", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Suspended", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "user", 
-   "fieldtype": "Link", 
-   "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": "User", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "User", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 1, 
-   "collapsible_depends_on": "eval:(!doc.enabled)", 
-   "columns": 0, 
-   "depends_on": "", 
-   "fieldname": "seller_profile_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": "Company and Seller Profile", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "country", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Country", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Country", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "seller_description", 
-   "fieldtype": "Text Editor", 
-   "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": "Description", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "enabled", 
-   "fieldname": "publish_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": "Publish", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "publish", 
-   "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": "Publish Items to 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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "publish", 
-   "fieldname": "publish_pricing", 
-   "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": "Publish Pricing", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:(doc.publish && doc.publish_pricing)", 
-   "fieldname": "selling_price_list", 
-   "fieldtype": "Link", 
-   "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": "Selling Price List", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Price List", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "publish", 
-   "fieldname": "publish_availability", 
-   "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": "Publish Availability", 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "publish", 
-   "fieldname": "last_sync_datetime", 
-   "fieldtype": "Datetime", 
-   "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": "Last Sync On", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 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, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 1, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-09-21 12:13:50.841646", 
- "modified_by": "manas@erpnext.com", 
- "module": "Hub Node", 
- "name": "Hub Settings", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.py b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
deleted file mode 100644
index 5980753..0000000
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe, requests, json
-
-from frappe.model.document import Document
-from frappe.utils import add_years, now, get_datetime, get_datetime_str
-from frappe import _
-from erpnext.utilities.product import get_price, get_qty_in_stock
-from six import string_types
-
-hub_url = "https://hubmarket.org"
-
-class HubSetupError(frappe.ValidationError): pass
-
-class HubSettings(Document):
-
-	def validate(self):
-		if self.publish_pricing and not self.selling_price_list:
-			frappe.throw(_("Please select a Price List to publish pricing"))
-
-	def get_hub_url(self):
-		return hub_url
-
-	def sync(self):
-		"""Create and execute Data Migration Run for Hub Sync plan"""
-		frappe.has_permission('Hub Settings', throw=True)
-
-		doc = frappe.get_doc({
-			'doctype': 'Data Migration Run',
-			'data_migration_plan': 'Hub Sync',
-			'data_migration_connector': 'Hub Connector'
-		}).insert()
-
-		doc.run()
-
-	def register(self):
-		""" Create a User on hub.erpnext.org and return username/password """
-		data = {
-			'email': frappe.session.user
-		}
-		post_url = hub_url + '/api/method/hub.hub.api.register'
-
-		response = requests.post(post_url, data=data)
-		response.raise_for_status()
-		message = response.json().get('message')
-
-		if message and message.get('password'):
-			self.user = frappe.session.user
-			self.create_hub_connector(message)
-			self.company = frappe.defaults.get_user_default('company')
-			self.enabled = 1
-			self.save()
-
-	def unregister(self):
-		""" Disable the User on hub.erpnext.org"""
-
-		hub_connector = frappe.get_doc(
-			'Data Migration Connector', 'Hub Connector')
-
-		connection = hub_connector.get_connection()
-		response_doc = connection.update('User', frappe._dict({'enabled': 0}), hub_connector.username)
-
-		if response_doc['enabled'] == 0:
-			self.enabled = 0
-			self.save()
-
-	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.username = message['email']
-			hub_connector.password = message['password']
-			hub_connector.save()
-			return
-
-		frappe.get_doc({
-			'doctype': 'Data Migration Connector',
-			'connector_type': 'Frappe',
-			'connector_name': 'Hub Connector',
-			'hostname': hub_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.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.reset_publishing_settings(last_sync_datetime)
-	doc.reset_enable()
-	doc.in_callback = 1
-	doc.save()
-	frappe.msgprint(_("Successfully unregistered."))
-
-@frappe.whitelist()
-def sync():
-	hub_settings = frappe.get_doc('Hub Settings')
-	hub_settings.sync()
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/manufacturing/doctype/bom_update_tool/bom_update_tool.py b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
index 04f9717..c91bb8f 100644
--- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
+++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
@@ -62,7 +62,7 @@
 	if isinstance(args, string_types):
 		args = json.loads(args)
 
-	frappe.enqueue("erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.replace_bom", args=args)
+	frappe.enqueue("erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.replace_bom", args=args, timeout=4000)
 	frappe.msgprint(_("Queued for replacing the BOM. It may take a few minutes."))
 
 @frappe.whitelist()
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 158c443..2f2c40e 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -318,7 +318,7 @@
 
 				from_time, to_time = self.get_start_end_time(timesheet, d.name)
 
-				if date_diff(from_time, original_start_time) > plan_days:
+				if date_diff(from_time, original_start_time) > cint(plan_days):
 					frappe.throw(_("Unable to find Time Slot in the next {0} days for Operation {1}").format(plan_days, d.operation))
 					break
 
diff --git a/erpnext/modules.txt b/erpnext/modules.txt
index 42f0f0b..27db884 100644
--- a/erpnext/modules.txt
+++ b/erpnext/modules.txt
@@ -11,7 +11,6 @@
 Utilities
 Shopping Cart
 Assets
-Hub Node
 Portal
 Maintenance
 Education
@@ -20,4 +19,4 @@
 Restaurant
 Agriculture
 ERPNext Integrations
-Non Profit
\ No newline at end of file
+Non Profit
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e99bf59..313f378 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -504,4 +504,5 @@
 erpnext.patches.v10_0.update_status_in_purchase_receipt
 erpnext.patches.v10_0.update_address_template_for_india
 erpnext.patches.v10_0.set_discount_amount
-erpnext.patches.v10_0.recalculate_gross_margin_for_project
\ No newline at end of file
+erpnext.patches.v10_0.recalculate_gross_margin_for_project
+erpnext.patches.v10_0.delete_hub_documents
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/delete_hub_documents.py b/erpnext/patches/v10_0/delete_hub_documents.py
new file mode 100644
index 0000000..0d81bd5
--- /dev/null
+++ b/erpnext/patches/v10_0/delete_hub_documents.py
@@ -0,0 +1,17 @@
+
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+	for dt, dn in (("Page", "Hub"), ("DocType", "Hub Settings"), ("DocType", "Hub Category")):
+		frappe.delete_doc(dt, dn, ignore_missing=True)
+
+	if frappe.db.exists("DocType", "Data Migration Plan"):
+		data_migration_plans = frappe.get_all("Data Migration Plan", filters={"module": 'Hub Node'})
+		for plan in data_migration_plans:
+			plan_doc = frappe.get_doc("Data Migration Plan", plan.name)
+			for m in plan_doc.get("mappings"):
+				frappe.delete_doc("Data Migration Mapping", m.mapping, force=True)
+			frappe.delete_doc("Data Migration Plan", plan.name)
+
+	frappe.delete_doc("Module Def", "Hub Node", ignore_missing=True)
diff --git a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py b/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
index 587fee1..a8d9049 100644
--- a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
+++ b/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
@@ -7,7 +7,6 @@
 
 def execute():
 	frappe.reload_doc("accounts", "doctype", "account")
-	frappe.reload_doc("hub_node", "doctype", "hub_category")
 	frappe.reload_doc("accounts", "doctype", "payment_schedule")
 	for d in frappe.get_all('Company',
 		filters={'country': ('in', ['Saudi Arabia', 'United Arab Emirates'])}):
diff --git a/erpnext/patches/v8_1/setup_gst_india.py b/erpnext/patches/v8_1/setup_gst_india.py
index a9133ae..5370fa2 100644
--- a/erpnext/patches/v8_1/setup_gst_india.py
+++ b/erpnext/patches/v8_1/setup_gst_india.py
@@ -4,7 +4,6 @@
 def execute():
 	frappe.reload_doc('stock', 'doctype', 'item')
 	frappe.reload_doc("stock", "doctype", "customs_tariff_number")
-	frappe.reload_doc("hub_node", "doctype", "hub_category")
 	frappe.reload_doc("accounts", "doctype", "payment_terms_template")
 	frappe.reload_doc("accounts", "doctype", "payment_schedule")
 
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 747ed61..4a7d72e 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -3457,38 +3457,6 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
-   "fieldname": "hub_category_to_publish",
-   "fieldtype": "Link",
-   "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": "Hub Category to Publish",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Hub Category",
-   "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_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
    "description": "Publish \"In Stock\" or \"Not in Stock\" on Hub based on stock available in this warehouse.",
    "fieldname": "hub_warehouse",
    "fieldtype": "Link",
@@ -3561,7 +3529,7 @@
  "issingle": 0,
  "istable": 0,
  "max_attachments": 1,
- "modified": "2018-04-11 12:21:48.715529",
+ "modified": "2018-09-06 14:45:48.715529",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Item",
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 4905446..4cd15ef 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -109,6 +109,16 @@
 					and (sed.t_warehouse is null or sed.t_warehouse = '')""", self.project, as_list=1)
 
 			amount = amount[0][0] if amount else 0
+			additional_costs = frappe.db.sql(""" select ifnull(sum(sed.amount), 0)
+				from
+					`tabStock Entry` se, `tabLanded Cost Taxes and Charges` sed
+				where
+					se.docstatus = 1 and se.project = %s and sed.parent = se.name
+					and se.purpose = 'Manufacture'""", self.project, as_list=1)
+
+			additional_cost_amt = additional_costs[0][0] if additional_costs else 0
+
+			amount += additional_cost_amt
 			frappe.db.set_value('Project', self.project, 'total_consumed_material_cost', amount)
 
 	def validate_item(self):
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 5e69664..5b6e706 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -109,7 +109,7 @@
 				self.validation_messages.append(_get_msg(row_num,
 					_("Negative Valuation Rate is not allowed")))
 
-			if row.qty and not row.valuation_rate:
+			if row.qty and row.valuation_rate in ["", None]:
 				row.valuation_rate = get_stock_balance(row.item_code, row.warehouse,
 							self.posting_date, self.posting_time, with_valuation_rate=True)[1]
 				if not row.valuation_rate:
diff --git a/erpnext/templates/print_formats/includes/item_table_qty.html b/erpnext/templates/print_formats/includes/item_table_qty.html
index 0c80069..239859e 100644
--- a/erpnext/templates/print_formats/includes/item_table_qty.html
+++ b/erpnext/templates/print_formats/includes/item_table_qty.html
@@ -1,4 +1,6 @@
-{% if (doc.stock_uom and not doc.is_print_hide("stock_uom")) or (doc.uom and not doc.is_print_hide("uom")) -%}
-<small class="pull-left">{{ _(doc.uom or doc.stock_uom) }}</small>
+{% if (doc.uom and not doc.is_print_hide("uom")) %}
+	<small class="pull-left">{{ _(doc.uom) }}</small>
+{% elif (doc.stock_uom and not doc.is_print_hide("stock_uom")) %}
+	<small class="pull-left">{{ _(doc.stock_uom) }}</small>
 {%- endif %}
 {{ doc.get_formatted("qty", doc) }}