refactor: only cancel specific gain/loss je
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index f4d28c6..4f3ea61 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -675,7 +675,9 @@
payment_entry.save(ignore_permissions=True)
-def cancel_exchange_gain_loss_journal(parent_doc: dict | object) -> None:
+def cancel_exchange_gain_loss_journal(
+ parent_doc: dict | object, referenced_dt: str = None, referenced_dn: str = None
+) -> None:
"""
Cancel Exchange Gain/Loss for Sales/Purchase Invoice, if they have any.
"""
@@ -702,7 +704,18 @@
as_list=1,
)
for doc in gain_loss_journals:
- frappe.get_doc("Journal Entry", doc[0]).cancel()
+ gain_loss_je = frappe.get_doc("Journal Entry", doc[0])
+ if referenced_dt and referenced_dn:
+ references = [(x.reference_type, x.reference_name) for x in gain_loss_je.accounts]
+ if (
+ len(references) == 2
+ and (referenced_dt, referenced_dn) in references
+ and (parent_doc.doctype, parent_doc.name) in references
+ ):
+ # only cancel JE generated against parent_doc and referenced_dn
+ gain_loss_je.cancel()
+ else:
+ gain_loss_je.cancel()
def update_accounting_ledgers_after_reference_removal(