diff --git a/.github/workflows/semantic-commits.yml b/.github/workflows/semantic-commits.yml index 1744bc33a9e..da3d564e66c 100644 --- a/.github/workflows/semantic-commits.yml +++ b/.github/workflows/semantic-commits.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14 + node-version: 20 check-latest: true - name: Check commit titles diff --git a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.py b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.py index 5354d0d6c13..af1052a3700 100644 --- a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.py +++ b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.py @@ -10,7 +10,6 @@ from frappe.model.document import Document from frappe.utils import add_months, formatdate, getdate, sbool, today from plaid.errors import ItemError -from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from erpnext.erpnext_integrations.doctype.plaid_settings.plaid_connector import PlaidConnector @@ -74,9 +73,15 @@ def add_bank_accounts(response, bank, company): bank = json.loads(bank) result = [] - default_gl_account = get_default_bank_cash_account(company, "Bank") - if not default_gl_account: - frappe.throw(_("Please setup a default bank account for company {0}").format(company)) + parent_gl_account = frappe.db.get_all( + "Account", {"company": company, "account_type": "Bank", "is_group": 1, "disabled": 0} + ) + if not parent_gl_account: + frappe.throw( + _( + "Please setup and enable a group account with the Account Type - {0} for the company {1}" + ).format(frappe.bold("Bank"), company) + ) for account in response["accounts"]: acc_type = frappe.db.get_value("Bank Account Type", account["type"]) @@ -92,11 +97,22 @@ def add_bank_accounts(response, bank, company): if not existing_bank_account: try: + gl_account = frappe.get_doc( + { + "doctype": "Account", + "account_name": account["name"] + " - " + response["institution"]["name"], + "parent_account": parent_gl_account[0].name, + "account_type": "Bank", + "company": company, + } + ) + gl_account.insert(ignore_if_duplicate=True) + new_account = frappe.get_doc( { "doctype": "Bank Account", "bank": bank["bank_name"], - "account": default_gl_account.account, + "account": gl_account.name, "account_name": account["name"], "account_type": account.get("type", ""), "account_subtype": account.get("subtype", ""), diff --git a/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py b/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py index 6d34a204cd2..7312d8a5ad4 100644 --- a/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py +++ b/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py @@ -7,7 +7,6 @@ import unittest import frappe from frappe.utils.response import json_handler -from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings import ( add_account_subtype, add_account_type, @@ -43,7 +42,7 @@ class TestPlaidSettings(unittest.TestCase): add_account_subtype("loan") self.assertEqual(frappe.get_doc("Bank Account Subtype", "loan").name, "loan") - def test_default_bank_account(self): + def test_parent_bank_account_validation(self): if not frappe.db.exists("Bank", "Citi"): frappe.get_doc({"doctype": "Bank", "bank_name": "Citi"}).insert() @@ -71,12 +70,19 @@ class TestPlaidSettings(unittest.TestCase): bank = json.dumps(frappe.get_doc("Bank", "Citi").as_dict(), default=json_handler) company = frappe.db.get_single_value("Global Defaults", "default_company") - frappe.db.set_value("Company", company, "default_bank_account", None) + group_bank_account = frappe.db.get_all( + "Account", {"company": company, "account_type": "Bank", "is_group": 1}, pluck="name" + ) + if group_bank_account: + frappe.db.set_value("Account", group_bank_account[0], "disabled", 1) self.assertRaises( frappe.ValidationError, add_bank_accounts, response=bank_accounts, bank=bank, company=company ) + if group_bank_account: + frappe.db.set_value("Account", group_bank_account[0], "disabled", 0) + def test_new_transaction(self): if not frappe.db.exists("Bank", "Citi"): frappe.get_doc({"doctype": "Bank", "bank_name": "Citi"}).insert() @@ -106,14 +112,6 @@ class TestPlaidSettings(unittest.TestCase): bank = json.dumps(frappe.get_doc("Bank", "Citi").as_dict(), default=json_handler) company = frappe.db.get_single_value("Global Defaults", "default_company") - if frappe.db.get_value("Company", company, "default_bank_account") is None: - frappe.db.set_value( - "Company", - company, - "default_bank_account", - get_default_bank_cash_account(company, "Cash").get("account"), - ) - add_bank_accounts(bank_accounts, bank, company) transactions = {