From bb3de84ffe6f2d01ebff4d3201d0a432649fb936 Mon Sep 17 00:00:00 2001 From: Prssanna Desai Date: Tue, 26 Mar 2019 14:41:00 +0530 Subject: [PATCH] fix(group-by): Make a new class for group by control --- frappe/public/build.json | 5 +- .../group_by/group_by.html} | 0 .../public/js/frappe/ui/group_by/group_by.js | 137 ++++++++++++++++++ .../js/frappe/views/reports/report_view.js | 117 +-------------- 4 files changed, 146 insertions(+), 113 deletions(-) rename frappe/public/js/frappe/{views/reports/groupby.html => ui/group_by/group_by.html} (100%) create mode 100644 frappe/public/js/frappe/ui/group_by/group_by.js diff --git a/frappe/public/build.json b/frappe/public/build.json index 8dd323528d..e670e3f8e3 100755 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -357,11 +357,12 @@ "public/js/frappe/views/reports/report_factory.js", "public/js/frappe/views/reports/report_view.js", "public/js/frappe/views/reports/reportview_footer.html", - "public/js/frappe/views/reports/groupby.html", "public/js/frappe/views/reports/query_report.js", "public/js/frappe/views/reports/grid_report.js", "public/js/frappe/views/reports/print_grid.html", - "public/js/frappe/views/reports/print_tree.html" + "public/js/frappe/views/reports/print_tree.html", + "public/js/frappe/ui/group_by/group_by.html", + "public/js/frappe/ui/group_by/group_by.js" ], "js/web_form.min.js": [ "public/js/frappe/misc/datetime.js", diff --git a/frappe/public/js/frappe/views/reports/groupby.html b/frappe/public/js/frappe/ui/group_by/group_by.html similarity index 100% rename from frappe/public/js/frappe/views/reports/groupby.html rename to frappe/public/js/frappe/ui/group_by/group_by.html diff --git a/frappe/public/js/frappe/ui/group_by/group_by.js b/frappe/public/js/frappe/ui/group_by/group_by.js new file mode 100644 index 0000000000..81b6a4914b --- /dev/null +++ b/frappe/public/js/frappe/ui/group_by/group_by.js @@ -0,0 +1,137 @@ + +frappe.provide('frappe.views'); + +frappe.ui.GroupBy = class { + + constructor(report_view) { + this.report_view = report_view; + this.page = report_view.page; + this.doctype = report_view.doctype; + this.setup_group_by_area(); + } + + setup_group_by_area() { + + this.make_group_by_button(); + this.report_view.setup_columns(); + let sql_aggregate_function = [{name:'count', label: 'Count'}, {name:'sum', label: 'Sum'}, {name:'avg', label:'Average'}]; + this.groupby_edit_area = $(frappe.render_template("group_by", { + groupby_conditions: this.get_group_by_fields(), + aggregate_function_conditions: sql_aggregate_function, + })); + $(".aggregate-function").val("count"); + this.page.wrapper.find(".frappe-list").append( + this.groupby_edit_area); + + //Set aggregate on options as numeric fields if function is sum or average + $('.aggregate-function').on('change', () => { + this.report_view.meta.fields.forEach((field) => { + let fn = $('.aggregate-function option:selected').val(); + if(fn === 'sum' || fn === 'avg') { + if(frappe.model.is_numeric_field(field.fieldtype)) { + $('.aggregate-on') + .append($('