diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py index fe419196c5..0492dde527 100644 --- a/erpnext/hub_node/api.py +++ b/erpnext/hub_node/api.py @@ -1,11 +1,61 @@ 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, company_description): + validate_registerer() + + settings = frappe.get_single('Marketplace Settings') + message = settings.register_seller(company, company_description) + + 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,11 +70,12 @@ def call_hub_method(method, params=None): 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()] - hub_seller = frappe.db.get_value('Marketplace Settings' , 'Marketplace Settings', 'company_email') + hub_seller_name = frappe.db.get_value('Marketplace Settings' , 'Marketplace Settings', 'hub_seller_name') for item in items: for fieldname in table_fields: @@ -39,11 +90,12 @@ def map_fields(items): item[remote_fieldname] = value item['doctype'] = 'Hub Item' - item['hub_seller'] = hub_seller + item['hub_seller'] = hub_seller_name item.pop('attachments', None) return items + @frappe.whitelist() def get_valid_items(search_value=''): items = frappe.get_list( @@ -68,6 +120,7 @@ def get_valid_items(search_value=''): return valid_items + @frappe.whitelist() def publish_selected_items(items_to_publish): items_to_publish = json.loads(items_to_publish) @@ -85,12 +138,11 @@ def publish_selected_items(items_to_publish): 'image_list': item.get('image_list') }).insert(ignore_if_duplicate=True) - items = map_fields(items_to_publish) try: item_sync_preprocess(len(items)) - load_base64_image_from_items(items) + convert_relative_image_urls_to_absolute(items) # TODO: Publish Progress connection = get_hub_connection() @@ -100,6 +152,15 @@ def publish_selected_items(items_to_publish): except Exception as e: frappe.log_error(message=e, title='Hub Sync Error') +@frappe.whitelist() +def get_unregistered_users(): + settings = frappe.get_single('Marketplace Settings') + registered_users = [user.user for user in settings.users] + ['Administrator', 'Guest'] + all_users = [user.name for user in frappe.db.get_all('User', filters={'enabled': 1})] + unregistered_users = [user for user in all_users if user not in registered_users] + return unregistered_users + + 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 +172,7 @@ def item_sync_preprocess(intended_item_publish_count): else: frappe.throw('Unable to update remote activity') + def item_sync_postprocess(): response = call_hub_method('post_items_publish', {}) if response: @@ -121,50 +183,29 @@ def item_sync_postprocess(): frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'sync_in_progress', 0) -def load_base64_image_from_items(items): +def convert_relative_image_urls_to_absolute(items): + from urlparse import urljoin + for item in items: file_path = item['image'] - file_name = os.path.basename(file_path) - base64content = None - if file_path.startswith('http'): - # fetch content and then base64 it - url = file_path - response = requests.get(url) - base64content = base64.b64encode(response.content) - else: - # read file then base64 it - file_path = os.path.abspath(get_file_path(file_path)) - with io.open(file_path, 'rb') as f: - base64content = base64.b64encode(f.read()) - - image_data = json.dumps({ - 'file_name': file_name, - 'base64': base64content - }) - - item['image'] = image_data + if file_path.startswith('/files/'): + item['image'] = urljoin(frappe.utils.get_url(), file_path) 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 0000000000..e69de29bb2 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 0000000000..a660022736 --- /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 0000000000..de43f4e0c0 --- /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 5243f38022..12837111a7 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", - "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", + "label": "Users", "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 9b83898536..5ea3011a86 100644 --- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py +++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py @@ -7,98 +7,80 @@ 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 class MarketplaceSettings(Document): - def validate(self): - self.site_name = frappe.utils.get_url() + def register_seller(self, company, company_description): - def get_marketplace_url(self): - return self.marketplace_url + country, currency, company_logo = frappe.db.get_value('Company', company, + ['country', 'default_currency', 'company_logo']) - def register(self): - """ Create a User on hub.erpnext.org and return username/password """ - - 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() + company_details = { + 'company': company, + 'country': country, + 'currency': currency, + 'company_description': company_description, + 'company_logo': company_logo, + '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 0000000000..fba3e098d4 --- /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 0000000000..549b9914c3 --- /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/patches.txt b/erpnext/patches.txt index 1af75e8397..512e33bdb5 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -560,6 +560,6 @@ erpnext.patches.v10_0.update_address_template_for_india 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 # 2018-08-31 +erpnext.patches.v11_0.update_hub_url # 2018-08-31 # 2018-09-03 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 abddfd6391..40181a2e90 100644 --- a/erpnext/patches/v11_0/update_hub_url.py +++ b/erpnext/patches/v11_0/update_hub_url.py @@ -2,4 +2,4 @@ import frappe def execute(): frappe.reload_doc('hub_node', 'doctype', 'Marketplace Settings') - frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'hub_url', 'https://hubmarket.org') + frappe.db.set_value('Marketplace Settings', 'Marketplace Settings', 'marketplace_url', 'https://hubmarket.org') diff --git a/erpnext/public/js/hub/PageContainer.vue b/erpnext/public/js/hub/PageContainer.vue index cec4c8d746..0bc6712056 100644 --- a/erpnext/public/js/hub/PageContainer.vue +++ b/erpnext/public/js/hub/PageContainer.vue @@ -20,23 +20,29 @@ import Messages from './pages/Messages.vue'; import Profile from './pages/Profile.vue'; import NotFound from './pages/NotFound.vue'; -const route_map = { - 'marketplace/home': Home, - 'marketplace/search/:keyword': Search, - 'marketplace/category/:category': Category, - 'marketplace/item/:item': Item, - 'marketplace/seller/:seller': Seller, - 'marketplace/not-found': NotFound, +function get_route_map() { + const read_only_routes = { + 'marketplace/home': Home, + 'marketplace/search/:keyword': Search, + 'marketplace/category/:category': Category, + 'marketplace/item/:item': Item, + 'marketplace/seller/:seller': Seller, + 'marketplace/not-found': NotFound, + } + const registered_routes = { + 'marketplace/profile': Profile, + 'marketplace/saved-items': SavedItems, + 'marketplace/publish': Publish, + 'marketplace/published-items': PublishedItems, + 'marketplace/buying': Buying, + 'marketplace/buying/:item': Messages, + 'marketplace/selling': Selling, + 'marketplace/selling/:buyer/:item': Messages + } - // Registered seller routes - 'marketplace/profile': Profile, - 'marketplace/saved-items': SavedItems, - 'marketplace/publish': Publish, - 'marketplace/published-items': PublishedItems, - 'marketplace/buying': Buying, - 'marketplace/buying/:item': Messages, - 'marketplace/selling': Selling, - 'marketplace/selling/:buyer/:item': Messages + return hub.is_seller_registered() + ? Object.assign({}, read_only_routes, registered_routes) + : read_only_routes; } export default { @@ -56,6 +62,7 @@ export default { this.current_page = this.get_current_page(); }, get_current_page() { + const route_map = get_route_map(); const curr_route = frappe.get_route_str(); let route = Object.keys(route_map).filter(route => route == curr_route)[0]; if (!route) { diff --git a/erpnext/public/js/hub/Sidebar.vue b/erpnext/public/js/hub/Sidebar.vue index cff580e5ff..164e78d30d 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.is_user_registered(), items: [ { label: __('Browse'), diff --git a/erpnext/public/js/hub/components/DetailView.vue b/erpnext/public/js/hub/components/DetailView.vue index 70ec94c6c1..2f1a941b46 100644 --- a/erpnext/public/js/hub/components/DetailView.vue +++ b/erpnext/public/js/hub/components/DetailView.vue @@ -38,7 +38,7 @@ -
+
@@ -47,6 +47,9 @@ export default { methods: { get_items_for_messages() { return hub.call('get_buying_items_for_messages', {}, 'action:send_message'); + }, + get_sender(message) { + return message.sender === frappe.session.user ? __('You') : (message.sender_name || message.sender); } } } diff --git a/erpnext/public/js/hub/pages/Item.vue b/erpnext/public/js/hub/pages/Item.vue index 3305b1da4c..446327a98a 100644 --- a/erpnext/public/js/hub/pages/Item.vue +++ b/erpnext/public/js/hub/pages/Item.vue @@ -19,7 +19,7 @@ :value="item_views_and_ratings" > - @@ -44,16 +44,9 @@ export default { publish_page_action: { label: __('Publish Your First Items'), on_click: () => { - frappe.set_route(`marketplace/home`); + frappe.set_route(`marketplace/publish`); } - }, - - // Constants - page_title: __('Published Items'), - publish_button_text: __('Publish More Items'), - published_items_message: __('You can publish upto 200 items.'), - // TODO: Add empty state action - empty_state_message: __('You haven\'t published any items yet.') + } }; }, created() { @@ -63,7 +56,7 @@ export default { get_items() { hub.call('get_items', { filters: { - hub_seller: hub.settings.company_email + hub_seller: hub.settings.hub_seller_name } }) .then((items) => { diff --git a/erpnext/public/js/hub/pages/SavedItems.vue b/erpnext/public/js/hub/pages/SavedItems.vue index e5d21cdd3c..c29675acd3 100644 --- a/erpnext/public/js/hub/pages/SavedItems.vue +++ b/erpnext/public/js/hub/pages/SavedItems.vue @@ -38,7 +38,7 @@ export default { methods: { get_items() { hub.call( - 'get_saved_items_of_seller', {}, + 'get_saved_items_of_user', {}, 'action:item_save' ) .then((items) => { @@ -83,9 +83,9 @@ export default { remove_item_from_saved_items(hub_item_name) { erpnext.hub.trigger('action:item_save'); - hub.call('remove_item_from_seller_saved_items', { + hub.call('remove_item_from_user_saved_items', { hub_item_name, - hub_seller: hub.settings.company_email + hub_user: frappe.session.user }) .then(() => { this.get_items(); diff --git a/erpnext/public/js/hub/pages/Selling.vue b/erpnext/public/js/hub/pages/Selling.vue index 9c8ede6664..8743027885 100644 --- a/erpnext/public/js/hub/pages/Selling.vue +++ b/erpnext/public/js/hub/pages/Selling.vue @@ -17,15 +17,15 @@
- {{ message.buyer }} + {{ message.buyer_name }}
- {{ message.sender }}: {{ message.content }} + {{ message.sender }}: {{ message.message | striphtml }}
diff --git a/erpnext/public/js/hub/vue-plugins.js b/erpnext/public/js/hub/vue-plugins.js index e18af0c428..439c1f24e2 100644 --- a/erpnext/public/js/hub/vue-plugins.js +++ b/erpnext/public/js/hub/vue-plugins.js @@ -62,5 +62,5 @@ Vue.directive('img-src', { }); Vue.filter('striphtml', function (text) { - return strip_html(text); + return strip_html(text || ''); }); \ No newline at end of file diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index a4c81c5cea..96d11163f5 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -305,6 +305,102 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "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, @@ -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, @@ -2630,38 +2726,6 @@ "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, @@ -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