From e5eade2fa179d314e20f53d59a9812859269f90b Mon Sep 17 00:00:00 2001 From: Prssanna Desai Date: Wed, 13 Mar 2019 00:05:41 +0530 Subject: [PATCH] feat(Sidebar): Add "Assigned To" Dropdown --- frappe/desk/doctype/todo/todo_list.js | 11 ++----- frappe/desk/listview.py | 7 +++++ .../public/js/frappe/list/list_sidebar.html | 8 +++-- frappe/public/js/frappe/list/list_sidebar.js | 31 ++++++++++++++++--- 4 files changed, 42 insertions(+), 15 deletions(-) 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") %} +
  • + +
  • {% 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);