From 68dcc965272d7ab7096c70da3eb0a17b2d51dc02 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 27 Jul 2026 10:21:53 +0530 Subject: [PATCH] refactor: configurable date in reverse ERR journals (cherry picked from commit 0be33e4132a5f56669a3cf1c909a80545cb3a92b) --- .../exchange_rate_revaluation.py | 28 +++++++++++++------ .../doctype/journal_entry/journal_entry.js | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py index b75d7c6fc50..3d45d0445ff 100644 --- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py @@ -616,15 +616,27 @@ class ExchangeRateRevaluation(Document): if journals: from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry - for x in journals: - reversal = make_reverse_journal_entry(x) - reversal.posting_date = nowdate() - reversal.submit() - frappe.msgprint( - _("Revaluation journal for {0} has been created: {1}").format( - frappe.bold(x), get_link_to_form("Journal Entry", reversal.name) - ) + if drafts := frappe.db.get_all( + "Journal Entry", + filters={"docstatus": 0, "reversal_of": ["in", journals]}, + pluck="name", + as_list=1, + ): + part = "journals are" if len(drafts) > 1 else "journal is" + doc_links = ", ".join(["{}".format(get_link_to_form("Journal Entry", x)) for x in drafts]) + frappe.throw( + msg=_("Reverse {0} already available in draft status: {1}").format(part, doc_links), ) + else: + for x in journals: + reversal = make_reverse_journal_entry(x) + reversal.posting_date = nowdate() + reversal.save() + frappe.msgprint( + _("A draft reverse journal for {0} has been created: {1}").format( + frappe.bold(x), get_link_to_form("Journal Entry", reversal.name) + ) + ) def calculate_exchange_rate_using_last_gle(company, account, party_type, party): diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 4659f3e2b4b..950e0b99499 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -567,6 +567,7 @@ $.extend(erpnext.journal_entry, { lock_reversal_entry: function (frm) { frm.fields .filter((field) => field.has_input) + .filter((field) => field.df.fieldname != "posting_date") .forEach((field) => frm.set_df_property(field.df.fieldname, "read_only", 1)); frm.set_df_property("accounts", "read_only", 1); },