fix: Messages
- update messages according to new doctype - sync logo in seller registration - hub.is_seller_registered() and hub.is_user_registered() api - Add Users dialog
This commit is contained in:
parent
18e3c61109
commit
ad0be6aaa2
@ -19,6 +19,7 @@ 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)
|
||||
|
||||
@ -151,6 +152,14 @@ 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', {
|
||||
|
@ -15,18 +15,16 @@ class MarketplaceSettings(Document):
|
||||
|
||||
def register_seller(self, company, company_description):
|
||||
|
||||
country, currency, description = frappe.db.get_value('Company', company,
|
||||
['country', 'default_currency', 'company_description'])
|
||||
country, currency, company_logo = frappe.db.get_value('Company', company,
|
||||
['country', 'default_currency', 'company_logo'])
|
||||
|
||||
company_details = {
|
||||
'company': company,
|
||||
'country': country,
|
||||
# 'city': '',
|
||||
'currency': currency,
|
||||
'company_description': company_description,
|
||||
# 'company_logo': company_logo,
|
||||
|
||||
'site_name': frappe.utils.get_url(),
|
||||
'company_logo': company_logo,
|
||||
'site_name': frappe.utils.get_url()
|
||||
}
|
||||
|
||||
hub_connection = self.get_connection()
|
||||
|
@ -19,7 +19,7 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
hub_registered: hub.settings.registered,
|
||||
hub_registered: hub.is_user_registered(),
|
||||
items: [
|
||||
{
|
||||
label: __('Browse'),
|
||||
|
@ -56,8 +56,6 @@ export default {
|
||||
},
|
||||
|
||||
on_submit_review(values) {
|
||||
values.user = hub.settings.company_email;
|
||||
|
||||
this.review_area.reset();
|
||||
|
||||
hub.call('add_item_review', {
|
||||
|
@ -24,16 +24,10 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => {
|
||||
}
|
||||
}
|
||||
},
|
||||
// {
|
||||
// fieldname: 'company_logo',
|
||||
// label: __('Logo'),
|
||||
// fieldtype: 'Attach Image',
|
||||
// read_only: true
|
||||
// },
|
||||
{
|
||||
label: __('About your company'),
|
||||
fieldname: 'company_description',
|
||||
label: __('About Your Company'),
|
||||
fieldtype: 'Long Text'
|
||||
fieldtype: 'Text'
|
||||
}
|
||||
];
|
||||
|
||||
@ -48,7 +42,7 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => {
|
||||
// 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'];
|
||||
const mandatory_fields = ['company', 'company_description'];
|
||||
mandatory_fields.forEach(field => {
|
||||
const value = form_values[field];
|
||||
if (!value) {
|
||||
@ -65,7 +59,7 @@ const ProfileDialog = (title = __('Edit Profile'), action={}) => {
|
||||
// Post create
|
||||
const default_company = frappe.defaults.get_default('company');
|
||||
dialog.set_value('company', default_company);
|
||||
dialog.set_value('company_email', frappe.session.user);
|
||||
dialog.set_value('email', frappe.session.user);
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
@ -22,17 +22,20 @@ erpnext.hub.Marketplace = class Marketplace {
|
||||
|
||||
frappe.model.with_doc('Marketplace Settings').then(doc => {
|
||||
hub.settings = doc;
|
||||
const is_registered = hub.settings.registered;
|
||||
const is_registered_seller = hub.settings.company_email === frappe.session.user;
|
||||
|
||||
this.setup_header();
|
||||
this.make_sidebar();
|
||||
this.make_body();
|
||||
this.setup_events();
|
||||
this.refresh();
|
||||
if (!is_registered && !is_registered_seller && frappe.user_roles.includes('System Manager')) {
|
||||
this.page.set_primary_action('Become a Seller', this.show_register_dialog.bind(this))
|
||||
} else {
|
||||
this.page.set_secondary_action('Add Users', this.show_add_user_dialog.bind(this));
|
||||
|
||||
if (is_subset(['System Manager', 'Item Manager'], frappe.user_roles)) {
|
||||
// show buttons only to System Manager
|
||||
if (!hub.is_seller_registered()) {
|
||||
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));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -118,45 +121,73 @@ erpnext.hub.Marketplace = class Marketplace {
|
||||
}
|
||||
|
||||
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);
|
||||
this.get_unregistered_users()
|
||||
.then(r => {
|
||||
const user_list = r.message;
|
||||
|
||||
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', '');
|
||||
}
|
||||
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);
|
||||
|
||||
frappe.call('erpnext.hub_node.api.register_users', {
|
||||
user_list: selected_users
|
||||
})
|
||||
.then(r => {
|
||||
d.hide();
|
||||
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', '');
|
||||
}
|
||||
|
||||
if (r.message && r.message.length) {
|
||||
frappe.show_alert('Added {0} users', [r.message.length]);
|
||||
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();
|
||||
d.show();
|
||||
});
|
||||
}
|
||||
|
||||
get_unregistered_users() {
|
||||
return frappe.call('erpnext.hub_node.api.get_unregistered_users')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Object.assign(hub, {
|
||||
is_seller_registered() {
|
||||
return hub.settings.registered;
|
||||
},
|
||||
|
||||
is_user_registered() {
|
||||
return this.is_seller_registered() && hub.settings.users
|
||||
.filter(hub_user => hub_user.user === frappe.session.user)
|
||||
.length === 1;
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Returns true if list_a is subset of list_b
|
||||
* @param {Array} list_a
|
||||
* @param {Array} list_b
|
||||
*/
|
||||
function is_subset(list_a, list_b) {
|
||||
return list_a.every(item => list_b.includes(item));
|
||||
}
|
||||
|
@ -13,8 +13,8 @@
|
||||
v-route="'marketplace/buying/' + item.name"
|
||||
>
|
||||
<div slot="subtitle">
|
||||
<span>{{item.recent_message.sender}}: </span>
|
||||
<span>{{item.recent_message.content | striphtml}}</span>
|
||||
<span>{{ get_sender(item.recent_message) }}: </span>
|
||||
<span>{{ item.recent_message.message | striphtml }}</span>
|
||||
</div>
|
||||
</item-list-card>
|
||||
</div>
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ export default {
|
||||
is_own_item() {
|
||||
let is_own_item = false;
|
||||
if(this.item) {
|
||||
if(this.item.hub_seller === hub.setting.company_email) {
|
||||
if(this.item.hub_seller === hub.settings.hub_seller_name) {
|
||||
is_own_item = true;
|
||||
}
|
||||
}
|
||||
@ -224,13 +224,11 @@ export default {
|
||||
if (!message) return;
|
||||
|
||||
hub.call('send_message', {
|
||||
from_seller: hub.settings.company_email,
|
||||
to_seller: this.item.hub_seller,
|
||||
hub_item: this.item.name,
|
||||
message
|
||||
})
|
||||
.then(() => {
|
||||
d.hide();
|
||||
this.contact_seller_dialog.hide();
|
||||
frappe.set_route('marketplace', 'buying', this.item.name);
|
||||
erpnext.hub.trigger('action:send_message')
|
||||
});
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="level margin-bottom" v-for="message in messages" :key="message.name">
|
||||
<div class="level-left ellipsis" style="width: 80%;">
|
||||
<div v-html="frappe.avatar(message.sender)" />
|
||||
<div style="white-space: normal;" v-html="message.content" />
|
||||
<div style="white-space: normal;" v-html="message.message" />
|
||||
</div>
|
||||
<div class="level-right text-muted" v-html="frappe.datetime.comment_when(message.creation, true)" />
|
||||
</div>
|
||||
@ -64,13 +64,12 @@ export default {
|
||||
methods: {
|
||||
send_message(message) {
|
||||
this.messages.push({
|
||||
sender: hub.settings.company_email,
|
||||
content: message,
|
||||
sender: frappe.session.user,
|
||||
message: message,
|
||||
creation: Date.now(),
|
||||
name: frappe.utils.get_random(6)
|
||||
});
|
||||
hub.call('send_message', {
|
||||
from_seller: hub.settings.company_email,
|
||||
to_seller: this.get_against_seller(),
|
||||
hub_item: this.item_details.name,
|
||||
message
|
||||
|
@ -5,10 +5,10 @@
|
||||
>
|
||||
<section-header>
|
||||
<div>
|
||||
<h5>{{ page_title }}</h5>
|
||||
<h5>{{ __('Published Items') }}</h5>
|
||||
<p v-if="items.length"
|
||||
class="text-muted margin-bottom">
|
||||
{{ published_items_message }}
|
||||
{{ __('You can publish upto 200 items.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
class="btn btn-default btn-xs publish-items"
|
||||
v-route="'marketplace/publish'"
|
||||
>
|
||||
<span>{{ publish_button_text }}</span>
|
||||
<span>{{ __('Publish More Items') }}</span>
|
||||
</button>
|
||||
|
||||
</section-header>
|
||||
@ -26,7 +26,7 @@
|
||||
:items="items"
|
||||
:item_id_fieldname="item_id_fieldname"
|
||||
:on_click="go_to_item_details_page"
|
||||
:empty_state_message="empty_state_message"
|
||||
:empty_state_message="__('You haven\'t published any items yet.')"
|
||||
:empty_state_action="publish_page_action"
|
||||
>
|
||||
</item-cards-container>
|
||||
@ -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() {
|
||||
|
@ -62,5 +62,5 @@ Vue.directive('img-src', {
|
||||
});
|
||||
|
||||
Vue.filter('striphtml', function (text) {
|
||||
return strip_html(text);
|
||||
return strip_html(text || '');
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user