refactor: (coa importer) create coa tree with account no & account name (#23601)
diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
index 342f21b..03c3eb0 100644
--- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
+++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
@@ -22,9 +22,10 @@
'allow_account_creation_against_child_company'])
if parent_company and (not allow_account_creation_against_child_company):
- frappe.throw(_("""{0} is a child company. Please import accounts against parent company
- or enable {1} in company master""").format(frappe.bold(company),
- frappe.bold('Allow Account Creation Against Child Company')), title='Wrong Company')
+ msg = _("{} is a child company. ").format(frappe.bold(company))
+ msg += _("Please import accounts against parent company or enable {} in company master.").format(
+ frappe.bold('Allow Account Creation Against Child Company'))
+ frappe.throw(msg, title=_('Wrong Company'))
if frappe.db.get_all('GL Entry', {"company": company}, "name", limit=1):
return False
@@ -74,7 +75,9 @@
if as_dict:
data.append({frappe.scrub(header): row[index] for index, header in enumerate(headers)})
else:
- if not row[1]: row[1] = row[0]
+ if not row[1]:
+ row[1] = row[0]
+ row[3] = row[2]
data.append(row)
# convert csv data
@@ -96,7 +99,9 @@
if as_dict:
data.append({frappe.scrub(header): row[index] for index, header in enumerate(headers)})
else:
- if not row[1]: row[1] = row[0]
+ if not row[1]:
+ row[1] = row[0]
+ row[3] = row[2]
data.append(row)
return data
@@ -147,7 +152,13 @@
from frappe import _
for row in data:
- account_name, parent_account = row[0:2]
+ account_name, parent_account, account_number, parent_account_number = row[0:4]
+ if account_number:
+ account_name = "{} - {}".format(account_number, account_name)
+ if parent_account_number:
+ parent_account_number = cstr(parent_account_number).strip()
+ parent_account = "{} - {}".format(parent_account_number, parent_account)
+
if parent_account == account_name == child:
return [parent_account]
elif account_name == child:
@@ -159,20 +170,23 @@
charts_map, paths = {}, []
- line_no = 3
+ line_no = 2
error_messages = []
for i in data:
- account_name, dummy, account_number, is_group, account_type, root_type = i
+ account_name, parent_account, account_number, parent_account_number, is_group, account_type, root_type = i
if not account_name:
error_messages.append("Row {0}: Please enter Account Name".format(line_no))
+ if account_number:
+ account_number = cstr(account_number).strip()
+ account_name = "{} - {}".format(account_number, account_name)
+
charts_map[account_name] = {}
if cint(is_group) == 1: charts_map[account_name]["is_group"] = is_group
if account_type: charts_map[account_name]["account_type"] = account_type
if root_type: charts_map[account_name]["root_type"] = root_type
- if account_number: charts_map[account_name]["account_number"] = account_number
path = return_parent(data, account_name)[::-1]
paths.append(path) # List of path is created
line_no += 1
@@ -221,7 +235,7 @@
def get_template(template_type):
- fields = ["Account Name", "Parent Account", "Account Number", "Is Group", "Account Type", "Root Type"]
+ fields = ["Account Name", "Parent Account", "Account Number", "Parent Account Number", "Is Group", "Account Type", "Root Type"]
writer = UnicodeWriter()
writer.writerow(fields)
@@ -241,23 +255,23 @@
def get_sample_template(writer):
template = [
- ["Application Of Funds(Assets)", "", "", 1, "", "Asset"],
- ["Sources Of Funds(Liabilities)", "", "", 1, "", "Liability"],
- ["Equity", "", "", 1, "", "Equity"],
- ["Expenses", "", "", 1, "", "Expense"],
- ["Income", "", "", 1, "", "Income"],
- ["Bank Accounts", "Application Of Funds(Assets)", "", 1, "Bank", "Asset"],
- ["Cash In Hand", "Application Of Funds(Assets)", "", 1, "Cash", "Asset"],
- ["Stock Assets", "Application Of Funds(Assets)", "", 1, "Stock", "Asset"],
- ["Cost Of Goods Sold", "Expenses", "", 0, "Cost of Goods Sold", "Expense"],
- ["Asset Depreciation", "Expenses", "", 0, "Depreciation", "Expense"],
- ["Fixed Assets", "Application Of Funds(Assets)", "", 0, "Fixed Asset", "Asset"],
- ["Accounts Payable", "Sources Of Funds(Liabilities)", "", 0, "Payable", "Liability"],
- ["Accounts Receivable", "Application Of Funds(Assets)", "", 1, "Receivable", "Asset"],
- ["Stock Expenses", "Expenses", "", 0, "Stock Adjustment", "Expense"],
- ["Sample Bank", "Bank Accounts", "", 0, "Bank", "Asset"],
- ["Cash", "Cash In Hand", "", 0, "Cash", "Asset"],
- ["Stores", "Stock Assets", "", 0, "Stock", "Asset"],
+ ["Application Of Funds(Assets)", "", "", "", 1, "", "Asset"],
+ ["Sources Of Funds(Liabilities)", "", "", "", 1, "", "Liability"],
+ ["Equity", "", "", "", 1, "", "Equity"],
+ ["Expenses", "", "", "", 1, "", "Expense"],
+ ["Income", "", "", "", 1, "", "Income"],
+ ["Bank Accounts", "Application Of Funds(Assets)", "", "", 1, "Bank", "Asset"],
+ ["Cash In Hand", "Application Of Funds(Assets)", "", "", 1, "Cash", "Asset"],
+ ["Stock Assets", "Application Of Funds(Assets)", "", "", 1, "Stock", "Asset"],
+ ["Cost Of Goods Sold", "Expenses", "", "", 0, "Cost of Goods Sold", "Expense"],
+ ["Asset Depreciation", "Expenses", "", "", 0, "Depreciation", "Expense"],
+ ["Fixed Assets", "Application Of Funds(Assets)", "", "", 0, "Fixed Asset", "Asset"],
+ ["Accounts Payable", "Sources Of Funds(Liabilities)", "", "", 0, "Payable", "Liability"],
+ ["Accounts Receivable", "Application Of Funds(Assets)", "", "", 1, "Receivable", "Asset"],
+ ["Stock Expenses", "Expenses", "", "", 0, "Stock Adjustment", "Expense"],
+ ["Sample Bank", "Bank Accounts", "", "", 0, "Bank", "Asset"],
+ ["Cash", "Cash In Hand", "", "", 0, "Cash", "Asset"],
+ ["Stores", "Stock Assets", "", "", 0, "Stock", "Asset"],
]
for row in template: