Propogate root type and report type into children based on parent
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index f1d822a..46f7520 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -23,6 +23,7 @@
def validate(self):
self.validate_parent()
self.validate_root_details()
+ self.set_root_and_report_type()
self.validate_mandatory()
self.validate_warehouse_account()
self.validate_frozen_accounts_modifier()
@@ -32,7 +33,7 @@
"""Fetch Parent Details and validate parent account"""
if self.parent_account:
par = frappe.db.get_value("Account", self.parent_account,
- ["name", "is_group", "report_type", "root_type", "company"], as_dict=1)
+ ["name", "is_group", "company"], as_dict=1)
if not par:
throw(_("Account {0}: Parent account {1} does not exist").format(self.name, self.parent_account))
elif par.name == self.name:
@@ -43,10 +44,24 @@
throw(_("Account {0}: Parent account {1} does not belong to company: {2}")
.format(self.name, self.parent_account, self.company))
+ def set_root_and_report_type(self):
+ if self.parent_account:
+ par = frappe.db.get_value("Account", self.parent_account, ["report_type", "root_type"], as_dict=1)
+
if par.report_type:
self.report_type = par.report_type
if par.root_type:
self.root_type = par.root_type
+
+ if self.is_group:
+ db_value = frappe.db.get_value("Account", self.name, ["report_type", "root_type"], as_dict=1)
+ if db_value:
+ if self.report_type != db_value.report_type:
+ frappe.db.sql("update `tabAccount` set report_type=%s where lft > %s and rgt < %s",
+ (self.report_type, self.lft, self.rgt))
+ if self.root_type != db_value.root_type:
+ frappe.db.sql("update `tabAccount` set root_type=%s where lft > %s and rgt < %s",
+ (self.root_type, self.lft, self.rgt))
def validate_root_details(self):
# does not exists parent
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 75c1dff..78e1609 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -183,4 +183,5 @@
execute:frappe.delete_doc("Module Def", "Contacts")
erpnext.patches.v5_4.fix_reserved_qty_and_sle_for_packed_items # 30-07-2015
execute:frappe.reload_doctype("Leave Type")
-execute:frappe.db.sql("update `tabLeave Type` set include_holiday=0")
\ No newline at end of file
+execute:frappe.db.sql("update `tabLeave Type` set include_holiday=0")
+erpnext.patches.v5_4.set_root_and_report_type
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/set_root_and_report_type.py b/erpnext/patches/v5_4/set_root_and_report_type.py
new file mode 100644
index 0000000..9147644
--- /dev/null
+++ b/erpnext/patches/v5_4/set_root_and_report_type.py
@@ -0,0 +1,12 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ roots = frappe.db.sql("""select lft, rgt, report_type, root_type
+ from `tabAccount` where ifnull(parent_account, '')=''""", as_dict=1)
+ for d in roots:
+ frappe.db.sql("update `tabAccount` set report_type=%s, root_type=%s where lft > %s and rgt < %s",
+ (d.report_type, d.root_type, d.lft, d.rgt))
\ No newline at end of file