diff --git a/cypress/integration/query_report.js b/cypress/integration/query_report.js index 5dd0ab2d53..4a2d753ff0 100644 --- a/cypress/integration/query_report.js +++ b/cypress/integration/query_report.js @@ -38,7 +38,7 @@ context("Query Report", () => { .contains("Add Column") .click({ force: true }); cy.get_open_dialog().get(".modal-title").should("contain", "Add Column"); - cy.get('select[data-fieldname="doctype"]').select("Role", { force: true }); + cy.get('select[data-fieldname="doctype"]').select("Role (Name)", { force: true }); cy.get('select[data-fieldname="field"]').select("Role Name", { force: true }); cy.get('select[data-fieldname="insert_after"]').select("Name", { force: true }); cy.get_open_dialog() diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 0ddf59109b..5a89bdabfe 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1706,11 +1706,16 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { fieldname: "doctype", label: __("From Document Type"), options: this.linked_doctypes?.map((df) => ({ - label: df.doctype, - value: df.doctype, + label: df.doctype + " (" + frappe.unscrub(df.fieldname) + ")", + value: JSON.stringify({ + doctype: df.doctype, + fieldname: df.fieldname, + }), })), change: () => { - let doctype = d.get_value("doctype"); + const { doctype, fieldname } = JSON.parse( + d.get_value("doctype") + ); frappe.model.with_doctype(doctype, () => { let options = frappe.meta .get_docfields(doctype) @@ -1751,6 +1756,8 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { ], primary_action: (values) => { const custom_columns = []; + const { doctype, fieldname } = JSON.parse(values.doctype); + Object.assign(values, { doctype, fieldname }); let df = frappe.meta.get_docfield(values.doctype, values.field); const insert_after_index = this.columns.findIndex( (column) => column.label === values.insert_after @@ -1778,17 +1785,14 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { field: values.field, doctype: values.doctype, names: Array.from( - this.doctype_field_map[values.doctype].names + this.doctype_field_map[values.doctype][fieldname] ), }, callback: (r) => { const custom_data = r.message; - const link_field = - this.doctype_field_map[values.doctype].fieldname; this.add_custom_column( custom_columns, custom_data, - link_field, values, insert_after_index ); @@ -1870,13 +1874,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } } - add_custom_column( - custom_column, - custom_data, - link_field, - new_column_data, - insert_after_index - ) { + add_custom_column(custom_column, custom_data, new_column_data, insert_after_index) { const column = this.prepare_columns(custom_column); const column_field = new_column_data.field; @@ -1885,9 +1883,9 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { this.data.forEach((row) => { if (column[0].fieldname.includes("-")) { row[column_field + "-" + frappe.scrub(new_column_data.doctype)] = - custom_data[row[link_field]]; + custom_data[row[new_column_data.fieldname]]; } else { - row[column_field] = custom_data[row[link_field]]; + row[column_field] = custom_data[row[new_column_data.fieldname]]; } }); @@ -1931,14 +1929,18 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { }; }) ); - doctypes.forEach((doc) => { - this.doctype_field_map[doc.doctype] = { fieldname: doc.fieldname, names: new Set() }; + if (!(doc.doctype in this.doctype_field_map)) + this.doctype_field_map[doc.doctype] = { [doc.fieldname]: new Set() }; + + if (!(doc.fieldname in this.doctype_field_map[doc.doctype])) + this.doctype_field_map[doc.doctype][doc.fieldname] = new Set(); }); this.data.forEach((row) => { doctypes.forEach((doc) => { - this.doctype_field_map[doc.doctype].names.add(row[doc.fieldname]); + row[doc.fieldname] && + this.doctype_field_map[doc.doctype][doc.fieldname].add(row[doc.fieldname]); }); });