[ Fixes ] v11 Tree based doctype testing (#14419)

* location tree fixes
validate if child present while deleting, filter lists down only group enabled node

* department tree fixes
Adding child fix if added from rootnode with company filter applied. Rename consistency added. Validation added in on_trash

* Company tree fix
Check if child exist while deleting a node validation added.

* Supplier Group tree fixes
on_trash validation added if child node present

* Cost Center tree fixes
Adding child to root node throws error because parent_cost_center picks up root name
This commit is contained in:
Zarrar 2018-06-08 14:33:15 +05:30 committed by Nabin Hait
parent 094617d29a
commit 7ab70ca2d7
8 changed files with 48 additions and 27 deletions

View File

@ -47,11 +47,6 @@ frappe.treeview_settings["Cost Center"] = {
frappe.set_route('query-report', 'Budget Variance Report', {company: get_company()});
}, __('Budget'));
},
onrender: function(node) {
if(node.is_root){
node.hide_add = true;
}
}
}

View File

@ -273,6 +273,10 @@ def add_cc(args=None):
args.doctype = "Cost Center"
args = make_tree_args(**args)
if args.parent_cost_center == args.company:
args.parent_cost_center = "{0} - {1}".format(args.parent_cost_center,
frappe.db.get_value('Company', args.company, 'abbr'))
cc = frappe.new_doc("Cost Center")
cc.update(args)

View File

@ -8,13 +8,13 @@ from frappe.model.document import Document
from frappe.utils.nestedset import NestedSet
class Location(NestedSet):
nsm_parent_field = 'parent_location'
def on_update(self):
self.update_nsm_model()
NestedSet.on_update(self)
def on_trash(self):
self.update_nsm_model()
def update_nsm_model(self):
NestedSet.validate_if_child_exists(self)
frappe.utils.nestedset.update_nsm(self)
@frappe.whitelist()

View File

@ -7,7 +7,12 @@ frappe.treeview_settings["Location"] = {
fieldname: "location",
fieldtype:"Link",
options: "Location",
label: __("Location")
label: __("Location"),
get_query: function() {
return {
filters: [["Location", "is_group", "=", 1]]
};
}
},
],
breadcrumb: "Assets",

View File

@ -13,8 +13,7 @@ class Department(NestedSet):
def autoname(self):
root = get_root_of("Department")
if root and self.department_name != root:
abbr = frappe.db.get_value('Company', self.company, 'abbr')
self.name = '{0} - {1}'.format(self.department_name, abbr)
self.name = get_abbreviated_name(self.department_name, self.company)
else:
self.name = self.department_name
@ -24,11 +23,15 @@ class Department(NestedSet):
if root:
self.parent_department = root
def update_nsm_model(self):
frappe.utils.nestedset.update_nsm(self)
def before_rename(self, old, new, merge=False):
# renaming consistency with abbreviation
if not frappe.db.get_value('Company', self.company, 'abbr') in new:
new = get_abbreviated_name(new, self.company)
return new
def on_update(self):
self.update_nsm_model()
NestedSet.on_update(self)
def on_trash(self):
super(Department, self).on_trash()
@ -37,11 +40,16 @@ class Department(NestedSet):
def on_doctype_update():
frappe.db.add_index("Department", ["lft", "rgt"])
def get_abbreviated_name(name, company):
abbr = frappe.db.get_value('Company', company, 'abbr')
new_name = '{0} - {1}'.format(name, abbr)
return new_name
@frappe.whitelist()
def get_children(doctype, parent=None, company=None, is_root=False):
condition = ''
if company == parent:
condition = "name='%s'".format(get_root_of("Department"))
condition = "name='{0}'".format(get_root_of("Department"))
elif company:
condition = "parent_department='{0}' and company='{1}'".format(parent, company)
else:
@ -55,3 +63,14 @@ def get_children(doctype, parent=None, company=None, is_root=False):
where
{condition}
order by name""".format(doctype=doctype, condition=condition), as_dict=1)
@frappe.whitelist()
def add_node():
from frappe.desk.treeview import make_tree_args
args = frappe.form_dict
args = make_tree_args(**args)
if args.parent_department == args.company:
args.parent_department = None
frappe.get_doc(args).insert()

View File

@ -1,6 +1,7 @@
frappe.treeview_settings["Department"] = {
ignore_fields:["parent_department"],
get_tree_nodes: 'erpnext.hr.doctype.department.department.get_children',
add_tree_node: 'erpnext.hr.doctype.department.department.add_node',
filters: [
{
fieldname: "company",

View File

@ -82,7 +82,7 @@ class Company(NestedSet):
frappe.throw(_("Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency."))
def on_update(self):
self.update_nsm_model()
NestedSet.on_update(self)
if not frappe.db.sql("""select name from tabAccount
where company=%s and docstatus<2 limit 1""", self.name):
if not frappe.local.flags.ignore_chart_of_accounts:
@ -284,14 +284,12 @@ class Company(NestedSet):
def abbreviate(self):
self.abbr = ''.join([c[0].upper() for c in self.company_name.split()])
def update_nsm_model(self):
frappe.utils.nestedset.update_nsm(self)
def on_trash(self):
"""
Trash accounts and cost centers for this company if no gl entry exists
"""
self.update_nsm_model()
NestedSet.validate_if_child_exists(self)
frappe.utils.nestedset.update_nsm(self)
rec = frappe.db.sql("SELECT name from `tabGL Entry` where company = %s", self.name)
if not rec:

View File

@ -7,17 +7,16 @@ import frappe
from frappe.utils.nestedset import NestedSet, get_root_of
class SupplierGroup(NestedSet):
nsm_parent_field = 'parent_supplier_group';
nsm_parent_field = 'parent_supplier_group'
def validate(self):
if not self.parent_supplier_group:
self.parent_supplier_group = get_root_of("Supplier Group")
def update_nsm_model(self):
frappe.utils.nestedset.update_nsm(self)
def on_update(self):
self.update_nsm_model()
NestedSet.on_update(self)
self.validate_one_root()
def on_trash(self):
self.update_nsm_model()
NestedSet.validate_if_child_exists(self)
frappe.utils.nestedset.update_nsm(self)