From c12f4bc0995ab9fe6c7cf542afb6addad6a3a8c4 Mon Sep 17 00:00:00 2001 From: Prssanna Desai Date: Tue, 18 Jun 2019 12:53:20 +0530 Subject: [PATCH 1/6] feat(Sidebar): Add group by to list sidebar --- frappe/desk/listview.py | 23 ++++- frappe/public/build.json | 1 + .../public/js/frappe/list/list_sidebar.html | 19 +++- frappe/public/js/frappe/list/list_sidebar.js | 99 +++++++++++++++++++ .../js/frappe/list/list_sidebar_group_by.html | 15 +++ 5 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 frappe/public/js/frappe/list/list_sidebar_group_by.html diff --git a/frappe/desk/listview.py b/frappe/desk/listview.py index f31aae401e..7bac07e357 100644 --- a/frappe/desk/listview.py +++ b/frappe/desk/listview.py @@ -49,4 +49,25 @@ def get_user_assignments_and_count(doctype, current_filters): count desc limit 50""".format(subquery_condition = subquery_condition), as_dict=True) - return todo_list \ No newline at end of file + return todo_list + +@frappe.whitelist() +def get_group_by_count(doctype, current_filters, field): + current_filters = json.loads(current_filters) + subquery= '' + if current_filters: + subquery = frappe.get_all(doctype, + filters=current_filters, return_query = True) + subquery = subquery[subquery.index('where'):subquery.index('order')] + + group_by_list = frappe.db.sql("""select `tab{doctype}`.{field} as name, count(*) as count + from + `tab{doctype}` + {subquery} + group by + `tab{doctype}`.{field} + order by + count desc + limit 50""".format(subquery= subquery, doctype = doctype, field = field), as_dict=True) + + return group_by_list diff --git a/frappe/public/build.json b/frappe/public/build.json index 203a642195..e36b29f9dd 100755 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -276,6 +276,7 @@ "public/js/frappe/list/list_sidebar.js", "public/js/frappe/list/list_sidebar.html", "public/js/frappe/list/list_sidebar_stat.html", + "public/js/frappe/list/list_sidebar_group_by.html", "public/js/frappe/list/list_view_permission_restrictions.html", "public/js/frappe/views/gantt/gantt_view.js", diff --git a/frappe/public/js/frappe/list/list_sidebar.html b/frappe/public/js/frappe/list/list_sidebar.html index c8c2239b03..09a58251a7 100644 --- a/frappe/public/js/frappe/list/list_sidebar.html +++ b/frappe/public/js/frappe/list/list_sidebar.html @@ -52,8 +52,15 @@ -
  • {{ __("Help") }}
  • + {% } %} + + + + `; - } + }; let html = this.group_by_fields.map(get_item_html).join(''); this.$wrapper.find('.list-group-by-fields').html(html); } @@ -91,7 +91,7 @@ frappe.views.ListGroupBy = class ListGroupBy { }); } - get_group_by_dropdown_fields() { + get_group_by_dropdown_fields() { let group_by_fields = []; let fields = this.list_view.meta.fields.filter((f)=> ["Select", "Link"].includes(f.fieldtype)); group_by_fields.push({ @@ -115,7 +115,7 @@ frappe.views.ListGroupBy = class ListGroupBy { doctype: this.doctype, current_filters: this.list_view.get_filters_for_args(), field: field, - } + }; return frappe.call('frappe.desk.listview.get_group_by_count', args).then((data) => { if(field === 'assigned_to') { let current_user = data.message.find(user => user.name === frappe.session.user); @@ -139,7 +139,7 @@ frappe.views.ListGroupBy = class ListGroupBy { ${name} ${field.count} `; - } + }; let standard_html = `