mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-09 15:29:30 +00:00
feat(accounts): enhance account and cost center tree views with additional flags and labels
This commit is contained in:
@@ -122,6 +122,7 @@
|
||||
"description": "Setting Account Type helps in selecting this Account in transactions.",
|
||||
"fieldname": "account_type",
|
||||
"fieldtype": "Select",
|
||||
"in_preview": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Account Type",
|
||||
"oldfieldname": "account_type",
|
||||
@@ -203,7 +204,7 @@
|
||||
"idx": 1,
|
||||
"is_tree": 1,
|
||||
"links": [],
|
||||
"modified": "2026-08-21 23:11:37.851001",
|
||||
"modified": "2026-09-03 12:59:42.190900",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Account",
|
||||
|
||||
@@ -62,7 +62,7 @@ frappe.treeview_settings["Account"] = {
|
||||
|
||||
const flags = [];
|
||||
if (node.data.account_number) {
|
||||
flags.push(frappe.ui.badge({ label: node.data.account_number, size: "sm" }));
|
||||
flags.push(frappe.ui.badge({ label: node.data.account_number, theme: "light" }));
|
||||
}
|
||||
|
||||
const company = frappe.treeview_settings["Account"].treeview?.page?.fields_dict?.company?.get_value();
|
||||
@@ -72,26 +72,21 @@ frappe.treeview_settings["Account"] = {
|
||||
company_currency &&
|
||||
node.data.account_currency !== company_currency
|
||||
) {
|
||||
flags.push(frappe.ui.badge({ label: node.data.account_currency, theme: "blue", size: "sm" }));
|
||||
flags.push(frappe.ui.badge({ label: node.data.account_currency, theme: "blue" }));
|
||||
}
|
||||
|
||||
if (node.data.freeze_account === "Yes") {
|
||||
flags.push(
|
||||
$(
|
||||
`<span class="inline-flex text-ink-gray-4" title="${__("Frozen — entries restricted")}">
|
||||
${frappe.utils.icon("lock", "sm")}
|
||||
</span>`
|
||||
)[0]
|
||||
frappe.ui.badge({
|
||||
label: __("Frozen"),
|
||||
icon: "lock",
|
||||
title: __("Frozen - entries restricted"),
|
||||
theme: "orange",
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (flags.length) {
|
||||
const $flags = $(
|
||||
'<span class="tree-node-flags inline-flex items-center gap-1.5 ms-2 shrink-0"></span>'
|
||||
);
|
||||
flags.forEach((flag) => $flags.append(flag));
|
||||
$flags.insertAfter(node.$tree_link.find("a.tree-label"));
|
||||
}
|
||||
erpnext.utils.render_tree_node_flags(node, flags);
|
||||
},
|
||||
on_node_render: function (node, deep) {
|
||||
const render_balances = () => {
|
||||
|
||||
@@ -12,6 +12,19 @@ frappe.treeview_settings["Cost Center"] = {
|
||||
],
|
||||
root_label: "Cost Centers",
|
||||
get_tree_nodes: "erpnext.accounts.utils.get_children",
|
||||
get_label: function (node) {
|
||||
// clean display name — the number renders as a badge (see onrender)
|
||||
return frappe.utils.escape_html(node.data.cost_center_name || node.title || node.label);
|
||||
},
|
||||
onrender: function (node) {
|
||||
if (node.is_root || !node.data) return;
|
||||
|
||||
const flags = [];
|
||||
if (node.data.cost_center_number) {
|
||||
flags.push(frappe.ui.badge({ label: node.data.cost_center_number }));
|
||||
}
|
||||
erpnext.utils.render_tree_node_flags(node, flags);
|
||||
},
|
||||
add_tree_node: "erpnext.accounts.utils.add_cc",
|
||||
menu_items: [
|
||||
{
|
||||
|
||||
@@ -1359,22 +1359,28 @@ def get_children(
|
||||
parent_fieldname = "parent_" + doctype.lower().replace(" ", "_")
|
||||
fields = ["name as value", "is_group as expandable"]
|
||||
filters = [["docstatus", "<", 2]]
|
||||
if frappe.db.has_column(doctype, "disabled") and not include_disabled:
|
||||
filters.append(["disabled", "=", False])
|
||||
if frappe.db.has_column(doctype, "disabled"):
|
||||
if include_disabled:
|
||||
# the tree marks disabled rows, so it needs the flag
|
||||
fields.append("disabled")
|
||||
else:
|
||||
filters.append(["disabled", "=", False])
|
||||
|
||||
# extra columns the tree views render as badges / clean labels
|
||||
node_fields = {
|
||||
"Account": ["root_type", "account_name", "account_number", "account_currency", "freeze_account"],
|
||||
"Cost Center": ["cost_center_name", "cost_center_number"],
|
||||
}
|
||||
fields += node_fields.get(doctype, [])
|
||||
|
||||
if is_root:
|
||||
filters.append(IfNull(Field(parent_fieldname), "") == "")
|
||||
filters.append(["company", "=", company])
|
||||
if doctype == "Account":
|
||||
fields.append("report_type")
|
||||
else:
|
||||
filters.append([parent_fieldname, "=", parent])
|
||||
|
||||
account_fields = ["account_name", "account_number", "account_currency", "freeze_account"]
|
||||
if is_root:
|
||||
fields += ["root_type", "report_type", *account_fields] if doctype == "Account" else []
|
||||
filters.append(["company", "=", company])
|
||||
|
||||
else:
|
||||
fields += ["root_type", *account_fields] if doctype == "Account" else []
|
||||
fields += [parent_fieldname + " as parent"]
|
||||
fields.append(parent_fieldname + " as parent")
|
||||
|
||||
acc = frappe.get_list(doctype, fields=fields, filters=filters)
|
||||
|
||||
|
||||
@@ -426,6 +426,26 @@ $.extend(erpnext.utils, {
|
||||
}
|
||||
return rows;
|
||||
},
|
||||
/**
|
||||
* Row flags for the Account / Cost Center trees: the caller's badges plus
|
||||
* a shared "Disabled" marker for records shown through the tree's
|
||||
* "include disabled" toggle.
|
||||
* @param {Object} node tree node (from treeview_settings.onrender)
|
||||
* @param {Array<string|HTMLElement>} flags badge markup / elements
|
||||
*/
|
||||
render_tree_node_flags: function (node, flags = []) {
|
||||
if (cint(node.data?.disabled)) {
|
||||
flags.push(frappe.ui.badge({ label: __("Disabled"), variant: "outline" }));
|
||||
node.$tree_link.find("a.tree-label").addClass("text-ink-gray-5");
|
||||
}
|
||||
if (!flags.length) return;
|
||||
const $flags = $(
|
||||
'<span class="tree-node-flags inline-flex items-center gap-1.5 ms-2 shrink-0"></span>'
|
||||
);
|
||||
flags.forEach((flag) => $flags.append(flag));
|
||||
$flags.insertAfter(node.$tree_link.find("a.tree-label"));
|
||||
},
|
||||
|
||||
get_tree_options: function (option) {
|
||||
// get valid options for tree based on user permission & locals dict
|
||||
let unscrub_option = frappe.model.unscrub(option);
|
||||
|
||||
Reference in New Issue
Block a user