- show random items from each hub seller
- show items from country
- move add_review method on hub
This commit is contained in:
Faris Ansari 2018-07-27 21:51:26 +05:30
parent 44f7d2e62b
commit b7a63ab81e
2 changed files with 71 additions and 77 deletions

View File

@ -23,7 +23,6 @@ def call_hub_method(method, params=None):
'cmd': 'hub.hub.api.' + method 'cmd': 'hub.hub.api.' + method
}) })
response = connection.post_api('hub.hub.api.' + method, params)
response = connection.post_request(params) response = connection.post_request(params)
return response return response
@ -156,27 +155,6 @@ def update_category(hub_item_code, category):
return response return response
@frappe.whitelist()
def send_review(hub_item_code, review):
review = json.loads(review)
hub_connection = get_hub_connection()
item_doc = hub_connection.connection.get_doc('Hub Item', hub_item_code)
existing_reviews = item_doc.get('reviews')
reviews = [review]
review.setdefault('idx', 0)
for r in existing_reviews:
if r.get('user') != review.get('user'):
reviews.append(r)
response = hub_connection.update('Hub Item', dict(
doctype='Hub Item',
reviews = reviews
), hub_item_code)
return response
@frappe.whitelist() @frappe.whitelist()
def get_details(hub_sync_id=None, doctype='Hub Item'): def get_details(hub_sync_id=None, doctype='Hub Item'):
if not hub_sync_id: if not hub_sync_id:

View File

@ -228,19 +228,24 @@ erpnext.hub.Home = class Home extends SubPage {
get_items_and_render() { get_items_and_render() {
this.$wrapper.find('.hub-card-container').empty(); this.$wrapper.find('.hub-card-container').empty();
this.get_items() this.get_data()
.then(items => { .then(data => {
this.render(items); this.render(data);
}); });
} }
get_items() { get_data() {
return hub.call('get_data_for_homepage'); return hub.call('get_data_for_homepage', { country: frappe.defaults.get_user_default('country') });
} }
render(items) { render(data) {
const html = get_item_card_container_html(items, __('Recently Published')); let html = get_item_card_container_html(data.random_items, __('Explore'));
this.$wrapper.append(html); this.$wrapper.append(html);
if (data.items_by_country.length) {
html = get_item_card_container_html(data.items_by_country, __('Near you'));
this.$wrapper.append(html);
}
} }
} }
@ -323,38 +328,23 @@ erpnext.hub.Item = class Item extends SubPage {
this.get_item(this.hub_item_code) this.get_item(this.hub_item_code)
.then(item => { .then(item => {
this.item = item;
this.render(item); this.render(item);
}); });
} }
get_item(hub_item_code) { get_item(hub_item_code) {
return new Promise(resolve => { return hub.call('get_item_details', { hub_item_code });
const item = (erpnext.hub.hub_item_cache || []).find(item => item.name === hub_item_code)
if (item) {
resolve(item);
} else {
frappe.call('erpnext.hub_node.get_list', {
doctype: 'Hub Item',
filters: {
name: hub_item_code
}
})
.then(r => {
resolve(r.message[0]);
});
}
});
} }
render(item) { render(item) {
const title = item.item_name || item.name; const title = item.item_name || item.name;
const company = item.company_name; const seller = item.company;
const who = __('Posted By {0}', [company]); const who = __('Posted By {0}', [seller]);
const when = comment_when(item.creation); const when = comment_when(item.creation);
const city = item.seller_city ? item.seller_city + ', ' : ''; const city = item.city ? item.city + ', ' : '';
const country = item.country ? item.country : ''; const country = item.country ? item.country : '';
const where = `${city}${country}`; const where = `${city}${country}`;
@ -362,8 +352,8 @@ erpnext.hub.Item = class Item extends SubPage {
const description = item.description || ''; const description = item.description || '';
const rating_html = get_rating_html(item); const rating_html = get_rating_html(item.average_rating);
const rating_count = item.reviews.length > 0 ? `(${item.reviews.length} reviews)` : ''; const rating_count = item.no_of_ratings > 0 ? `${item.no_of_ratings} reviews` : __('No reviews yet');
const html = ` const html = `
<div class="hub-item-container"> <div class="hub-item-container">
@ -382,7 +372,7 @@ erpnext.hub.Item = class Item extends SubPage {
<h2>${title}</h2> <h2>${title}</h2>
<div class="text-muted"> <div class="text-muted">
<p>${where}${dot_spacer}${when}</p> <p>${where}${dot_spacer}${when}</p>
<p>${rating_html}${rating_count}</p> <p>${rating_html} (${rating_count})</p>
</div> </div>
<hr> <hr>
<div class="hub-item-description"> <div class="hub-item-description">
@ -402,7 +392,7 @@ erpnext.hub.Item = class Item extends SubPage {
<img src="https://picsum.photos/200"> <img src="https://picsum.photos/200">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<a href="#marketplace/seller/${company}" class="bold">${company}</a> <a href="#marketplace/seller/${seller}" class="bold">${seller}</a>
<p class="text-muted"> <p class="text-muted">
Contact Seller Contact Seller
</p> </p>
@ -428,40 +418,60 @@ erpnext.hub.Item = class Item extends SubPage {
this.$wrapper.html(html); this.$wrapper.html(html);
this.make_review_area(); this.make_review_area();
this.render_reviews(item);
this.get_reviews()
.then(reviews => {
this.reviews = reviews;
this.render_reviews(reviews);
});
} }
make_review_area() { make_review_area() {
this.comment_area = new frappe.ui.ReviewArea({ this.comment_area = new frappe.ui.ReviewArea({
parent: this.$wrapper.find('.timeline-head').empty(), parent: this.$wrapper.find('.timeline-head').empty(),
mentions: [], mentions: [],
on_submit: (val) => { on_submit: (values) => {
val.user = frappe.session.user; values.user = frappe.session.user;
val.username = frappe.session.user_fullname; values.username = frappe.session.user_fullname;
frappe.call({ hub.call('add_item_review', {
method: 'erpnext.hub_node.send_review', hub_item_code: this.hub_item_code,
args: { review: JSON.stringify(values)
hub_item_code: this.hub_item_code, })
review: val .then(review => {
}, this.reviews = this.reviews || [];
callback: (r) => { this.reviews.push(review);
console.log(r); this.render_reviews(this.reviews);
this.render_reviews(r.message);
this.comment_area.reset(); this.comment_area.reset();
},
freeze: true
}); });
} }
}); });
} }
render_reviews(item) { get_reviews() {
this.$wrapper.find('.timeline-items').empty(); return hub.call('get_item_reviews', { hub_item_code: this.hub_item_code }).catch(() => {});
item.reviews.forEach(review => this.render_review(review, item));
} }
render_review(review, item) { render_reviews(reviews=[]) {
this.$wrapper.find('.timeline-items').empty();
reviews.sort((a, b) => {
if (a.modified > b.modified) {
return -1;
}
if (a.modified < b.modified) {
return 1;
}
return 0;
});
reviews.forEach(review => this.render_review(review));
}
render_review(review) {
let username = review.username || review.user || __("Anonymous"); let username = review.username || review.user || __("Anonymous");
let image_html = review.user_image let image_html = review.user_image
@ -481,7 +491,7 @@ erpnext.hub.Item = class Item extends SubPage {
</div>` </div>`
: ''; : '';
let rating_html = get_rating_html(item); let rating_html = get_rating_html(review.rating);
const $timeline_items = this.$wrapper.find('.timeline-items'); const $timeline_items = this.$wrapper.find('.timeline-items');
@ -847,7 +857,7 @@ function get_item_card_html(item) {
const title = strip_html(item_name); const title = strip_html(item_name);
const img_url = item.image; const img_url = item.image;
const company_name = item.company_name; const company_name = item.company;
const active = item.publish_in_hub; const active = item.publish_in_hub;
@ -902,8 +912,7 @@ function get_item_card_html(item) {
return item_html; return item_html;
} }
function get_rating_html(item) { function get_rating_html(rating) {
const rating = item.average_rating;
let rating_html = ``; let rating_html = ``;
for (var i = 0; i < 5; i++) { for (var i = 0; i < 5; i++) {
let star_class = 'fa-star'; let star_class = 'fa-star';
@ -956,6 +965,13 @@ hub.call = function call_hub_method(method, args={}) {
}) })
.then(r => { .then(r => {
if (r.message) { if (r.message) {
if (r.message.error) {
frappe.throw({
title: __('Marketplace Error'),
message: r.message.error
});
}
erpnext.hub.cache[key] = r.message; erpnext.hub.cache[key] = r.message;
resolve(r.message) resolve(r.message)
} }