Merge pull request #31469 from sokumon/translate-report-data

feat: translate report data
This commit is contained in:
Soham Kulkarni 2025-03-04 16:22:59 +05:30 committed by GitHub
commit f423f8bd66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 3 deletions

View file

@ -111,6 +111,10 @@ def generate_report_result(
if cint(report.add_total_row) and result and not skip_total_row:
result = add_total_row(result, columns, is_tree=is_tree, parent_field=parent_field)
if isinstance(filters, dict) and filters.get("translate_data"):
total_row = cint(report.add_total_row) and result and not skip_total_row
result = translate_report_data(result, total_row)
return {
"result": result,
"columns": columns,
@ -809,3 +813,11 @@ def validate_filters_permissions(report_name, filters=None, user=None):
linked_doctype, filters[field.fieldname]
)
)
def translate_report_data(data, total_row):
for d in data[:-1] if total_row else data:
for field, value in d.items():
if isinstance(value, str):
d[field] = _(value)
return data

View file

@ -173,6 +173,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
frappe.run_serially([
() => this.get_report_doc(),
() => this.get_report_settings(),
() => this.add_translate_data_checkbox(),
() => this.setup_progress_bar(),
() => this.setup_page_head(),
() => this.refresh_report(route_options),
@ -529,7 +530,6 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
const { filters = [] } = this.report_settings;
let filter_area = this.page.page_form;
this.filters = filters
.map((df) => {
if (df.fieldtype === "Break") return;
@ -554,7 +554,6 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
// filter values have not changed
return;
}
// clear previous_filters after 10 seconds, to allow refresh for new data
this.previous_filters = current_filters;
setTimeout(() => (this.previous_filters = null), 10000);
@ -1249,7 +1248,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
}
if (column.colIndex === index && !value) {
value = "Total";
value = __("Total");
column = { fieldtype: "Data" }; // avoid type issues for value if Date column
} else if (["Currency", "Float"].includes(column.fieldtype)) {
// proxy for currency and float
@ -2113,4 +2112,14 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
get get_values() {
return this.get_filter_values;
}
add_translate_data_checkbox() {
if (frappe.boot.lang == "en") return;
let filter_config = {
fieldname: "translate_data",
fieldtype: "Check",
label: __("Translate Data"),
};
this.report_settings.filters.push(filter_config);
}
};