Merge branch 'develop' of https://github.com/frappe/erpnext into hub-multiuser
diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
index fe41919..e69a963 100644
--- a/erpnext/hub_node/api.py
+++ b/erpnext/hub_node/api.py
@@ -1,11 +1,60 @@
from __future__ import unicode_literals
-import frappe, json
-import io, base64, os, requests
+
+import frappe
+import json
+import io
+import base64
+import os
+import requests
+
+from frappe import _
from frappe.frappeclient import FrappeClient
from frappe.desk.form.load import get_attachments
from frappe.utils.file_manager import get_file_path
from six import string_types
+current_user = frappe.session.user
+
+
+@frappe.whitelist()
+def register_marketplace(company):
+ validate_registerer()
+ settings = frappe.get_single('Marketplace Settings')
+ message = settings.register_seller(company)
+
+ if message.get('hub_seller_name'):
+ settings.registered = 1
+ settings.hub_seller_name = message.get('hub_seller_name')
+ settings.save()
+
+ settings.add_hub_user(frappe.session.user)
+
+ return { 'ok': 1 }
+
+
+@frappe.whitelist()
+def register_users(user_list):
+ user_list = json.loads(user_list)
+
+ settings = frappe.get_single('Marketplace Settings')
+
+ for user in user_list:
+ settings.add_hub_user(user)
+
+ return user_list
+
+
+def validate_registerer():
+ if current_user == 'Administrator':
+ frappe.throw(_('Please login as another user to register on Marketplace'))
+
+ valid_roles = ['System Manager', 'Item Manager']
+
+ if not frappe.utils.is_subset(valid_roles, frappe.get_roles()):
+ frappe.throw(_('Only users with {0} role can register on Marketplace').format(', '.join(valid_roles)),
+ frappe.PermissionError)
+
+
@frappe.whitelist()
def call_hub_method(method, params=None):
connection = get_hub_connection()
@@ -20,6 +69,7 @@
response = connection.post_request(params)
return response
+
def map_fields(items):
field_mappings = get_field_mappings()
table_fields = [d.fieldname for d in frappe.get_meta('Item').get_table_fields()]
@@ -44,6 +94,7 @@
return items
+
@frappe.whitelist()
def get_valid_items(search_value=''):
items = frappe.get_list(
@@ -68,6 +119,7 @@
return valid_items
+
@frappe.whitelist()
def publish_selected_items(items_to_publish):
items_to_publish = json.loads(items_to_publish)
@@ -85,7 +137,6 @@
'image_list': item.get('image_list')
}).insert(ignore_if_duplicate=True)
-
items = map_fields(items_to_publish)
try:
@@ -100,6 +151,7 @@
except Exception as e:
frappe.log_error(message=e, title='Hub Sync Error')
+
def item_sync_preprocess(intended_item_publish_count):
response = call_hub_method('pre_items_publish', {
'intended_item_publish_count': intended_item_publish_count
@@ -111,6 +163,7 @@
else:
frappe.throw('Unable to update remote activity')
+
def item_sync_postprocess():
response = call_hub_method('post_items_publish', {})
if response:
@@ -147,24 +200,18 @@
def get_hub_connection():
- read_only = True
+ settings = frappe.get_single('Marketplace Settings')
+ marketplace_url = settings.marketplace_url
+ hub_user = settings.get_hub_user(frappe.session.user)
- if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
- hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
-
- # full rights to user who registered as hub_seller
- if hub_connector.username == frappe.session.user:
- read_only = False
-
- if not read_only:
- hub_connection = hub_connector.get_connection()
- return hub_connection.connection
-
- # read-only connection
- if read_only:
- hub_url = frappe.db.get_single_value('Marketplace Settings', 'hub_url')
- hub_connection = FrappeClient(hub_url)
+ if hub_user:
+ password = hub_user.get_password()
+ hub_connection = FrappeClient(marketplace_url, hub_user.user, password)
return hub_connection
+ else:
+ read_only_hub_connection = FrappeClient(marketplace_url)
+ return read_only_hub_connection
+
def get_field_mappings():
return []
diff --git a/erpnext/hub_node/doctype/hub_user/__init__.py b/erpnext/hub_node/doctype/hub_user/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/hub_node/doctype/hub_user/__init__.py
diff --git a/erpnext/hub_node/doctype/hub_user/hub_user.json b/erpnext/hub_node/doctype/hub_user/hub_user.json
new file mode 100644
index 0000000..a660022
--- /dev/null
+++ b/erpnext/hub_node/doctype/hub_user/hub_user.json
@@ -0,0 +1,140 @@
+{
+ "allow_copy": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "autoname": "",
+ "beta": 0,
+ "creation": "2018-08-31 12:36:45.627531",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 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": 1,
+ "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": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 1
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "hub_user_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": "Hub User",
+ "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,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "password",
+ "fieldtype": "Password",
+ "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": "Hub Password",
+ "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,
+ "translatable": 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": 1,
+ "max_attachments": 0,
+ "modified": "2018-09-01 13:56:07.816894",
+ "modified_by": "netchamp@rawcoderz.com",
+ "module": "Hub Node",
+ "name": "Hub User",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 1,
+ "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,
+ "track_views": 0
+}
\ No newline at end of file
diff --git a/erpnext/hub_node/doctype/hub_user/hub_user.py b/erpnext/hub_node/doctype/hub_user/hub_user.py
new file mode 100644
index 0000000..de43f4e
--- /dev/null
+++ b/erpnext/hub_node/doctype/hub_user/hub_user.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class HubUser(Document):
+ pass
diff --git a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
index 5243f38..1283711 100644
--- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json
@@ -95,7 +95,7 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Marketplace URL",
+ "label": "Marketplace URL (to hide and update label)",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -215,16 +215,16 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "company_email",
+ "fieldname": "hub_seller_name",
"fieldtype": "Data",
- "hidden": 0,
+ "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": "Company Email",
+ "label": "Hub Seller Name",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -247,8 +247,8 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "site_name",
- "fieldtype": "Data",
+ "fieldname": "users",
+ "fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -256,138 +256,10 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Site Name",
+ "label": "Users",
"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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "currency",
- "fieldtype": "Currency",
- "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": "Currency",
- "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": "logo",
- "fieldtype": "Attach Image",
- "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 Logo",
- "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": "company_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,
+ "options": "Hub User",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -479,8 +351,8 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-08-31 17:30:37.305704",
- "modified_by": "netchamp@rawcoderz.com",
+ "modified": "2018-09-01 17:05:59.600583",
+ "modified_by": "cave@aperture.com",
"module": "Hub Node",
"name": "Marketplace Settings",
"name_case": "",
diff --git a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
index 9b83898..482efad 100644
--- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
@@ -7,98 +7,82 @@
from frappe.model.document import Document
from frappe.utils import add_years, now, get_datetime, get_datetime_str
from frappe import _
+from frappe.frappeclient import FrappeClient
from erpnext.utilities.product import get_price, get_qty_in_stock
from six import string_types
class MarketplaceSettings(Document):
- def validate(self):
- self.site_name = frappe.utils.get_url()
+ def register_seller(self, company):
- def get_marketplace_url(self):
- return self.marketplace_url
+ country, currency, company_description = frappe.db.get_value('Company', company,
+ ['country', 'default_currency', 'company_description'])
- def register(self):
- """ Create a User on hub.erpnext.org and return username/password """
+ company_details = {
+ 'company': company,
+ 'country': country,
+ # 'city': '',
+ 'currency': currency,
+ 'company_description': company_description,
+ # 'company_logo': company_logo,
- if frappe.session.user == 'Administrator':
- frappe.throw(_('Please login as another user to register on Marketplace'))
-
- if 'System Manager' not in frappe.get_roles():
- frappe.throw(_('Only users with System Manager role can register on Marketplace'), frappe.PermissionError)
-
- self.site_name = frappe.utils.get_url()
-
- data = {
- 'profile': self.as_json()
+ 'site_name': frappe.utils.get_url(),
}
- post_url = self.get_marketplace_url() + '/api/method/hub.hub.api.register'
- response = requests.post(post_url, data=data, headers = {'accept': 'application/json'})
+ hub_connection = self.get_connection()
- response.raise_for_status()
+ response = hub_connection.post_request({
+ 'cmd': 'hub.hub.api.add_hub_seller',
+ 'company_details': json.dumps(company_details)
+ })
- if response.ok:
- message = response.json().get('message')
- else:
- frappe.throw(json.loads(response.text))
+ return response
- if message.get('email'):
- self.create_hub_connector(message)
- self.registered = 1
- self.save()
- return message or None
+ def add_hub_user(self, user_email):
+ '''Create a Hub User and User record on hub server
+ and if successfull append it to Hub User table
+ '''
- # 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.hostname = self.get_marketplace_url()
- hub_connector.username = message['email']
- hub_connector.password = message['password']
- hub_connector.save()
+ if not self.registered:
return
- frappe.get_doc({
- 'doctype': 'Data Migration Connector',
- 'connector_type': 'Frappe',
- 'connector_name': 'Hub Connector',
- 'hostname': self.get_marketplace_url(),
- 'username': message['email'],
- 'password': message['password']
- }).insert()
+ hub_connection = self.get_connection()
-def reset_hub_publishing_settings(last_sync_datetime = ""):
- doc = frappe.get_doc("Marketplace Settings", "Marketplace Settings")
- doc.reset_publishing_settings(last_sync_datetime)
- doc.in_callback = 1
- doc.save()
+ first_name, last_name = frappe.db.get_value('User', user_email, ['first_name', 'last_name'])
-def reset_hub_settings(last_sync_datetime = ""):
- doc = frappe.get_doc("Marketplace Settings", "Marketplace Settings")
- doc.reset_publishing_settings(last_sync_datetime)
- doc.reset_enable()
- doc.in_callback = 1
- doc.save()
- frappe.msgprint(_("Successfully unregistered."))
+ hub_user = hub_connection.post_request({
+ 'cmd': 'hub.hub.api.add_hub_user',
+ 'user_email': user_email,
+ 'first_name': first_name,
+ 'last_name': last_name,
+ 'hub_seller': self.hub_seller_name
+ })
-@frappe.whitelist()
-def register_seller(**kwargs):
- settings = frappe.get_doc('Marketplace Settings')
- settings.update(kwargs)
- message = settings.register()
+ self.append('users', {
+ 'user': hub_user.get('user_email'),
+ 'hub_user_name': hub_user.get('hub_user_name'),
+ 'password': hub_user.get('password')
+ })
- return message.get('email')
+ self.save()
+
+ def get_hub_user(self, user):
+ '''Return the Hub User doc from the `users` table if password is set'''
+
+ filtered_users = filter(
+ lambda x: x.user == user and x.password,
+ self.users
+ )
+
+ if filtered_users:
+ return filtered_users[0]
+
+
+ def get_connection(self):
+ return FrappeClient(self.marketplace_url)
+
+
+ def unregister(self):
+ """Disable the User on hubmarket.org"""
+ pass
diff --git a/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.js b/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.js
new file mode 100644
index 0000000..fba3e09
--- /dev/null
+++ b/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: Marketplace Settings", function (assert) {
+ let done = assert.async();
+
+ // number of asserts
+ assert.expect(1);
+
+ frappe.run_serially([
+ // insert a new Marketplace Settings
+ () => frappe.tests.make('Marketplace Settings', [
+ // values to be set
+ {key: 'value'}
+ ]),
+ () => {
+ assert.equal(cur_frm.doc.key, 'value');
+ },
+ () => done()
+ ]);
+
+});
diff --git a/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.py b/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.py
new file mode 100644
index 0000000..549b991
--- /dev/null
+++ b/erpnext/hub_node/doctype/marketplace_settings/test_marketplace_settings.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+class TestMarketplaceSettings(unittest.TestCase):
+ pass
diff --git a/erpnext/public/js/hub/Sidebar.vue b/erpnext/public/js/hub/Sidebar.vue
index cff580e..6e0b26c 100644
--- a/erpnext/public/js/hub/Sidebar.vue
+++ b/erpnext/public/js/hub/Sidebar.vue
@@ -19,7 +19,7 @@
export default {
data() {
return {
- hub_registered: hub.settings.registered && frappe.session.user === hub.settings.company_email,
+ hub_registered: hub.settings.registered,
items: [
{
label: __('Browse'),
diff --git a/erpnext/public/js/hub/components/profile_dialog.js b/erpnext/public/js/hub/components/profile_dialog.js
index ae44659..0f22eaa 100644
--- a/erpnext/public/js/hub/components/profile_dialog.js
+++ b/erpnext/public/js/hub/components/profile_dialog.js
@@ -4,40 +4,12 @@
fieldtype: 'Link',
fieldname: 'company',
label: __('Company'),
- options: 'Company',
- onchange: () => {
- const value = dialog.get_value('company');
-
- if (value) {
- frappe.db.get_doc('Company', value)
- .then(company => {
- dialog.set_values({
- country: company.country,
- currency: company.default_currency
- });
- });
- }
- }
+ options: 'Company'
},
{
fieldname: 'company_email',
label: __('Email'),
fieldtype: 'Read Only'
- },
- {
- fieldname: 'country',
- label: __('Country'),
- fieldtype: 'Read Only'
- },
- {
- fieldname: 'currency',
- label: __('Currency'),
- fieldtype: 'Read Only'
- },
- {
- fieldtype: 'Text',
- label: __('About your Company'),
- fieldname: 'company_description'
}
];
@@ -48,7 +20,11 @@
primary_action: () => {
const form_values = dialog.get_values();
let values_filled = true;
- const mandatory_fields = ['company', 'company_email', 'company_description'];
+
+ // TODO: Say "we notice that the company description and logo isn't set. Please set them in master."
+ // Only then allow to register
+
+ const mandatory_fields = ['company'];
mandatory_fields.forEach(field => {
const value = form_values[field];
if (!value) {
diff --git a/erpnext/public/js/hub/marketplace.js b/erpnext/public/js/hub/marketplace.js
index 7659a36..bdcb353 100644
--- a/erpnext/public/js/hub/marketplace.js
+++ b/erpnext/public/js/hub/marketplace.js
@@ -31,6 +31,8 @@
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))
+ } else {
+ this.page.set_secondary_action('Add Users', this.show_add_user_dialog.bind(this));
}
});
}
@@ -92,23 +94,69 @@
__('Become a Seller'),
{
label: __('Register'),
- on_submit: this.register_seller.bind(this)
+ on_submit: this.register_marketplace.bind(this)
}
);
this.register_dialog.show();
}
- register_seller(form_values) {
+ register_marketplace({company, company_email}) {
frappe.call({
- method: 'erpnext.hub_node.doctype.marketplace_settings.marketplace_settings.register_seller',
- args: form_values
- }).then(() => {
- this.register_dialog.hide();
- frappe.set_route('marketplace', 'publish');
-
- erpnext.hub.trigger('seller-registered');
+ method: 'erpnext.hub_node.api.register_marketplace',
+ args: {
+ company,
+ company_email,
+ }
+ }).then((r) => {
+ if (r.message && r.message.ok) {
+ this.register_dialog.hide();
+ frappe.set_route('marketplace', 'publish');
+ erpnext.hub.trigger('seller-registered');
+ }
});
}
+ show_add_user_dialog() {
+ const user_list = Object.keys(frappe.boot.user_info)
+ .filter(user => !['Administrator', 'Guest', frappe.session.user].includes(user));
+ const d = new frappe.ui.Dialog({
+ title: __('Add Users to Marketplace'),
+ fields: [
+ {
+ label: __('Users'),
+ fieldname: 'users',
+ fieldtype: 'MultiSelect',
+ reqd: 1,
+ get_data() {
+ return user_list;
+ }
+ }
+ ],
+ primary_action({ users }) {
+ const selected_users = users.split(',').map(d => d.trim()).filter(Boolean);
+
+ if (!selected_users.every(user => user_list.includes(user))) {
+ d.set_df_property('users', 'description', __('Some emails are invalid'));
+ return;
+ } else {
+ d.set_df_property('users', 'description', '');
+ }
+
+ frappe.call('erpnext.hub_node.api.register_users', {
+ user_list: selected_users
+ })
+ .then(r => {
+ d.hide();
+
+ if (r.message && r.message.length) {
+ frappe.show_alert('Added {0} users', [r.message.length]);
+ }
+ });
+ }
+ });
+
+ d.show();
+ }
+
}
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index a4c81c5..96d1116 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -312,6 +312,102 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "sb_about",
+ "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": "About the Company",
+ "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": "company_logo",
+ "fieldtype": "Attach Image",
+ "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 Logo",
+ "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": "company_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": "Company 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,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "sales_settings",
"fieldtype": "Section Break",
"hidden": 0,
@@ -741,7 +837,7 @@
"label": "Create Chart Of Accounts Based On",
"length": 0,
"no_copy": 0,
- "options": "\nStandard Template\nExisting Company",
+ "options": "\nStandard Template\nExisting Company\n\n\n",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -775,7 +871,7 @@
"label": "Chart Of Accounts Template",
"length": 0,
"no_copy": 1,
- "options": "",
+ "options": "\n\n\n",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -2637,38 +2733,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "company_logo",
- "fieldtype": "Attach Image",
- "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 Logo",
- "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": "lft",
"fieldtype": "Int",
"hidden": 1,
@@ -2772,8 +2836,8 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2018-08-28 15:47:50.757131",
- "modified_by": "Administrator",
+ "modified": "2018-09-01 16:03:30.716918",
+ "modified_by": "cave@aperture.com",
"module": "Setup",
"name": "Company",
"owner": "Administrator",
@@ -2918,5 +2982,6 @@
"show_name_in_global_search": 1,
"sort_order": "ASC",
"track_changes": 1,
- "track_seen": 0
+ "track_seen": 0,
+ "track_views": 0
}
\ No newline at end of file