mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-29 06:38:24 +00:00
Merge branch 'develop' into user_change
This commit is contained in:
@@ -323,6 +323,8 @@ erpnext.company.setup_queries = function (frm) {
|
||||
["default_advance_received_account", { root_type: "Liability", account_type: "Receivable" }],
|
||||
["default_advance_paid_account", { root_type: "Asset", account_type: "Payable" }],
|
||||
["service_expense_account", { root_type: "Expense" }],
|
||||
["expenses_added_to_stock_account", { root_type: "Expense" }],
|
||||
["expenses_added_to_stock_contra_account", { root_type: "Expense" }],
|
||||
],
|
||||
function (i, v) {
|
||||
erpnext.company.set_custom_query(frm, v);
|
||||
|
||||
@@ -137,6 +137,10 @@
|
||||
"disable_sdbnb_in_sr",
|
||||
"default_provisional_account",
|
||||
"default_in_transit_warehouse",
|
||||
"stock_expense_section",
|
||||
"expenses_added_to_stock_account",
|
||||
"column_break_gthb",
|
||||
"expenses_added_to_stock_contra_account",
|
||||
"manufacturing_section",
|
||||
"default_operating_cost_account",
|
||||
"column_break_9prc",
|
||||
@@ -962,6 +966,18 @@
|
||||
"label": "Service Expense Account",
|
||||
"options": "Account"
|
||||
},
|
||||
{
|
||||
"fieldname": "expenses_added_to_stock_account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Expenses Added To Stock Account",
|
||||
"options": "Account"
|
||||
},
|
||||
{
|
||||
"fieldname": "expenses_added_to_stock_contra_account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Expenses Added To Stock Contra Account",
|
||||
"options": "Account"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "If enabled, the system will use the inventory account set in the Item Master or Item Group or Brand. Otherwise, it will use the inventory account set in the Warehouse.",
|
||||
@@ -1071,6 +1087,15 @@
|
||||
"fieldname": "enable_stock_delivered_but_not_billed",
|
||||
"fieldtype": "Check",
|
||||
"label": "Enable Stock Delivered But Not Billed"
|
||||
},
|
||||
{
|
||||
"fieldname": "stock_expense_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Stock Expense"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_gthb",
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
@@ -1079,7 +1104,7 @@
|
||||
"image_field": "company_logo",
|
||||
"is_tree": 1,
|
||||
"links": [],
|
||||
"modified": "2026-07-02 07:21:21.794533",
|
||||
"modified": "2026-07-15 15:38:29.214020",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Company",
|
||||
|
||||
@@ -23,7 +23,7 @@ from frappe.utils import (
|
||||
nowdate,
|
||||
today,
|
||||
)
|
||||
from frappe.utils.nestedset import NestedSet, rebuild_tree
|
||||
from frappe.utils.nestedset import NestedSet, get_root_of, rebuild_tree
|
||||
|
||||
from erpnext.accounts.doctype.account.account import get_account_currency
|
||||
from erpnext.accounts.doctype.financial_report_template.financial_report_template import (
|
||||
@@ -104,6 +104,8 @@ class Company(NestedSet):
|
||||
exception_budget_approver_role: DF.Link | None
|
||||
exchange_gain_loss_account: DF.Link | None
|
||||
existing_company: DF.Link | None
|
||||
expenses_added_to_stock_account: DF.Link | None
|
||||
expenses_added_to_stock_contra_account: DF.Link | None
|
||||
fax: DF.Data | None
|
||||
is_group: DF.Check
|
||||
lft: DF.Int
|
||||
@@ -499,91 +501,92 @@ class Company(NestedSet):
|
||||
)
|
||||
|
||||
def create_default_departments(self):
|
||||
root = get_root_of("Department") or "All Departments"
|
||||
records = [
|
||||
# Department
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("All Departments"),
|
||||
"department_name": root,
|
||||
"is_group": 1,
|
||||
"parent_department": "",
|
||||
"__condition": lambda: not frappe.db.exists("Department", _("All Departments")),
|
||||
"__condition": lambda: not frappe.db.exists("Department", root),
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Accounts"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Marketing"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Sales"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Purchase"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Operations"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Production"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Dispatch"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Customer Service"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Human Resources"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Management"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Quality Management"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Research & Development"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
{
|
||||
"doctype": "Department",
|
||||
"department_name": _("Legal"),
|
||||
"parent_department": _("All Departments"),
|
||||
"parent_department": root,
|
||||
"company": self.name,
|
||||
},
|
||||
]
|
||||
@@ -1007,7 +1010,7 @@ def get_children(doctype: str, parent: str | None = None, company: str | None =
|
||||
)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def add_node():
|
||||
from frappe.desk.treeview import make_tree_args
|
||||
|
||||
@@ -1118,7 +1121,7 @@ def get_billing_shipping_address(
|
||||
return {"primary_address": primary_address, "shipping_address": shipping_address}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_transaction_deletion_request(company: str):
|
||||
frappe.only_for("System Manager")
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
import json
|
||||
from unittest.mock import patch
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.query_builder.functions import IfNull
|
||||
from frappe.utils import random_string
|
||||
from frappe.utils.nestedset import get_root_of
|
||||
|
||||
from erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts import (
|
||||
get_charts_for_country,
|
||||
@@ -68,7 +70,12 @@ class TestCompany(ERPNextTestSuite):
|
||||
try:
|
||||
company = frappe.new_doc("Company")
|
||||
company.company_name = template
|
||||
company.abbr = random_string(3)
|
||||
# a short random abbr collides with existing test companies often enough
|
||||
# to flake, so pick one that is verified unique
|
||||
abbr = random_string(3)
|
||||
while frappe.db.exists("Company", {"abbr": abbr}):
|
||||
abbr = random_string(3)
|
||||
company.abbr = abbr
|
||||
company.default_currency = "USD"
|
||||
company.create_chart_of_accounts_based_on = "Standard Template"
|
||||
company.chart_of_accounts = template
|
||||
@@ -182,6 +189,31 @@ class TestCompany(ERPNextTestSuite):
|
||||
|
||||
return get_no_of_children([company], 0)
|
||||
|
||||
def test_default_departments_ignore_session_translations(self):
|
||||
self.assertEqual(get_root_of("Department"), "All Departments")
|
||||
|
||||
translations = {"All Departments": "Alle Abteilungen", "Accounts": "Buchhaltung"}
|
||||
with patch("frappe.translate.get_all_translations", return_value=translations):
|
||||
company = frappe.new_doc("Company")
|
||||
company.company_name = "Dept Translation Test Co"
|
||||
company.abbr = "DTTC"
|
||||
company.default_currency = "INR"
|
||||
company.country = "India"
|
||||
company.insert()
|
||||
|
||||
self.assertFalse(frappe.db.exists("Department", "Alle Abteilungen"))
|
||||
self.assertEqual(
|
||||
frappe.get_all("Department", filters={"parent_department": ("is", "not set")}, pluck="name"),
|
||||
["All Departments"],
|
||||
)
|
||||
|
||||
departments = frappe.get_all(
|
||||
"Department", filters={"company": company.name}, fields=["name", "parent_department"]
|
||||
)
|
||||
self.assertTrue(departments)
|
||||
self.assertEqual({d.parent_department for d in departments}, {"All Departments"})
|
||||
self.assertIn("Buchhaltung - DTTC", [d.name for d in departments])
|
||||
|
||||
def test_change_parent_company(self):
|
||||
child_company = frappe.get_doc("Company", "_Test Company 5")
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
{
|
||||
"fieldname": "credit_limits",
|
||||
"fieldtype": "Table",
|
||||
"label": "Credit Limit",
|
||||
"label": "Credit & Overdue Limits",
|
||||
"options": "Customer Credit Limit"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -95,7 +95,7 @@ def get_children(
|
||||
return frappe.get_all("Department", fields=fields, filters=filters, order_by="name")
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def add_node():
|
||||
from frappe.desk.treeview import make_tree_args
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# See license.txt
|
||||
|
||||
import frappe
|
||||
from frappe.utils import add_days, today
|
||||
from frappe.utils import add_days, getdate, now_datetime, today
|
||||
|
||||
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
||||
from erpnext.tests.utils import ERPNextTestSuite
|
||||
@@ -116,3 +116,38 @@ def create_email_digest(**args):
|
||||
doc.insert()
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
class TestEmailDigestDates(ERPNextTestSuite):
|
||||
"""The digest's reporting windows are pure date math driven by the frequency."""
|
||||
|
||||
def make_digest(self, frequency, from_date="2026-06-15"):
|
||||
doc = frappe.new_doc("Email Digest")
|
||||
doc.frequency = frequency
|
||||
doc.from_date = getdate(from_date)
|
||||
doc.to_date = getdate(from_date)
|
||||
return doc
|
||||
|
||||
def test_set_dates_daily_looks_back_one_day(self):
|
||||
doc = self.make_digest("Daily")
|
||||
doc.set_dates()
|
||||
self.assertEqual(doc.past_from_date, getdate("2026-06-14"))
|
||||
self.assertEqual(doc.past_to_date, getdate("2026-06-14"))
|
||||
|
||||
def test_set_dates_weekly_looks_back_one_week(self):
|
||||
doc = self.make_digest("Weekly")
|
||||
doc.set_dates()
|
||||
self.assertEqual(doc.past_from_date, getdate("2026-06-08"))
|
||||
self.assertEqual(doc.past_to_date, getdate("2026-06-14"))
|
||||
|
||||
def test_set_dates_monthly_looks_back_one_month(self):
|
||||
doc = self.make_digest("Monthly")
|
||||
doc.set_dates()
|
||||
self.assertEqual(doc.past_from_date, getdate("2026-05-15"))
|
||||
self.assertEqual(doc.past_to_date, getdate("2026-06-14"))
|
||||
|
||||
def test_weekly_window_is_the_previous_monday_to_sunday(self):
|
||||
from_date, to_date = self.make_digest("Weekly").get_from_to_date()
|
||||
self.assertEqual(from_date.weekday(), 0) # Monday
|
||||
self.assertEqual((to_date - from_date).days, 6) # through Sunday
|
||||
self.assertLess(to_date, now_datetime().date()) # entirely in the past
|
||||
|
||||
@@ -432,7 +432,7 @@ def deactivate_sales_person(status: str, employee: str):
|
||||
frappe.db.set_value("Sales Person", sales_person, "enabled", 0)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_user(employee: str, email: str | None = None, create_user_permission: int = 0) -> str:
|
||||
emp = frappe.get_doc("Employee", employee)
|
||||
emp.check_permission("write")
|
||||
|
||||
@@ -5,16 +5,19 @@
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"defaults_section",
|
||||
"default_company",
|
||||
"country",
|
||||
"default_distance_unit",
|
||||
"column_break_8",
|
||||
"default_currency",
|
||||
"default_distance_unit",
|
||||
"demo_company",
|
||||
"general_settings_section",
|
||||
"hide_currency_symbol",
|
||||
"disable_rounded_total",
|
||||
"disable_in_words",
|
||||
"use_posting_datetime_for_naming_documents",
|
||||
"demo_company"
|
||||
"column_break_hnew",
|
||||
"use_posting_datetime_for_naming_documents"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
@@ -27,7 +30,7 @@
|
||||
{
|
||||
"fieldname": "country",
|
||||
"fieldtype": "Link",
|
||||
"label": "Country",
|
||||
"label": "Default Country",
|
||||
"options": "Country"
|
||||
},
|
||||
{
|
||||
@@ -51,12 +54,12 @@
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "Do not show any symbol like $ etc next to currencies.",
|
||||
"fieldname": "hide_currency_symbol",
|
||||
"fieldtype": "Select",
|
||||
"fieldtype": "Check",
|
||||
"in_list_view": 1,
|
||||
"label": "Hide Currency Symbol",
|
||||
"options": "\nNo\nYes"
|
||||
"label": "Hide Currency Symbol"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
@@ -83,21 +86,34 @@
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "When checked, the system will use the posting datetime of the document for naming the document instead of the creation datetime of the document.",
|
||||
"default": "1",
|
||||
"description": "When checked, the system will use the posting date of the document for naming instead of the creation date.",
|
||||
"fieldname": "use_posting_datetime_for_naming_documents",
|
||||
"fieldtype": "Check",
|
||||
"label": "Use Posting Datetime for Naming Documents"
|
||||
"label": "Use Posting Date for Naming Documents"
|
||||
},
|
||||
{
|
||||
"fieldname": "defaults_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Defaults"
|
||||
},
|
||||
{
|
||||
"fieldname": "general_settings_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "General Settings"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_hnew",
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-cog",
|
||||
"idx": 1,
|
||||
"in_create": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2026-03-16 13:28:20.155574",
|
||||
"modified": "2026-07-22 15:28:19.250215",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Global Defaults",
|
||||
|
||||
@@ -51,7 +51,7 @@ class GlobalDefaults(Document):
|
||||
demo_company: DF.Link | None
|
||||
disable_in_words: DF.Check
|
||||
disable_rounded_total: DF.Check
|
||||
hide_currency_symbol: DF.Literal["", "No", "Yes"]
|
||||
hide_currency_symbol: DF.Check
|
||||
use_posting_datetime_for_naming_documents: DF.Check
|
||||
# end: auto-generated types
|
||||
|
||||
|
||||
@@ -75,6 +75,23 @@ frappe.ui.form.on("Item Group", {
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
["expenses_added_to_stock_account", "expenses_added_to_stock_contra_account"].forEach((field) => {
|
||||
frm.fields_dict["item_group_defaults"].grid.get_field(field).get_query = function (
|
||||
doc,
|
||||
cdt,
|
||||
cdn
|
||||
) {
|
||||
const row = locals[cdt][cdn];
|
||||
return {
|
||||
filters: {
|
||||
root_type: "Expense",
|
||||
company: row.company,
|
||||
is_group: 0,
|
||||
},
|
||||
};
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
refresh: function (frm) {
|
||||
@@ -174,6 +191,8 @@ const COMPANY_DEFAULTS_TO_VF = {
|
||||
default_discount_account: "vf_default_discount_account",
|
||||
default_supplier: "vf_default_supplier",
|
||||
purchase_expense_contra_account: "vf_purchase_expense_contra_account",
|
||||
expenses_added_to_stock_account: "vf_expenses_added_to_stock_account",
|
||||
expenses_added_to_stock_contra_account: "vf_expenses_added_to_stock_contra_account",
|
||||
};
|
||||
|
||||
const FIELD_DEFAULT_SOURCE = {
|
||||
@@ -192,6 +211,8 @@ const FIELD_DEFAULT_SOURCE = {
|
||||
default_discount_account: "Company",
|
||||
default_supplier: null,
|
||||
purchase_expense_contra_account: "Company",
|
||||
expenses_added_to_stock_account: "Company",
|
||||
expenses_added_to_stock_contra_account: "Company",
|
||||
};
|
||||
|
||||
function populate_item_group_company_defaults(frm, cdt, cdn, row) {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils.nestedset import NestedSet
|
||||
from frappe.utils.nestedset import NestedSet, get_root_of
|
||||
|
||||
|
||||
class ItemGroup(NestedSet):
|
||||
@@ -32,8 +32,9 @@ class ItemGroup(NestedSet):
|
||||
|
||||
def validate(self):
|
||||
if not self.parent_item_group and not frappe.in_test:
|
||||
if frappe.db.exists("Item Group", _("All Item Groups")):
|
||||
self.parent_item_group = _("All Item Groups")
|
||||
root = get_root_of(self.doctype)
|
||||
if root and root != self.name:
|
||||
self.parent_item_group = root
|
||||
self.validate_item_group_defaults()
|
||||
self.check_item_tax()
|
||||
|
||||
@@ -126,6 +127,8 @@ def get_company_resolved_defaults(company: str) -> dict:
|
||||
"deferred_revenue_account": company_doc.get("default_deferred_revenue_account"),
|
||||
"default_discount_account": company_doc.get("default_discount_account"),
|
||||
"purchase_expense_contra_account": company_doc.get("purchase_expense_contra_account"),
|
||||
"expenses_added_to_stock_account": company_doc.get("expenses_added_to_stock_account"),
|
||||
"expenses_added_to_stock_contra_account": company_doc.get("expenses_added_to_stock_contra_account"),
|
||||
"default_price_list": "",
|
||||
"default_supplier": "",
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class TermsandConditions(Document):
|
||||
|
||||
def validate(self):
|
||||
if self.terms:
|
||||
validate_template(self.terms)
|
||||
validate_template(self.terms, restrict_globals=True)
|
||||
if not cint(self.buying) and not cint(self.selling) and not cint(self.hr) and not cint(self.disabled):
|
||||
throw(_("At least one of the Applicable Modules should be selected"))
|
||||
|
||||
@@ -39,7 +39,10 @@ class TermsandConditions(Document):
|
||||
def get_terms_and_conditions(template_name: str, doc: str | dict):
|
||||
doc = frappe.parse_json(doc)
|
||||
|
||||
terms_and_conditions = frappe.get_doc("Terms and Conditions", template_name)
|
||||
tnc = frappe.get_cached_doc("Terms and Conditions", template_name)
|
||||
tnc.check_permission()
|
||||
|
||||
if terms_and_conditions.terms:
|
||||
return frappe.render_template(terms_and_conditions.terms, doc)
|
||||
if not tnc.terms:
|
||||
return
|
||||
|
||||
return frappe.render_template(tnc.terms, doc, restrict_globals=True)
|
||||
|
||||
@@ -21,6 +21,8 @@ def after_install():
|
||||
if not frappe.db.exists("Role", "Analytics"):
|
||||
frappe.get_doc({"doctype": "Role", "role_name": "Analytics"}).insert()
|
||||
|
||||
create_shop_floor_roles()
|
||||
|
||||
set_single_defaults()
|
||||
setup_repost_defaults()
|
||||
create_print_setting_custom_fields()
|
||||
@@ -50,6 +52,15 @@ def make_default_operations():
|
||||
doc.insert(ignore_permissions=True)
|
||||
|
||||
|
||||
def create_shop_floor_roles():
|
||||
"""Roles that drive the Shop Floor page's two experiences (manager board vs operator view)."""
|
||||
for role_name in ("Shop Floor Manager", "Shop Floor User"):
|
||||
if not frappe.db.exists("Role", role_name):
|
||||
frappe.get_doc({"doctype": "Role", "role_name": role_name, "desk_access": 1}).insert(
|
||||
ignore_permissions=True
|
||||
)
|
||||
|
||||
|
||||
def set_single_defaults():
|
||||
for dt in (
|
||||
"Accounts Settings",
|
||||
@@ -406,3 +417,19 @@ DEFAULT_ROLE_PROFILES = {
|
||||
"Purchase Manager",
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def after_app_install(app_name=None):
|
||||
if app_name == "crm":
|
||||
from erpnext.crm.frappe_crm_api import remove_allowed_users_on_crm_install
|
||||
|
||||
remove_allowed_users_on_crm_install()
|
||||
|
||||
|
||||
def after_app_uninstall(app_name=None):
|
||||
if app_name == "crm":
|
||||
from erpnext.crm.frappe_crm_api import disable_frappe_crm_data_synchronization_on_crm_uninstall
|
||||
|
||||
disable_frappe_crm_data_synchronization_on_crm_uninstall()
|
||||
|
||||
frappe.db.commit() # nosemgrep
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"doctype": "Workspace",
|
||||
"for_user": "",
|
||||
"hide_custom": 0,
|
||||
"icon": "setting",
|
||||
"icon": "sliders-horizontal",
|
||||
"idx": 0,
|
||||
"is_hidden": 0,
|
||||
"label": "ERPNext Settings",
|
||||
@@ -69,7 +69,7 @@
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"modified": "2026-06-14 13:43:50.429297",
|
||||
"modified": "2026-07-14 12:00:00.000000",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "ERPNext Settings",
|
||||
@@ -97,7 +97,7 @@
|
||||
"type": "DocType"
|
||||
},
|
||||
{
|
||||
"icon": "accounting",
|
||||
"icon": "wallet",
|
||||
"label": "Accounts Settings",
|
||||
"link_to": "Accounts Settings",
|
||||
"type": "DocType"
|
||||
@@ -110,19 +110,19 @@
|
||||
"type": "DocType"
|
||||
},
|
||||
{
|
||||
"icon": "stock",
|
||||
"icon": "package",
|
||||
"label": "Stock Settings",
|
||||
"link_to": "Stock Settings",
|
||||
"type": "DocType"
|
||||
},
|
||||
{
|
||||
"icon": "sell",
|
||||
"icon": "store",
|
||||
"label": "Selling Settings",
|
||||
"link_to": "Selling Settings",
|
||||
"type": "DocType"
|
||||
},
|
||||
{
|
||||
"icon": "buying",
|
||||
"icon": "shopping-cart",
|
||||
"label": "Buying Settings",
|
||||
"link_to": "Buying Settings",
|
||||
"type": "DocType"
|
||||
@@ -158,7 +158,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "accounting",
|
||||
"icon": "wallet",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Accounts Settings",
|
||||
@@ -184,7 +184,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "sell",
|
||||
"icon": "store",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Selling Settings",
|
||||
@@ -197,7 +197,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "buying",
|
||||
"icon": "shopping-cart",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Buying Settings",
|
||||
@@ -210,7 +210,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "stock",
|
||||
"icon": "package",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Stock Settings",
|
||||
@@ -236,7 +236,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "projects",
|
||||
"icon": "folder-kanban",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Projects Settings",
|
||||
@@ -249,7 +249,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "crm",
|
||||
"icon": "handshake",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "CRM Settings",
|
||||
@@ -262,7 +262,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "support",
|
||||
"icon": "headset",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Support Settings",
|
||||
@@ -275,7 +275,7 @@
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "getting-started",
|
||||
"icon": "rocket",
|
||||
"indent": 1,
|
||||
"keep_closed": 1,
|
||||
"label": "Other Settings",
|
||||
@@ -355,6 +355,116 @@
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"icon": "building-2",
|
||||
"indent": 1,
|
||||
"keep_closed": 1,
|
||||
"label": "Organization",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Section Break"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 1,
|
||||
"icon": "building-2",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Company",
|
||||
"link_to": "Company",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "book-text",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Letter Head",
|
||||
"link_to": "Letter Head",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "file-user",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Department",
|
||||
"link_to": "Department",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "book-user",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Branch",
|
||||
"link_to": "Branch",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "users",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "User",
|
||||
"link_to": "User",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "user-round-check",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Role Permissions",
|
||||
"link_to": "permission-manager",
|
||||
"link_type": "Page",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 1,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "mail",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Email Account",
|
||||
"link_to": "Email Account",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"standard": 1,
|
||||
|
||||
@@ -8,19 +8,11 @@
|
||||
"doctype": "Workspace",
|
||||
"for_user": "",
|
||||
"hide_custom": 0,
|
||||
"icon": "home",
|
||||
"icon": "house",
|
||||
"idx": 0,
|
||||
"is_hidden": 0,
|
||||
"label": "Home",
|
||||
"links": [
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Accounting",
|
||||
"link_count": 0,
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
@@ -40,28 +32,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Chart of Accounts",
|
||||
"link_count": 0,
|
||||
"link_to": "Account",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Company",
|
||||
"link_count": 0,
|
||||
"link_to": "Company",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -84,28 +54,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Customer",
|
||||
"link_count": 0,
|
||||
"link_to": "Customer",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Supplier",
|
||||
"link_count": 0,
|
||||
"link_to": "Supplier",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -125,14 +73,6 @@
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Stock",
|
||||
"link_count": 0,
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -144,28 +84,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Item",
|
||||
"link_count": 0,
|
||||
"link_to": "Item",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Warehouse",
|
||||
"link_count": 0,
|
||||
"link_to": "Warehouse",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -188,17 +106,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Brand",
|
||||
"link_count": 0,
|
||||
"link_to": "Brand",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -210,28 +117,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Unit of Measure (UOM)",
|
||||
"link_count": 0,
|
||||
"link_to": "UOM",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Stock Reconciliation",
|
||||
"link_count": 0,
|
||||
"link_to": "Stock Reconciliation",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -251,25 +136,6 @@
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "CRM",
|
||||
"link_count": 0,
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Lead",
|
||||
"link_count": 0,
|
||||
"link_to": "Lead",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -292,28 +158,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Customer Group",
|
||||
"link_count": 0,
|
||||
"link_to": "Customer Group",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Territory",
|
||||
"link_count": 0,
|
||||
"link_to": "Territory",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -333,14 +177,6 @@
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Data Import and Settings",
|
||||
"link_count": 0,
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -352,28 +188,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Import Data",
|
||||
"link_count": 0,
|
||||
"link_to": "Data Import",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Opening Invoice Creation Tool",
|
||||
"link_count": 0,
|
||||
"link_to": "Opening Invoice Creation Tool",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -396,17 +210,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Chart of Accounts Importer",
|
||||
"link_count": 0,
|
||||
"link_to": "Chart of Accounts Importer",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -418,28 +221,6 @@
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Letter Head",
|
||||
"link_count": 0,
|
||||
"link_to": "Letter Head",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Email Account",
|
||||
"link_count": 0,
|
||||
"link_to": "Email Account",
|
||||
"link_type": "DocType",
|
||||
"onboard": 1,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
@@ -452,7 +233,7 @@
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"modified": "2026-07-01 14:22:16.927245",
|
||||
"modified": "2026-07-17 07:55:00.592653",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Home",
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
{
|
||||
"allowed_users": [
|
||||
{
|
||||
"user": "Administrator"
|
||||
},
|
||||
{
|
||||
"user": "Guest"
|
||||
},
|
||||
{
|
||||
"user": "accounts@test.com"
|
||||
},
|
||||
{
|
||||
"user": "ankush@erpnext.com"
|
||||
},
|
||||
{
|
||||
"user": "faris@erpnext.com"
|
||||
},
|
||||
{
|
||||
"user": "mention_test_user@example.com"
|
||||
},
|
||||
{
|
||||
"user": "project@frappe.io"
|
||||
},
|
||||
{
|
||||
"user": "rushabh@erpnext.com"
|
||||
},
|
||||
{
|
||||
"user": "saqib@erpnext.com"
|
||||
},
|
||||
{
|
||||
"user": "soham@frappe.io"
|
||||
},
|
||||
{
|
||||
"user": "sohamengineer123@gmail.com"
|
||||
},
|
||||
{
|
||||
"user": "sohamkulkarns9@gmail.com"
|
||||
},
|
||||
{
|
||||
"user": "sydel@frappe.io"
|
||||
},
|
||||
{
|
||||
"user": "test'5@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test1@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test2@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test3@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test4@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test@example.com"
|
||||
},
|
||||
{
|
||||
"user": "test@portal.com"
|
||||
},
|
||||
{
|
||||
"user": "testpassword@example.com"
|
||||
},
|
||||
{
|
||||
"user": "testperm@example.com"
|
||||
},
|
||||
{
|
||||
"user": "web@web.com"
|
||||
}
|
||||
],
|
||||
"app": "erpnext",
|
||||
"charts": [],
|
||||
"content": "[]",
|
||||
"creation": "2026-06-11 11:51:21.789012",
|
||||
"custom_blocks": [],
|
||||
"docstatus": 0,
|
||||
"doctype": "Workspace",
|
||||
"for_user": "",
|
||||
"hide_custom": 0,
|
||||
"icon": "organization",
|
||||
"idx": 0,
|
||||
"indicator_color": "green",
|
||||
"is_hidden": 0,
|
||||
"label": "Organization",
|
||||
"link_type": "DocType",
|
||||
"links": [],
|
||||
"modified": "2026-06-16 00:45:57.595188",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"module_onboarding": "Organization Onboarding",
|
||||
"name": "Organization",
|
||||
"number_cards": [],
|
||||
"owner": "Administrator",
|
||||
"public": 1,
|
||||
"quick_lists": [],
|
||||
"roles": [],
|
||||
"sequence_id": 46.0,
|
||||
"shortcuts": [],
|
||||
"sidebar_items": [
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 1,
|
||||
"icon": "organization",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Company",
|
||||
"link_to": "Company",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "book-text",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Letter Head",
|
||||
"link_to": "Letter Head",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "file-user",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Department",
|
||||
"link_to": "Department",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "book-user",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Branch",
|
||||
"link_to": "Branch",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "users",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "User",
|
||||
"link_to": "User",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "user-round-check",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Role Permissions",
|
||||
"link_to": "permission-manager",
|
||||
"link_type": "Page",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"child": 0,
|
||||
"collapsible": 1,
|
||||
"default_workspace": 0,
|
||||
"icon": "mail",
|
||||
"indent": 0,
|
||||
"keep_closed": 0,
|
||||
"label": "Email Account",
|
||||
"link_to": "Email Account",
|
||||
"link_type": "DocType",
|
||||
"open_in_new_tab": 0,
|
||||
"show_arrow": 0,
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"standard": 1,
|
||||
"title": "Organization",
|
||||
"type": "Workspace"
|
||||
}
|
||||
Reference in New Issue
Block a user