mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-01 20:48:27 +00:00
Merge pull request #40151 from frappe/mergify/bp/version-14-hotfix/pr-40095
fix: unique GL account for plaid bank accounts (backport #40095)
This commit is contained in:
2
.github/workflows/semantic-commits.yml
vendored
2
.github/workflows/semantic-commits.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 14
|
||||
node-version: 20
|
||||
check-latest: true
|
||||
|
||||
- name: Check commit titles
|
||||
|
||||
@@ -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", ""),
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user