diff --git a/eps/eps/doctype/energy_point_log/energy_point_log.py b/eps/eps/doctype/energy_point_log/energy_point_log.py index 01c0b6e..b3e1fcc 100644 --- a/eps/eps/doctype/energy_point_log/energy_point_log.py +++ b/eps/eps/doctype/energy_point_log/energy_point_log.py @@ -361,23 +361,27 @@ def send_summary(timespan): # select only those users that have energy point email notifications enabled all_users = [ - user.email + user for user in get_enabled_system_users() - if is_email_notifcations_enabled(user.name) + if is_email_notifications_enabled_for_type(user.name, "Energy Point") ] - frappe.sendmail( - subject=f"{timespan} energy points summary", - recipients=all_users, - template="energy_points_summary", - args={ - "top_performer": user_points[0], - "top_reviewer": max(user_points, key=lambda x: x["given_points"]), - "standings": user_points[:10], # top 10 - "footer_message": get_footer_message(timespan).format(from_date, to_date), - }, - with_container=1, - ) + for user in all_users: + frappe.set_user_lang(user.name) + frappe.sendmail( + subject=_("{0} energy points summary").format(_(timespan)), + recipients=user.email, + template="energy_points_summary", + args={ + "top_performer": user_points[0], + "top_reviewer": max(user_points, key=lambda x: x["given_points"]), + "standings": user_points[:10], # top 10 + "footer_message": get_footer_message(timespan).format(from_date, to_date), + }, + with_container=1, + ) + + frappe.set_user_lang(frappe.session.user) def get_footer_message(timespan): @@ -386,5 +390,6 @@ def get_footer_message(timespan): else: return _("Stats based on last week's performance (from {0} to {1})") + def delete_energy_point_logs_for_user(user): - frappe.db.delete("Energy Point Log", {"user": user.name}) \ No newline at end of file + frappe.db.delete("Energy Point Log", {"user": user.name}) \ No newline at end of file diff --git a/eps/eps/doctype/energy_point_log/energy_point_log_list.js b/eps/eps/doctype/energy_point_log/energy_point_log_list.js index d2fcd3d..8df255e 100644 --- a/eps/eps/doctype/energy_point_log/energy_point_log_list.js +++ b/eps/eps/doctype/energy_point_log/energy_point_log_list.js @@ -7,7 +7,7 @@ frappe.listview_settings["Energy Point Log"] = { Criticism: "red", Auto: "blue", Revert: "orange", - Review: "grey", + Review: "gray", }; return [__(doc.type), colors[doc.type], "type,=," + doc.type]; }, diff --git a/eps/eps/leaderboard.py b/eps/eps/leaderboard.py index 2818262..824facb 100644 --- a/eps/eps/leaderboard.py +++ b/eps/eps/leaderboard.py @@ -5,7 +5,7 @@ def get_leaderboards(): return { "User": { - "fields": ["points"], + "fields": [{"fieldname": "points", "label": _("Points")}], "method": "eps.eps.leaderboard.get_energy_point_leaderboard", "company_disabled": 1, "icon": "users", diff --git a/eps/eps/page/leaderboard/leaderboard.css b/eps/eps/page/leaderboard/leaderboard.css index d15b4ff..c38010b 100644 --- a/eps/eps/page/leaderboard/leaderboard.css +++ b/eps/eps/page/leaderboard/leaderboard.css @@ -55,6 +55,16 @@ max-width: 100px; } +.leaderboard-sidebar .desk-sidebar-item.active { + background-color: white; + border-radius: 5px; + box-shadow: var(--shadow-sm); +} + +.leaderboard-sidebar .nav-link { + padding: 0.5rem; +} + .leaderboard .result { border-top: 1px solid var(--border-color); } diff --git a/eps/eps/page/leaderboard/leaderboard.js b/eps/eps/page/leaderboard/leaderboard.js index 34bd06a..8751b69 100644 --- a/eps/eps/page/leaderboard/leaderboard.js +++ b/eps/eps/page/leaderboard/leaderboard.js @@ -41,39 +41,34 @@ class Leaderboard { this.filters[doctype] = this.leaderboard_config[doctype].fields.map( (field) => { if (typeof field === "object") { - return field.label || field.fieldname; + return field; } - return field; + return { fieldname: field, label: __(field) }; } ); } - - // For translation. Do not remove this - // __("This Week"), __("This Month"), __("This Quarter"), __("This Year"), - // __("Last Week"), __("Last Month"), __("Last Quarter"), __("Last Year"), - // __("All Time"), __("Select From Date") this.timespans = [ - "This Week", - "This Month", - "This Quarter", - "This Year", - "Last Week", - "Last Month", - "Last Quarter", - "Last Year", - "All Time", - "Select Date Range", + { label: __("This Week"), value: "This Week" }, + { label: __("This Month"), value: "This Month" }, + { label: __("This Quarter"), value: "This Quarter" }, + { label: __("This Year"), value: "This Year" }, + { label: __("Last Week"), value: "Last Week" }, + { label: __("Last Month"), value: "Last Month" }, + { label: __("Last Quarter"), value: "Last Quarter" }, + { label: __("Last Year"), value: "Last Year" }, + { label: __("All Time"), value: "All Time" }, + { label: __("Select Date Range"), value: "Select Date Range" }, ]; // for saving current selected filters const _initial_doctype = frappe.get_route()[1] || this.doctypes[0]; - const _initial_timespan = this.timespans[0]; + const _initial_timespan = this.timespans[0].value; const _initial_filter = this.filters[_initial_doctype]; this.options = { selected_doctype: _initial_doctype, selected_filter: _initial_filter, - selected_filter_item: _initial_filter[0], + selected_filter_item: _initial_filter[0].fieldname, selected_timespan: _initial_timespan, }; @@ -83,7 +78,7 @@ class Leaderboard { } make() { - this.$container = $(`
+ this.$container = $(`
`).appendTo(this.page.main); @@ -119,18 +114,13 @@ class Leaderboard { }, }); - this.timespan_select = this.page.add_select( - __("Timespan"), - this.timespans.map((d) => { - return { label: __(d), value: d }; - }) - ); + this.timespan_select = this.page.add_select(__("Timespan"), this.timespans); this.create_date_range_field(); this.type_select = this.page.add_select( __("Field"), this.options.selected_filter.map((d) => { - return { label: __(frappe.model.unscrub(d)), value: d }; + return { label: d.label, value: d.fieldname }; }) ); @@ -140,8 +130,8 @@ class Leaderboard { this.date_range_field.show(); } else { this.date_range_field.hide(); + this.make_request(); } - this.make_request(); }); this.type_select.on("change", (e) => { @@ -186,17 +176,21 @@ class Leaderboard { ); this.options.selected_doctype = doctype; this.options.selected_filter = this.filters[doctype]; - this.options.selected_filter_item = this.filters[doctype][0]; + this.options.selected_filter_item = this.filters[doctype][0].fieldname; this.type_select.empty().add_options( this.options.selected_filter.map((d) => { - return { label: __(frappe.model.unscrub(d)), value: d }; + return { label: d.label, value: d.fieldname }; }) ); if (this.leaderboard_config[this.options.selected_doctype].company_disabled) { - $(this.parent).find("[data-original-title=Company]").hide(); + $(this.parent) + .find(`[data-original-title=${__("Company")}]`) + .hide(); } else { - $(this.parent).find("[data-original-title=Company]").show(); + $(this.parent) + .find(`[data-original-title=${__("Company")}]`) + .show(); } this.$sidebar_list.find("li").removeClass("active selected"); @@ -279,7 +273,7 @@ class Leaderboard { frappe.utils.setup_search($(me.parent), ".list-item-container", ".list-id"); } else { me.$graph_area.hide(); - me.message = __("No Items Found"); + me.message = __("No items found"); me.$container.find(".leaderboard-list").html(me.render_list_view()); } } @@ -300,11 +294,11 @@ class Leaderboard { } render_list_header() { - const _selected_filter = this.options.selected_filter.map((i) => frappe.model.unscrub(i)); + const _selected_filter = this.options.selected_filter.map((i) => i.label); const fields = ["rank", "name", this.options.selected_filter_item]; const filters = fields .map((filter) => { - const col = __(frappe.model.unscrub(filter)); + const col = filter.label || __(frappe.model.unscrub(filter)); return `
diff --git a/eps/eps/page/user_profile/user_profile.css b/eps/eps/page/user_profile/user_profile.css index 9bcfc33..764767f 100644 --- a/eps/eps/page/user_profile/user_profile.css +++ b/eps/eps/page/user_profile/user_profile.css @@ -26,5 +26,6 @@ } .recent-activity { + padding: var(--padding-md); padding-bottom: 60px; } \ No newline at end of file diff --git a/eps/eps/page/user_profile/user_profile.html b/eps/eps/page/user_profile/user_profile.html index f134441..addac5f 100644 --- a/eps/eps/page/user_profile/user_profile.html +++ b/eps/eps/page/user_profile/user_profile.html @@ -35,7 +35,7 @@

{%=__("Energy Points") %}

-
+
{%=__("Recent Activity") %}
diff --git a/eps/eps/page/user_profile/user_profile_controller.js b/eps/eps/page/user_profile/user_profile_controller.js index b5d2b02..6f3bf15 100644 --- a/eps/eps/page/user_profile/user_profile_controller.js +++ b/eps/eps/page/user_profile/user_profile_controller.js @@ -40,7 +40,7 @@ class UserProfile { this.render_points_and_rank(); this.render_heatmap(); this.render_line_chart(); - this.render_percentage_chart("type", "Type Distribution"); + this.render_percentage_chart("type", __("Type Distribution")); this.create_percentage_chart_filters(); this.setup_user_activity_timeline(); } @@ -62,6 +62,7 @@ class UserProfile { fieldname: "user", options: "User", label: __("User"), + reqd: 1, }, ], primary_action_label: __("Go"), @@ -102,7 +103,6 @@ class UserProfile { ["Energy Point Log", "user", "=", this.user_id, false], ["Energy Point Log", "type", "!=", "Review", false], ]; - this.line_chart_config = { timespan: "Last Month", time_interval: "Daily", @@ -126,6 +126,7 @@ class UserProfile { axisOptions: { xIsSeries: 1, }, + tooltipOptions: {}, }); this.update_line_chart_data(); this.create_line_chart_filters(); @@ -147,7 +148,7 @@ class UserProfile { render_percentage_chart(field, title) { frappe .xcall( - "eps.eps.page.user_profile.user_profile.get_energy_points_percentage_chart_data", + "frappe.desk.page.user_profile.user_profile.get_energy_points_percentage_chart_data", { user: this.user_id, field: field, @@ -188,8 +189,14 @@ class UserProfile { create_line_chart_filters() { let filters = [ { - label: "All", - options: ["All", "Auto", "Criticism", "Appreciation", "Revert"], + label: __("All"), + options: [ + { label: __("All"), value: "All" }, + { label: __("Auto"), value: "Auto" }, + { label: __("Criticism"), value: "Criticism" }, + { label: __("Appreciation"), value: "Appreciation" }, + { label: __("Revert"), value: "Revert" }, + ], action: (selected_item) => { if (selected_item === "All") { this.line_chart_filters = [ @@ -209,16 +216,25 @@ class UserProfile { }, }, { - label: "Last Month", - options: ["Last Week", "Last Month", "Last Quarter", "Last Year"], + label: __("Last Month"), + options: [ + { label: __("Last Week"), value: "Last Week" }, + { label: __("Last Month"), value: "Last Month" }, + { label: __("Last Quarter"), value: "Last Quarter" }, + { label: __("Last Year"), value: "Last Year" }, + ], action: (selected_item) => { this.line_chart_config.timespan = selected_item; this.update_line_chart_data(); }, }, { - label: "Daily", - options: ["Daily", "Weekly", "Monthly"], + label: __("Daily"), + options: [ + { label: __("Daily"), value: "Daily" }, + { label: __("Weekly"), value: "Weekly" }, + { label: __("Monthly"), value: "Monthly" }, + ], action: (selected_item) => { this.line_chart_config.time_interval = selected_item; this.update_line_chart_data(); @@ -236,11 +252,15 @@ class UserProfile { create_percentage_chart_filters() { let filters = [ { - label: "Type", - options: ["Type", "Reference Doctype", "Rule"], + label: __("Type"), + options: [ + { label: __("Type"), value: "Type" }, + { label: __("Reference Doctype"), value: "Reference Doctype" }, + { label: __("Rule"), value: "Rule" }, + ], fieldnames: ["type", "reference_doctype", "rule"], action: (selected_item, fieldname) => { - let title = selected_item + " Distribution"; + let title = __("{0} Distribution", [__(selected_item)]); this.render_percentage_chart(fieldname, title); }, }, @@ -274,12 +294,12 @@ class UserProfile { { fieldtype: "Attach Image", fieldname: "user_image", - label: "Profile Image", + label: __("Profile Image"), }, { fieldtype: "Data", fieldname: "interest", - label: "Interests", + label: __("Interests"), }, { fieldtype: "Column Break", @@ -287,16 +307,16 @@ class UserProfile { { fieldtype: "Data", fieldname: "location", - label: "Location", + label: __("Location"), }, { fieldtype: "Section Break", - fieldname: "Interest", + fieldname: __("Interest"), }, { fieldtype: "Small Text", fieldname: "bio", - label: "Bio", + label: __("Bio"), }, ], primary_action: (values) => { @@ -388,12 +408,12 @@ class UserProfile { const _get_stat_dom = (value, label, icon) => { return `
- ${frappe.utils.icon(icon, "lg", "no-stroke")} -
-
${value}
-
${label}
-
-
`; + ${frappe.utils.icon(icon, "lg", "no-stroke")} +
+
${value}
+
${label}
+
+
`; }; this.get_user_rank().then(() => { @@ -426,7 +446,7 @@ class UserProfile { } } -class UserProfileTimeline extends frappe.ui.BaseTimeline{ +class UserProfileTimeline extends frappe.ui.BaseTimeline { make() { super.make(); this.activity_start = 0; diff --git a/eps/public/js/review.html b/eps/public/js/review.html index 2709bea..c121a1e 100644 --- a/eps/public/js/review.html +++ b/eps/public/js/review.html @@ -1,7 +1,8 @@ `, content: () => { return `