diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 089da1fdb2c..b00b584d768 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -613,6 +613,12 @@ class JournalEntry(AccountsController): d.idx, d.account, d.party_type ) ) + elif d.party_type or d.party: + frappe.throw( + _( + "Row {0}: Party Type and Party can only be set for Receivable / Payable account, but account {1} is of type {2}" + ).format(d.idx, d.account, account_type or _("None")) + ) def check_credit_limit(self): customers = list( diff --git a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py index 581a0866721..980b920f576 100644 --- a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py @@ -609,6 +609,13 @@ class TestJournalEntry(ERPNextTestSuite): jv.save() self.assertRaises(frappe.ValidationError, jv.submit) + def test_party_not_allowed_for_non_receivable_payable_account(self): + customer = make_customer("_Test New Customer") + jv = make_journal_entry(account1="_Test Cash - _TC", account2="_Test Bank - _TC", amount=100, save=False) + jv.accounts[0].party_type = "Customer" + jv.accounts[0].party = customer + self.assertRaises(frappe.ValidationError, jv.save) + def make_journal_entry( account1,