diff --git a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
index 5d59497..31c70b5 100644
--- a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
+++ b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
@@ -11,7 +11,6 @@
 		this.from_reference_date = from_reference_date;
 		this.to_reference_date = to_reference_date;
 	}
-
 	show_dialog(bank_transaction_name, update_dt_cards) {
 		this.bank_transaction_name = bank_transaction_name;
 		this.update_dt_cards = update_dt_cards;
@@ -47,588 +46,6 @@
 			},
 		});
 	}
-	frappe.provide("erpnext.accounts.bank_reconciliation");
-
-	erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager {
-		constructor(company, bank_account) {
-			this.bank_account = bank_account;
-			this.company = company;
-			this.make_dialog();
-		}
-
-		show_dialog(bank_transaction_name, update_dt_cards) {
-			this.bank_transaction_name = bank_transaction_name;
-			this.update_dt_cards = update_dt_cards;
-			frappe.call({
-				method: "frappe.client.get_value",
-				args: {
-					doctype: "Bank Transaction",
-					filters: { name: this.bank_transaction_name },
-					fieldname: [
-						"date as reference_date",
-						"deposit",
-						"withdrawal",
-						"currency",
-						"description",
-						"name",
-						"bank_account",
-						"company",
-						"reference_number",
-						"party_type",
-						"party",
-						"unallocated_amount",
-						"allocated_amount",
-					],
-				},
-				callback: (r) => {
-					if (r.message) {
-						this.bank_transaction = r.message;
-						r.message.payment_entry = 1;
-						r.message.journal_entry = 1;
-						this.dialog.set_values(r.message);
-						this.dialog.show();
-					}
-				},
-			});
-		}
-
-		get_linked_vouchers(document_types) {
-			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_linked_payments",
-				args: {
-					bank_transaction_name: this.bank_transaction_name,
-					document_types: document_types,
-					from_date: this.bank_statement_from_date,
-					to_date: this.bank_statement_to_date,
-					filtered_by_reference_date: this.filtered_by_reference_date,
-					from_reference_date:this.from_reference_date,
-					to_reference_date:this.to_reference_date
-				},
-
-				callback: (result) => {
-					const data = result.message;
-
-
-					if (data && data.length > 0) {
-						const proposals_wrapper = this.dialog.fields_dict.payment_proposals.$wrapper;
-						proposals_wrapper.show();
-						this.dialog.fields_dict.no_matching_vouchers.$wrapper.hide();
-						this.data = [];
-						data.forEach((row) => {
-							const reference_date = row[5] ? row[5] : row[8];
-							this.data.push([
-								row[1],
-								row[2],
-								reference_date,
-								row[8],
-								format_currency(row[3], row[9]),
-								row[6],
-								row[4],
-							]);
-						});
-						this.get_dt_columns();
-						this.get_datatable(proposals_wrapper);
-					} else {
-						const proposals_wrapper = this.dialog.fields_dict.payment_proposals.$wrapper;
-						proposals_wrapper.hide();
-						this.dialog.fields_dict.no_matching_vouchers.$wrapper.show();
-
-					}
-					this.dialog.show();
-				},
-			});
-		}
-
-		get_dt_columns() {
-			this.columns = [
-				{
-					name: __("Document Type"),
-					editable: false,
-					width: 125,
-				},
-				{
-					name: __("Document Name"),
-					editable: false,
-					width: 150,
-				},
-				{
-					name: __("Reference Date"),
-					editable: false,
-					width: 120,
-				},
-				{
-					name: "Posting Date",
-					editable: false,
-					width: 120,
-				},
-				{
-					name: __("Amount"),
-					editable: false,
-					width: 100,
-				},
-				{
-					name: __("Party"),
-					editable: false,
-					width: 120,
-				},
-
-				{
-					name: __("Reference Number"),
-					editable: false,
-					width: 140,
-				},
-			];
-		}
-
-		get_datatable(proposals_wrapper) {
-			if (!this.datatable) {
-				const datatable_options = {
-					columns: this.columns,
-					data: this.data,
-					dynamicRowHeight: true,
-					checkboxColumn: true,
-					inlineFilters: true,
-				};
-				this.datatable = new frappe.DataTable(
-					proposals_wrapper.get(0),
-					datatable_options
-				);
-			} else {
-				this.datatable.refresh(this.data, this.columns);
-				this.datatable.rowmanager.checkMap = [];
-			}
-		}
-
-		make_dialog() {
-			const me = this;
-			me.selected_payment = null;
-
-			const fields = [
-				{
-					label: __("Action"),
-					fieldname: "action",
-					fieldtype: "Select",
-					options: `Match Against Voucher\nCreate Voucher\nUpdate Bank Transaction`,
-					default: "Match Against Voucher",
-				},
-				{
-					fieldname: "column_break_4",
-					fieldtype: "Column Break",
-				},
-				{
-					label: __("Document Type"),
-					fieldname: "document_type",
-					fieldtype: "Select",
-					options: `Payment Entry\nJournal Entry`,
-					default: "Payment Entry",
-					depends_on: "eval:doc.action=='Create Voucher'",
-				},
-				{
-					fieldtype: "Section Break",
-					fieldname: "section_break_1",
-					label: __("Filters"),
-					depends_on: "eval:doc.action=='Match Against Voucher'",
-				},
-			];
-
-			frappe.call({
-				method: "erpnext.accounts.doctype.bank_transaction.bank_transaction.get_doctypes_for_bank_reconciliation",
-				callback: (r) => {
-					$.each(r.message, (_i, entry) => {
-						if (_i % 3 == 0) {
-							fields.push({
-								fieldtype: "Column Break",
-							});
-						}
-						fields.push({
-							fieldtype: "Check",
-							label: entry,
-							fieldname: frappe.scrub(entry),
-							onchange: () => this.update_options(),
-						});
-					});
-
-					fields.push(...this.get_voucher_fields());
-
-					me.dialog = new frappe.ui.Dialog({
-						title: __("Reconcile the Bank Transaction"),
-						fields: fields,
-						size: "large",
-						primary_action: (values) =>
-							this.reconciliation_dialog_primary_action(values),
-					});
-				}
-			});
-		}
-
-		get_voucher_fields() {
-			return [
-				{
-					fieldtype: "Check",
-					label: "Show Only Exact Amount",
-					fieldname: "exact_match",
-					onchange: () => this.update_options(),
-				},
-				{
-					fieldtype: "Section Break",
-					fieldname: "section_break_1",
-					label: __("Select Vouchers to Match"),
-					depends_on: "eval:doc.action=='Match Against Voucher'",
-				},
-				{
-					fieldtype: "HTML",
-					fieldname: "payment_proposals",
-				},
-				{
-					fieldtype: "HTML",
-					fieldname: "no_matching_vouchers",
-					options: __("<div class=\"text-muted text-center\">{0}</div>", [__("No Matching Vouchers Found")])
-				},
-				{
-					fieldtype: "Section Break",
-					fieldname: "details",
-					label: "Details",
-					depends_on: "eval:doc.action!='Match Against Voucher'",
-				},
-				{
-					fieldname: "reference_number",
-					fieldtype: "Data",
-					label: "Reference Number",
-					mandatory_depends_on: "eval:doc.action=='Create Voucher'",
-				},
-				{
-					default: "Today",
-					fieldname: "posting_date",
-					fieldtype: "Date",
-					label: "Posting Date",
-					reqd: 1,
-					depends_on: "eval:doc.action=='Create Voucher'",
-				},
-				{
-					fieldname: "reference_date",
-					fieldtype: "Date",
-					label: "Cheque/Reference Date",
-					mandatory_depends_on: "eval:doc.action=='Create Voucher'",
-					depends_on: "eval:doc.action=='Create Voucher'",
-					reqd: 1,
-				},
-				{
-					fieldname: "mode_of_payment",
-					fieldtype: "Link",
-					label: "Mode of Payment",
-					options: "Mode of Payment",
-					depends_on: "eval:doc.action=='Create Voucher'",
-				},
-				{
-					fieldname: "edit_in_full_page",
-					fieldtype: "Button",
-					label: "Edit in Full Page",
-					click: () => {
-						this.edit_in_full_page();
-					},
-					depends_on:
-						"eval:doc.action=='Create Voucher'",
-				},
-				{
-					fieldname: "column_break_7",
-					fieldtype: "Column Break",
-				},
-				{
-					default: "Journal Entry Type",
-					fieldname: "journal_entry_type",
-					fieldtype: "Select",
-					label: "Journal Entry Type",
-					options:
-						"Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation\nDeferred Revenue\nDeferred Expense",
-					depends_on:
-						"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
-					mandatory_depends_on:
-						"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
-				},
-				{
-					fieldname: "second_account",
-					fieldtype: "Link",
-					label: "Account",
-					options: "Account",
-					depends_on:
-						"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
-					mandatory_depends_on:
-						"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
-					get_query: () => {
-						return {
-							filters: {
-								is_group: 0,
-								company: this.company,
-							},
-						};
-					},
-				},
-				{
-					fieldname: "party_type",
-					fieldtype: "Link",
-					label: "Party Type",
-					options: "DocType",
-					mandatory_depends_on:
-					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Payment Entry'",
-					get_query: function () {
-						return {
-							filters: {
-								name: [
-									"in",
-									Object.keys(frappe.boot.party_account_types),
-								],
-							},
-						};
-					},
-				},
-				{
-					fieldname: "party",
-					fieldtype: "Dynamic Link",
-					label: "Party",
-					options: "party_type",
-					mandatory_depends_on:
-						"eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
-				},
-				{
-					fieldname: "project",
-					fieldtype: "Link",
-					label: "Project",
-					options: "Project",
-					depends_on:
-						"eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
-				},
-				{
-					fieldname: "cost_center",
-					fieldtype: "Link",
-					label: "Cost Center",
-					options: "Cost Center",
-					depends_on:
-						"eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
-				},
-				{
-					fieldtype: "Section Break",
-					fieldname: "details_section",
-					label: "Transaction Details",
-					collapsible: 1,
-				},
-				{
-					fieldname: "deposit",
-					fieldtype: "Currency",
-					label: "Deposit",
-					read_only: 1,
-				},
-				{
-					fieldname: "withdrawal",
-					fieldtype: "Currency",
-					label: "Withdrawal",
-					read_only: 1,
-				},
-				{
-					fieldname: "description",
-					fieldtype: "Small Text",
-					label: "Description",
-					read_only: 1,
-				},
-				{
-					fieldname: "column_break_17",
-					fieldtype: "Column Break",
-					read_only: 1,
-				},
-				{
-					fieldname: "allocated_amount",
-					fieldtype: "Currency",
-					label: "Allocated Amount",
-					read_only: 1,
-				},
-
-				{
-					fieldname: "unallocated_amount",
-					fieldtype: "Currency",
-					label: "Unallocated Amount",
-					read_only: 1,
-				},
-			];
-		}
-
-		get_selected_attributes() {
-			let selected_attributes = [];
-			this.dialog.$wrapper.find(".checkbox input").each((i, col) => {
-				if ($(col).is(":checked")) {
-					selected_attributes.push($(col).attr("data-fieldname"));
-				}
-			});
-
-			return selected_attributes;
-		}
-
-		update_options() {
-			let selected_attributes = this.get_selected_attributes();
-			this.get_linked_vouchers(selected_attributes);
-		}
-
-		reconciliation_dialog_primary_action(values) {
-			if (values.action == "Match Against Voucher") this.match(values);
-			if (
-				values.action == "Create Voucher" &&
-				values.document_type == "Payment Entry"
-			)
-				this.add_payment_entry(values);
-			if (
-				values.action == "Create Voucher" &&
-				values.document_type == "Journal Entry"
-			)
-				this.add_journal_entry(values);
-			else if (values.action == "Update Bank Transaction")
-				this.update_transaction(values);
-		}
-
-		match() {
-			var selected_map = this.datatable.rowmanager.checkMap;
-			let rows = [];
-			selected_map.forEach((val, index) => {
-				if (val == 1) rows.push(this.datatable.datamanager.rows[index]);
-			});
-			let vouchers = [];
-			rows.forEach((x) => {
-				vouchers.push({
-					payment_doctype: x[2].content,
-					payment_name: x[3].content,
-					amount: x[5].content,
-				});
-			});
-			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.reconcile_vouchers",
-				args: {
-					bank_transaction_name: this.bank_transaction.name,
-					vouchers: vouchers,
-				},
-				callback: (response) => {
-					const alert_string = __("Bank Transaction {0} Matched", [this.bank_transaction.name]);
-					frappe.show_alert(alert_string);
-					this.update_dt_cards(response.message);
-					this.dialog.hide();
-				},
-			});
-		}
-
-		add_payment_entry(values) {
-			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
-				args: {
-					bank_transaction_name: this.bank_transaction.name,
-					reference_number: values.reference_number,
-					reference_date: values.reference_date,
-					party_type: values.party_type,
-					party: values.party,
-					posting_date: values.posting_date,
-					mode_of_payment: values.mode_of_payment,
-					project: values.project,
-					cost_center: values.cost_center,
-				},
-				callback: (response) => {
-					const alert_string = __("Bank Transaction {0} added as Payment Entry", [this.bank_transaction.name]);
-					frappe.show_alert(alert_string);
-					this.update_dt_cards(response.message);
-					this.dialog.hide();
-				},
-			});
-		}
-
-		add_journal_entry(values) {
-			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
-				args: {
-					bank_transaction_name: this.bank_transaction.name,
-					reference_number: values.reference_number,
-					reference_date: values.reference_date,
-					party_type: values.party_type,
-					party: values.party,
-					posting_date: values.posting_date,
-					mode_of_payment: values.mode_of_payment,
-					entry_type: values.journal_entry_type,
-					second_account: values.second_account,
-				},
-				callback: (response) => {
-					const alert_string = __("Bank Transaction {0} added as Journal Entry", [this.bank_transaction.name]);
-					frappe.show_alert(alert_string);
-					this.update_dt_cards(response.message);
-					this.dialog.hide();
-				},
-			});
-		}
-
-		update_transaction(values) {
-			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.update_bank_transaction",
-				args: {
-					bank_transaction_name: this.bank_transaction.name,
-					reference_number: values.reference_number,
-					party_type: values.party_type,
-					party: values.party,
-				},
-				callback: (response) => {
-					const alert_string = __("Bank Transaction {0} updated", [this.bank_transaction.name]);
-					frappe.show_alert(alert_string);
-					this.update_dt_cards(response.message);
-					this.dialog.hide();
-				},
-			});
-		}
-
-		edit_in_full_page() {
-			const values = this.dialog.get_values(true);
-			if (values.document_type == "Payment Entry") {
-				frappe.call({
-					method:
-						"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
-					args: {
-						bank_transaction_name: this.bank_transaction.name,
-						reference_number: values.reference_number,
-						reference_date: values.reference_date,
-						party_type: values.party_type,
-						party: values.party,
-						posting_date: values.posting_date,
-						mode_of_payment: values.mode_of_payment,
-						project: values.project,
-						cost_center: values.cost_center,
-						allow_edit: true
-					},
-					callback: (r) => {
-						const doc = frappe.model.sync(r.message);
-						frappe.set_route("Form", doc[0].doctype, doc[0].name);
-					},
-				});
-			} else {
-				frappe.call({
-					method:
-						"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
-					args: {
-						bank_transaction_name: this.bank_transaction.name,
-						reference_number: values.reference_number,
-						reference_date: values.reference_date,
-						party_type: values.party_type,
-						party: values.party,
-						posting_date: values.posting_date,
-						mode_of_payment: values.mode_of_payment,
-						entry_type: values.journal_entry_type,
-						second_account: values.second_account,
-						allow_edit: true
-					},
-					callback: (r) => {
-						var doc = frappe.model.sync(r.message);
-						frappe.set_route("Form", doc[0].doctype, doc[0].name);
-					},
-				});
-			}
-		}
-
-	};
-
 	get_linked_vouchers(document_types) {
 		frappe.call({
 			method:
@@ -636,6 +53,11 @@
 			args: {
 				bank_transaction_name: this.bank_transaction_name,
 				document_types: document_types,
+				from_date: this.bank_statement_from_date,
+				to_date: this.bank_statement_to_date,
+				filtered_by_reference_date: this.filtered_by_reference_date,
+				from_reference_date:this.from_reference_date,
+				to_reference_date:this.to_reference_date
 			},
 
 			callback: (result) => {
@@ -1160,3 +582,5 @@
 	}
 
 };
+
+	
\ No newline at end of file
