diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js index c310e26a656..0b7cff3d63c 100644 --- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js +++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js @@ -20,30 +20,57 @@ frappe.ui.form.on('Chart of Accounts Importer', { }, download_template: function(frm) { + var d = new frappe.ui.Dialog({ + title: __("Download Template"), + fields: [ + { + label : "File Type", + fieldname: "file_type", + fieldtype: "Select", + reqd: 1, + options: ["Excel", "CSV"] + }, + { + label: "Template Type", + fieldname: "template_type", + fieldtype: "Select", + reqd: 1, + options: ["Sample Template", "Blank Template"], + change: () => { + let template_type = d.get_value('template_type'); - if (!frm.doc.template_type) { - frappe.throw(__('Please select Template Type to download template')); - } + if (template_type === "Sample Template") { + d.set_df_property('template_type', 'description', + `The Sample Template contains all the required accounts pre filled in the template. + You can add more accounts or change existing accounts in the template as per your choice.`); + } else { + d.set_df_property('template_type', 'description', + `The Blank Template contains just the account type and root type required to build the Chart + of Accounts. Please enter the account names and add more rows as per your requirement.`); + } + } + } + ], + primary_action: function() { + var data = d.get_values(); - open_url_post( - '/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template', - { - file_type: frm.doc.file_type, - template_type: frm.doc.template_type - } - ); - }, + if (!data.template_type) { + frappe.throw(__('Please select Template Type to download template')); + } - template_type: function(frm) { - if (frm.doc.template_type == 'Sample Template') { - frm.set_df_property('template_type', 'description', - `The Sample Template contains all the required accounts pre filled in the template. - You can add more accounts or change existing accounts in the template as per your choice.`); - } else { - frm.set_df_property('template_type', 'description', - `The Blank Template contains just the account type and root type required to build the Chart - of Accounts. Please enter the account names and add more rows as per your requirement.`); - } + open_url_post( + '/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template', + { + file_type: data.file_type, + template_type: data.template_type + } + ); + + d.hide(); + }, + primary_action_label: __('Download') + }); + d.show(); }, import_file: function (frm) { @@ -96,7 +123,7 @@ var validate_csv_data = function(frm) { }; var create_import_button = function(frm) { - frm.page.set_primary_action(__("Start Import"), function () { + frm.page.set_primary_action(__("Import"), function () { frappe.call({ method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.import_coa", args: { diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.json b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.json index b4c4fce3511..ee095ac386a 100644 --- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.json +++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.json @@ -9,10 +9,7 @@ "engine": "InnoDB", "field_order": [ "company", - "file_type", - "template_type", "download_template", - "import_file_section", "import_file", "chart_preview", "chart_tree" @@ -26,11 +23,7 @@ "options": "Company" }, { - "fieldname": "import_file_section", - "fieldtype": "Section Break" - }, - { - "depends_on": "eval:!doc.__islocal", + "depends_on": "company", "fieldname": "import_file", "fieldtype": "Attach", "label": "Attach custom Chart of Accounts file" @@ -51,28 +44,13 @@ "fieldname": "download_template", "fieldtype": "Button", "label": "Download Template" - }, - { - "depends_on": "company", - "fieldname": "file_type", - "fieldtype": "Select", - "label": "File Type", - "options": "CSV\nExcel" - }, - { - "depends_on": "company", - "fieldname": "template_type", - "fieldtype": "Select", - "label": "Template Type", - "options": "\nBlank Template\nSample Template", - "reqd": 1 } ], "hide_toolbar": 1, "in_create": 1, "issingle": 1, "links": [], - "modified": "2020-02-24 19:07:52.670868", + "modified": "2020-02-28 08:49:11.422846", "modified_by": "Administrator", "module": "Accounts", "name": "Chart of Accounts Importer", @@ -88,5 +66,6 @@ ], "quick_entry": 1, "read_only": 1, + "sort_field": "modified", "sort_order": "DESC" } \ No newline at end of file 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 12e147192cb..4100699fe39 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,9 @@ 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 child company. Please import accounts in parent 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'))) + frappe.bold('Allow Account Creation Against Child Company')), title='Wrong Company') if frappe.db.get_all('GL Entry', {"company": company}, "name", limit=1): return False @@ -102,7 +102,7 @@ def generate_data_from_excel(file_doc, extension, as_dict=False): return data @frappe.whitelist() -def get_coa(doctype, parent, file_type, is_root=False, file_name=None): +def get_coa(doctype, parent, is_root=False, file_name=None): ''' called by tree view (to fetch node's children) ''' file_doc, extension = get_file(file_name) @@ -144,15 +144,18 @@ def build_forest(data): # returns the path of any node in list format def return_parent(data, child): + from frappe import _ + for row in data: account_name, parent_account = row[0:2] if parent_account == account_name == child: return [parent_account] elif account_name == child: parent_account_list = return_parent(data, parent_account) - if not parent_account_list and parent_account: - frappe.throw(_("The parent account {0} does not exists") - .format(parent_account)) + if not parent_account_list: + frappe.throw(_("The parent account {0} does not exists in the uploaded template").format( + frappe.bold(parent_account))) + return [child] + parent_account_list charts_map, paths = {}, [] @@ -228,7 +231,7 @@ def get_template(template_type): writer.writerow(['', '', '', 1, '', root_type]) for account in get_mandatory_group_accounts(): - writer.writerow(['', '', '', 1, account, 'Asset']) + writer.writerow(['', '', '', 1, account, "Asset"]) for account_type in get_mandatory_account_types(): writer.writerow(['', '', '', 0, account_type.get('account_type'), account_type.get('root_type')]) @@ -239,24 +242,23 @@ def get_template(template_type): def get_sample_template(writer): template = [ - ['Account Name', 'Parent Account', 'Account Number', 'Is Group', 'Account Type', 'Root Type'], - ['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 Asset', '', 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: