Sort accounts by account number in financial statements (#13423)

diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index ffe860e..dd47ca0 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -297,8 +297,7 @@
 	def add_to_list(parent, level):
 		if level < depth:
 			children = parent_children_map.get(parent) or []
-			if parent == None:
-				sort_root_accounts(children)
+			sort_accounts(children, is_root=True if parent==None else False)
 
 			for child in children:
 				child.indent = level
@@ -310,25 +309,26 @@
 	return filtered_accounts, accounts_by_name, parent_children_map
 
 
-def sort_root_accounts(roots):
+def sort_accounts(accounts, is_root=False, key="name"):
 	"""Sort root types as Asset, Liability, Equity, Income, Expense"""
 
-	def compare_roots(a, b):
-		if a.value and re.split('\W+', a.value)[0].isdigit():
-			# if chart of accounts is numbered, then sort by number
-			return cmp(a.value, b.value)
-		if a.report_type != b.report_type and a.report_type == "Balance Sheet":
-			return -1
-		if a.root_type != b.root_type and a.root_type == "Asset":
-			return -1
-		if a.root_type == "Liability" and b.root_type == "Equity":
-			return -1
-		if a.root_type == "Income" and b.root_type == "Expense":
-			return -1
+	def compare_accounts(a, b):
+		if is_root:
+			if a.report_type != b.report_type and a.report_type == "Balance Sheet":
+				return -1
+			if a.root_type != b.root_type and a.root_type == "Asset":
+				return -1
+			if a.root_type == "Liability" and b.root_type == "Equity":
+				return -1
+			if a.root_type == "Income" and b.root_type == "Expense":
+				return -1
+		else:
+			if re.split('\W+', a[key])[0].isdigit():
+				# if chart of accounts is numbered, then sort by number
+				return cmp(a[key], b[key])
 		return 1
 
-	roots.sort(key = functools.cmp_to_key(compare_roots))
-
+	accounts.sort(key = functools.cmp_to_key(compare_accounts))
 
 def set_gl_entries_by_account(
 		company, from_date, to_date, root_lft, root_rgt, filters, gl_entries_by_account, ignore_closing_entries=False):
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 0e35768..b214908 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -663,7 +663,7 @@
 
 @frappe.whitelist()
 def get_children(doctype, parent, company, is_root=False):
-	from erpnext.accounts.report.financial_statements import sort_root_accounts
+	from erpnext.accounts.report.financial_statements import sort_accounts
 
 	fieldname = frappe.db.escape(doctype.lower().replace(' ','_'))
 	doctype = frappe.db.escape(doctype)
@@ -678,9 +678,6 @@
 			and `company` = %s	and docstatus<2
 			order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype),
 				company, as_dict=1)
-
-		if parent=="Accounts":
-			sort_root_accounts(acc)
 	else:
 		# other
 		fields = ", account_currency" if doctype=="Account" else ""
@@ -693,6 +690,7 @@
 				parent, as_dict=1)
 
 	if doctype == 'Account':
+		sort_accounts(acc, is_root, key="value")
 		company_currency = frappe.db.get_value("Company", company, "default_currency")
 		for each in acc:
 			each["company_currency"] = company_currency