From 2cc02e61d94bd40c653d69e251ae685124295037 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 3 Jul 2026 14:15:19 +0530 Subject: [PATCH] fix: validate Journal Entry Template rows belong to its company --- .../journal_entry_template.py | 14 ++++++++++++++ .../test_journal_entry_template.py | 8 ++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.py b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.py index f86706774fc..e552ee1ca20 100644 --- a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.py +++ b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.py @@ -45,6 +45,20 @@ class JournalEntryTemplate(Document): def validate(self): self.validate_party() + self.validate_account_company() + + def validate_account_company(self): + """Each row's account must belong to the template's company.""" + for account in self.accounts: + if ( + account.account + and frappe.get_cached_value("Account", account.account, "company") != self.company + ): + frappe.throw( + _("Row {0}: Account {1} does not belong to company {2}").format( + account.idx, account.account, self.company + ) + ) def validate_party(self): """ diff --git a/erpnext/accounts/doctype/journal_entry_template/test_journal_entry_template.py b/erpnext/accounts/doctype/journal_entry_template/test_journal_entry_template.py index 9b94cd4e35e..8b6bed1bca0 100644 --- a/erpnext/accounts/doctype/journal_entry_template/test_journal_entry_template.py +++ b/erpnext/accounts/doctype/journal_entry_template/test_journal_entry_template.py @@ -34,10 +34,7 @@ class TestJournalEntryTemplate(ERPNextTestSuite): doc = self.make_template([{"account": "Debtors - _TC", "party": "_Test Customer"}]) self.assertRaises(frappe.ValidationError, doc.validate) - def test_account_from_other_company_is_accepted(self): - # SUSPECTED BUG: unlike Item Tax Template / Mode of Payment, this template never - # checks that each row's account belongs to self.company, so a row pointing at - # another company's account saves. Locking the current (wrong) behaviour. + def test_account_from_other_company_is_rejected(self): other_receivable = frappe.db.get_value( "Account", {"company": "_Test Company 1", "account_type": "Receivable", "is_group": 0}, "name" ) @@ -45,5 +42,4 @@ class TestJournalEntryTemplate(ERPNextTestSuite): doc = self.make_template( [{"account": other_receivable, "party_type": "Customer", "party": "_Test Customer"}] ) - doc.insert() - self.assertTrue(frappe.db.exists("Journal Entry Template", doc.name)) + self.assertRaises(frappe.ValidationError, doc.insert)