Merge pull request #31215 from aerele/report-custom-column

fix(report): add custom column based on link column
This commit is contained in:
Ejaaz Khan 2025-02-18 23:23:01 +05:30 committed by GitHub
commit 91eee4fdf9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 20 deletions

View file

@ -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()

View file

@ -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]);
});
});