Rounding Adjustment via a separate field, instead of last tax row (#10659)
* Rounding Adjust via a separate field, instead of last tax row
* Fixed test cases
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
index 748c24d..e5e7e6d 100755
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
@@ -2078,6 +2078,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "",
"fieldname": "base_in_words",
"fieldtype": "Data",
@@ -2172,6 +2203,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "in_words",
"fieldtype": "Data",
"hidden": 0,
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index be388aa..a46c4b9 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -15,6 +15,7 @@
from erpnext.accounts.general_ledger import make_gl_entries, merge_similar_entries, delete_gl_entries
from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
from erpnext.buying.utils import check_for_closed_status
+from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
@@ -353,6 +354,7 @@
self.make_payment_gl_entries(gl_entries)
self.make_write_off_gl_entry(gl_entries)
+ self.make_gle_for_rounding_adjustment(gl_entries)
return gl_entries
@@ -584,6 +586,21 @@
})
)
+ def make_gle_for_rounding_adjustment(self, gl_entries):
+ if self.rounding_adjustment:
+ round_off_account, round_off_cost_center = \
+ get_round_off_account_and_cost_center(self.company)
+
+ gl_entries.append(
+ self.get_gl_dict({
+ "account": round_off_account,
+ "against": self.supplier,
+ "debit_in_account_currency": self.rounding_adjustment,
+ "debit": self.base_rounding_adjustment,
+ "cost_center": round_off_cost_center,
+ }
+ ))
+
def on_cancel(self):
self.check_for_closed_status()
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index 2bb0044..e00ba9b 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -1676,36 +1676,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "net_total",
- "fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Net Total",
- "length": 0,
- "no_copy": 0,
- "options": "currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "total",
"fieldtype": "Currency",
"hidden": 0,
@@ -1737,6 +1707,36 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "net_total",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Net Total",
+ "length": 0,
+ "no_copy": 0,
+ "options": "currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "taxes_section",
"fieldtype": "Section Break",
"hidden": 0,
@@ -2343,6 +2343,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "base_rounded_total",
"fieldtype": "Currency",
"hidden": 0,
@@ -2466,6 +2497,37 @@
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
"columns": 0,
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 065fb94..7a787c4 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -20,6 +20,7 @@
from erpnext.stock.doctype.batch.batch import set_batch_nos
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos, get_delivery_note_serial_no
from erpnext.setup.doctype.company.company import update_company_current_month_sales
+from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
@@ -625,6 +626,7 @@
self.make_gle_for_change_amount(gl_entries)
self.make_write_off_gl_entry(gl_entries)
+ self.make_gle_for_rounding_adjustment(gl_entries)
return gl_entries
@@ -784,6 +786,21 @@
}, write_off_account_currency)
)
+ def make_gle_for_rounding_adjustment(self, gl_entries):
+ if self.rounding_adjustment:
+ round_off_account, round_off_cost_center = \
+ get_round_off_account_and_cost_center(self.company)
+
+ gl_entries.append(
+ self.get_gl_dict({
+ "account": round_off_account,
+ "against": self.customer,
+ "credit_in_account_currency": self.rounding_adjustment,
+ "credit": self.base_rounding_adjustment,
+ "cost_center": round_off_cost_center,
+ }
+ ))
+
def update_billing_status_in_dn(self, update_modified=True):
updated_delivery_notes = []
for d in self.get("items"):
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index db29563..4dae78c 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -215,12 +215,12 @@
si.save()
# with inclusive tax and additional discount
- self.assertEquals(si.net_total, 4298.24)
+ self.assertEquals(si.net_total, 4298.25)
self.assertEquals(si.grand_total, 4900.00)
def test_sales_invoice_discount_amount(self):
si = frappe.copy_doc(test_records[3])
- si.discount_amount = 104.95
+ si.discount_amount = 104.94
si.append("taxes", {
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account Service Tax - _TC",
@@ -285,7 +285,7 @@
"_Test Account Customs Duty - _TC": [125, 116.35, 1585.40],
"_Test Account Shipping Charges - _TC": [100, 100, 1685.40],
"_Test Account Discount - _TC": [-180.33, -168.54, 1516.86],
- "_Test Account Service Tax - _TC": [-18.03, -16.86, 1500]
+ "_Test Account Service Tax - _TC": [-18.03, -16.85, 1500.01]
}
for d in si.get("taxes"):
@@ -294,10 +294,12 @@
self.assertEquals(si.base_grand_total, 1500)
self.assertEquals(si.grand_total, 1500)
+ self.assertEquals(si.rounding_adjustment, -0.01)
def test_discount_amount_gl_entry(self):
+ frappe.db.set_value("Company", "_Test Company", "round_off_account", "Round Off - _TC")
si = frappe.copy_doc(test_records[3])
- si.discount_amount = 104.95
+ si.discount_amount = 104.94
si.append("taxes", {
"doctype": "Sales Taxes and Charges",
"charge_type": "On Previous Row Amount",
@@ -327,7 +329,8 @@
[test_records[3]["taxes"][5]["account_head"], 0.0, 116.35],
[test_records[3]["taxes"][6]["account_head"], 0.0, 100],
[test_records[3]["taxes"][7]["account_head"], 168.54, 0.0],
- ["_Test Account Service Tax - _TC", 16.86, 0.0]
+ ["_Test Account Service Tax - _TC", 16.85, 0.0],
+ ["Round Off - _TC", 0.01, 0.0]
])
for gle in gl_entries:
@@ -423,13 +426,12 @@
expected_values = {
"keys": ["price_list_rate", "discount_percentage", "rate", "amount",
"base_price_list_rate", "base_rate", "base_amount", "net_rate", "net_amount"],
- "_Test Item Home Desktop 100": [62.5, 0, 62.5, 625.0, 62.5, 62.5, 625.0, 50, 499.98],
- "_Test Item Home Desktop 200": [190.66, 0, 190.66, 953.3, 190.66, 190.66, 953.3, 150, 750],
+ "_Test Item Home Desktop 100": [62.5, 0, 62.5, 625.0, 62.5, 62.5, 625.0, 50, 499.97600115194473],
+ "_Test Item Home Desktop 200": [190.66, 0, 190.66, 953.3, 190.66, 190.66, 953.3, 150, 749.9968530500239],
}
# check if children are saved
- self.assertEquals(len(si.get("items")),
- len(expected_values)-1)
+ self.assertEquals(len(si.get("items")), len(expected_values)-1)
# check if item values are calculated
for d in si.get("items"):
@@ -437,28 +439,28 @@
self.assertEquals(d.get(k), expected_values[d.item_code][i])
# check net total
- self.assertEquals(si.base_net_total, 1249.98)
+ self.assertEquals(si.net_total, 1249.97)
self.assertEquals(si.total, 1578.3)
# check tax calculation
expected_values = {
"keys": ["tax_amount", "total"],
- "_Test Account Excise Duty - _TC": [140, 1389.98],
- "_Test Account Education Cess - _TC": [2.8, 1392.78],
- "_Test Account S&H Education Cess - _TC": [1.4, 1394.18],
- "_Test Account CST - _TC": [27.88, 1422.06],
- "_Test Account VAT - _TC": [156.25, 1578.31],
- "_Test Account Customs Duty - _TC": [125, 1703.31],
- "_Test Account Shipping Charges - _TC": [100, 1803.31],
- "_Test Account Discount - _TC": [-180.33, 1622.98]
+ "_Test Account Excise Duty - _TC": [140, 1389.97],
+ "_Test Account Education Cess - _TC": [2.8, 1392.77],
+ "_Test Account S&H Education Cess - _TC": [1.4, 1394.17],
+ "_Test Account CST - _TC": [27.88, 1422.05],
+ "_Test Account VAT - _TC": [156.25, 1578.30],
+ "_Test Account Customs Duty - _TC": [125, 1703.30],
+ "_Test Account Shipping Charges - _TC": [100, 1803.30],
+ "_Test Account Discount - _TC": [-180.33, 1622.97]
}
for d in si.get("taxes"):
for i, k in enumerate(expected_values["keys"]):
self.assertEquals(d.get(k), expected_values[d.account_head][i])
- self.assertEquals(si.base_grand_total, 1622.98)
- self.assertEquals(si.grand_total, 1622.98)
+ self.assertEquals(si.base_grand_total, 1622.97)
+ self.assertEquals(si.grand_total, 1622.97)
def test_sales_invoice_calculation_export_currency_with_tax_inclusive_price(self):
# prepare
@@ -486,7 +488,7 @@
"base_rate": 2500,
"base_amount": 25000,
"net_rate": 40,
- "net_amount": 399.98,
+ "net_amount": 399.9808009215558,
"base_net_rate": 2000,
"base_net_amount": 19999
},
@@ -500,7 +502,7 @@
"base_rate": 7500,
"base_amount": 37500,
"net_rate": 118.01,
- "net_amount": 590.05,
+ "net_amount": 590.0531205155963,
"base_net_rate": 5900.5,
"base_net_amount": 29502.5
}
@@ -536,8 +538,11 @@
for i, k in enumerate(expected_values["keys"]):
self.assertEquals(d.get(k), expected_values[d.account_head][i])
- self.assertEquals(si.base_grand_total, 60794.5)
- self.assertEquals(si.grand_total, 1215.89)
+ self.assertEquals(si.base_grand_total, 60795)
+ self.assertEquals(si.grand_total, 1215.90)
+ self.assertEquals(si.rounding_adjustment, 0.01)
+ self.assertEquals(si.base_rounding_adjustment, 0.50)
+
def test_outstanding(self):
w = self.make()
@@ -1286,6 +1291,40 @@
current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales")
self.assertEqual(current_month_sales, existing_current_month_sales)
+ def test_rounding_adjustment(self):
+ si = create_sales_invoice(rate=24900, do_not_save=True)
+ for tax in ["Tax 1", "Tax2"]:
+ si.append("taxes", {
+ "charge_type": "On Net Total",
+ "account_head": "_Test Account Service Tax - _TC",
+ "description": tax,
+ "rate": 14,
+ "cost_center": "_Test Cost Center - _TC",
+ "included_in_print_rate": 1
+ })
+ si.save()
+
+ self.assertEqual(si.net_total, 19453.13)
+ self.assertEqual(si.grand_total, 24900)
+ self.assertEqual(si.total_taxes_and_charges, 5446.88)
+ self.assertEqual(si.rounding_adjustment, -0.01)
+
+ expected_values = dict((d[0], d) for d in [
+ [si.debit_to, 24900, 0.0],
+ ["_Test Account Service Tax - _TC", 0.0, 5446.88],
+ ["Sales - _TC", 0.0, 19453.13],
+ ["Round Off - _TC", 0.01, 0.0]
+ ])
+
+ gl_entries = frappe.db.sql("""select account, debit, credit
+ from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
+ order by account asc""", si.name, as_dict=1)
+
+ for gle in gl_entries:
+ self.assertEquals(expected_values[gle.account][0], gle.account)
+ self.assertEquals(expected_values[gle.account][1], gle.debit)
+ self.assertEquals(expected_values[gle.account][2], gle.credit)
+
def create_sales_invoice(**args):
si = frappe.new_doc("Sales Invoice")
args = frappe._dict(args)
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index ceae61c..c575d59 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -136,14 +136,7 @@
make_round_off_gle(gl_map, debit_credit_diff)
def make_round_off_gle(gl_map, debit_credit_diff):
- round_off_account, round_off_cost_center = frappe.db.get_value("Company", gl_map[0].company,
- ["round_off_account", "round_off_cost_center"]) or [None, None]
- if not round_off_account:
- frappe.throw(_("Please mention Round Off Account in Company"))
-
- if not round_off_cost_center:
- frappe.throw(_("Please mention Round Off Cost Center in Company"))
-
+ round_off_account, round_off_cost_center = get_round_off_account_and_cost_center(gl_map[0].company)
round_off_gle = frappe._dict()
for k in ["voucher_type", "voucher_no", "company",
@@ -165,6 +158,17 @@
gl_map.append(round_off_gle)
+def get_round_off_account_and_cost_center(company):
+ round_off_account, round_off_cost_center = frappe.db.get_value("Company", company,
+ ["round_off_account", "round_off_cost_center"]) or [None, None]
+ if not round_off_account:
+ frappe.throw(_("Please mention Round Off Account in Company"))
+
+ if not round_off_cost_center:
+ frappe.throw(_("Please mention Round Off Cost Center in Company"))
+
+ return round_off_account, round_off_cost_center
+
def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None,
adv_adj=False, update_outstanding="Yes"):
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json
index c4096cc..a5eaf26 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.json
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.json
@@ -2108,6 +2108,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "In Words will be visible once you save the Purchase Order.",
"fieldname": "base_in_words",
"fieldtype": "Data",
@@ -2233,6 +2264,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "in_words",
"fieldtype": "Data",
"hidden": 0,
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
index eed0c15..f9ff0a6 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
@@ -1682,6 +1682,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "",
"fieldname": "base_in_words",
"fieldtype": "Data",
@@ -1807,6 +1838,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "in_words",
"fieldtype": "Data",
"hidden": 0,
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index c627664..e85e56b 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -121,9 +121,10 @@
cumulated_tax_fraction += tax.tax_fraction_for_current_item
if cumulated_tax_fraction and not self.discount_amount_applied and item.qty:
- item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction), item.precision("net_amount"))
+ item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction))
item.net_rate = flt(item.net_amount / item.qty, item.precision("net_rate"))
- item.discount_percentage = flt(item.discount_percentage, item.precision("discount_percentage"))
+ item.discount_percentage = flt(item.discount_percentage,
+ item.precision("discount_percentage"))
self._set_in_company_currency(item, ["net_rate", "net_amount"])
@@ -173,6 +174,7 @@
self.doc.round_floats_in(self.doc, ["total", "base_total", "net_total", "base_net_total"])
def calculate_taxes(self):
+ self.doc.rounding_adjustment = 0
# maintain actual tax rate based on idx
actual_tax_dict = dict([[tax.idx, flt(tax.tax_amount, tax.precision("tax_amount"))]
for tax in self.doc.get("taxes") if tax.charge_type == "Actual"])
@@ -222,7 +224,9 @@
# adjust Discount Amount loss in last tax iteration
if i == (len(self.doc.get("taxes")) - 1) and self.discount_amount_applied \
and self.doc.discount_amount and self.doc.apply_discount_on == "Grand Total":
- self.adjust_discount_amount_loss(tax)
+ self.doc.rounding_adjustment = flt(self.doc.grand_total
+ - flt(self.doc.discount_amount) - tax.total,
+ self.doc.precision("rounding_adjustment"))
def get_tax_amount_if_for_valuation_or_deduction(self, tax_amount, tax):
# if just for valuation, do not add the tax amount in total
@@ -277,36 +281,26 @@
tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount,
tax.precision("tax_amount"))
- def adjust_discount_amount_loss(self, tax):
- discount_amount_loss = self.doc.grand_total - flt(self.doc.discount_amount) - tax.total
- tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
- discount_amount_loss, tax.precision("tax_amount"))
- tax.total = flt(tax.total + discount_amount_loss, tax.precision("total"))
-
- self._set_in_company_currency(tax, ["total", "tax_amount_after_discount_amount"])
-
def manipulate_grand_total_for_inclusive_tax(self):
# if fully inclusive taxes and diff
- if self.doc.get("taxes") and all(cint(t.included_in_print_rate) for t in self.doc.get("taxes")):
+ if self.doc.get("taxes") and any([cint(t.included_in_print_rate) for t in self.doc.get("taxes")]):
last_tax = self.doc.get("taxes")[-1]
- diff = self.doc.total - flt(last_tax.total, self.doc.precision("grand_total"))
-
- if diff and abs(diff) <= (2.0 / 10**last_tax.precision("tax_amount")):
- last_tax.tax_amount += diff
- last_tax.tax_amount_after_discount_amount += diff
- last_tax.total += diff
-
- self._set_in_company_currency(last_tax,
- ["total", "tax_amount", "tax_amount_after_discount_amount"])
+ non_inclusive_tax_amount = sum([flt(d.tax_amount_after_discount_amount)
+ for d in self.doc.get("taxes") if not d.included_in_print_rate])
+ diff = self.doc.total + non_inclusive_tax_amount \
+ - flt(last_tax.total, last_tax.precision("total"))
+ if diff and abs(diff) <= (5.0 / 10**last_tax.precision("tax_amount")):
+ self.doc.rounding_adjustment = flt(flt(self.doc.rounding_adjustment) +
+ flt(diff), self.doc.precision("rounding_adjustment"))
def calculate_totals(self):
- self.doc.grand_total = flt(self.doc.get("taxes")[-1].total
- if self.doc.get("taxes") else self.doc.net_total)
+ self.doc.grand_total = flt(self.doc.get("taxes")[-1].total) + flt(self.doc.rounding_adjustment) \
+ if self.doc.get("taxes") else flt(self.doc.net_total)
- self.doc.total_taxes_and_charges = flt(self.doc.grand_total - self.doc.net_total,
- self.doc.precision("total_taxes_and_charges"))
+ self.doc.total_taxes_and_charges = flt(self.doc.grand_total - self.doc.net_total
+ - flt(self.doc.rounding_adjustment), self.doc.precision("total_taxes_and_charges"))
- self._set_in_company_currency(self.doc, ["total_taxes_and_charges"])
+ self._set_in_company_currency(self.doc, ["total_taxes_and_charges", "rounding_adjustment"])
if self.doc.doctype in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
self.doc.base_grand_total = flt(self.doc.grand_total * self.doc.conversion_rate) \
@@ -326,13 +320,22 @@
if (self.doc.taxes_and_charges_added or self.doc.taxes_and_charges_deducted) \
else self.doc.base_net_total
- self._set_in_company_currency(self.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"])
+ self._set_in_company_currency(self.doc,
+ ["taxes_and_charges_added", "taxes_and_charges_deducted"])
self.doc.round_floats_in(self.doc, ["grand_total", "base_grand_total"])
+ self.set_rounded_total()
+
+ def set_rounded_total(self):
+ if frappe.db.get_single_value("Global Defaults", "disable_rounded_total"):
+ self.doc.rounded_total = self.doc.base_rounded_total = 0
+ return
+
if self.doc.meta.get_field("rounded_total"):
self.doc.rounded_total = round_based_on_smallest_currency_fraction(self.doc.grand_total,
self.doc.currency, self.doc.precision("rounded_total"))
+
if self.doc.meta.get_field("base_rounded_total"):
company_currency = erpnext.get_company_currency(self.doc.company)
@@ -525,7 +528,7 @@
for tax in doc.taxes:
if getattr(tax, "category", None) and tax.category=="Valuation":
continue
- if tax.description not in tax_accounts:
+ if tax.description not in tax_accounts and tax.tax_amount_after_discount_amount:
tax_accounts.append(tax.description)
headers = get_itemised_tax_breakup_header(doc.doctype + " Item", tax_accounts)
@@ -565,26 +568,21 @@
if getattr(tax, "category", None) and tax.category=="Valuation":
continue
- tax_amount_precision = tax.precision("tax_amount")
- tax_rate_precision = tax.precision("rate")
-
item_tax_map = json.loads(tax.item_wise_tax_detail) if tax.item_wise_tax_detail else {}
-
- for item_code, tax_data in item_tax_map.items():
- itemised_tax.setdefault(item_code, frappe._dict())
+ if item_tax_map:
+ for item_code, tax_data in item_tax_map.items():
+ itemised_tax.setdefault(item_code, frappe._dict())
- if isinstance(tax_data, list):
- precision = tax_amount_precision if tax.charge_type == "Actual" else tax_rate_precision
-
- itemised_tax[item_code][tax.description] = frappe._dict(dict(
- tax_rate=flt(tax_data[0]),
- tax_amount=flt(tax_data[1])
- ))
- else:
- itemised_tax[item_code][tax.description] = frappe._dict(dict(
- tax_rate=flt(tax_data),
- tax_amount=0.0
- ))
+ if isinstance(tax_data, list):
+ itemised_tax[item_code][tax.description] = frappe._dict(dict(
+ tax_rate=flt(tax_data[0]),
+ tax_amount=flt(tax_data[1])
+ ))
+ else:
+ itemised_tax[item_code][tax.description] = frappe._dict(dict(
+ tax_rate=flt(tax_data),
+ tax_amount=0.0
+ ))
return itemised_tax
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index d042bb7..e45c35e 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -155,7 +155,7 @@
});
if(cumulated_tax_fraction && !me.discount_amount_applied) {
- item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction), precision("net_amount", item));
+ item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction));
item.net_rate = flt(item.net_amount / item.qty, precision("net_rate", item));
me.set_in_company_currency(item, ["net_rate", "net_amount"]);
@@ -211,6 +211,7 @@
calculate_taxes: function() {
var me = this;
+ this.frm.doc.rounding_adjustment = 0;
var actual_tax_dict = {};
// maintain actual tax rate based on idx
@@ -277,8 +278,10 @@
// adjust Discount Amount loss in last tax iteration
if ((i == me.frm.doc["taxes"].length - 1) && me.discount_amount_applied
- && me.frm.doc.apply_discount_on == "Grand Total" && me.frm.doc.discount_amount)
- me.adjust_discount_amount_loss(tax);
+ && me.frm.doc.apply_discount_on == "Grand Total" && me.frm.doc.discount_amount) {
+ me.frm.doc.rounding_adjustment = flt(me.frm.doc.grand_total -
+ flt(me.frm.doc.discount_amount) - tax.total, precision("rounding_adjustment"));
+ }
}
});
});
@@ -339,45 +342,41 @@
tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, precision("tax_amount", tax));
},
- adjust_discount_amount_loss: function(tax) {
- var discount_amount_loss = this.frm.doc.grand_total - flt(this.frm.doc.discount_amount) - tax.total;
- tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
- discount_amount_loss, precision("tax_amount", tax));
- tax.total = flt(tax.total + discount_amount_loss, precision("total", tax));
-
- this.set_in_company_currency(tax, ["total", "tax_amount_after_discount_amount"]);
- },
-
manipulate_grand_total_for_inclusive_tax: function() {
var me = this;
// if fully inclusive taxes and diff
if (this.frm.doc["taxes"] && this.frm.doc["taxes"].length) {
- var all_inclusive = frappe.utils.all(this.frm.doc["taxes"].map(function(d) {
- return cint(d.included_in_print_rate);
- }));
-
- if (all_inclusive) {
+ var any_inclusive_tax = false;
+ $.each(this.frm.doc.taxes || [], function(i, d) {
+ if(cint(d.included_in_print_rate)) any_inclusive_tax = true;
+ });
+ if (any_inclusive_tax) {
var last_tax = me.frm.doc["taxes"].slice(-1)[0];
+ var non_inclusive_tax_amount = frappe.utils.sum($.map(this.frm.doc.taxes || [],
+ function(d) {
+ if(!d.included_in_print_rate) {
+ return flt(d.tax_amount_after_discount_amount);
+ }
+ }
+ ));
+ var diff = me.frm.doc.total + non_inclusive_tax_amount
+ - flt(last_tax.total, precision("grand_total"));
- var diff = me.frm.doc.total - flt(last_tax.total, precision("grand_total"));
-
- if ( diff && Math.abs(diff) <= (2.0 / Math.pow(10, precision("tax_amount", last_tax))) ) {
- last_tax.tax_amount += diff;
- last_tax.tax_amount_after_discount += diff;
- last_tax.total += diff;
-
- this.set_in_company_currency(last_tax,
- ["total", "tax_amount", "tax_amount_after_discount_amount"]);
+ if ( diff && Math.abs(diff) <= (5.0 / Math.pow(10, precision("tax_amount", last_tax))) ) {
+ this.frm.doc.rounding_adjustment = flt(flt(this.frm.doc.rounding_adjustment) + diff,
+ precision("rounding_adjustment"));
}
}
}
},
calculate_totals: function() {
- // Changing sequence can cause roundiing issue and on-screen discrepency
+ // Changing sequence can cause rounding_adjustmentng issue and on-screen discrepency
var me = this;
var tax_count = this.frm.doc["taxes"] ? this.frm.doc["taxes"].length : 0;
- this.frm.doc.grand_total = flt(tax_count ? this.frm.doc["taxes"][tax_count - 1].total : this.frm.doc.net_total);
+ this.frm.doc.grand_total = flt(tax_count
+ ? this.frm.doc["taxes"][tax_count - 1].total + flt(this.frm.doc.rounding_adjustment)
+ : this.frm.doc.net_total);
if(in_list(["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"], this.frm.doc.doctype)) {
this.frm.doc.base_grand_total = (this.frm.doc.total_taxes_and_charges) ?
@@ -396,24 +395,30 @@
}
});
- frappe.model.round_floats_in(this.frm.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"]);
+ frappe.model.round_floats_in(this.frm.doc,
+ ["taxes_and_charges_added", "taxes_and_charges_deducted"]);
}
this.frm.doc.base_grand_total = flt((this.frm.doc.taxes_and_charges_added || this.frm.doc.taxes_and_charges_deducted) ?
flt(this.frm.doc.grand_total * this.frm.doc.conversion_rate) : this.frm.doc.base_net_total);
- this.set_in_company_currency(this.frm.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"]);
+ this.set_in_company_currency(this.frm.doc,
+ ["taxes_and_charges_added", "taxes_and_charges_deducted"]);
}
- this.frm.doc.total_taxes_and_charges = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
- precision("total_taxes_and_charges"));
+ this.frm.doc.total_taxes_and_charges = flt(this.frm.doc.grand_total - this.frm.doc.net_total
+ - flt(this.frm.doc.rounding_adjustment), precision("total_taxes_and_charges"));
- this.set_in_company_currency(this.frm.doc, ["total_taxes_and_charges"]);
+ this.set_in_company_currency(this.frm.doc, ["total_taxes_and_charges", "rounding_adjustment"]);
// Round grand total as per precision
frappe.model.round_floats_in(this.frm.doc, ["grand_total", "base_grand_total"]);
// rounded totals
+ this.set_rounded_total()
+ },
+
+ set_rounded_total: function() {
if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) {
this.frm.doc.rounded_total = round_based_on_smallest_currency_fraction(this.frm.doc.grand_total,
this.frm.doc.currency, precision("rounded_total"));
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index f5bcf1c..a5ef15e 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -660,30 +660,32 @@
"base_discount_amount", "base_grand_total", "base_rounded_total", "base_in_words",
"base_taxes_and_charges_added", "base_taxes_and_charges_deducted", "total_amount_to_pay",
"base_paid_amount", "base_write_off_amount", "base_change_amount", "base_operating_cost",
- "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost"
- ], company_currency);
+ "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost",
+ "base_rounding_adjustment"], company_currency);
this.frm.set_currency_labels(["total", "net_total", "total_taxes_and_charges", "discount_amount",
"grand_total", "taxes_and_charges_added", "taxes_and_charges_deducted",
- "rounded_total", "in_words", "paid_amount", "write_off_amount", "operating_cost", "scrap_material_cost",
- "raw_material_cost", "total_cost"], this.frm.doc.currency);
+ "rounded_total", "in_words", "paid_amount", "write_off_amount", "operating_cost",
+ "scrap_material_cost", "rounding_adjustment", "raw_material_cost",
+ "total_cost"], this.frm.doc.currency);
- this.frm.set_currency_labels(["outstanding_amount", "total_advance"], this.frm.doc.party_account_currency);
+ this.frm.set_currency_labels(["outstanding_amount", "total_advance"],
+ this.frm.doc.party_account_currency);
cur_frm.set_df_property("conversion_rate", "description", "1 " + this.frm.doc.currency
- + " = [?] " + company_currency)
+ + " = [?] " + company_currency);
if(this.frm.doc.price_list_currency && this.frm.doc.price_list_currency!=company_currency) {
- cur_frm.set_df_property("plc_conversion_rate", "description", "1 " + this.frm.doc.price_list_currency
- + " = [?] " + company_currency)
+ cur_frm.set_df_property("plc_conversion_rate", "description", "1 "
+ + this.frm.doc.price_list_currency + " = [?] " + company_currency);
}
// toggle fields
- this.frm.toggle_display(["conversion_rate", "base_total", "base_net_total", "base_total_taxes_and_charges",
- "base_taxes_and_charges_added", "base_taxes_and_charges_deducted",
+ this.frm.toggle_display(["conversion_rate", "base_total", "base_net_total",
+ "base_total_taxes_and_charges", "base_taxes_and_charges_added", "base_taxes_and_charges_deducted",
"base_grand_total", "base_rounded_total", "base_in_words", "base_discount_amount",
- "base_paid_amount", "base_write_off_amount", "base_operating_cost",
- "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost"],
+ "base_paid_amount", "base_write_off_amount", "base_operating_cost", "base_raw_material_cost",
+ "base_total_cost", "base_scrap_material_cost", "base_rounding_adjustment"],
this.frm.doc.currency != company_currency);
this.frm.toggle_display(["plc_conversion_rate", "price_list_currency"],
diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json
index ab879a1..ade37b1 100644
--- a/erpnext/selling/doctype/quotation/quotation.json
+++ b/erpnext/selling/doctype/quotation/quotation.json
@@ -1901,6 +1901,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "In Words will be visible once you save the Quotation.",
"fieldname": "base_in_words",
"fieldtype": "Data",
@@ -2027,6 +2058,37 @@
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
"columns": 0,
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index 3b8eb68..ffa6c75 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -1986,6 +1986,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "base_rounded_total",
"fieldtype": "Currency",
"hidden": 0,
@@ -2112,6 +2143,38 @@
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "depends_on": "",
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
"columns": 0,
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json
index 980f79b..cb4275d 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.json
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.json
@@ -2115,6 +2115,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "base_rounded_total",
"fieldtype": "Currency",
"hidden": 0,
@@ -2243,6 +2274,37 @@
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
"columns": 0,
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json
index 7140dbd..3acdeee 100755
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json
@@ -1945,6 +1945,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "base_rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment (Company Currency)",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "",
"fieldname": "base_in_words",
"fieldtype": "Data",
@@ -2070,6 +2101,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "rounding_adjustment",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Rounding Adjustment",
+ "length": 0,
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "in_words",
"fieldtype": "Data",
"hidden": 0,
@@ -3060,7 +3122,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-08-06 19:33:59.822251",
+ "modified": "2017-08-29 11:02:24.831340",
"modified_by": "Administrator",
"module": "Stock",
"name": "Purchase Receipt",