Merge pull request #31215 from aerele/report-custom-column
fix(report): add custom column based on link column
This commit is contained in:
commit
91eee4fdf9
2 changed files with 22 additions and 20 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue