Merge pull request #39248 from GursheenK/set-against-accounts-for-backend-JVs

fix: JV GLEs for auto-set against accounts
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index ddf6460..52fa978 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -765,6 +765,7 @@
 			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 @@
 		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 a6e920b..d9c1046 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 @@
 		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 @@
 	jv.multi_currency = 1
 	jv.set(
 		"accounts",
-		[
+		account_list
+		or [
 			{
 				"account": account1,
 				"cost_center": cost_center,