Merge pull request #28302 from nemesis189/shipping-rule-updation-error
fix: Shipping Rule picking up old net_rate
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index f68122d..78396a5 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -833,29 +833,12 @@
pi.shipping_rule = shipping_rule.name
pi.insert()
-
- shipping_amount = 0.0
- for condition in shipping_rule.get("conditions"):
- if not condition.to_value or (flt(condition.from_value) <= pi.net_total <= flt(condition.to_value)):
- shipping_amount = condition.shipping_amount
-
- shipping_charge = {
- "doctype": "Purchase Taxes and Charges",
- "category": "Valuation and Total",
- "charge_type": "Actual",
- "account_head": shipping_rule.account,
- "cost_center": shipping_rule.cost_center,
- "tax_amount": shipping_amount,
- "description": shipping_rule.name,
- "add_deduct_tax": "Add"
- }
- pi.append("taxes", shipping_charge)
pi.save()
self.assertEqual(pi.net_total, 1250)
- self.assertEqual(pi.total_taxes_and_charges, 462.3)
- self.assertEqual(pi.grand_total, 1712.3)
+ self.assertEqual(pi.total_taxes_and_charges, 354.1)
+ self.assertEqual(pi.grand_total, 1604.1)
def test_make_pi_without_terms(self):
pi = make_purchase_invoice(do_not_save=1)
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 969756a..02e2416 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -1603,28 +1603,12 @@
si.shipping_rule = shipping_rule.name
si.insert()
-
- shipping_amount = 0.0
- for condition in shipping_rule.get("conditions"):
- if not condition.to_value or (flt(condition.from_value) <= si.net_total <= flt(condition.to_value)):
- shipping_amount = condition.shipping_amount
-
- shipping_charge = {
- "doctype": "Sales Taxes and Charges",
- "category": "Valuation and Total",
- "charge_type": "Actual",
- "account_head": shipping_rule.account,
- "cost_center": shipping_rule.cost_center,
- "tax_amount": shipping_amount,
- "description": shipping_rule.name
- }
- si.append("taxes", shipping_charge)
si.save()
self.assertEqual(si.net_total, 1250)
- self.assertEqual(si.total_taxes_and_charges, 577.05)
- self.assertEqual(si.grand_total, 1827.05)
+ self.assertEqual(si.total_taxes_and_charges, 468.85)
+ self.assertEqual(si.grand_total, 1718.85)
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 667edab..746c6fd 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -50,6 +50,7 @@
self.initialize_taxes()
self.determine_exclusive_rate()
self.calculate_net_total()
+ self.calculate_shipping_charges()
self.calculate_taxes()
self.manipulate_grand_total_for_inclusive_tax()
self.calculate_totals()
@@ -258,6 +259,11 @@
self.doc.round_floats_in(self.doc, ["total", "base_total", "net_total", "base_net_total"])
+ def calculate_shipping_charges(self):
+ if hasattr(self.doc, "shipping_rule") and self.doc.shipping_rule:
+ shipping_rule = frappe.get_doc("Shipping Rule", self.doc.shipping_rule)
+ shipping_rule.apply(self.doc)
+
def calculate_taxes(self):
if not self.doc.get('is_consolidated'):
self.doc.rounding_adjustment = 0
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index b5a6d8f..7c1c8c7 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -81,6 +81,7 @@
this.initialize_taxes();
this.determine_exclusive_rate();
this.calculate_net_total();
+ this.calculate_shipping_charges();
this.calculate_taxes();
this.manipulate_grand_total_for_inclusive_tax();
this.calculate_totals();
@@ -266,8 +267,13 @@
me.frm.doc.net_total += item.net_amount;
me.frm.doc.base_net_total += item.base_net_amount;
});
+ }
+ calculate_shipping_charges() {
frappe.model.round_floats_in(this.frm.doc, ["total", "base_total", "net_total", "base_net_total"]);
+ if (frappe.meta.get_docfield(this.frm.doc.doctype, "shipping_rule", this.frm.doc.name)) {
+ this.shipping_rule();
+ }
}
add_taxes_from_item_tax_template(item_tax_map) {
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 63fd8a1..0cfc008 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1085,16 +1085,8 @@
return this.frm.call({
doc: this.frm.doc,
method: "apply_shipping_rule",
- callback: function(r) {
- if(!r.exc) {
- me.calculate_taxes_and_totals();
- }
- }
}).fail(() => this.frm.set_value('shipping_rule', ''));
}
- else {
- me.calculate_taxes_and_totals();
- }
}
set_margin_amount_based_on_currency(exchange_rate) {