diff --git a/frappe/desk/leaderboard.py b/frappe/desk/leaderboard.py index 4a87b6a5d1..61c7b8c7a8 100644 --- a/frappe/desk/leaderboard.py +++ b/frappe/desk/leaderboard.py @@ -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'], diff --git a/frappe/desk/page/leaderboard/leaderboard.js b/frappe/desk/page/leaderboard/leaderboard.js index d5c5f12150..2d70bc1c4e 100644 --- a/frappe/desk/page/leaderboard/leaderboard.js +++ b/frappe/desk/page/leaderboard/leaderboard.js @@ -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 { ${ __(item) } `); } + + 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; + } + } diff --git a/frappe/desk/page/leaderboard/leaderboard.py b/frappe/desk/page/leaderboard/leaderboard.py index ad8b31ac4a..7bb078f14e 100644 --- a/frappe/desk/page/leaderboard/leaderboard.py +++ b/frappe/desk/page/leaderboard/leaderboard.py @@ -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) \ No newline at end of file + return leaderboard_config \ No newline at end of file