Fix taxes and totals in party currency
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 33a3f31..5dff001 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -153,3 +153,4 @@
execute:frappe.delete_doc("Page","stock-level")
erpnext.patches.v5_0.reclculate_planned_operating_cost_in_production_order
erpnext.patches.v5_0.repost_requested_qty
+erpnext.patches.v5_0.fix_taxes_and_totals_in_party_currency
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
new file mode 100644
index 0000000..38ee2ff
--- /dev/null
+++ b/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
@@ -0,0 +1,63 @@
+
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+import frappe
+from frappe.model.meta import get_field_precision
+
+def execute():
+ selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]
+ buying_doctypes = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
+
+ for dt in selling_doctypes:
+ update_values(dt, "Sales Taxes and Charges")
+
+ for dt in buying_doctypes:
+ update_values(dt, "Purchase Taxes and Charges")
+
+def update_values(dt, tax_table):
+ rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
+ tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
+
+ # update net_total, discount_on
+ frappe.db.sql("""
+ UPDATE
+ `tab{0}`
+ SET
+ total_taxes_and_charges = round(base_total_taxes_and_charges / conversion_rate, {1})
+ WHERE
+ docstatus < 2
+ and ifnull(base_total_taxes_and_charges, 0) != 0
+ and ifnull(total_taxes_and_charges, 0) = 0
+ """.format(dt, tax_amount_precision))
+
+ # update net_amount
+ frappe.db.sql("""
+ UPDATE
+ `tab{0}` par, `tab{1}` item
+ SET
+ item.net_amount = round(item.base_net_amount / par.conversion_rate, {2}),
+ item.net_rate = round(item.base_net_rate / par.conversion_rate, {2})
+ WHERE
+ par.name = item.parent
+ and par.docstatus < 2
+ and ((ifnull(item.base_net_amount, 0) != 0 and ifnull(item.net_amount, 0) = 0)
+ or (ifnull(item.base_net_rate, 0) != 0 and ifnull(item.net_rate, 0) = 0))
+ """.format(dt, dt + " Item", rate_field_precision))
+
+ # update tax in party currency
+ frappe.db.sql("""
+ UPDATE
+ `tab{0}` par, `tab{1}` tax
+ SET
+ tax.tax_amount = round(tax.base_tax_amount / par.conversion_rate, {2}),
+ tax.total = round(tax.base_total / conversion_rate, {2}),
+ tax.tax_amount_after_discount_amount = round(tax.base_tax_amount_after_discount_amount / conversion_rate, {2})
+ WHERE
+ par.name = tax.parent
+ and par.docstatus < 2
+ and ((ifnull(tax.base_tax_amount, 0) != 0 and ifnull(tax.tax_amount, 0) = 0)
+ or (ifnull(tax.base_total, 0) != 0 and ifnull(tax.total, 0) = 0)
+ or (ifnull(tax.base_tax_amount_after_discount_amount, 0) != 0 and
+ ifnull(tax.tax_amount_after_discount_amount, 0) = 0))
+ """.format(dt, tax_table, tax_amount_precision))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
index c595f4e..f4ed66b 100644
--- a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
+++ b/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
@@ -46,17 +46,16 @@
WHERE
docstatus < 2
""".format(dt, net_total_precision))
-
-
+
# update net_amount
frappe.db.sql("""
UPDATE
`tab{0}` par, `tab{1}` item
SET
- item.base_net_amount = item.base_amount,
- item.base_net_rate = item.base_rate,
- item.net_amount = round(item.base_net_amount / par.conversion_rate, {2}),
- item.net_rate = round(item.base_net_rate / par.conversion_rate, {2}),
+ item.base_net_amount = round(item.base_amount, {2}),
+ item.base_net_rate = round(item.base_rate, {2}),
+ item.net_amount = round(item.base_amount / par.conversion_rate, {2}),
+ item.net_rate = round(item.base_rate / par.conversion_rate, {2}),
item.base_amount = round(item.amount * par.conversion_rate, {2}),
item.base_rate = round(item.rate * par.conversion_rate, {2})
WHERE
@@ -69,12 +68,12 @@
UPDATE
`tab{0}` par, `tab{1}` tax
SET
- tax.base_tax_amount = tax.tax_amount,
- tax.tax_amount = round(tax.base_tax_amount / par.conversion_rate, {2}),
+ tax.base_tax_amount = round(tax.tax_amount, {2}),
+ tax.tax_amount = round(tax.tax_amount / par.conversion_rate, {2}),
tax.base_total = round(tax.total, {2}),
- tax.total = round(tax.base_total / conversion_rate, {2}),
+ tax.total = round(tax.total / conversion_rate, {2}),
tax.base_tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount, {2}),
- tax.tax_amount_after_discount_amount = round(tax.base_tax_amount_after_discount_amount / conversion_rate, {2})
+ tax.tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount / conversion_rate, {2})
WHERE
par.name = tax.parent
and par.docstatus < 2