Merge pull request #7067 from prssanna/assigned-to

feat(Sidebar): Add "Assigned To" Dropdown
This commit is contained in:
Rushabh Mehta 2019-03-14 10:47:14 +05:30 committed by GitHub
commit 2067792264
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 42 additions and 15 deletions

View file

@ -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"],
}
}

View file

@ -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

View file

@ -45,8 +45,12 @@
</ul>
</div>
</li>
<li class="assigned-to-me">
<a>{%= __("Assigned To Me") %}</a>
<li class="assigned-to">
<a class = "dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{%= __("Assigned To") %} <span class="caret"></span>
</a>
<ul class="dropdown-menu assigned-dropdown" style="max-height: 300px; overflow-y: auto;">
</ul>
</li>
{% if(frappe.help.has_help(doctype)) { %}
<li><a class="help-link" data-doctype="{{ doctype }}">{{ __("Help") }}</a></li>

View file

@ -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 = $('<li class="assigned"><a class="badge-hover" role="assigned-item"><span class="assigned-user">'
+ name + '</span><span class="badge pull-right" style="position:relative">' + count + '</span></a></li>');
return html;
}
setup_upgrade_box() {
let upgrade_list = $(`<ul class="list-unstyled sidebar-menu"></ul>`).appendTo(this.sidebar);