refactor: single fetch and unlinking logic for JE and PE
diff --git a/erpnext/accounts/doctype/unreconcile_payment_entries/unreconcile_payment_entries.json b/erpnext/accounts/doctype/unreconcile_payment_entries/unreconcile_payment_entries.json
index c4afaa8..955c3bb 100644
--- a/erpnext/accounts/doctype/unreconcile_payment_entries/unreconcile_payment_entries.json
+++ b/erpnext/accounts/doctype/unreconcile_payment_entries/unreconcile_payment_entries.json
@@ -6,6 +6,9 @@
  "editable_grid": 1,
  "engine": "InnoDB",
  "field_order": [
+  "account",
+  "party_type",
+  "party",
   "reference_doctype",
   "reference_name",
   "allocated_amount",
@@ -39,12 +42,27 @@
    "in_list_view": 1,
    "label": "Reference Type",
    "options": "DocType"
+  },
+  {
+   "fieldname": "account",
+   "fieldtype": "Data",
+   "label": "Account"
+  },
+  {
+   "fieldname": "party_type",
+   "fieldtype": "Data",
+   "label": "Party Type"
+  },
+  {
+   "fieldname": "party",
+   "fieldtype": "Data",
+   "label": "Party"
   }
  ],
  "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-08-24 14:48:10.018574",
+ "modified": "2023-08-30 10:58:45.322668",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Unreconcile Payment Entries",
diff --git a/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py b/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
index a32313f..1688b6e 100644
--- a/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
+++ b/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
@@ -20,38 +20,26 @@
 	@frappe.whitelist()
 	def get_allocations_from_payment(self):
 		allocated_references = []
-		if self.voucher_type == "Payment Entry":
-			per = qb.DocType("Payment Entry Reference")
-			allocated_references = (
-				qb.from_(per)
-				.select(
-					per.reference_doctype, per.reference_name, Sum(per.allocated_amount).as_("allocated_amount")
-				)
-				.where((per.docstatus == 1) & (per.parent == self.voucher_no))
-				.groupby(per.reference_name)
-				.run(as_dict=True)
+		ple = qb.DocType("Payment Ledger Entry")
+		allocated_references = (
+			qb.from_(ple)
+			.select(
+				ple.account,
+				ple.party_type,
+				ple.party,
+				ple.against_voucher_type.as_("reference_doctype"),
+				ple.against_voucher_no.as_("reference_name"),
+				Abs(Sum(ple.amount_in_account_currency)).as_("allocated_amount"),
 			)
-		elif self.voucher_type == "Journal Entry":
-			# for journals, using payment ledger to fetch allocation.
-			# this way we can avoid vaildating account type and reference details individually on child table
-
-			ple = qb.DocType("Payment Ledger Entry")
-			allocated_references = (
-				qb.from_(ple)
-				.select(
-					ple.against_voucher_type.as_("reference_doctype"),
-					ple.against_voucher_no.as_("reference_name"),
-					Abs(Sum(ple.amount_in_account_currency)).as_("allocated_amount"),
-				)
-				.where(
-					(ple.docstatus == 1)
-					& (ple.voucher_type == self.voucher_type)
-					& (ple.voucher_no == self.voucher_no)
-					& (ple.voucher_no != ple.against_voucher_no)
-				)
-				.groupby(ple.against_voucher_type, ple.against_voucher_no)
-				.run(as_dict=True)
+			.where(
+				(ple.docstatus == 1)
+				& (ple.voucher_type == self.voucher_type)
+				& (ple.voucher_no == self.voucher_no)
+				& (ple.voucher_no != ple.against_voucher_no)
 			)
+			.groupby(ple.against_voucher_type, ple.against_voucher_no)
+			.run(as_dict=True)
+		)
 
 		return allocated_references
 
@@ -65,19 +53,11 @@
 		# todo: add more granular unlinking
 		# different amounts for same invoice should be individually unlinkable
 
-		payment_type, paid_from, paid_to, party_type, party = frappe.db.get_all(
-			self.voucher_type,
-			filters={"name": self.voucher_no},
-			fields=["payment_type", "paid_from", "paid_to", "party_type", "party"],
-			as_list=1,
-		)[0]
-		account = paid_from if payment_type == "Receive" else paid_to
-
 		for alloc in self.allocations:
 			doc = frappe.get_doc(alloc.reference_doctype, alloc.reference_name)
 			unlink_ref_doc_from_payment_entries(doc)
 			update_voucher_outstanding(
-				alloc.reference_doctype, alloc.reference_name, account, party_type, party
+				alloc.reference_doctype, alloc.reference_name, alloc.account, alloc.party_type, alloc.party
 			)
 			frappe.db.set_value("Unreconcile Payment Entries", alloc.name, "unlinked", True)