Merge pull request #23221 from deepeshgarg007/pending_principal
fix: Pending amount after loan closure request
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index a09face..409c15f 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -638,20 +638,12 @@
return { filters: filters };
},
- reverse_journal_entry: function(frm) {
- var me = frm.doc;
- for(var i=0; i<me.accounts.length; i++) {
- me.accounts[i].credit += me.accounts[i].debit;
- me.accounts[i].debit = me.accounts[i].credit - me.accounts[i].debit;
- me.accounts[i].credit -= me.accounts[i].debit;
- me.accounts[i].credit_in_account_currency = me.accounts[i].credit;
- me.accounts[i].debit_in_account_currency = me.accounts[i].debit;
- me.accounts[i].reference_type = "Journal Entry";
- me.accounts[i].reference_name = me.name
- }
- frm.copy_doc();
- cur_frm.reload_doc();
- }
+ reverse_journal_entry: function() {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.accounts.doctype.journal_entry.journal_entry.make_reverse_journal_entry",
+ frm: cur_frm
+ })
+ },
});
$.extend(erpnext.journal_entry, {
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index dda1708..0a385d0 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -1021,3 +1021,34 @@
journal_entry.posting_date = nowdate()
journal_entry.inter_company_journal_entry_reference = name
return journal_entry.as_dict()
+
+@frappe.whitelist()
+def make_reverse_journal_entry(source_name, target_doc=None, ignore_permissions=False):
+ from frappe.model.mapper import get_mapped_doc
+
+ def update_accounts(source, target, source_parent):
+ target.reference_type = "Journal Entry"
+ target.reference_name = source_parent.name
+
+ doclist = get_mapped_doc("Journal Entry", source_name, {
+ "Journal Entry": {
+ "doctype": "Journal Entry",
+ "validation": {
+ "docstatus": ["=", 1]
+ }
+ },
+ "Journal Entry Account": {
+ "doctype": "Journal Entry Account",
+ "field_map": {
+ "account_currency": "account_currency",
+ "exchange_rate": "exchange_rate",
+ "debit_in_account_currency": "credit_in_account_currency",
+ "debit": "credit",
+ "credit_in_account_currency": "debit_in_account_currency",
+ "credit": "debit",
+ },
+ "postprocess": update_accounts,
+ },
+ }, target_doc, ignore_permissions=ignore_permissions)
+
+ return doclist
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
index 479d4b6..53c0758 100644
--- a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
@@ -167,6 +167,49 @@
self.assertFalse(gle)
+ def test_reverse_journal_entry(self):
+ from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry
+ jv = make_journal_entry("_Test Bank USD - _TC",
+ "Sales - _TC", 100, exchange_rate=50, save=False)
+
+ jv.get("accounts")[1].credit_in_account_currency = 5000
+ jv.get("accounts")[1].exchange_rate = 1
+ jv.submit()
+
+ rjv = make_reverse_journal_entry(jv.name)
+ rjv.posting_date = nowdate()
+ rjv.submit()
+
+
+ gl_entries = frappe.db.sql("""select account, account_currency, debit, credit,
+ debit_in_account_currency, credit_in_account_currency
+ from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s
+ order by account asc""", rjv.name, as_dict=1)
+
+ self.assertTrue(gl_entries)
+
+
+ expected_values = {
+ "_Test Bank USD - _TC": {
+ "account_currency": "USD",
+ "debit": 0,
+ "debit_in_account_currency": 0,
+ "credit": 5000,
+ "credit_in_account_currency": 100,
+ },
+ "Sales - _TC": {
+ "account_currency": "INR",
+ "debit": 5000,
+ "debit_in_account_currency": 5000,
+ "credit": 0,
+ "credit_in_account_currency": 0,
+ }
+ }
+
+ for field in ("account_currency", "debit", "debit_in_account_currency", "credit", "credit_in_account_currency"):
+ for i, gle in enumerate(gl_entries):
+ self.assertEqual(expected_values[gle.account][field], gle[field])
+
def test_disallow_change_in_account_currency_for_a_party(self):
# create jv in USD
jv = make_journal_entry("_Test Bank USD - _TC",