diff --git a/erpnext/__version__.py b/erpnext/__version__.py index 823132d757..ebbb35b1c7 100644 --- a/erpnext/__version__.py +++ b/erpnext/__version__.py @@ -1 +1 @@ -__version__ = '4.21.1' +__version__ = '4.21.2' diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js index 3011160639..265f7d4e82 100644 --- a/erpnext/buying/doctype/purchase_common/purchase_common.js +++ b/erpnext/buying/doctype/purchase_common/purchase_common.js @@ -209,26 +209,17 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ calculate_totals: function() { var tax_count = this.frm.tax_doclist.length; - this.frm.doc.grand_total = flt(tax_count ? - this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total); - this.frm.doc.grand_total_import = flt(tax_count ? - flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate) : this.frm.doc.net_total_import); + this.frm.doc.grand_total = flt(tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total); - this.frm.doc.total_tax = flt(this.frm.doc.grand_total - this.frm.doc.net_total, - precision("total_tax")); + this.frm.doc.total_tax = flt(this.frm.doc.grand_total - this.frm.doc.net_total, precision("total_tax")); this.frm.doc.grand_total = flt(this.frm.doc.grand_total, precision("grand_total")); - this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total_import, precision("grand_total_import")); // rounded totals if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) { this.frm.doc.rounded_total = Math.round(this.frm.doc.grand_total); } - if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total_import", this.frm.doc.name)) { - this.frm.doc.rounded_total_import = Math.round(this.frm.doc.grand_total_import); - } - // other charges added/deducted this.frm.doc.other_charges_added = 0.0 this.frm.doc.other_charges_deducted = 0.0 @@ -246,6 +237,16 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ frappe.model.round_floats_in(this.frm.doc, ["other_charges_added", "other_charges_deducted"]); } + + this.frm.doc.grand_total_import = flt((this.frm.doc.other_charges_added || this.frm.doc.other_charges_deducted) ? + flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate) : this.frm.doc.net_total_import); + + this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total_import, precision("grand_total_import")); + + if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total_import", this.frm.doc.name)) { + this.frm.doc.rounded_total_import = Math.round(this.frm.doc.grand_total_import); + } + this.frm.doc.other_charges_added_import = flt(this.frm.doc.other_charges_added / this.frm.doc.conversion_rate, precision("other_charges_added_import")); this.frm.doc.other_charges_deducted_import = flt(this.frm.doc.other_charges_deducted / diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index f7b5a87d56..b4ca94d10f 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -91,8 +91,7 @@ class BuyingController(StockController): item.rate = flt(item.price_list_rate * (1.0 - (item.discount_percentage / 100.0)), self.precision("rate", item)) - item.amount = flt(item.rate * item.qty, - self.precision("amount", item)) + item.amount = flt(item.rate * item.qty, self.precision("amount", item)) item.item_tax_amount = 0.0; self._set_in_company_currency(item, "amount", "base_amount") @@ -111,20 +110,14 @@ class BuyingController(StockController): def calculate_totals(self): self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total) - self.grand_total_import = flt(self.grand_total / self.conversion_rate) \ - if self.tax_doclist else self.net_total_import self.total_tax = flt(self.grand_total - self.net_total, self.precision("total_tax")) self.grand_total = flt(self.grand_total, self.precision("grand_total")) - self.grand_total_import = flt(self.grand_total_import, self.precision("grand_total_import")) if self.meta.get_field("rounded_total"): self.rounded_total = rounded(self.grand_total) - if self.meta.get_field("rounded_total_import"): - self.rounded_total_import = rounded(self.grand_total_import) - if self.meta.get_field("other_charges_added"): self.other_charges_added = flt(sum([flt(d.tax_amount) for d in self.tax_doclist if d.add_deduct_tax=="Add" and d.category in ["Valuation and Total", "Total"]]), @@ -135,6 +128,14 @@ class BuyingController(StockController): if d.add_deduct_tax=="Deduct" and d.category in ["Valuation and Total", "Total"]]), self.precision("other_charges_deducted")) + self.grand_total_import = flt(self.grand_total / self.conversion_rate) \ + if (self.other_charges_added or self.other_charges_deducted) else self.net_total_import + + self.grand_total_import = flt(self.grand_total_import, self.precision("grand_total_import")) + + if self.meta.get_field("rounded_total_import"): + self.rounded_total_import = rounded(self.grand_total_import) + if self.meta.get_field("other_charges_added_import"): self.other_charges_added_import = flt(self.other_charges_added / self.conversion_rate, self.precision("other_charges_added_import")) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 4b0cd4eeb1..91bf0ae2a4 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -218,10 +218,11 @@ class SellingController(StockController): def calculate_totals(self): self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total) - self.grand_total_export = flt(self.grand_total / self.conversion_rate) - self.other_charges_total = flt(self.grand_total - self.net_total, self.precision("other_charges_total")) + self.grand_total_export = flt(self.grand_total / self.conversion_rate) \ + if (self.other_charges_total or self.discount_amount) else self.net_total_export + self.other_charges_total_export = flt(self.grand_total_export - self.net_total_export + flt(self.discount_amount), self.precision("other_charges_total_export")) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 80135293c9..40a0a0e584 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -4,7 +4,7 @@ app_publisher = "Web Notes Technologies Pvt. Ltd. and Contributors" app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations" app_icon = "icon-th" app_color = "#e74c3c" -app_version = "4.21.1" +app_version = "4.21.2" error_report_email = "support@erpnext.com" diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index 3a01811ba8..5a7ed08e3e 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -342,10 +342,13 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ var tax_count = this.frm.tax_doclist.length; this.frm.doc.grand_total = flt(tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total); - this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate); this.frm.doc.other_charges_total = flt(this.frm.doc.grand_total - this.frm.doc.net_total, precision("other_charges_total")); + + this.frm.doc.grand_total_export = (this.frm.doc.other_charges_total || this.frm.doc.discount_amount) ? + flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate) : this.frm.doc.net_total_export; + this.frm.doc.other_charges_total_export = flt(this.frm.doc.grand_total_export - this.frm.doc.net_total_export + flt(this.frm.doc.discount_amount), precision("other_charges_total_export")); diff --git a/erpnext/templates/form_grid/item_grid.html b/erpnext/templates/form_grid/item_grid.html index 21903c03d0..66b894e7f1 100644 --- a/erpnext/templates/form_grid/item_grid.html +++ b/erpnext/templates/form_grid/item_grid.html @@ -41,7 +41,7 @@ var delivered = doc.doctype==="Sales Order Item" ? doc.delivered_qty : doc.received_qty, completed = - 100 - cint((doc.qty - delivered) * 100 / doc.qty), + 100 - cint((flt(doc.qty) - flt(delivered)) * 100 / flt(doc.qty)), title = __("Delivered"); %} {% include "templates/form_grid/includes/progress.html" %} @@ -95,7 +95,7 @@ {% if(in_list(["Sales Order Item", "Purchase Order Item"], doc.doctype) && frm.doc.docstatus===1 && doc.amount) { var completed = - 100 - cint((doc.amount - doc.billed_amt) * 100 / doc.amount), + 100 - cint((flt(doc.amount) - flt(doc.billed_amt)) * 100 / flt(doc.amount)), title = __("Billed"); %}
  diff --git a/setup.py b/setup.py index d87fb6257e..2c17234e53 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = "4.21.1" +version = "4.21.2" with open("requirements.txt", "r") as f: install_requires = f.readlines()