From fbd62e72f9b674ec223f91bde2a936b5b08e24e3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:33:33 +0530 Subject: [PATCH] fix(payment-reconciliation): apply field precision for allocated and difference amounts (backport #49448) (#49595) fix(payment-reconciliation): apply field precision for allocated and difference amounts (#49448) fix(payment-reconciliation): handle allocated and difference amount with field precision for accurate exchange rate calculations (cherry picked from commit 194ab87fefba6c3663a3b80f06a1cdc0db4b5712) Co-authored-by: Bhavansathru <122002510+Bhavan23@users.noreply.github.com> --- .../payment_reconciliation.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index fe2b806a76b..1e1a71ea707 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -5,6 +5,7 @@ import frappe from frappe import _, msgprint, qb from frappe.model.document import Document +from frappe.model.meta import get_field_precision from frappe.query_builder import Criterion from frappe.query_builder.custom import ConstantColumn from frappe.utils import flt, fmt_money, get_link_to_form, getdate, nowdate, today @@ -392,6 +393,12 @@ class PaymentReconciliation(Document): inv.outstanding_amount = flt(entry.get("outstanding_amount")) def get_difference_amount(self, payment_entry, invoice, allocated_amount): + allocated_amount_precision = get_field_precision( + frappe.get_meta("Payment Reconciliation Allocation").get_field("allocated_amount") + ) + difference_amount_precision = get_field_precision( + frappe.get_meta("Payment Reconciliation Allocation").get_field("difference_amount") + ) difference_amount = 0 if frappe.get_cached_value( "Account", self.receivable_payable_account, "account_currency" @@ -399,8 +406,14 @@ class PaymentReconciliation(Document): if invoice.get("exchange_rate") and payment_entry.get("exchange_rate", 1) != invoice.get( "exchange_rate", 1 ): - allocated_amount_in_ref_rate = payment_entry.get("exchange_rate", 1) * allocated_amount - allocated_amount_in_inv_rate = invoice.get("exchange_rate", 1) * allocated_amount + allocated_amount_in_ref_rate = flt( + payment_entry.get("exchange_rate", 1) * flt(allocated_amount, allocated_amount_precision), + difference_amount_precision, + ) + allocated_amount_in_inv_rate = flt( + invoice.get("exchange_rate", 1) * flt(allocated_amount, allocated_amount_precision), + difference_amount_precision, + ) difference_amount = allocated_amount_in_ref_rate - allocated_amount_in_inv_rate return difference_amount