feat: currency section , debit_to, base_dunning_amount
diff --git a/erpnext/accounts/doctype/dunning/dunning.js b/erpnext/accounts/doctype/dunning/dunning.js
index 2ddfe80..45fcc43 100644
--- a/erpnext/accounts/doctype/dunning/dunning.js
+++ b/erpnext/accounts/doctype/dunning/dunning.js
@@ -23,7 +23,15 @@
 				}
 			};
 		});
-
+		frm.set_query("debit_to", () => {
+			return {
+				filters: {
+					"account_type": "Receivable",
+					"is_group": 0,
+					"company": frm.doc.company
+				}
+			}
+		});
 		frm.set_query("contact_person", erpnext.queries.contact_query);
 		frm.set_query("customer_address", erpnext.queries.address_query);
 		frm.set_query("company_address", erpnext.queries.company_address_query);
@@ -43,13 +51,13 @@
 				__("Payment"),
 				function () {
 					frm.events.make_payment_entry(frm);
-				},__("Create")
+				}, __("Create")
 			);
 			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
-		if(frm.doc.docstatus > 0) {
-			frm.add_custom_button(__("Ledger"), function() {
+		if (frm.doc.docstatus > 0) {
+			frm.add_custom_button(__("Ledger"), function () {
 				frappe.route_options = {
 					"voucher_no": frm.doc.name,
 					"from_date": frm.doc.posting_date,
@@ -61,8 +69,8 @@
 			}, __("View"));
 		}
 
-		if(frm.doc.docstatus === 0) {
-			frm.add_custom_button(__("Fetch Overdue Payments"), function() {
+		if (frm.doc.docstatus === 0) {
+			frm.add_custom_button(__("Fetch Overdue Payments"), function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_dunning",
 					source_doctype: "Sales Invoice",
@@ -78,6 +86,103 @@
 				});
 			});
 		}
+
+		frappe.dynamic_link = { doc: frm.doc, fieldname: 'customer', doctype: 'Customer' }
+
+		frm.toggle_display("customer_name", (frm.doc.customer_name && frm.doc.customer_name !== frm.doc.customer));
+	},
+	// When multiple companies are set up. in case company name is changed set default company address
+	company: function (frm) {
+		if (frm.doc.company) {
+			frappe.call({
+				method: "erpnext.setup.doctype.company.company.get_default_company_address",
+				args: { name: frm.doc.company, existing_address: frm.doc.company_address || "" },
+				debounce: 2000,
+				callback: function (r) {
+					if (r.message) {
+						frm.set_value("company_address", r.message)
+					}
+					else {
+						frm.set_value("company_address", "")
+					}
+				}
+			});
+
+			if (frm.fields_dict.currency) {
+				var company_currency = erpnext.get_currency(frm.doc.company);
+
+				if (!frm.doc.currency) {
+					frm.set_value("currency", company_currency);
+				}
+
+				if (frm.doc.currency == company_currency) {
+					frm.set_value("conversion_rate", 1.0);
+				}
+			}
+
+			var company_doc = frappe.get_doc(":Company", frm.doc.company);
+			if (company_doc.default_letter_head) {
+				if (frm.fields_dict.letter_head) {
+					frm.set_value("letter_head", company_doc.default_letter_head);
+				}
+			}
+		}
+		frm.trigger("set_debit_to");
+	},
+	set_debit_to: function(frm) {
+		if (frm.doc.customer && frm.doc.company) {
+			return frappe.call({
+				method: "erpnext.accounts.party.get_party_account",
+				args: {
+					company: frm.doc.company,
+					party_type: "Customer",
+					party: frm.doc.customer,
+					currency: erpnext.get_currency(frm.doc.company)
+				},
+				callback: function (r) {
+					if (!r.exc && r.message) {
+						frm.set_value("debit_to", r.message);
+					}
+				}
+			});
+		}
+	},
+	customer: function (frm) {
+		frm.trigger("set_debit_to");
+	},
+	currency: function (frm) {
+		// this.set_dynamic_labels();
+		var company_currency = erpnext.get_currency(frm.doc.company);
+		// Added `ignore_pricing_rule` to determine if document is loading after mapping from another doc
+		if(frm.doc.currency && frm.doc.currency !== company_currency) {
+			frappe.call({
+				method: "erpnext.setup.utils.get_exchange_rate",
+				args: {
+					transaction_date: transaction_date,
+					from_currency: frm.doc.currency,
+					to_currency: company_currency,
+					args: "for_selling"
+				},
+				freeze: true,
+				freeze_message: __("Fetching exchange rates ..."),
+				callback: function(r) {
+					const exchange_rate = flt(r.message);
+					if(exchange_rate != frm.doc.conversion_rate) {
+						frm.set_value("conversion_rate", exchange_rate);
+					}
+				}
+			});
+		} else {
+			frm.trigger("conversion_rate");
+		}
+	},
+	conversion_rate: function (frm) {
+		if(frm.doc.currency === erpnext.get_currency(frm.doc.company)) {
+			frm.set_value("conversion_rate", 1.0);
+		}
+
+		// Make read only if Accounts Settings doesn't allow stale rates
+		frm.set_df_property("conversion_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
 	},
 	customer_address: function (frm) {
 		erpnext.utils.get_address_display(frm, "customer_address");
diff --git a/erpnext/accounts/doctype/dunning/dunning.json b/erpnext/accounts/doctype/dunning/dunning.json
index 2f880d1..1dd05b7 100644
--- a/erpnext/accounts/doctype/dunning/dunning.json
+++ b/erpnext/accounts/doctype/dunning/dunning.json
@@ -9,13 +9,15 @@
   "naming_series",
   "customer",
   "customer_name",
-  "currency",
-  "conversion_rate",
   "column_break_3",
   "company",
   "posting_date",
   "posting_time",
   "status",
+  "section_break_9",
+  "currency",
+  "column_break_11",
+  "conversion_rate",
   "address_and_contact_section",
   "customer_address",
   "address_display",
@@ -37,6 +39,7 @@
   "dunning_fee",
   "column_break_17",
   "dunning_amount",
+  "base_dunning_amount",
   "section_break_32",
   "spacer",
   "column_break_33",
@@ -51,6 +54,7 @@
   "accounting_details_section",
   "cost_center",
   "income_account",
+  "debit_to",
   "amended_from"
  ],
  "fields": [
@@ -141,15 +145,6 @@
    "fieldtype": "Column Break"
   },
   {
-   "fetch_from": "sales_invoice.currency",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "label": "Currency",
-   "options": "Currency",
-   "read_only": 1
-  },
-  {
    "fieldname": "amended_from",
    "fieldtype": "Link",
    "label": "Amended From",
@@ -248,7 +243,8 @@
    "fieldtype": "Select",
    "in_standard_filter": 1,
    "label": "Status",
-   "options": "Draft\nResolved\nUnresolved\nCancelled"
+   "options": "Draft\nResolved\nUnresolved\nCancelled",
+   "read_only": 1
   },
   {
    "description": "For dunning fee and interest",
@@ -259,14 +255,6 @@
    "print_hide": 1
   },
   {
-   "fetch_from": "sales_invoice.conversion_rate",
-   "fieldname": "conversion_rate",
-   "fieldtype": "Float",
-   "hidden": 1,
-   "label": "Conversion Rate",
-   "read_only": 1
-  },
-  {
    "fieldname": "overdue_payments",
    "fieldtype": "Table",
    "label": "Overdue Payments",
@@ -307,6 +295,7 @@
    "print_hide": 1
   },
   {
+   "default": "0",
    "fieldname": "dunning_amount",
    "fieldtype": "Currency",
    "label": "Dunning Amount",
@@ -359,6 +348,42 @@
    "label": "Company Address",
    "options": "Address",
    "print_hide": 1
+  },
+  {
+   "fieldname": "debit_to",
+   "fieldtype": "Link",
+   "label": "Debit To",
+   "options": "Account",
+   "print_hide": 1,
+   "reqd": 1
+  },
+  {
+   "fieldname": "section_break_9",
+   "fieldtype": "Section Break",
+   "label": "Currency"
+  },
+  {
+   "fieldname": "currency",
+   "fieldtype": "Link",
+   "label": "Currency",
+   "options": "Currency"
+  },
+  {
+   "fieldname": "column_break_11",
+   "fieldtype": "Column Break"
+  },
+  {
+   "fieldname": "conversion_rate",
+   "fieldtype": "Float",
+   "label": "Conversion Rate"
+  },
+  {
+   "default": "0",
+   "fieldname": "base_dunning_amount",
+   "fieldtype": "Currency",
+   "label": "Dunning Amount (Company Currency)",
+   "options": "Company:company:default_currency",
+   "read_only": 1
   }
  ],
  "is_submittable": 1,