From c891df8eefc53dc54d0f19b1607316d117fda0fd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 31 Jul 2024 11:44:05 +0530 Subject: [PATCH] fix: set currency on change of company considering customer default currency (#42405) --- erpnext/public/js/controllers/transaction.js | 122 +++++++++---------- 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 0c777cd5b6..5683fdab48 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -843,75 +843,73 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe var me = this; var set_pricing = function() { if(me.frm.doc.company && me.frm.fields_dict.currency) { - var company_currency = me.get_company_currency(); - var company_doc = frappe.get_doc(":Company", me.frm.doc.company); - - if (!me.frm.doc.currency) { - me.frm.set_value("currency", company_currency); - } + frappe.run_serially([ + () => get_party_currency(), + () => me.update_item_tax_map(), + () => me.apply_default_taxes(), + () => me.apply_pricing_rule(), + () => set_terms(), + () => set_letter_head(), + ]); + } + } - if (me.frm.doc.currency == company_currency) { - me.frm.set_value("conversion_rate", 1.0); - } - if (me.frm.doc.price_list_currency == company_currency) { - me.frm.set_value('plc_conversion_rate', 1.0); - } - if (company_doc){ - if (company_doc.default_letter_head) { - if(me.frm.fields_dict.letter_head) { - me.frm.set_value("letter_head", company_doc.default_letter_head); + var get_party_currency = function() { + var party_type = frappe.meta.has_field(me.frm.doc.doctype, "customer") ? "Customer" : "Supplier"; + var party_name = me.frm.doc[party_type.toLowerCase()]; + if (party_name) { + frappe.call({ + method: "frappe.client.get_value", + args: { + doctype: party_type, + filters: { name: party_name }, + fieldname: "default_currency", + }, + callback: function (r) { + if (r.message) { + set_currency(r.message.default_currency); } } - let selling_doctypes_for_tc = ["Sales Invoice", "Quotation", "Sales Order", "Delivery Note"]; - if (company_doc.default_selling_terms && frappe.meta.has_field(me.frm.doc.doctype, "tc_name") && - selling_doctypes_for_tc.includes(me.frm.doc.doctype) && !me.frm.doc.tc_name) { - me.frm.set_value("tc_name", company_doc.default_selling_terms); - } - let buying_doctypes_for_tc = ["Request for Quotation", "Supplier Quotation", "Purchase Order", - "Material Request", "Purchase Receipt"]; - // Purchase Invoice is excluded as per issue #3345 - if (company_doc.default_buying_terms && frappe.meta.has_field(me.frm.doc.doctype, "tc_name") && - buying_doctypes_for_tc.includes(me.frm.doc.doctype) && !me.frm.doc.tc_name) { - me.frm.set_value("tc_name", company_doc.default_buying_terms); - } - } + }) + } else { + set_currency(); + } + } - if ( - company_doc.default_selling_terms && - frappe.meta.has_field(me.frm.doc.doctype, "tc_name") && - [ - "Sales Invoice", - "Quotation", - "Sales Order", - "Delivery Note", - ].includes(me.frm.doc.doctype) && - !me.frm.doc.tc_name - ) { - me.frm.set_value("tc_name", company_doc.default_selling_terms); - } + var set_currency = function(party_default_currency) { + var company_currency = me.get_company_currency(); + var currency = party_default_currency || company_currency; + if (me.frm.doc.currency != currency) { + me.frm.set_value("currency", currency); + } - if ( - company_doc.default_buying_terms && - frappe.meta.has_field(me.frm.doc.doctype, "tc_name") && - [ - "Request for Quotation", - "Supplier Quotation", - "Purchase Order", - // Purchase Invoice is excluded as per issue #3345 - "Material Request", - "Purchase Receipt", - ].includes(me.frm.doc.doctype) && - !me.frm.doc.tc_name - ) { - me.frm.set_value("tc_name", company_doc.default_buying_terms); + if (me.frm.doc.currency == company_currency) { + me.frm.set_value("conversion_rate", 1.0); + } + if (me.frm.doc.price_list_currency == company_currency) { + me.frm.set_value('plc_conversion_rate', 1.0); + } + + me.frm.script_manager.trigger("currency"); + } + + var set_terms = function() { + if (frappe.meta.has_field(me.frm.doc.doctype, "tc_name") && !me.frm.doc.tc_name) { + var company_doc = frappe.get_doc(":Company", me.frm.doc.company); + var selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]; + var company_terms_fieldname = selling_doctypes.includes(me.frm.doc.doctype) ? "default_selling_terms" : "default_buying_terms"; + if (company_doc && company_doc[company_terms_fieldname]) { + me.frm.set_value("tc_name", company_doc[company_terms_fieldname]); } + } + } - frappe.run_serially([ - () => me.frm.script_manager.trigger("currency"), - () => me.update_item_tax_map(), - () => me.apply_default_taxes(), - () => me.apply_pricing_rule() - ]); + var set_letter_head = function() { + if(me.frm.fields_dict.letter_head) { + var company_doc = frappe.get_doc(":Company", me.frm.doc.company); + if (company_doc && company_doc.default_letter_head) { + me.frm.set_value("letter_head", company_doc.default_letter_head); + } } } -- GitLab