diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py index af34844d46b..12a564a3425 100644 --- a/erpnext/hub_node/api.py +++ b/erpnext/hub_node/api.py @@ -17,31 +17,27 @@ current_user = frappe.session.user @frappe.whitelist() -def register_marketplace(**kwargs): - settings = frappe.get_single('Marketplace Settings') - settings.update(kwargs) - settings.users = [] - +def register_marketplace(company, company_description): validate_registerer() + + settings = frappe.get_single('Marketplace Settings') + country, currency = frappe.db.get_value('Company', company, ['country', 'default_currency']) + + settings.company = company + settings.country = country + settings.currency = currency + settings.company_description = company_description + message = settings.register() - if message.get('email'): + if message.get('hub_seller_name'): settings.registered = 1 + settings.hub_seller_name = message.get('hub_seller_name') + settings.save() - settings.append('users', { - 'user': current_user, - 'name': current_user, - 'username': kwargs.get('username'), - 'password': message.get('password') - }) + settings.add_user(frappe.session.user) - user_emails = kwargs.get('users').strip()[:-1].split(', ') - for email in user_emails: - settings.append('users', {'user': email, 'name': email}) - - settings.insert() - - return message + return { 'ok': 1 } @frappe.whitelist() @@ -53,8 +49,11 @@ def validate_registerer(): if current_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) + 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() diff --git a/erpnext/hub_node/doctype/hub_user/hub_user.json b/erpnext/hub_node/doctype/hub_user/hub_user.json index 08a59c6958c..a6600227365 100644 --- a/erpnext/hub_node/doctype/hub_user/hub_user.json +++ b/erpnext/hub_node/doctype/hub_user/hub_user.json @@ -3,7 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "field:user", + "autoname": "", "beta": 0, "creation": "2018-08-31 12:36:45.627531", "custom": 0, @@ -53,7 +53,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "username", + "fieldname": "hub_user_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, @@ -62,7 +62,7 @@ "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, - "label": "Hub Username", + "label": "Hub User", "length": 0, "no_copy": 0, "permlevel": 0, @@ -121,8 +121,8 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-09-01 09:46:54.327880", - "modified_by": "cave@aperture.com", + "modified": "2018-09-01 13:56:07.816894", + "modified_by": "netchamp@rawcoderz.com", "module": "Hub Node", "name": "Hub User", "name_case": "", diff --git a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json index 066202a3577..f2d8b05e050 100644 --- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json +++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.json @@ -208,6 +208,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "hub_seller_name", + "fieldtype": "Data", + "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": "Hub Seller 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": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -480,8 +512,8 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2018-08-31 22:14:59.497780", - "modified_by": "cave@aperture.com", + "modified": "2018-09-01 14:15:40.676256", + "modified_by": "suraj@rawcoderz.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 f0046d0d2a6..cfb9acee2fb 100644 --- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py +++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py @@ -7,6 +7,7 @@ import frappe, requests, json, time 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 @@ -15,27 +16,45 @@ class MarketplaceSettings(Document): def validate(self): self.site_name = frappe.utils.get_url() - - def get_marketplace_url(self): - return self.marketplace_url - - def register(self): - """ Create a User on hub.erpnext.org and return username/password """ + """ Create a User on hubmarket.org and return username/password """ self.site_name = frappe.utils.get_url() - register_url = self.get_marketplace_url() + '/api/method/hub.hub.api.register' - data = {'profile': self.as_json(), 'email': frappe.session.user} - headers = {'accept': 'application/json'} + hub_connection = self.get_connection() - response = requests.post(register_url, data = data, headers = headers) - response.raise_for_status() - if response.ok: - message = response.json().get('message') - else: - frappe.throw(json.loads(response.text)) + response = hub_connection.post_request({ + 'cmd': 'hub.hub.api.register', + 'company_details': self.as_json() + }) - return message or None + return response + + def add_user(self, user_email): + if not self.registered: + return + + hub_connection = self.get_connection() + + first_name, last_name = frappe.db.get_value('User', user_email, ['first_name', 'last_name']) + + 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 + }) + + self.append('users', { + 'user': hub_user.get('user_email'), + 'hub_user_name': hub_user.get('hub_user_name'), + 'password': hub_user.get('password') + }) + + self.insert() + + def get_connection(self): + return FrappeClient(self.marketplace_url) def unregister(self): diff --git a/erpnext/public/js/hub/components/profile_dialog.js b/erpnext/public/js/hub/components/profile_dialog.js index 03e7f48748e..240df82ec1d 100644 --- a/erpnext/public/js/hub/components/profile_dialog.js +++ b/erpnext/public/js/hub/components/profile_dialog.js @@ -1,11 +1,5 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => { const fields = [ - { - // TODO: add hub check for taken - fieldname: 'username', - label: __('Username'), - fieldtype: 'Data' - }, { fieldtype: 'Link', fieldname: 'company', @@ -30,21 +24,6 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => { label: __('Email'), fieldtype: 'Read Only' }, - { - fieldname: 'users', - label: __('Users'), - fieldtype: 'MultiSelect' - }, - { - fieldname: 'country', - label: __('Country'), - fieldtype: 'Read Only' - }, - { - fieldname: 'currency', - label: __('Currency'), - fieldtype: 'Read Only' - }, { fieldtype: 'Text', label: __('About your Company'), @@ -72,14 +51,6 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => { action.on_submit(form_values); } }); - - frappe.db.get_list('User') - .then(result => { - const users = result.map(result => result.name) - .filter(user => !['Guest', 'Administrator', frappe.session.user].includes(user)); - dialog.fields_dict.users.set_data(users); - }); - // Post create const default_company = frappe.defaults.get_default('company'); dialog.set_value('company', default_company); diff --git a/erpnext/public/js/hub/marketplace.js b/erpnext/public/js/hub/marketplace.js index bea30bd9422..2bd55521b27 100644 --- a/erpnext/public/js/hub/marketplace.js +++ b/erpnext/public/js/hub/marketplace.js @@ -99,15 +99,20 @@ erpnext.hub.Marketplace = class Marketplace { this.register_dialog.show(); } - register_marketplace(form_values) { + register_marketplace({company, company_email, company_description}) { frappe.call({ method: 'erpnext.hub_node.api.register_marketplace', - args: form_values - }).then(() => { - this.register_dialog.hide(); - frappe.set_route('marketplace', 'publish'); - - erpnext.hub.trigger('seller-registered'); + args: { + company, + company_email, + company_description + } + }).then((r) => { + if (r.message && r.message.ok) { + this.register_dialog.hide(); + frappe.set_route('marketplace', 'publish'); + erpnext.hub.trigger('seller-registered'); + } }); }