fix: set currency on change of company considering customer default currency (#42405)
This commit is contained in:
@@ -826,47 +826,76 @@ 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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
frappe.run_serially([
|
||||
() => me.frm.script_manager.trigger("currency"),
|
||||
() => get_party_currency(),
|
||||
() => me.update_item_tax_map(),
|
||||
() => me.apply_default_taxes(),
|
||||
() => me.apply_pricing_rule()
|
||||
() => me.apply_pricing_rule(),
|
||||
() => set_terms(),
|
||||
() => set_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);
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
set_currency();
|
||||
}
|
||||
}
|
||||
|
||||
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 (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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var set_party_account = function(set_pricing) {
|
||||
if (["Sales Invoice", "Purchase Invoice"].includes(me.frm.doc.doctype)) {
|
||||
if(me.frm.doc.doctype=="Sales Invoice") {
|
||||
|
||||
Reference in New Issue
Block a user