From 3dfa017f1df178b1fd965c426e81e0c5989d7b16 Mon Sep 17 00:00:00 2001 From: Saqib Date: Fri, 26 Feb 2021 16:50:22 +0530 Subject: [PATCH] refactor: (coa importer) create coa tree with account no & account name (#23601) --- .../chart_of_accounts_importer.py | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) 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 342f21b93a..03c3eb0ac0 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 @@ def validate_company(company): '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 @@ def generate_data_from_csv(file_doc, as_dict=False): 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 @@ def generate_data_from_excel(file_doc, extension, as_dict=False): 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 @@ def build_forest(data): 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 @@ def build_forest(data): 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 download_template(file_type, template_type): 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_template(template_type): 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: