mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-09 16:21:19 +00:00
Merge pull request #52995 from frappe/mergify/bp/version-15-hotfix/pr-52630
fix(account): compute tax net_amount in JS controller (backport #52630)
This commit is contained in:
@@ -173,9 +173,15 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
if (!tax.dont_recompute_tax) {
|
if (!tax.dont_recompute_tax) {
|
||||||
tax.item_wise_tax_detail = {};
|
tax.item_wise_tax_detail = {};
|
||||||
}
|
}
|
||||||
var tax_fields = ["total", "tax_amount_after_discount_amount",
|
var tax_fields = [
|
||||||
"tax_amount_for_current_item", "grand_total_for_current_item",
|
"net_amount",
|
||||||
"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"];
|
"total",
|
||||||
|
"tax_amount_after_discount_amount",
|
||||||
|
"tax_amount_for_current_item",
|
||||||
|
"grand_total_for_current_item",
|
||||||
|
"tax_fraction_for_current_item",
|
||||||
|
"grand_total_fraction_for_current_item",
|
||||||
|
];
|
||||||
|
|
||||||
if (cstr(tax.charge_type) != "Actual" &&
|
if (cstr(tax.charge_type) != "Actual" &&
|
||||||
!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
|
!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
|
||||||
@@ -363,9 +369,14 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
var item_tax_map = me._load_item_tax_rate(item.item_tax_rate);
|
var item_tax_map = me._load_item_tax_rate(item.item_tax_rate);
|
||||||
$.each(doc.taxes, function(i, tax) {
|
$.each(doc.taxes, function(i, tax) {
|
||||||
// tax_amount represents the amount of tax for the current step
|
// tax_amount represents the amount of tax for the current step
|
||||||
var current_tax_amount = me.get_current_tax_amount(item, tax, item_tax_map);
|
var [current_net_amount, current_tax_amount] = me.get_current_tax_amount(
|
||||||
|
item,
|
||||||
|
tax,
|
||||||
|
item_tax_map
|
||||||
|
);
|
||||||
if (frappe.flags.round_row_wise_tax) {
|
if (frappe.flags.round_row_wise_tax) {
|
||||||
current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax));
|
current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax));
|
||||||
|
current_net_amount = flt(current_net_amount, precision("net_amount", tax));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust divisional loss to the last item
|
// Adjust divisional loss to the last item
|
||||||
@@ -380,6 +391,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
if (tax.charge_type != "Actual" &&
|
if (tax.charge_type != "Actual" &&
|
||||||
!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
|
!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
|
||||||
tax.tax_amount += current_tax_amount;
|
tax.tax_amount += current_tax_amount;
|
||||||
|
tax.net_amount += current_net_amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store tax_amount for current item as it will be used for
|
// store tax_amount for current item as it will be used for
|
||||||
@@ -430,8 +442,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
|
|
||||||
for (const [i, tax] of doc.taxes.entries()) {
|
for (const [i, tax] of doc.taxes.entries()) {
|
||||||
me.round_off_totals(tax);
|
me.round_off_totals(tax);
|
||||||
me.set_in_company_currency(tax,
|
me.set_in_company_currency(tax, ["tax_amount", "tax_amount_after_discount_amount", "net_amount"]);
|
||||||
["tax_amount", "tax_amount_after_discount_amount"]);
|
|
||||||
|
|
||||||
me.round_off_base_values(tax);
|
me.round_off_base_values(tax);
|
||||||
|
|
||||||
@@ -464,6 +475,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
get_current_tax_amount(item, tax, item_tax_map) {
|
get_current_tax_amount(item, tax, item_tax_map) {
|
||||||
var tax_rate = this._get_tax_rate(tax, item_tax_map);
|
var tax_rate = this._get_tax_rate(tax, item_tax_map);
|
||||||
var current_tax_amount = 0.0;
|
var current_tax_amount = 0.0;
|
||||||
|
var current_net_amount = 0.0;
|
||||||
|
|
||||||
// To set row_id by default as previous row.
|
// To set row_id by default as previous row.
|
||||||
if(["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
|
if(["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
|
||||||
@@ -476,21 +488,27 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(tax.charge_type == "Actual") {
|
if(tax.charge_type == "Actual") {
|
||||||
|
current_net_amount = item.net_amount
|
||||||
// distribute the tax amount proportionally to each item row
|
// distribute the tax amount proportionally to each item row
|
||||||
var actual = flt(tax.tax_amount, precision("tax_amount", tax));
|
var actual = flt(tax.tax_amount, precision("tax_amount", tax));
|
||||||
current_tax_amount = this.frm.doc.net_total ?
|
current_tax_amount = this.frm.doc.net_total ?
|
||||||
((item.net_amount / this.frm.doc.net_total) * actual) : 0.0;
|
((item.net_amount / this.frm.doc.net_total) * actual) : 0.0;
|
||||||
|
|
||||||
} else if(tax.charge_type == "On Net Total") {
|
} else if(tax.charge_type == "On Net Total") {
|
||||||
|
if (tax.account_head in item_tax_map) {
|
||||||
|
current_net_amount = item.net_amount
|
||||||
|
};
|
||||||
current_tax_amount = (tax_rate / 100.0) * item.net_amount;
|
current_tax_amount = (tax_rate / 100.0) * item.net_amount;
|
||||||
} else if(tax.charge_type == "On Previous Row Amount") {
|
} else if(tax.charge_type == "On Previous Row Amount") {
|
||||||
|
current_net_amount = this.frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount_for_current_item
|
||||||
current_tax_amount = (tax_rate / 100.0) *
|
current_tax_amount = (tax_rate / 100.0) *
|
||||||
this.frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount_for_current_item;
|
this.frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount_for_current_item;
|
||||||
|
|
||||||
} else if(tax.charge_type == "On Previous Row Total") {
|
} else if(tax.charge_type == "On Previous Row Total") {
|
||||||
|
current_net_amount = this.frm.doc["taxes"][cint(tax.row_id) - 1].grand_total_for_current_item
|
||||||
current_tax_amount = (tax_rate / 100.0) *
|
current_tax_amount = (tax_rate / 100.0) *
|
||||||
this.frm.doc["taxes"][cint(tax.row_id) - 1].grand_total_for_current_item;
|
this.frm.doc["taxes"][cint(tax.row_id) - 1].grand_total_for_current_item;
|
||||||
} else if (tax.charge_type == "On Item Quantity") {
|
} else if (tax.charge_type == "On Item Quantity") {
|
||||||
|
// don't sum current net amount due to the field being a currency field
|
||||||
current_tax_amount = tax_rate * item.qty;
|
current_tax_amount = tax_rate * item.qty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -498,7 +516,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
|
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_tax_amount;
|
return [current_net_amount, current_tax_amount];
|
||||||
}
|
}
|
||||||
|
|
||||||
set_item_wise_tax(item, tax, tax_rate, current_tax_amount) {
|
set_item_wise_tax(item, tax, tax_rate, current_tax_amount) {
|
||||||
@@ -532,7 +550,11 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tax.tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
|
tax.tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
|
||||||
tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, precision("tax_amount", tax));
|
tax.net_amount = flt(tax.net_amount, precision("net_amount", tax));
|
||||||
|
tax.tax_amount_after_discount_amount = flt(
|
||||||
|
tax.tax_amount_after_discount_amount,
|
||||||
|
precision("tax_amount", tax)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
round_off_base_values(tax) {
|
round_off_base_values(tax) {
|
||||||
|
|||||||
Reference in New Issue
Block a user