Skip to content

Commit

Permalink
fix: Validate party on non receivable / payable account (backport #44883
Browse files Browse the repository at this point in the history
) (#44973)

* fix: validate party on non receivable / payable account

(cherry picked from commit c6a2d86)

* test: add unit test to validate on non receivable / payable account

(cherry picked from commit a10a15b)

* fix: Set account type payable for advance account

(cherry picked from commit 8abbece)

---------

Co-authored-by: Karuppasamy923 <[email protected]>
  • Loading branch information
mergify[bot] and Karuppasamy923 authored Dec 31, 2024
1 parent 9853bd9 commit d6903fb
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 2 deletions.
7 changes: 6 additions & 1 deletion erpnext/accounts/doctype/gl_entry/gl_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_checks_for_pl_and_bs_accounts,
)
from erpnext.accounts.party import validate_party_frozen_disabled, validate_party_gle_currency
from erpnext.accounts.party import (
validate_account_party_type,
validate_party_frozen_disabled,
validate_party_gle_currency,
)
from erpnext.accounts.utils import get_account_currency, get_fiscal_year
from erpnext.exceptions import InvalidAccountCurrency

Expand Down Expand Up @@ -268,6 +272,7 @@ def validate_cost_center(self):

def validate_party(self):
validate_party_frozen_disabled(self.party_type, self.party)
validate_account_party_type(self)

def validate_currency(self):
company_currency = erpnext.get_company_currency(self.company)
Expand Down
45 changes: 45 additions & 0 deletions erpnext/accounts/doctype/gl_entry/test_gl_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,48 @@ def test_rename_entries(self):
"SELECT current from tabSeries where name = %s", naming_series
)[0][0]
self.assertEqual(old_naming_series_current_value + 2, new_naming_series_current_value)

def test_validate_account_party_type(self):
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC",
100,
"_Test Cost Center - _TC",
save=False,
submit=False,
)

for row in jv.accounts:
row.party_type = "Supplier"
break

jv.save()
try:
jv.submit()
except Exception as e:
self.assertEqual(
str(e),
"Party Type and Party can only be set for Receivable / Payable account_Test Account Cost for Goods Sold - _TC",
)

jv1 = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC",
100,
"_Test Cost Center - _TC",
save=False,
submit=False,
)

for row in jv.accounts:
row.party_type = "Customer"
break

jv1.save()
try:
jv1.submit()
except Exception as e:
self.assertEqual(
str(e),
"Party Type and Party can only be set for Receivable / Payable account_Test Account Cost for Goods Sold - _TC",
)
Original file line number Diff line number Diff line change
Expand Up @@ -1479,7 +1479,7 @@ def test_advance_as_liability_against_order(self):
parent_account="Current Liabilities - _TC",
account_name="Advances Paid",
company=company,
account_type="Liability",
account_type="Payable",
)

frappe.db.set_value(
Expand Down
11 changes: 11 additions & 0 deletions erpnext/accounts/party.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,17 @@ def validate_party_frozen_disabled(party_type, party_name):
frappe.msgprint(_("{0} {1} is not active").format(party_type, party_name), alert=True)


def validate_account_party_type(self):
if self.party_type and self.party:
account_type = frappe.get_cached_value("Account", self.account, "account_type")
if account_type and (account_type not in ["Receivable", "Payable"]):
frappe.throw(
_(
"Party Type and Party can only be set for Receivable / Payable account<br><br>" "{0}"
).format(self.account)
)


def get_dashboard_info(party_type, party, loyalty_program=None):
current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True)

Expand Down

0 comments on commit d6903fb

Please sign in to comment.