refactor: add UI elements
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 7b69f01..b95bb00 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -203,32 +203,57 @@
 	}
 
 	unreconcile_prompt() {
-		// get linked payments
-		let query_args = {
-			query:"erpnext.accounts.doctype.unreconcile_payments.unreconcile_payments.get_linked_payments_for_doc",
-			filters: {
-				doctype: this.frm.doc.doctype,
-				docname: this.frm.doc.name
-			}
-		}
-
-		new frappe.ui.form.MultiSelectDialog({
-			doctype: "Payment Ledger Entry",
-			target: this.cur_frm,
-			setters: { },
-			add_filters_group: 0,
-			date_field: "posting_date",
-			columns: ["voucher_type", "voucher_no", "allocated_amount"],
-			primary_action_label: "Un-Reconcile",
-			title: "Un-Reconcile Payments",
-			get_query() {
-				return query_args;
+		let child_table_fields = [
+			{ label: __("Voucher Type"), fieldname: "voucher_type", fieldtype: "Dynamic Link", options: "DocType", in_list_view: 1, read_only: 1},
+			{ label: __("Voucher No"), fieldname: "voucher_no", fieldtype: "Link", options: "voucher_type", in_list_view: 1, read_only: 1 },
+			{ label: __("Allocated Amount"), fieldname: "allocated_amount", fieldtype: "Float", in_list_view: 1, read_only: 1 },
+		]
+		let unreconcile_dialog_fields = [
+			{
+				label: __('Allocations'),
+				fieldname: 'allocations',
+				fieldtype: 'Table',
+				read_only: 1,
+				fields: child_table_fields,
 			},
-			action(selections) {
-				console.log(selections);
+		];
+
+		// get linked payments
+		frappe.call({
+			"method": "erpnext.accounts.doctype.unreconcile_payments.unreconcile_payments.get_linked_payments_for_doc",
+			"args": {
+				"company": this.frm.doc.company,
+				"doctype": this.frm.doc.doctype,
+				"docname": this.frm.doc.name
+			},
+			callback: function(r) {
+				if (r.message) {
+					// populate child table with allocations
+					unreconcile_dialog_fields[0].data = r.message;
+					unreconcile_dialog_fields[0].get_data = function(){ return r.message};
+
+					let d = new frappe.ui.Dialog({
+						title: 'Un-Reconcile Allocations',
+						fields: unreconcile_dialog_fields,
+						size: 'large',
+						cannot_add_rows: 1,
+						primary_action_label: 'Un-Reconcile',
+						primary_action(values) {
+
+							let selected_allocations = values.allocations.filter(x=>x.__checked);
+							if (selected_allocations.length > 0) {
+								// assuming each row is an individual voucher
+								// pass this to server side method that created unreconcile doc for row
+							} else {
+								frappe.msgprint("No Selection");
+							}
+						}
+					});
+
+					d.show();
+				}
 			}
 		});
-
 	}
 
 	make_maintenance_schedule() {
diff --git a/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py b/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
index dfd2d29..cced2b3 100644
--- a/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
+++ b/erpnext/accounts/doctype/unreconcile_payments/unreconcile_payments.py
@@ -73,20 +73,25 @@
 
 
 @frappe.whitelist()
-def get_linked_payments_for_doc(doctype, txt, searchfield, start, page_len, filters):
-	if filters.get("doctype") and filters.get("docname"):
-		_dt = filters.get("doctype")
-		_dn = filters.get("docname")
+def get_linked_payments_for_doc(
+	company: str = None, doctype: str = None, docname: str = None
+) -> list:
+	if company and doctype and docname:
+		_dt = doctype
+		_dn = docname
 		ple = qb.DocType("Payment Ledger Entry")
 		if _dt in ["Sales Invoice", "Purchase Invoice"]:
-			criteria = [(ple.delinked == 0), (ple.against_voucher_no == _dn), (ple.amount < 0)]
-
-			if txt:
-				criteria.append(ple.voucher_no.like(f"%{txt}%"))
+			criteria = [
+				(ple.delinked == 0),
+				(ple.against_voucher_no == _dn),
+				(ple.amount < 0),
+				(ple.company == company),
+			]
 
 			res = (
 				qb.from_(ple)
 				.select(
+					ple.company,
 					ple.voucher_type,
 					ple.voucher_no,
 					Abs(Sum(ple.amount_in_account_currency)).as_("allocated_amount"),
@@ -108,3 +113,19 @@
 				group_by="against_voucher_no",
 				fields=["against_voucher_type", "against_voucher_no", "Sum(amount_in_account_currency)"],
 			)
+	return []
+
+
+@frappe.whitelist()
+def create_unreconcile_doc_for_selection(
+	company: str = None, dt: str = None, dn: str = None, selections: list = None
+):
+	if selections:
+		# assuming each row is a unique voucher
+		for row in selections:
+			unrecon = frappe.new_doc("Unreconcile Payments")
+			unrecon.company = company
+			unrecon.voucher_type = dt
+			unrecon.voucher_type = dn
+			unrecon.add_references()
+			# remove unselected references