feat: auto set against accounts for value pairs
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index fb7ede3..eb9c7c7 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -686,11 +686,40 @@
 
 				against_account = frappe.db.get_value(d.reference_type, d.reference_name, against_type.lower())
 				d.against_type = against_type
-				d.against_account = against_account
 				d.against_account_link = against_account
 		else:
+			self.get_debited_credited_accounts()
+			if len(self.accounts_credited) > 1 and len(self.accounts_debited) > 1:
+				self.auto_set_against_accounts()
+				return
 			self.get_against_accounts()
 
+	def auto_set_against_accounts(self):
+		for i in range(0, len(self.accounts), 2):
+			acc = self.accounts[i]
+			against_acc = self.accounts[i + 1]
+			if acc.debit_in_account_currency > 0:
+				current_val = acc.debit_in_account_currency * flt(acc.exchange_rate)
+				against_val = against_acc.credit_in_account_currency * flt(against_acc.exchange_rate)
+			else:
+				current_val = acc.credit_in_account_currency * flt(acc.exchange_rate)
+				against_val = against_acc.debit_in_account_currency * flt(against_acc.exchange_rate)
+
+			if current_val == against_val:
+				acc.against_type = against_acc.party_type or "Account"
+				against_acc.against_type = acc.party_type or "Account"
+
+				acc.against_account_link = against_acc.party or against_acc.account
+				against_acc.against_account_link = acc.party or acc.account
+			else:
+				frappe.msgprint(
+					_(
+						"Unable to automatically determine {0} accounts. Set them up in the {1} table if needed."
+					).format(frappe.bold("against"), frappe.bold("Accounting Entries")),
+					alert=True,
+				)
+				break
+
 	def get_against_accounts(self):
 		self.against_accounts = []
 		self.split_account = {}
@@ -698,14 +727,7 @@
 
 		if self.separate_against_account_entries:
 			no_of_credited_acc, no_of_debited_acc = len(self.accounts_credited), len(self.accounts_debited)
-			if no_of_credited_acc > 1 and no_of_debited_acc > 1:
-				frappe.msgprint(
-					_(
-						"Unable to automatically determine {0} accounts. Set them up in the {1} table if needed."
-					).format(frappe.bold("against"), frappe.bold("Accounting Entries")),
-					alert=True,
-				)
-			elif no_of_credited_acc <= 1 and no_of_debited_acc <= 1:
+			if no_of_credited_acc <= 1 and no_of_debited_acc <= 1:
 				self.set_against_accounts_for_single_dr_cr()
 				self.separate_against_account_entries = 0
 			elif no_of_credited_acc == 1:
@@ -972,8 +994,7 @@
 					gl_dict.update(
 						{
 							"against_type": d.against_type,
-							"against": d.against_account,
-							"against_link": d.against_account,
+							"against_link": d.against_account_link,
 						}
 					)
 					gl_map.append(gl_dict)