diff --git a/erpnext/accounts/doctype/cost_center/cost_center.py b/erpnext/accounts/doctype/cost_center/cost_center.py index 584e11c53f6..0294e78111c 100644 --- a/erpnext/accounts/doctype/cost_center/cost_center.py +++ b/erpnext/accounts/doctype/cost_center/cost_center.py @@ -18,6 +18,7 @@ class CostCenter(NestedSet): def validate(self): self.validate_mandatory() + self.validate_parent_cost_center() def validate_mandatory(self): if self.cost_center_name != self.company and not self.parent_cost_center: @@ -25,6 +26,12 @@ class CostCenter(NestedSet): elif self.cost_center_name == self.company and self.parent_cost_center: frappe.throw(_("Root cannot have a parent cost center")) + def validate_parent_cost_center(self): + if self.parent_cost_center: + if not frappe.db.get_value('Cost Center', self.parent_cost_center, 'is_group'): + frappe.throw(_("{0} is not a group node. Please select a group node as parent cost center").format( + frappe.bold(self.parent_cost_center))) + def convert_group_to_ledger(self): if self.check_if_child_exists(): frappe.throw(_("Cannot convert Cost Center to ledger as it has child nodes")) diff --git a/erpnext/accounts/doctype/cost_center/test_cost_center.py b/erpnext/accounts/doctype/cost_center/test_cost_center.py index c4fad753756..8f23d906760 100644 --- a/erpnext/accounts/doctype/cost_center/test_cost_center.py +++ b/erpnext/accounts/doctype/cost_center/test_cost_center.py @@ -1,12 +1,26 @@ # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals - - +import unittest import frappe + test_records = frappe.get_test_records('Cost Center') +class TestCostCenter(unittest.TestCase): + def test_cost_center_creation_against_child_node(self): + if not frappe.db.get_value('Cost Center', {'name': '_Test Cost Center 2 - _TC'}): + frappe.get_doc(test_records[1]).insert() + + cost_center = frappe.get_doc({ + 'doctype': 'Cost Center', + 'cost_center_name': '_Test Cost Center 3', + 'parent_cost_center': '_Test Cost Center 2 - _TC', + 'is_group': 0, + 'company': '_Test Company' + }) + + self.assertRaises(frappe.ValidationError, cost_center.save) def create_cost_center(**args): args = frappe._dict(args)