From a8f6938556c764d8c26c284e7e46709bcac15782 Mon Sep 17 00:00:00 2001 From: Mitchy25 <42224026+Mitchy25@users.noreply.github.com> Date: Mon, 27 May 2019 20:27:56 +1200 Subject: [PATCH 1/2] Fix: Precision in Appraisals (#17673) * Update appraisal.js This fixes issues associated with 2 decimal places. Example: 4 questions (Each weighted 25%), will give a total result of 5.2 (If 5 achieved on every question). This is because 5*0.25 = 1.25 which is rounded to 1.3 for precision=2. When precision = 3, this is not an issue. * fix: score based on field's precisin --- erpnext/hr/doctype/appraisal/appraisal.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js index a71486af63..02f1557c4e 100644 --- a/erpnext/hr/doctype/appraisal/appraisal.js +++ b/erpnext/hr/doctype/appraisal/appraisal.js @@ -9,12 +9,14 @@ frappe.ui.form.on('Appraisal', { return{ query: "erpnext.controllers.queries.employee_query" } }; }, - onload: function(frm) { + + onload: function(frm) { if(!frm.doc.status) { frm.set_value('status', 'Draft'); } }, - kra_template: function(frm) { + + kra_template: function(frm) { frm.doc.goals = []; erpnext.utils.map_current_doc({ method: "erpnext.hr.doctype.appraisal.appraisal.fetch_appraisal_template", @@ -22,7 +24,8 @@ frappe.ui.form.on('Appraisal', { frm: frm }); }, - calculate_total: function(frm) { + + calculate_total: function(frm) { let goals = frm.doc.goals || []; let total =0; for(let i = 0; i 5) { frappe.msgprint(__("Score must be less than or equal to 5")); d.score = 0; refresh_field('score', d.name, 'goals'); } - var total = flt(d.per_weightage*d.score)/100; - d.score_earned = total.toPrecision(2); - refresh_field('score_earned', d.name, 'goals'); - } - else{ + d.score_earned = flt(d.per_weightage*d.score, precision("score_earned", d))/100; + } else { d.score_earned = 0; - refresh_field('score_earned', d.name, 'goals'); } - frm.trigger('calculate_total'); + refresh_field('score_earned', d.name, 'goals'); + frm.trigger('calculate_total'); } }); \ No newline at end of file From aafd64d9b48ec113b576d8c439dcb9539d4480e6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 27 May 2019 17:15:47 +0530 Subject: [PATCH 2/2] fix: On change of currency, set margin amount based on exchange rate (#17712) --- erpnext/public/js/controllers/transaction.js | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 7de0e62875..329695eb39 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -756,7 +756,11 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ this.get_exchange_rate(transaction_date, this.frm.doc.currency, company_currency, function(exchange_rate) { - me.frm.set_value("conversion_rate", exchange_rate); + if(exchange_rate != me.frm.doc.conversion_rate) { + me.set_margin_amount_based_on_currency(exchange_rate); + me.set_actual_charges_based_on_currency(exchange_rate); + me.frm.set_value("conversion_rate", exchange_rate); + } }); } else { this.conversion_rate(); @@ -777,7 +781,6 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ if(this.frm.doc.ignore_pricing_rule) { this.calculate_taxes_and_totals(); } else if (!this.in_apply_price_list){ - this.set_actual_charges_based_on_currency(); this.apply_price_list(); } @@ -804,12 +807,24 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ } }, - set_actual_charges_based_on_currency: function() { + set_margin_amount_based_on_currency: function(exchange_rate) { + if (in_list(["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]), this.frm.doc.doctype) { + var me = this; + $.each(this.frm.doc.items || [], function(i, d) { + if(d.margin_type == "Amount") { + frappe.model.set_value(d.doctype, d.name, "margin_rate_or_amount", + flt(d.margin_rate_or_amount) / flt(exchange_rate)); + } + }); + } + }, + + set_actual_charges_based_on_currency: function(exchange_rate) { var me = this; $.each(this.frm.doc.taxes || [], function(i, d) { if(d.charge_type == "Actual") { frappe.model.set_value(d.doctype, d.name, "tax_amount", - flt(d.tax_amount) / flt(me.frm.doc.conversion_rate)); + flt(d.tax_amount) / flt(exchange_rate)); } }); },