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 b87e8e00951..2c5bfa60917 100644 --- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py @@ -619,15 +619,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 d2081bcde59..47ba392802e 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -516,6 +516,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); },