fix: call leaderboard methods directly from config

This commit is contained in:
prssanna 2019-09-30 11:13:07 +05:30
parent 782f1cf098
commit da8ad36cde
3 changed files with 50 additions and 62 deletions

View file

@ -13,6 +13,7 @@ def get_leaderboards():
}
return leaderboards
@frappe.whitelist()
def get_energy_point_leaderboard(from_date, company = None, field = None, limit = None):
energy_point_users = frappe.db.get_all('Energy Point Log',
fields = ['user as name', 'sum(points) as value'],

View file

@ -203,41 +203,38 @@ class Leaderboard {
if (!this.options.selected_company) {
frappe.throw(__("Please select Company"));
}
frappe.call({
method: "frappe.desk.page.leaderboard.leaderboard.get_leaderboards",
args: {
leaderboard_config: this.leaderboard_config,
doctype: this.options.selected_doctype,
timespan: this.options.selected_timespan,
company: this.options.selected_company,
field: this.options.selected_filter_item,
limit: this.leaderboard_limit,
},
callback: (r) => {
let results = r.message || [];
let graph_items = results.slice(0, 10);
this.$graph_area.show().empty();
let args = {
data: {
datasets: [
{
values: graph_items.map(d => d.value)
}
],
labels: graph_items.map(d => d.name)
},
colors: ["light-green"],
format_tooltip_x: d => d[this.options.selected_filter_item],
type: "bar",
height: 140
};
new frappe.Chart(".leaderboard-graph", args);
notify(this, r);
frappe.call(
this.leaderboard_config[this.options.selected_doctype].method,
{
'from_date': this.get_from_date(),
'timespan': this.options.selected_timespan,
'company': this.options.selected_company,
'field': this.options.selected_filter_item,
'limit': this.leaderboard_limit,
}
).then(r => {
let results = r.message || [];
let graph_items = results.slice(0, 10);
this.$graph_area.show().empty();
let args = {
data: {
datasets: [
{
values: graph_items.map(d => d.value)
}
],
labels: graph_items.map(d => d.name)
},
colors: ["light-green"],
format_tooltip_x: d => d[this.options.selected_filter_item],
type: "bar",
height: 140
};
new frappe.Chart(".leaderboard-graph", args);
notify(this, r);
});
}
@ -359,4 +356,21 @@ class Leaderboard {
<span doctype-value="${item}">${ __(item) }</span></a>
</li>`);
}
get_from_date() {
let timespan = this.options.selected_timespan.toLowerCase();
let current_date = frappe.datetime.now_date();
let date = '';
if (timespan === "month") {
date = frappe.datetime.add_months(current_date, -1);
} else if (timespan === "quarter") {
date = frappe.datetime.add_months(current_date, -3);
} else if (timespan === "year") {
date = frappe.datetime.add_months(current_date, -12);
} else if (timespan === "week") {
date = frappe.datetime.add_days(current_date, -7);
}
return date;
}
}

View file

@ -13,31 +13,4 @@ def get_leaderboard_config():
for hook in leaderboard_hooks:
leaderboard_config.update(frappe.get_attr(hook)())
return leaderboard_config
@frappe.whitelist()
def get_leaderboards(leaderboard_config, doctype, timespan, company, field, limit):
limit = frappe.parse_json(limit)
leaderboard_config = frappe.parse_json(leaderboard_config)
from_date = get_from_date(timespan)
method = leaderboard_config[doctype]['method']
records = frappe.get_attr(method)(from_date, company, field, limit)
return records
def get_from_date(selected_timespan):
"""return string for ex:this week as date:string"""
days = months = years = 0
if "month" == selected_timespan.lower():
months = -1
elif "quarter" == selected_timespan.lower():
months = -3
elif "year" == selected_timespan.lower():
years = -1
elif "week" == selected_timespan.lower():
days = -7
else:
return ''
return add_to_date(None, years=years, months=months, days=days,
as_string=True, as_datetime=True)
return leaderboard_config