From 174567350e232073d4c51756186f7ae894b322ab Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 4 Apr 2024 16:54:42 +0530 Subject: [PATCH] fix: Get default party bank account and company bank account for a party (cherry picked from commit f87be1d96e406f20c191db011bfc941270a17ee5) --- .../doctype/bank_account/bank_account.py | 37 +++++++++++++++++-- .../doctype/payment_entry/payment_entry.py | 3 +- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/bank_account/bank_account.py b/erpnext/accounts/doctype/bank_account/bank_account.py index 39d94ae1c09..c7c693a1cba 100644 --- a/erpnext/accounts/doctype/bank_account/bank_account.py +++ b/erpnext/accounts/doctype/bank_account/bank_account.py @@ -54,6 +54,7 @@ class BankAccount(Document): self.validate_company() self.validate_iban() self.validate_account() + self.update_default_bank_account() def validate_account(self): if self.account: @@ -100,23 +101,51 @@ class BankAccount(Document): if to_check % 97 != 1: frappe.throw(_("IBAN is not valid")) + def update_default_bank_account(self): + if self.is_default and not self.disabled: + frappe.db.set_value( + "Bank Account", + { + "party_type": self.party_type, + "party": self.party, + "is_company_account": self.is_company_account, + "is_default": 1, + "disabled": 0, + }, + "is_default", + 0, + ) + @frappe.whitelist() def make_bank_account(doctype, docname): doc = frappe.new_doc("Bank Account") doc.party_type = doctype doc.party = docname - doc.is_default = 1 return doc def get_party_bank_account(party_type, party): - return frappe.db.get_value(party_type, party, "default_bank_account") + return frappe.db.get_value( + "Bank Account", + {"party_type": party_type, "party": party, "is_default": 1, "disabled": 0}, + "name", + ) -def get_default_company_bank_account(company): - return frappe.db.get_value("Bank Account", {"company": company, "is_company_account": 1, "is_default": 1}) +def get_default_company_bank_account(company, party_type, party): + default_company_bank_account = frappe.db.get_value(party_type, party, "default_bank_account") + if default_company_bank_account: + if company != frappe.get_cached_value("Bank Account", default_company_bank_account, "company"): + default_company_bank_account = None + + if not default_company_bank_account: + default_company_bank_account = frappe.db.get_value( + "Bank Account", {"company": company, "is_company_account": 1, "is_default": 1} + ) + + return default_company_bank_account @frappe.whitelist() diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index a07517cc11f..e782e373678 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -2036,8 +2036,7 @@ def get_party_details(company, party_type, party, date, cost_center=None): if party_type in ["Customer", "Supplier"]: party_bank_account = get_party_bank_account(party_type, party) - bank_account = get_default_company_bank_account(company) - + bank_account = get_default_company_bank_account(company, party_type, party) return { "party_account": party_account, "party_name": party_name,