fix: add reconciliation after submit logic for bank transactions (#57330)

Co-authored-by: Poovetha <poovethapalanivelu@gmail.com>
(cherry picked from commit c3319d74cf)
This commit is contained in:
Vishnu Priya Baskaran
2026-09-04 17:05:39 +05:30
committed by Mergify
parent 7cbf8b8660
commit 2ee5f6b1c4

View File

@@ -602,6 +602,7 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager {
},
callback: (r) => {
const doc = frappe.model.sync(r.message);
track_voucher(doc[0].doctype, doc[0].name, this.bank_transaction.name);
frappe.set_route("Form", doc[0].doctype, doc[0].name);
},
});
@@ -622,9 +623,77 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager {
},
callback: (r) => {
var doc = frappe.model.sync(r.message);
track_voucher(doc[0].doctype, doc[0].name, this.bank_transaction.name);
frappe.set_route("Form", doc[0].doctype, doc[0].name);
},
});
}
}
};
const pending_reconciliations = new Map();
const voucher_key = (doctype, docname) => `${doctype}:${docname}`;
const track_voucher = (doctype, docname, bank_transaction_name) => {
pending_reconciliations.set(voucher_key(doctype, docname), bank_transaction_name);
};
for (const voucher_doctype of ["Payment Entry", "Journal Entry"]) {
frappe.ui.form.on(voucher_doctype, {
before_save(frm) {
frm.__pending_reconciliation_key = voucher_key(frm.doctype, frm.doc.name);
},
after_save(frm) {
const old_key = frm.__pending_reconciliation_key;
delete frm.__pending_reconciliation_key;
const new_key = voucher_key(frm.doctype, frm.doc.name);
if (!old_key || old_key === new_key || !pending_reconciliations.has(old_key)) return;
// Follow the rename so the voucher stays identifiable on submit
pending_reconciliations.set(new_key, pending_reconciliations.get(old_key));
pending_reconciliations.delete(old_key);
},
on_submit(frm) {
const key = voucher_key(frm.doctype, frm.doc.name);
const bank_transaction_name = pending_reconciliations.get(key);
if (!bank_transaction_name) return;
pending_reconciliations.delete(key);
frappe.call({
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.reconcile_vouchers",
args: {
bank_transaction_name: bank_transaction_name,
vouchers: [
{
payment_doctype: frm.doctype,
payment_name: frm.doc.name,
},
],
is_new_voucher: true,
},
callback: (r) => {
if (r.exc) return;
frappe.show_alert({
message: __("Bank Transaction {0} Matched", [bank_transaction_name]),
indicator: "green",
});
},
error: () => {
frappe.msgprint({
title: __("Reconciliation Failed"),
indicator: "red",
message: __(
"{0} {1} was submitted but could not be reconciled against Bank Transaction {2}. Match it manually from the Bank Reconciliation Tool.",
[__(frm.doctype), frm.doc.name, bank_transaction_name]
),
});
},
});
},
});
}