fix: call leaderboard methods directly from config
This commit is contained in:
parent
782f1cf098
commit
da8ad36cde
3 changed files with 50 additions and 62 deletions
|
|
@ -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'],
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Reference in a new issue