diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index ddf646084264..52fa97844d72 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -765,6 +765,7 @@ def set_against_account(self): self.get_debited_credited_accounts() if len(self.accounts_credited) > 1 and len(self.accounts_debited) > 1: self.auto_set_against_accounts() + self.separate_against_account_entries = 0 return self.get_against_accounts() @@ -1035,7 +1036,7 @@ def build_gl_map(self): transaction_currency_map = self.get_transaction_currency_map() company_currency = erpnext.get_company_currency(self.company) - self.get_against_accounts() + self.set_against_account() for d in self.get("accounts"): if d.debit or d.credit or (self.voucher_type == "Exchange Gain Or Loss"): r = [d.user_remark, self.remark] diff --git a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py index a6e920b7ef6a..d9c1046179bd 100644 --- a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py @@ -426,17 +426,86 @@ def test_jv_account_and_party_balance_with_cost_centre(self): account_balance = get_balance_on(account="_Test Bank - _TC", cost_center=cost_center) self.assertEqual(expected_account_balance, account_balance) + def test_auto_set_against_accounts_for_jv(self): + from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import check_gl_entries + + # Check entries when against accounts are auto-set + account_list = [ + { + "account": "_Test Receivable - _TC", + "debit_in_account_currency": 1000, + "party_type": "Customer", + "party": "_Test Customer", + }, + { + "account": "_Test Bank - _TC", + "credit_in_account_currency": 1000, + }, + { + "account": "Debtors - _TC", + "credit_in_account_currency": 2000, + "party_type": "Customer", + "party": "_Test Customer", + }, + { + "account": "Sales - _TC", + "debit_in_account_currency": 2000, + }, + ] + jv = make_journal_entry(account_list=account_list, submit=True) + expected_gle = [ + ["_Test Bank - _TC", 0.0, 1000.0, nowdate(), "_Test Customer"], + ["_Test Receivable - _TC", 1000.0, 0.0, nowdate(), "_Test Bank - _TC"], + ["Debtors - _TC", 0.0, 2000.0, nowdate(), "Sales - _TC"], + ["Sales - _TC", 2000.0, 0.0, nowdate(), "_Test Customer"], + ] + check_gl_entries( + doc=self, + voucher_type="Journal Entry", + voucher_no=jv.name, + posting_date=nowdate(), + expected_gle=expected_gle, + additional_columns=["against_link"], + ) + + # Check entries when against accounts are explicitly set + account_list[0]["debit_in_account_currency"] = 5000 + account_list[1]["credit_in_account_currency"] = 7000 + account_list[2]["credit_in_account_currency"] = 3000 + account_list[3]["debit_in_account_currency"] = 5000 + + # Only set against for Sales Account + account_list[3]["against_type"] = "Customer" + account_list[3]["against_account_link"] = "_Test Customer" + + jv = make_journal_entry(account_list=account_list, submit=True) + expected_gle = [ + ["_Test Bank - _TC", 0.0, 7000.0, nowdate(), None], + ["_Test Receivable - _TC", 5000.0, 0.0, nowdate(), None], + ["Debtors - _TC", 0.0, 3000.0, nowdate(), None], + ["Sales - _TC", 5000.0, 0.0, nowdate(), "_Test Customer"], + ] + check_gl_entries( + doc=self, + voucher_type="Journal Entry", + voucher_no=jv.name, + posting_date=nowdate(), + expected_gle=expected_gle, + additional_columns=["against_link"], + ) + def make_journal_entry( - account1, - account2, - amount, + account1=None, + account2=None, + amount=None, cost_center=None, posting_date=None, exchange_rate=1, save=True, submit=False, project=None, + account_list=None, ): if not cost_center: cost_center = "_Test Cost Center - _TC" @@ -448,7 +517,8 @@ def make_journal_entry( jv.multi_currency = 1 jv.set( "accounts", - [ + account_list + or [ { "account": account1, "cost_center": cost_center,