diff --git a/frappe/desk/doctype/todo/todo_list.js b/frappe/desk/doctype/todo/todo_list.js
index 47cb7bd1f6..6200e85dca 100644
--- a/frappe/desk/doctype/todo/todo_list.js
+++ b/frappe/desk/doctype/todo/todo_list.js
@@ -10,21 +10,14 @@ frappe.listview_settings['ToDo'] = {
},
hide_name_column: true,
refresh: function(me) {
- // override assigned to me by owner
if (me.todo_sidebar_setup) return;
- me.page.sidebar.find(".assigned-to-me a").off("click").on("click", function() {
- me.filter_area.remove("assigned_by");
- me.filter_area.add([[me.doctype, "owner", '=', frappe.session.user]]);
- });
-
// add assigned by me
me.page.add_sidebar_item(__("Assigned By Me"), function() {
- me.filter_area.remove("owner");
me.filter_area.add([[me.doctype, "assigned_by", '=', frappe.session.user]]);
- }, ".assigned-to-me");
+ }, ('.list-link[data-view="Kanban"]'));
me.todo_sidebar_setup = true;
},
add_fields: ["reference_type", "reference_name"],
-}
+}
\ No newline at end of file
diff --git a/frappe/desk/listview.py b/frappe/desk/listview.py
index 8d439f228a..a05a3e7f04 100644
--- a/frappe/desk/listview.py
+++ b/frappe/desk/listview.py
@@ -24,3 +24,10 @@ def set_list_settings(doctype, values):
frappe.clear_messages()
doc.update(json.loads(values))
doc.save()
+
+@frappe.whitelist()
+def get_user_assignments_and_count():
+ user_list = frappe.get_list("User", filters={"user_type": "System User"})
+ assignment_data = sorted([{"count":frappe.db.count('ToDo', filters = {'reference_type': 'Issue', 'owner': user['name'], 'status': 'Open'}),
+ "name": user['name']} for user in user_list], key=lambda k: k['count'], reverse = True)
+ return assignment_data
\ No newline at end of file
diff --git a/frappe/public/js/frappe/list/list_sidebar.html b/frappe/public/js/frappe/list/list_sidebar.html
index 48ed21765b..619fa66277 100644
--- a/frappe/public/js/frappe/list/list_sidebar.html
+++ b/frappe/public/js/frappe/list/list_sidebar.html
@@ -45,8 +45,12 @@
-
- {%= __("Assigned To Me") %}
+
+
+ {%= __("Assigned To") %}
+
+
{% if(frappe.help.has_help(doctype)) { %}
{{ __("Help") }}
diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js
index 20f1f030d4..9f5ebfb2a7 100644
--- a/frappe/public/js/frappe/list/list_sidebar.js
+++ b/frappe/public/js/frappe/list/list_sidebar.js
@@ -26,7 +26,7 @@ frappe.views.ListSidebar = class ListSidebar {
this.setup_reports();
this.setup_list_filter();
- this.setup_assigned_to_me();
+ this.setup_assigned_to();
this.setup_views();
this.setup_kanban_boards();
this.setup_calendar_view();
@@ -216,12 +216,35 @@ frappe.views.ListSidebar = class ListSidebar {
});
}
- setup_assigned_to_me() {
- this.page.sidebar.find(".assigned-to-me a").on("click", () => {
- this.list_view.filter_area.add(this.list_view.doctype, "_assign", "like", `%${frappe.session.user}%`);
+ setup_assigned_to() {
+ let dropdown = this.page.sidebar.find('.assigned-dropdown');
+ if(this.doctype === 'ToDo') {
+ $('.assigned-to').remove();
+ }
+ frappe.call('frappe.desk.listview.get_user_assignments_and_count').then((data) => {
+ let current_user_count = data.message.find(user => user.name === frappe.session.user).count;
+ this.get_html_for_assigned(frappe.session.user, current_user_count).appendTo(dropdown);
+ let user_list = data.message.filter(user => !['Guest', frappe.session.user, 'Administrator'].includes(user.name));
+ user_list.forEach((user) => {
+ this.get_html_for_assigned(user.name, user.count).appendTo(dropdown);
+ });
+ $(".assigned-dropdown li a").on("click", (e) => {
+ let assigned_user = $(e.currentTarget).find($('.assigned-user')).text();
+ if(assigned_user === 'Me') assigned_user = frappe.session.user;
+ this.list_view.filter_area.remove('_assign');
+ this.list_view.filter_area.add(this.list_view.doctype, "_assign", "like", `%${assigned_user}%`);
+ });
});
}
+ get_html_for_assigned(name, count) {
+ if (name === frappe.session.user) name='Me';
+ if (count > 99) count='99+';
+ let html = $(''
+ + name + '' + count + '');
+ return html;
+ }
+
setup_upgrade_box() {
let upgrade_list = $(``).appendTo(this.sidebar);