mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 08:24:47 +00:00
Merge pull request #44279 from frappe/mergify/bp/version-15-hotfix/pr-44263
fix: toggle debit credit amounts for transaction currency too; minor refactor (backport #44263)
This commit is contained in:
@@ -515,6 +515,55 @@ class TestJournalEntry(unittest.TestCase):
|
|||||||
self.assertEqual(row.debit_in_account_currency, 100)
|
self.assertEqual(row.debit_in_account_currency, 100)
|
||||||
self.assertEqual(row.credit_in_account_currency, 100)
|
self.assertEqual(row.credit_in_account_currency, 100)
|
||||||
|
|
||||||
|
def test_toggle_debit_credit_if_negative(self):
|
||||||
|
from erpnext.accounts.general_ledger import process_gl_map
|
||||||
|
|
||||||
|
# Create JV with defaut cost center - _Test Cost Center
|
||||||
|
frappe.db.set_single_value("Accounts Settings", "merge_similar_account_heads", 0)
|
||||||
|
|
||||||
|
jv = frappe.new_doc("Journal Entry")
|
||||||
|
jv.posting_date = nowdate()
|
||||||
|
jv.company = "_Test Company"
|
||||||
|
jv.user_remark = "test"
|
||||||
|
jv.extend(
|
||||||
|
"accounts",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"account": "_Test Cash - _TC",
|
||||||
|
"debit": 100 * -1,
|
||||||
|
"debit_in_account_currency": 100 * -1,
|
||||||
|
"exchange_rate": 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"account": "_Test Bank - _TC",
|
||||||
|
"credit": 100 * -1,
|
||||||
|
"credit_in_account_currency": 100 * -1,
|
||||||
|
"exchange_rate": 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
jv.flags.ignore_validate = True
|
||||||
|
jv.save()
|
||||||
|
|
||||||
|
self.assertEqual(len(jv.accounts), 2)
|
||||||
|
|
||||||
|
gl_map = jv.build_gl_map()
|
||||||
|
|
||||||
|
for row in gl_map:
|
||||||
|
if row.account == "_Test Cash - _TC":
|
||||||
|
self.assertEqual(row.debit, 100 * -1)
|
||||||
|
self.assertEqual(row.debit_in_account_currency, 100 * -1)
|
||||||
|
self.assertEqual(row.debit_in_transaction_currency, 100 * -1)
|
||||||
|
|
||||||
|
gl_map = process_gl_map(gl_map, False)
|
||||||
|
|
||||||
|
for row in gl_map:
|
||||||
|
if row.account == "_Test Cash - _TC":
|
||||||
|
self.assertEqual(row.credit, 100)
|
||||||
|
self.assertEqual(row.credit_in_account_currency, 100)
|
||||||
|
self.assertEqual(row.credit_in_transaction_currency, 100)
|
||||||
|
|
||||||
def test_transaction_exchange_rate_on_journals(self):
|
def test_transaction_exchange_rate_on_journals(self):
|
||||||
jv = make_journal_entry("_Test Bank - _TC", "_Test Receivable USD - _TC", 100, save=False)
|
jv = make_journal_entry("_Test Bank - _TC", "_Test Receivable USD - _TC", 100, save=False)
|
||||||
jv.accounts[0].update({"debit_in_account_currency": 8500, "exchange_rate": 1})
|
jv.accounts[0].update({"debit_in_account_currency": 8500, "exchange_rate": 1})
|
||||||
|
|||||||
@@ -315,66 +315,48 @@ def check_if_in_list(gle, gl_map):
|
|||||||
|
|
||||||
|
|
||||||
def toggle_debit_credit_if_negative(gl_map):
|
def toggle_debit_credit_if_negative(gl_map):
|
||||||
|
debit_credit_field_map = {
|
||||||
|
"debit": "credit",
|
||||||
|
"debit_in_account_currency": "credit_in_account_currency",
|
||||||
|
"debit_in_transaction_currency": "credit_in_transaction_currency",
|
||||||
|
}
|
||||||
|
|
||||||
for entry in gl_map:
|
for entry in gl_map:
|
||||||
# toggle debit, credit if negative entry
|
# toggle debit, credit if negative entry
|
||||||
if flt(entry.debit) < 0 and flt(entry.credit) < 0 and flt(entry.debit) == flt(entry.credit):
|
for debit_field, credit_field in debit_credit_field_map.items():
|
||||||
entry.credit *= -1
|
debit = flt(entry.get(debit_field))
|
||||||
entry.debit *= -1
|
credit = flt(entry.get(credit_field))
|
||||||
|
|
||||||
if (
|
if debit < 0 and credit < 0 and debit == credit:
|
||||||
flt(entry.debit_in_account_currency) < 0
|
debit *= -1
|
||||||
and flt(entry.credit_in_account_currency) < 0
|
credit *= -1
|
||||||
and flt(entry.debit_in_account_currency) == flt(entry.credit_in_account_currency)
|
|
||||||
):
|
|
||||||
entry.credit_in_account_currency *= -1
|
|
||||||
entry.debit_in_account_currency *= -1
|
|
||||||
|
|
||||||
if flt(entry.debit) < 0:
|
if debit < 0:
|
||||||
entry.credit = flt(entry.credit) - flt(entry.debit)
|
credit = credit - debit
|
||||||
entry.debit = 0.0
|
debit = 0.0
|
||||||
|
|
||||||
if flt(entry.debit_in_account_currency) < 0:
|
if credit < 0:
|
||||||
entry.credit_in_account_currency = flt(entry.credit_in_account_currency) - flt(
|
debit = debit - credit
|
||||||
entry.debit_in_account_currency
|
credit = 0.0
|
||||||
)
|
|
||||||
entry.debit_in_account_currency = 0.0
|
|
||||||
|
|
||||||
if flt(entry.credit) < 0:
|
# update net values
|
||||||
entry.debit = flt(entry.debit) - flt(entry.credit)
|
# In some scenarios net value needs to be shown in the ledger
|
||||||
entry.credit = 0.0
|
# This method updates net values as debit or credit
|
||||||
|
if entry.post_net_value and debit and credit:
|
||||||
|
if debit > credit:
|
||||||
|
debit = debit - credit
|
||||||
|
credit = 0.0
|
||||||
|
|
||||||
if flt(entry.credit_in_account_currency) < 0:
|
else:
|
||||||
entry.debit_in_account_currency = flt(entry.debit_in_account_currency) - flt(
|
credit = credit - debit
|
||||||
entry.credit_in_account_currency
|
debit = 0.0
|
||||||
)
|
|
||||||
entry.credit_in_account_currency = 0.0
|
|
||||||
|
|
||||||
update_net_values(entry)
|
entry[debit_field] = debit
|
||||||
|
entry[credit_field] = credit
|
||||||
|
|
||||||
return gl_map
|
return gl_map
|
||||||
|
|
||||||
|
|
||||||
def update_net_values(entry):
|
|
||||||
# In some scenarios net value needs to be shown in the ledger
|
|
||||||
# This method updates net values as debit or credit
|
|
||||||
if entry.post_net_value and entry.debit and entry.credit:
|
|
||||||
if entry.debit > entry.credit:
|
|
||||||
entry.debit = entry.debit - entry.credit
|
|
||||||
entry.debit_in_account_currency = (
|
|
||||||
entry.debit_in_account_currency - entry.credit_in_account_currency
|
|
||||||
)
|
|
||||||
entry.credit = 0
|
|
||||||
entry.credit_in_account_currency = 0
|
|
||||||
else:
|
|
||||||
entry.credit = entry.credit - entry.debit
|
|
||||||
entry.credit_in_account_currency = (
|
|
||||||
entry.credit_in_account_currency - entry.debit_in_account_currency
|
|
||||||
)
|
|
||||||
|
|
||||||
entry.debit = 0
|
|
||||||
entry.debit_in_account_currency = 0
|
|
||||||
|
|
||||||
|
|
||||||
def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
|
def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
|
||||||
if not from_repost:
|
if not from_repost:
|
||||||
validate_cwip_accounts(gl_map)
|
validate_cwip_accounts(gl_map)
|
||||||
|
|||||||
Reference in New Issue
Block a user