From 5dc63f97a11f2f6f129bc4c7a331f03acacd14be Mon Sep 17 00:00:00 2001 From: ljain112 Date: Mon, 21 Apr 2025 12:11:13 +0530 Subject: [PATCH] fix: set correct paid/receive amount if doc currency is different from party account currency (cherry picked from commit 96125218943c2740b3688a6d0b99b67bff7d7086) --- .../doctype/payment_entry/payment_entry.py | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 77eeba5cf3a..00c9a337499 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -3300,26 +3300,25 @@ def set_paid_amount_and_received_amount( if party_account_currency == bank.account_currency: paid_amount = received_amount = abs(outstanding_amount) else: - company_currency = frappe.get_cached_value("Company", doc.get("company"), "default_currency") - if payment_type == "Receive": - paid_amount = abs(outstanding_amount) - if bank_amount: - received_amount = bank_amount - else: - if bank and company_currency != bank.account_currency: - received_amount = paid_amount / doc.get("conversion_rate", 1) - else: - received_amount = paid_amount * doc.get("conversion_rate", 1) + # settings if it is for receive + paid_amount = abs(outstanding_amount) + if bank_amount: + received_amount = bank_amount else: - received_amount = abs(outstanding_amount) - if bank_amount: - paid_amount = bank_amount + company_currency = frappe.get_cached_value("Company", doc.get("company"), "default_currency") + if bank and company_currency != bank.account_currency: + # doc currency can be different from bank currency + posting_date = doc.get("posting_date") or doc.get("transaction_date") + conversion_rate = get_exchange_rate( + bank.account_currency, party_account_currency, posting_date + ) + received_amount = paid_amount / conversion_rate else: - if bank and company_currency != bank.account_currency: - paid_amount = received_amount / doc.get("conversion_rate", 1) - else: - # if party account currency and bank currency is different then populate paid amount as well - paid_amount = received_amount * doc.get("conversion_rate", 1) + received_amount = paid_amount * doc.get("conversion_rate", 1) + + # if payment type is pay, then paid amount and received amount are swapped + if payment_type == "Pay": + paid_amount, received_amount = received_amount, paid_amount return paid_amount, received_amount