Compare commits

...

8 Commits

Author SHA1 Message Date
Soham Kulkarni
f8951034be Merge pull request #58729 from sokumon/sidebar-changes
fix: more sidebar improvements
2026-09-03 15:16:36 +05:30
sokumon
56caf3c770 fix: more sidebar improvements 2026-09-03 14:46:30 +05:30
Sumit Jain
3b9535ed91 Merge pull request #58726 from frappe/fix-account-tree
feat(accounts): disabled marker and cost center parity in tree views
2026-09-03 14:05:18 +05:30
Sumit Jain
f8c53be376 fix(accounts): drop unsupported badge theme on account number 2026-09-03 13:53:27 +05:30
Sumit Jain
a1b402020e feat(accounts): enhance account and cost center tree views with additional flags and labels 2026-09-03 13:38:20 +05:30
Diptanil Saha
e3a976f115 fix(setup): strict permissions for transaction deletion record (#58687) 2026-09-03 06:28:23 +00:00
dependabot[bot]
68666c2ed0 chore(deps): bump browserslist from 4.28.4 to 4.28.8 in /banking (#58721)
Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.28.4 to 4.28.8.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.28.4...4.28.8)

---
updated-dependencies:
- dependency-name: browserslist
  dependency-version: 4.28.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-03 05:33:45 +00:00
Diptanil Saha
717af27559 ci: authenticate github clones in install.sh (#58718) 2026-09-03 10:50:32 +05:30
26 changed files with 370 additions and 478 deletions

View File

@@ -4,6 +4,36 @@ set -e
cd ~ || exit
# Authenticate git against github.com with the job token: anonymous git-over-HTTPS from the
# runners gets throttled to a 401, which kills whichever clone is in flight — the frappe fetch
# below, or payments under `bench get-app`. See the PR description.
#
# A credential helper rather than a url.insteadOf rewrite, because `git clone` PERSISTS a
# rewritten URL into the new repo's .git/config: an insteadOf would leave the token sitting in
# apps/payments/.git/config on the runner. A helper is consulted only when github.com actually
# challenges, and leaves the stored remote URL untouched. Passing it through GIT_CONFIG_* keeps
# the token out of ~/.gitconfig too, and child processes inherit it (bench shells out to git).
ci_github_token=${CI_GITHUB_TOKEN:-${GITHUB_TOKEN:-}}
if [ -n "$ci_github_token" ]; then
export CI_GITHUB_TOKEN="$ci_github_token"
export GIT_CONFIG_COUNT=3
# Reset first: git runs EVERY configured helper and calls `store` on them after a successful
# auth, so a `credential.helper=store` inherited from the image's gitconfig would write the
# token to ~/.git-credentials. An empty value clears the list before ours is added.
export GIT_CONFIG_KEY_0="credential.helper"
export GIT_CONFIG_VALUE_0=""
export GIT_CONFIG_KEY_1="credential.https://github.com.username"
export GIT_CONFIG_VALUE_1="x-access-token"
export GIT_CONFIG_KEY_2="credential.https://github.com.helper"
# Single-quoted: $CI_GITHUB_TOKEN is expanded by the shell git runs the helper in, so the
# token is read from the environment at call time and never stored anywhere. Answering only
# `get` makes the helper inert for git's `store`/`erase` calls.
export GIT_CONFIG_VALUE_2='!f() { test "$1" = get && echo "password=$CI_GITHUB_TOKEN"; }; f'
fi
# Whatever happens, never sit on a credential prompt: fail fast and legibly instead.
export GIT_TERMINAL_PROMPT=0
githubbranch=${GITHUB_BASE_REF:-${GITHUB_REF##*/}}
frappeuser=${FRAPPE_USER:-"frappe"}
frappecommitish=${FRAPPE_BRANCH:-}

View File

@@ -121,6 +121,8 @@ jobs:
env:
DB: mariadb
TYPE: server
# Anonymous git to github.com gets throttled to a 401; authenticate the clones.
CI_GITHUB_TOKEN: ${{ github.token }}
- name: Run Patch Tests
run: |

View File

@@ -129,6 +129,8 @@ jobs:
TYPE: server
FRAPPE_USER: ${{ github.event.inputs.user }}
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
# Anonymous git to github.com gets throttled to a 401; authenticate the clones.
CI_GITHUB_TOKEN: ${{ github.token }}
- name: Run Tests
run: |

View File

@@ -102,6 +102,8 @@ jobs:
TYPE: server
FRAPPE_USER: ${{ github.event.inputs.user }}
FRAPPE_BRANCH: ${{ github.event.client_payload.sha || github.event.inputs.branch }}
# Anonymous git to github.com gets throttled to a 401; authenticate the clones.
CI_GITHUB_TOKEN: ${{ github.token }}
DB_HOST: 127.0.0.1
DB_USER_HOST: '%'
WKHTMLTOX_DEB: /tmp/wkhtmltox.deb

View File

@@ -103,6 +103,8 @@ jobs:
DB: postgres
TYPE: server
FRAPPE_BRANCH: develop
# Anonymous git to github.com gets throttled to a 401; authenticate the clones.
CI_GITHUB_TOKEN: ${{ github.token }}
BENCH_CACHE_DIR: /home/runner/bench-cache
- name: Warm up test data

View File

@@ -1489,10 +1489,10 @@ balanced-match@^4.0.2:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
baseline-browser-mapping@^2.10.38:
version "2.10.40"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz#f372c8eb36ff4ad0b5e7ae467014abef124554ba"
integrity sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==
baseline-browser-mapping@^2.11.12:
version "2.11.20"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz#26078c7a4b08299656ea7ddceaebec955dc44303"
integrity sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==
brace-expansion@^5.0.5:
version "5.0.7"
@@ -1509,15 +1509,15 @@ brace-expansion@^5.0.8:
balanced-match "^4.0.2"
browserslist@^4.24.0:
version "4.28.4"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.4.tgz#dd8b8167a32845ff5f8cd6ce13f5abba16cd04c9"
integrity sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==
version "4.28.8"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.8.tgz#a3c79ceb70028527e5da7dafc887f3200b5168c0"
integrity sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==
dependencies:
baseline-browser-mapping "^2.10.38"
caniuse-lite "^1.0.30001799"
electron-to-chromium "^1.5.376"
node-releases "^2.0.48"
update-browserslist-db "^1.2.3"
baseline-browser-mapping "^2.11.12"
caniuse-lite "^1.0.30001809"
electron-to-chromium "^1.5.402"
node-releases "^2.0.53"
update-browserslist-db "^1.3.0"
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
version "1.0.2"
@@ -1527,10 +1527,10 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
es-errors "^1.3.0"
function-bind "^1.1.2"
caniuse-lite@^1.0.30001799:
version "1.0.30001800"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz#b896c773e1c39400809415162bb5320371291b36"
integrity sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==
caniuse-lite@^1.0.30001809:
version "1.0.30001810"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz#4970b477dea3278374de9bc43aa8f5d39fc3cda2"
integrity sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==
ccount@^2.0.0:
version "2.0.1"
@@ -1697,10 +1697,10 @@ dunder-proto@^1.0.1:
es-errors "^1.3.0"
gopd "^1.2.0"
electron-to-chromium@^1.5.376:
version "1.5.383"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.383.tgz#5bd22306497d454103b289b0fef97260c56d0855"
integrity sha512-I2484/KkAvl8lm9VyjH2JnbOIV0d/UCqT7gbzs6l+o6Vmn9wgB66uVcKX+Vk6HrXtY6fbWTOEXuv8waDTuFNCw==
electron-to-chromium@^1.5.402:
version "1.5.420"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz#fc66d26a722d6f227e2092acdf38dd55b198cb44"
integrity sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==
engine.io-client@~6.5.1:
version "6.5.4"
@@ -3012,10 +3012,10 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
node-releases@^2.0.48:
version "2.0.50"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.50.tgz#597197a852071ce42fc2550e58e223242bcba969"
integrity sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==
node-releases@^2.0.53:
version "2.0.54"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.54.tgz#09af17d5647aa9f221ec5cf2becb95b68a981afe"
integrity sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==
object-assign@^4.1.1:
version "4.1.1"
@@ -3589,10 +3589,10 @@ unist-util-visit@^5.0.0:
unist-util-is "^6.0.0"
unist-util-visit-parents "^6.0.0"
update-browserslist-db@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d"
integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==
update-browserslist-db@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz#9d99fbff56c50bb11ba5fd35cece5916da595836"
integrity sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==
dependencies:
escalade "^3.2.0"
picocolors "^1.1.1"

View File

@@ -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",

View File

@@ -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 }));
}
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 = () => {

View File

@@ -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: [
{

View File

@@ -854,6 +854,7 @@
"added": 0,
"child": 1,
"collapsible": 1,
"filters": "{\"is_return\": 1}",
"hidden": 0,
"indent": 0,
"is_default_module": 0,
@@ -864,8 +865,7 @@
"open_in_new_tab": 0,
"route_options": "{\"is_return\": 1}",
"show_arrow": 0,
"type": "Link",
"filters": "{\"is_return\": 1}"
"type": "Link"
},
{
"added": 0,
@@ -931,6 +931,7 @@
"added": 0,
"child": 1,
"collapsible": 1,
"filters": "{\"is_return\": 1}",
"hidden": 0,
"indent": 0,
"is_default_module": 0,
@@ -941,8 +942,7 @@
"open_in_new_tab": 0,
"route_options": "{\"is_return\": 1}",
"show_arrow": 0,
"type": "Link",
"filters": "{\"is_return\": 1}"
"type": "Link"
},
{
"added": 0,
@@ -1154,20 +1154,6 @@
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 1,
"label": "Payments",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
@@ -1418,27 +1404,12 @@
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 1,
"label": "Financial Reports",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"icon": "wallet",
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Financial Reports",
"link_type": "DocType",
"open_in_new_tab": 0,
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Section Break"
},
@@ -1877,7 +1848,7 @@
"type": "Link"
}
],
"modified": "2026-08-28 12:00:00.000000",
"modified": "2026-09-01 17:33:21.459367",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts",

View File

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

View File

@@ -1,48 +0,0 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "layers",
"idx": 0,
"items": [
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Bulk Transaction Log Detail",
"link_to": "Bulk Transaction Log Detail",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Bulk Transaction Log",
"link_to": "Bulk Transaction Log",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified_by": "Administrator",
"module": "Bulk Transaction",
"name": "Bulk Transaction",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Bulk Transaction"
}

View File

@@ -1,6 +1,6 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"creation": "2026-08-16 00:00:00",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "shopping-cart",
@@ -283,97 +283,6 @@
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "rocket",
"indent": 1,
"is_default_module": 0,
"keep_closed": 1,
"label": "Subcontracting",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"icon": "folder-tree",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Subcontracting BOM",
"link_to": "Subcontracting BOM",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Subcontracting Inward Order",
"link_to": "Subcontracting Inward Order",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Subcontracting Delivery",
"link_to": "Stock Entry",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Subcontracting Order",
"link_to": "Subcontracting Order",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Subcontracting Receipt",
"link_to": "Subcontracting Receipt",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
@@ -631,12 +540,11 @@
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-01 17:37:29.971719",
"modified_by": "Administrator",
"module": "Buying",
"name": "Buying",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Buying"
}

View File

@@ -1,33 +0,0 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "messages-square",
"idx": 0,
"items": [
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Communication Medium",
"link_to": "Communication Medium",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified_by": "Administrator",
"module": "Communication",
"name": "Communication",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Communication"
}

View File

@@ -133,30 +133,6 @@
"link_type": "Sidebar",
"title": "Quality"
},
{
"added": 0,
"hidden": 0,
"icon": "messages-square",
"link_to": "Communication",
"link_type": "Sidebar",
"title": "Communication"
},
{
"added": 0,
"hidden": 0,
"icon": "phone",
"link_to": "Telephony",
"link_type": "Sidebar",
"title": "Telephony"
},
{
"added": 0,
"hidden": 0,
"icon": "layers",
"link_to": "Bulk Transaction",
"link_type": "Sidebar",
"title": "Bulk Transaction"
},
{
"added": 0,
"hidden": 0,
@@ -164,17 +140,9 @@
"link_to": "Subcontracting",
"link_type": "Sidebar",
"title": "Subcontracting"
},
{
"added": 0,
"hidden": 0,
"icon": "file-code",
"link_to": "EDI",
"link_type": "Sidebar",
"title": "EDI"
}
],
"modified": "2026-08-28 12:00:00.000000",
"modified": "2026-09-02 14:58:17.082794",
"modified_by": "Administrator",
"name": "erpnext",
"owner": "Administrator",

View File

@@ -1,48 +0,0 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "file-code",
"idx": 0,
"items": [
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Code List",
"link_to": "Code List",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Common Code",
"link_to": "Common Code",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified_by": "Administrator",
"module": "EDI",
"name": "EDI",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "EDI"
}

View File

@@ -21,9 +21,101 @@
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "phone",
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Telephony",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Incoming Call Settings",
"link_to": "Incoming Call Settings",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Voice Call Settings",
"link_to": "Voice Call Settings",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Call Log",
"link_to": "Call Log",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Telephony Call Type",
"link_to": "Telephony Call Type",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Communication Medium",
"link_to": "Communication Medium",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-02 14:58:17.082794",
"modified_by": "Administrator",
"module": "ERPNext Integrations",
"name": "ERPNext Integrations",

View File

@@ -21,6 +21,23 @@ add_to_apps_screen = [
}
]
# Modules that are a folder of code and nothing else. Their doctypes, reports and controllers stay
# where they are; what they no longer own is navigation, which now sits in the sidebar named beside
# each. Left in the dock, each would carry an entry of its own for two to four records. See
# `frappe.utils.modules.get_code_only_modules`.
#
# The value names the modules that inherited that navigation, so a Call Log or a Code List resolves
# to a sidebar the user can actually navigate to instead of dead-ending in a module the dock never
# shows.
code_only_modules = {
"Telephony": ["ERPNext Integrations"],
# Its one doctype, Communication Medium, describes how a call reaches someone, so it sits in
# the Telephony section beside the call settings rather than in a shell of its own.
"Communication": ["ERPNext Integrations"],
"EDI": ["Utilities"],
"Bulk Transaction": ["Utilities"],
}
develop_version = "17.x.x-develop"
app_include_js = "erpnext.bundle.js"

View File

@@ -1,6 +1,6 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"creation": "2026-08-16 00:00:00",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "wrench",
@@ -41,7 +41,7 @@
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Reports",
@@ -67,12 +67,11 @@
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-01 19:30:16.713938",
"modified_by": "Administrator",
"module": "Maintenance",
"name": "Maintenance",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Maintenance"
}

View File

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

View File

@@ -1,6 +1,6 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"creation": "2026-08-16 00:00:00",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "globe",
@@ -21,22 +21,6 @@
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "UAE VAT Settings",
"link_to": "UAE VAT Settings",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
@@ -58,7 +42,7 @@
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Reports",
@@ -132,12 +116,11 @@
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-01 17:54:06.004401",
"modified_by": "Administrator",
"module": "Regional",
"name": "Regional",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Regional"
}

View File

@@ -1203,6 +1203,8 @@ def get_billing_shipping_address(
@frappe.whitelist(methods=["POST"])
def create_transaction_deletion_request(company: str):
frappe.only_for("System Manager")
# User Permission check
frappe.has_permission("Company", ptype="delete", doc=company, throw=True)
from erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record import (
is_deletion_doc_running,
@@ -1211,6 +1213,7 @@ def create_transaction_deletion_request(company: str):
is_deletion_doc_running(company)
tdr = frappe.get_doc({"doctype": "Transaction Deletion Record", "company": company})
tdr.flags.ignore_permissions = 1
tdr.insert()
tdr.generate_to_delete_list()

View File

@@ -1,5 +1,6 @@
{
"actions": [],
"allow_bulk_edit": 1,
"autoname": "TDL.####",
"creation": "2021-04-06 20:17:18.404716",
"doctype": "DocType",
@@ -166,19 +167,18 @@
"read_only": 1
}
],
"in_create": 1,
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2025-11-18 15:02:46.427695",
"modified": "2026-09-02 20:32:19.679290",
"modified_by": "Administrator",
"module": "Setup",
"name": "Transaction Deletion Record",
"naming_rule": "Expression (old style)",
"naming_rule": "Expression",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
@@ -186,7 +186,6 @@
"report": 1,
"role": "System Manager",
"share": 1,
"submit": 1,
"write": 1
}
],

View File

@@ -1,6 +1,6 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"creation": "2026-08-16 00:00:00",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "sliders-horizontal",
@@ -419,9 +419,9 @@
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"indent": 1,
"is_default_module": 0,
"keep_closed": 1,
"keep_closed": 0,
"label": "Home",
"link_type": "DocType",
"open_in_new_tab": 1,
@@ -504,12 +504,11 @@
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-01 17:52:52.506437",
"modified_by": "Administrator",
"module": "Setup",
"name": "Setup",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Setup"
}

View File

@@ -1,80 +0,0 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "phone",
"idx": 0,
"items": [
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Incoming Call Settings",
"link_to": "Incoming Call Settings",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Voice Call Settings",
"link_to": "Voice Call Settings",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Call Log",
"link_to": "Call Log",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Telephony Call Type",
"link_to": "Telephony Call Type",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified_by": "Administrator",
"module": "Telephony",
"name": "Telephony",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Telephony"
}

View File

@@ -1,6 +1,6 @@
{
"app": "erpnext",
"creation": "2026-08-16 00:00:00.000000",
"creation": "2026-09-02 03:16:19.632349",
"docstatus": 0,
"doctype": "Sidebar",
"header_icon": "pocket-knife",
@@ -26,6 +26,110 @@
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "file-code",
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "EDI",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Code List",
"link_to": "Code List",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Common Code",
"link_to": "Common Code",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"icon": "layers",
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Bulk Transaction",
"link_type": "DocType",
"open_in_new_tab": 0,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Bulk Transaction Log Detail",
"link_to": "Bulk Transaction Log Detail",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Bulk Transaction Log",
"link_to": "Bulk Transaction Log",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 1,
"is_default_module": 0,
"keep_closed": 0,
"label": "Video",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
@@ -38,7 +142,7 @@
},
{
"added": 0,
"child": 0,
"child": 1,
"collapsible": 1,
"hidden": 0,
"icon": "settings",
@@ -52,20 +156,6 @@
"show_arrow": 0,
"type": "Link"
},
{
"added": 0,
"child": 0,
"collapsible": 1,
"hidden": 0,
"indent": 0,
"is_default_module": 0,
"keep_closed": 0,
"label": "Reports",
"link_type": "DocType",
"open_in_new_tab": 1,
"show_arrow": 0,
"type": "Section Break"
},
{
"added": 0,
"child": 1,
@@ -83,12 +173,11 @@
"type": "Link"
}
],
"modified": "2026-08-16 00:00:00.000000",
"modified": "2026-09-02 03:26:54.027941",
"modified_by": "Administrator",
"module": "Utilities",
"name": "Utilities",
"owner": "Administrator",
"sequence_id": 0.0,
"standard": 1,
"title": "Utilities"
}