From ad2d651e45e2bbbc628ee91f0dfc3968ec3177de Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 28 Feb 2023 11:43:20 +0530 Subject: [PATCH] feat: Add Group By option to Website Analytics report - Also fixed order_by of main query --- .../report/website_analytics/website_analytics.js | 11 +++++++++++ .../report/website_analytics/website_analytics.py | 11 +++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frappe/website/report/website_analytics/website_analytics.js b/frappe/website/report/website_analytics/website_analytics.js index 8c13f684e1..a3cfdde0b8 100644 --- a/frappe/website/report/website_analytics/website_analytics.js +++ b/frappe/website/report/website_analytics/website_analytics.js @@ -28,5 +28,16 @@ frappe.query_reports["Website Analytics"] = { default: "Daily", reqd: 1, }, + { + fieldname: "group_by", + label: __("Group By"), + fieldtype: "Select", + options: [ + { value: "path", label: __("Path") }, + { value: "browser", label: __("Browser") }, + { value: "referrer", label: __("Referrer") }, + ], + default: "path", + }, ], }; diff --git a/frappe/website/report/website_analytics/website_analytics.py b/frappe/website/report/website_analytics/website_analytics.py index 7e2e891081..c912d9ede5 100644 --- a/frappe/website/report/website_analytics/website_analytics.py +++ b/frappe/website/report/website_analytics/website_analytics.py @@ -28,6 +28,7 @@ class WebsiteAnalytics: self.filters.to_date = frappe.utils.add_days(self.filters.to_date, 1) self.query_filters = {"creation": ["between", [self.filters.from_date, self.filters.to_date]]} + self.group_by = self.filters.group_by def run(self): columns = self.get_columns() @@ -38,8 +39,10 @@ class WebsiteAnalytics: return columns, data[:250], None, chart, summary def get_columns(self): + meta = frappe.get_meta("Web Page View") + group_by = meta.get_field(self.group_by) return [ - {"fieldname": "path", "label": "Page", "fieldtype": "Data", "width": 300}, + {"fieldname": group_by.fieldname, "label": group_by.label, "fieldtype": "Data", "width": 300}, {"fieldname": "count", "label": "Page Views", "fieldtype": "Int", "width": 150}, {"fieldname": "unique_count", "label": "Unique Visitors", "fieldtype": "Int", "width": 150}, ] @@ -52,12 +55,12 @@ class WebsiteAnalytics: return ( frappe.qb.from_(WebPageView) - .select("path", count_all, count_is_unique) + .select(self.group_by, count_all, count_is_unique) .where( Coalesce(WebPageView.creation, "0001-01-01")[self.filters.from_date : self.filters.to_date] ) - .groupby(WebPageView.path) - .orderby("count", Order=frappe.qb.desc) + .groupby(self.group_by) + .orderby("count", order=frappe.qb.desc) ).run() def _get_query_for_mariadb(self):