fix: Rounding Adjustment GL Entry
This commit is contained in:
@@ -1361,7 +1361,7 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
"included_in_print_rate": 1
|
"included_in_print_rate": 1
|
||||||
})
|
})
|
||||||
si.save()
|
si.save()
|
||||||
|
si.submit()
|
||||||
self.assertEqual(si.net_total, 19453.13)
|
self.assertEqual(si.net_total, 19453.13)
|
||||||
self.assertEqual(si.grand_total, 24900)
|
self.assertEqual(si.grand_total, 24900)
|
||||||
self.assertEqual(si.total_taxes_and_charges, 5446.88)
|
self.assertEqual(si.total_taxes_and_charges, 5446.88)
|
||||||
@@ -1383,6 +1383,50 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
self.assertEqual(expected_values[gle.account][1], gle.debit)
|
self.assertEqual(expected_values[gle.account][1], gle.debit)
|
||||||
self.assertEqual(expected_values[gle.account][2], gle.credit)
|
self.assertEqual(expected_values[gle.account][2], gle.credit)
|
||||||
|
|
||||||
|
def test_rounding_adjustment_2(self):
|
||||||
|
si = create_sales_invoice(rate=400, do_not_save=True)
|
||||||
|
for rate in [400, 600, 100]:
|
||||||
|
si.append("items", {
|
||||||
|
"item_code": "_Test Item",
|
||||||
|
"gst_hsn_code": "999800",
|
||||||
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
|
"qty": 1,
|
||||||
|
"rate": rate,
|
||||||
|
"income_account": "Sales - _TC",
|
||||||
|
"cost_center": "_Test Cost Center - _TC"
|
||||||
|
})
|
||||||
|
for tax_account in ["_Test Account VAT - _TC", "_Test Account Service Tax - _TC"]:
|
||||||
|
si.append("taxes", {
|
||||||
|
"charge_type": "On Net Total",
|
||||||
|
"account_head": tax_account,
|
||||||
|
"description": tax_account,
|
||||||
|
"rate": 9,
|
||||||
|
"cost_center": "_Test Cost Center - _TC",
|
||||||
|
"included_in_print_rate": 1
|
||||||
|
})
|
||||||
|
si.save()
|
||||||
|
si.submit()
|
||||||
|
self.assertEqual(si.net_total, 1271.19)
|
||||||
|
self.assertEqual(si.grand_total, 1500)
|
||||||
|
self.assertEqual(si.total_taxes_and_charges, 228.82)
|
||||||
|
self.assertEqual(si.rounding_adjustment, -0.01)
|
||||||
|
|
||||||
|
expected_values = dict((d[0], d) for d in [
|
||||||
|
[si.debit_to, 1500, 0.0],
|
||||||
|
["_Test Account Service Tax - _TC", 0.0, 114.41],
|
||||||
|
["_Test Account VAT - _TC", 0.0, 114.41],
|
||||||
|
["Sales - _TC", 0.0, 1271.18]
|
||||||
|
])
|
||||||
|
|
||||||
|
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.assertEqual(expected_values[gle.account][0], gle.account)
|
||||||
|
self.assertEqual(expected_values[gle.account][1], gle.debit)
|
||||||
|
self.assertEqual(expected_values[gle.account][2], gle.credit)
|
||||||
|
|
||||||
def test_sales_invoice_with_shipping_rule(self):
|
def test_sales_invoice_with_shipping_rule(self):
|
||||||
from erpnext.accounts.doctype.shipping_rule.test_shipping_rule \
|
from erpnext.accounts.doctype.shipping_rule.test_shipping_rule \
|
||||||
import create_shipping_rule
|
import create_shipping_rule
|
||||||
|
|||||||
@@ -135,9 +135,9 @@ def round_off_debit_credit(gl_map):
|
|||||||
.format(gl_map[0].voucher_type, gl_map[0].voucher_no, debit_credit_diff))
|
.format(gl_map[0].voucher_type, gl_map[0].voucher_no, debit_credit_diff))
|
||||||
|
|
||||||
elif abs(debit_credit_diff) >= (1.0 / (10**precision)):
|
elif abs(debit_credit_diff) >= (1.0 / (10**precision)):
|
||||||
make_round_off_gle(gl_map, debit_credit_diff)
|
make_round_off_gle(gl_map, debit_credit_diff, precision)
|
||||||
|
|
||||||
def make_round_off_gle(gl_map, debit_credit_diff):
|
def make_round_off_gle(gl_map, debit_credit_diff, precision):
|
||||||
round_off_account, round_off_cost_center = get_round_off_account_and_cost_center(gl_map[0].company)
|
round_off_account, round_off_cost_center = get_round_off_account_and_cost_center(gl_map[0].company)
|
||||||
round_off_account_exists = False
|
round_off_account_exists = False
|
||||||
round_off_gle = frappe._dict()
|
round_off_gle = frappe._dict()
|
||||||
@@ -150,6 +150,10 @@ def make_round_off_gle(gl_map, debit_credit_diff):
|
|||||||
debit_credit_diff += flt(d.credit_in_account_currency)
|
debit_credit_diff += flt(d.credit_in_account_currency)
|
||||||
round_off_account_exists = True
|
round_off_account_exists = True
|
||||||
|
|
||||||
|
if round_off_account_exists and abs(debit_credit_diff) <= (1.0 / (10**precision)):
|
||||||
|
gl_map.remove(round_off_gle)
|
||||||
|
return
|
||||||
|
|
||||||
if not round_off_gle:
|
if not round_off_gle:
|
||||||
for k in ["voucher_type", "voucher_no", "company",
|
for k in ["voucher_type", "voucher_no", "company",
|
||||||
"posting_date", "remarks", "is_opening"]:
|
"posting_date", "remarks", "is_opening"]:
|
||||||
|
|||||||
Reference in New Issue
Block a user