Skip to content

Commit

Permalink
fix: allow filter values to be saved in custom report
Browse files Browse the repository at this point in the history
  • Loading branch information
anandbaburajan committed Apr 17, 2023
1 parent 0335690 commit 295d2b8
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 10 deletions.
6 changes: 5 additions & 1 deletion frappe/core/doctype/report/report.json
Original file line number Diff line number Diff line change
Expand Up @@ -157,11 +157,13 @@
{
"collapsible": 1,
"collapsible_depends_on": "filters",
"depends_on": "eval:doc.report_type != \"Custom Report\"",
"fieldname": "filters_section",
"fieldtype": "Section Break",
"label": "Filters"
},
{
"depends_on": "eval:doc.report_type != \"Custom Report\"",
"fieldname": "filters",
"fieldtype": "Table",
"label": "Filters",
Expand All @@ -170,11 +172,13 @@
{
"collapsible": 1,
"collapsible_depends_on": "columns",
"depends_on": "eval:doc.report_type != \"Custom Report\"",
"fieldname": "columns_section",
"fieldtype": "Section Break",
"label": "Columns"
},
{
"depends_on": "eval:doc.report_type != \"Custom Report\"",
"fieldname": "columns",
"fieldtype": "Table",
"label": "Columns",
Expand All @@ -191,7 +195,7 @@
"idx": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2022-09-15 13:37:24.531848",
"modified": "2023-04-07 18:18:11.782178",
"modified_by": "Administrator",
"module": "Core",
"name": "Report",
Expand Down
2 changes: 1 addition & 1 deletion frappe/core/doctype/report/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def get_data(

return columns, result

def run_query_report(self, filters, user, ignore_prepared_report=False):
def run_query_report(self, filters=None, user=None, ignore_prepared_report=False):
columns, result = [], []
data = frappe.desk.query_report.run(
self.name, filters=filters, user=user, ignore_prepared_report=ignore_prepared_report
Expand Down
5 changes: 2 additions & 3 deletions frappe/core/doctype/report/test_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,10 @@ def test_custom_report(self):
}
]
),
json.dumps({"user": "Administrator", "doctype": "User"}),
)
custom_report = frappe.get_doc("Report", custom_report_name)
columns, result = custom_report.run_query_report(
filters={"user": "Administrator", "doctype": "User"}, user=frappe.session.user
)
columns, result = custom_report.run_query_report(user=frappe.session.user)

self.assertListEqual(["email"], [column.get("fieldname") for column in columns])
admin_dict = frappe.core.utils.find(result, lambda d: d["name"] == "Administrator")
Expand Down
17 changes: 14 additions & 3 deletions frappe/desk/query_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@
get_html_format,
get_url_to_form,
gzip_decompress,
sbool,
)


def get_report_doc(report_name):
doc = frappe.get_doc("Report", report_name)
doc.custom_columns = []
doc.custom_filters = []

if doc.report_type == "Custom Report":
custom_report_doc = doc
Expand All @@ -37,7 +39,8 @@ def get_report_doc(report_name):
if custom_report_doc.json:
data = json.loads(custom_report_doc.json)
if data:
doc.custom_columns = data["columns"]
doc.custom_columns = data.get("columns")
doc.custom_filters = data.get("filters")
doc.is_custom_report = True

if not doc.is_permitted():
Expand Down Expand Up @@ -220,6 +223,7 @@ def run(
custom_columns=None,
is_tree=False,
parent_field=None,
are_default_filters=True,
):
report = get_report_doc(report_name)
if not user:
Expand All @@ -232,6 +236,9 @@ def run(

result = None

if sbool(are_default_filters) and report.custom_filters:
filters = report.custom_filters

if (
report.prepared_report
and not report.disable_prepared_report
Expand All @@ -253,6 +260,9 @@ def run(

result["add_total_row"] = report.add_total_row and not result.get("skip_total_row", False)

if sbool(are_default_filters) and report.custom_filters:
result["custom_filters"] = report.custom_filters

return result


Expand Down Expand Up @@ -526,7 +536,7 @@ def get_data_for_custom_report(columns):


@frappe.whitelist()
def save_report(reference_report, report_name, columns):
def save_report(reference_report, report_name, columns, filters):
report_doc = get_report_doc(reference_report)

docname = frappe.db.exists(
Expand All @@ -542,6 +552,7 @@ def save_report(reference_report, report_name, columns):
report = frappe.get_doc("Report", docname)
existing_jd = json.loads(report.json)
existing_jd["columns"] = json.loads(columns)
existing_jd["filters"] = json.loads(filters)
report.update({"json": json.dumps(existing_jd, separators=(",", ":"))})
report.save()
frappe.msgprint(_("Report updated successfully"))
Expand All @@ -552,7 +563,7 @@ def save_report(reference_report, report_name, columns):
{
"doctype": "Report",
"report_name": report_name,
"json": f'{{"columns":{columns}}}',
"json": f'{{"columns":{columns},"filters":{filters}}}',
"ref_doctype": report_doc.ref_doctype,
"is_standard": "No",
"report_type": "Custom Report",
Expand Down
26 changes: 24 additions & 2 deletions frappe/public/js/frappe/views/reports/query_report.js
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
if (this.prepared_report) {
this.reset_report_view();
} else if (!this._no_refresh) {
this.refresh();
this.refresh(true);
}
}
};
Expand Down Expand Up @@ -595,10 +595,25 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
this.page.clear_fields();
}

refresh() {
refresh(have_filters_changed) {
this.toggle_message(true);
this.toggle_report(false);
let filters = this.get_filter_values(true);

// for custom reports,
// are_default_filters is true if the filters haven't been modified and for all filters,
// the filter value is the default value or there's no default value for the filter and the current value is empty.
// are_default_filters is false otherwise.

let are_default_filters = this.filters
.map((filter) => {
return (
!have_filters_changed &&
(filter.default === filter.value || (!filter.default && !filter.value))
);
})
.every((res) => res === true);

this.show_loading_screen();

// only one refresh at a time
Expand All @@ -621,6 +636,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
filters: filters,
is_tree: this.report_settings.tree,
parent_field: this.report_settings.parent_field,
are_default_filters: are_default_filters,
},
callback: resolve,
always: () => this.page.btn_secondary.prop("disabled", false),
Expand All @@ -633,6 +649,11 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {

this.execution_time = data.execution_time || 0.1;

if (data.custom_filters) {
this.set_filters(data.custom_filters);
this.previous_filters = data.custom_filters;
}

if (data.prepared_report) {
this.prepared_report = true;
this.prepared_report_document = data.doc;
Expand Down Expand Up @@ -1725,6 +1746,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
reference_report: this.report_name,
report_name: values.report_name,
columns: this.get_visible_columns(),
filters: this.get_filter_values(),
},
callback: function (r) {
this.show_save = false;
Expand Down

0 comments on commit 295d2b8

Please sign in to comment.