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: