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,