mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-09 23:39:28 +00:00
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com>
This commit is contained in:
@@ -472,8 +472,8 @@ cur_frm.cscript.update_totals = function (doc) {
|
|||||||
tc += flt(accounts[i].credit, precision("credit", accounts[i]));
|
tc += flt(accounts[i].credit, precision("credit", accounts[i]));
|
||||||
}
|
}
|
||||||
doc = locals[doc.doctype][doc.name];
|
doc = locals[doc.doctype][doc.name];
|
||||||
doc.total_debit = td;
|
doc.total_debit = flt(td, precision("total_debit"));
|
||||||
doc.total_credit = tc;
|
doc.total_credit = flt(tc, precision("total_credit"));
|
||||||
doc.difference = flt(td - tc, precision("difference"));
|
doc.difference = flt(td - tc, precision("difference"));
|
||||||
refresh_many(["total_debit", "total_credit", "difference"]);
|
refresh_many(["total_debit", "total_credit", "difference"]);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -960,12 +960,14 @@ class JournalEntry(AccountsController):
|
|||||||
if d.debit and d.credit:
|
if d.debit and d.credit:
|
||||||
frappe.throw(_("You cannot credit and debit same account at the same time"))
|
frappe.throw(_("You cannot credit and debit same account at the same time"))
|
||||||
|
|
||||||
self.total_debit = flt(self.total_debit) + flt(d.debit, d.precision("debit"))
|
self.total_debit = flt(
|
||||||
self.total_credit = flt(self.total_credit) + flt(d.credit, d.precision("credit"))
|
self.total_debit + flt(d.debit, d.precision("debit")), self.precision("total_debit")
|
||||||
|
|
||||||
self.difference = flt(self.total_debit, self.precision("total_debit")) - flt(
|
|
||||||
self.total_credit, self.precision("total_credit")
|
|
||||||
)
|
)
|
||||||
|
self.total_credit = flt(
|
||||||
|
self.total_credit + flt(d.credit, d.precision("credit")), self.precision("total_credit")
|
||||||
|
)
|
||||||
|
|
||||||
|
self.difference = flt(self.total_debit - self.total_credit, self.precision("difference"))
|
||||||
|
|
||||||
def validate_multi_currency(self):
|
def validate_multi_currency(self):
|
||||||
alternate_currency = []
|
alternate_currency = []
|
||||||
|
|||||||
@@ -409,6 +409,59 @@ class TestJournalEntry(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.check_gl_entries()
|
self.check_gl_entries()
|
||||||
|
|
||||||
|
def make_jv_with_fractional_totals(self):
|
||||||
|
"""0.10 + 0.20 sums to 0.30000000000000004, the residue this guards against."""
|
||||||
|
jv = frappe.new_doc("Journal Entry")
|
||||||
|
jv.posting_date = nowdate()
|
||||||
|
jv.company = "_Test Company"
|
||||||
|
jv.voucher_type = "Journal Entry"
|
||||||
|
jv.remark = "test"
|
||||||
|
for amount in (0.10, 0.20):
|
||||||
|
jv.append(
|
||||||
|
"accounts",
|
||||||
|
{
|
||||||
|
"account": "_Test Cash - _TC",
|
||||||
|
"cost_center": "_Test Cost Center - _TC",
|
||||||
|
"debit_in_account_currency": amount,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
jv.append(
|
||||||
|
"accounts",
|
||||||
|
{
|
||||||
|
"account": "_Test Bank - _TC",
|
||||||
|
"cost_center": "_Test Cost Center - _TC",
|
||||||
|
"credit_in_account_currency": 0.30,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
jv.insert()
|
||||||
|
return jv
|
||||||
|
|
||||||
|
def test_totals_are_rounded_to_precision(self):
|
||||||
|
jv = self.make_jv_with_fractional_totals()
|
||||||
|
jv.submit()
|
||||||
|
|
||||||
|
stored = frappe.db.get_value(
|
||||||
|
"Journal Entry", jv.name, ["total_debit", "total_credit", "difference"], as_dict=True
|
||||||
|
)
|
||||||
|
self.assertEqual(jv.total_debit, flt(jv.total_debit, jv.precision("total_debit")))
|
||||||
|
self.assertEqual(jv.total_credit, flt(jv.total_credit, jv.precision("total_credit")))
|
||||||
|
self.assertEqual(jv.total_debit, stored.total_debit)
|
||||||
|
self.assertEqual(jv.total_credit, stored.total_credit)
|
||||||
|
self.assertEqual(jv.difference, stored.difference)
|
||||||
|
|
||||||
|
def test_update_after_submit_with_fractional_totals(self):
|
||||||
|
"""An unrounded total is stored rounded, so updating a submitted entry used to throw."""
|
||||||
|
jv = self.make_jv_with_fractional_totals()
|
||||||
|
jv.submit()
|
||||||
|
|
||||||
|
jv.pay_to_recd_from = "_Test Supplier"
|
||||||
|
jv.save()
|
||||||
|
|
||||||
|
self.assertEqual(jv.docstatus, 1)
|
||||||
|
self.assertEqual(
|
||||||
|
jv.pay_to_recd_from, frappe.db.get_value("Journal Entry", jv.name, "pay_to_recd_from")
|
||||||
|
)
|
||||||
|
|
||||||
def test_jv_account_and_party_balance_with_cost_centre(self):
|
def test_jv_account_and_party_balance_with_cost_centre(self):
|
||||||
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
||||||
from erpnext.accounts.utils import get_balance_on
|
from erpnext.accounts.utils import get_balance_on
|
||||||
|
|||||||
Reference in New Issue
Block a user