From 15966a78a69c42433e5b32ec52474a30e1508e2b Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Tue, 28 Apr 2026 13:32:46 +0000 Subject: [PATCH 1/3] fix(report): prevent standard report creation when developer mode is off --- frappe/core/doctype/report/report.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 6c0d9d97bc..6dc9bb8538 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -77,6 +77,9 @@ class Report(Document): if frappe.session.user != "Administrator": frappe.throw(_("Only Administrator can save a standard report. Please rename and save.")) + if not cint(getattr(frappe.local.conf, "developer_mode", 0)): + frappe.throw(_("Standard reports can only be created in developer mode.")) + if self.report_type == "Report Builder": self.update_report_json() From acb342efadf98af42b20f892aced5e247c2f0b3c Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 29 Apr 2026 09:37:01 +0000 Subject: [PATCH 2/3] refactor: add validate_standard_report_developer_mode method Co-authored-by: Ejaaz Khan --- frappe/core/doctype/report/report.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 6dc9bb8538..430b80ac51 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -77,8 +77,7 @@ class Report(Document): if frappe.session.user != "Administrator": frappe.throw(_("Only Administrator can save a standard report. Please rename and save.")) - if not cint(getattr(frappe.local.conf, "developer_mode", 0)): - frappe.throw(_("Standard reports can only be created in developer mode.")) + self.validate_standard_report_developer_mode() if self.report_type == "Report Builder": self.update_report_json() @@ -415,6 +414,10 @@ class Report(Document): return data + def validate_standard_report_developer_mode(self): + if not cint(frappe.conf.developer_mode): + frappe.throw(_("Standard reports can only be created in developer mode.")) + def validate_default_print_format(self): pf = frappe.db.get_value( "Print Format", From a1383ed98f5ac98dfb2684b7c3851ee0332b51aa Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 29 Apr 2026 10:23:08 +0000 Subject: [PATCH 3/3] refactor: extract standard report validation into dedicated method Co-authored-by: Ejaaz Khan --- frappe/core/doctype/report/report.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 430b80ac51..5b19c041f8 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -74,10 +74,7 @@ class Report(Document): frappe.throw(_("Cannot edit a standard report. Please duplicate and create a new report")) if self.is_standard == "Yes": - if frappe.session.user != "Administrator": - frappe.throw(_("Only Administrator can save a standard report. Please rename and save.")) - - self.validate_standard_report_developer_mode() + self.validate_standard_report() if self.report_type == "Report Builder": self.update_report_json() @@ -414,7 +411,10 @@ class Report(Document): return data - def validate_standard_report_developer_mode(self): + def validate_standard_report(self): + if frappe.session.user != "Administrator": + frappe.throw(_("Only Administrator can save a standard report. Please rename and save.")) + if not cint(frappe.conf.developer_mode): frappe.throw(_("Standard reports can only be created in developer mode."))