From 365ef6b88ac2d5b6ee951b8119b5e2f52a6fd246 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Thu, 8 Aug 2024 10:37:57 +0530 Subject: [PATCH 1/4] fix: update 'Paid Amount' on forex payment request (cherry picked from commit 7b0dfb2a0561b30aaa45427697ac3c5b5b424576) --- .../doctype/payment_request/payment_request.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 0fa2e7835eb..106000a78f3 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -284,6 +284,17 @@ class PaymentRequest(Document): payment_entry.received_amount = amount payment_entry.get("references")[0].allocated_amount = amount + # Update 'Paid Amount' on Forex transactions + if self.currency != ref_doc.company_currency: + if ( + self.payment_request_type == "Outward" + and payment_entry.paid_from_account_currency == ref_doc.company_currency + and payment_entry.paid_from_account_currency != payment_entry.paid_to_account_currency + ): + payment_entry.paid_amount = payment_entry.base_paid_amount = ( + payment_entry.target_exchange_rate * payment_entry.received_amount + ) + for dimension in get_accounting_dimensions(): payment_entry.update({dimension: self.get(dimension)}) From e2897933088ba52b739b618868a24e9c47b9cc18 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 9 Aug 2024 16:10:05 +0530 Subject: [PATCH 2/4] test: make use of test fixture (cherry picked from commit d6d0a1b38d7952d6ca289e9b3320e67aaa1c2f3c) # Conflicts: # erpnext/accounts/doctype/payment_request/test_payment_request.py --- .../payment_request/test_payment_request.py | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_request/test_payment_request.py b/erpnext/accounts/doctype/payment_request/test_payment_request.py index 932060895b0..8ce56740dcf 100644 --- a/erpnext/accounts/doctype/payment_request/test_payment_request.py +++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py @@ -4,6 +4,7 @@ import unittest import frappe +from frappe.tests.utils import FrappeTestCase from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice @@ -32,7 +33,7 @@ payment_method = [ ] -class TestPaymentRequest(unittest.TestCase): +class TestPaymentRequest(FrappeTestCase): def setUp(self): if not frappe.db.get_value("Payment Gateway", payment_gateway["gateway"], "name"): frappe.get_doc(payment_gateway).insert(ignore_permissions=True) @@ -45,6 +46,31 @@ class TestPaymentRequest(unittest.TestCase): ): frappe.get_doc(method).insert(ignore_permissions=True) +<<<<<<< HEAD +======= + send_email = patch( + "erpnext.accounts.doctype.payment_request.payment_request.PaymentRequest.send_email", + return_value=None, + ) + self.send_email = send_email.start() + self.addCleanup(send_email.stop) + get_payment_url = patch( + # this also shadows one (1) call to _get_payment_gateway_controller + "erpnext.accounts.doctype.payment_request.payment_request.PaymentRequest.get_payment_url", + return_value=PAYMENT_URL, + ) + self.get_payment_url = get_payment_url.start() + self.addCleanup(get_payment_url.stop) + _get_payment_gateway_controller = patch( + "erpnext.accounts.doctype.payment_request.payment_request._get_payment_gateway_controller", + ) + self._get_payment_gateway_controller = _get_payment_gateway_controller.start() + self.addCleanup(_get_payment_gateway_controller.stop) + + def tearDown(self): + frappe.db.rollback() + +>>>>>>> d6d0a1b38d (test: make use of test fixture) def test_payment_request_linkings(self): so_inr = make_sales_order(currency="INR", do_not_save=True) so_inr.disable_rounded_total = 1 From 71416902f6260fb4b0fbffc130c88602e9b8514b Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 9 Aug 2024 17:53:43 +0530 Subject: [PATCH 3/4] test: currency conversion on foreign currency account (cherry picked from commit f913c0fde1899fb8e871f1488f77fc8b8ab0218b) --- .../payment_request/test_payment_request.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/erpnext/accounts/doctype/payment_request/test_payment_request.py b/erpnext/accounts/doctype/payment_request/test_payment_request.py index 8ce56740dcf..059edabb08d 100644 --- a/erpnext/accounts/doctype/payment_request/test_payment_request.py +++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py @@ -9,6 +9,7 @@ from frappe.tests.utils import FrappeTestCase from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order from erpnext.setup.utils import get_exchange_rate @@ -286,3 +287,19 @@ class TestPaymentRequest(FrappeTestCase): # Try to make Payment Request more than SO amount, should give validation pr2.grand_total = 900 self.assertRaises(frappe.ValidationError, pr2.save) + + def test_conversion_on_foreign_currency_accounts(self): + po_doc = create_purchase_order(supplier="_Test Supplier USD", currency="USD", do_not_submit=1) + po_doc.conversion_rate = 80 + po_doc.items[0].qty = 1 + po_doc.items[0].rate = 10 + po_doc.save().submit() + + pr = make_payment_request(dt=po_doc.doctype, dn=po_doc.name, recipient_id="nabin@erpnext.com") + pr = frappe.get_doc(pr).save().submit() + + pe = pr.create_payment_entry() + self.assertEqual(pe.base_paid_amount, 800) + self.assertEqual(pe.paid_amount, 800) + self.assertEqual(pe.base_received_amount, 800) + self.assertEqual(pe.received_amount, 10) From 1844cb60a4ae8abc463fc134bab9b5463eed50c4 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 12 Aug 2024 16:14:29 +0530 Subject: [PATCH 4/4] chore: resolve conflict --- .../payment_request/test_payment_request.py | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/test_payment_request.py b/erpnext/accounts/doctype/payment_request/test_payment_request.py index 059edabb08d..6d15f84d7cf 100644 --- a/erpnext/accounts/doctype/payment_request/test_payment_request.py +++ b/erpnext/accounts/doctype/payment_request/test_payment_request.py @@ -47,31 +47,6 @@ class TestPaymentRequest(FrappeTestCase): ): frappe.get_doc(method).insert(ignore_permissions=True) -<<<<<<< HEAD -======= - send_email = patch( - "erpnext.accounts.doctype.payment_request.payment_request.PaymentRequest.send_email", - return_value=None, - ) - self.send_email = send_email.start() - self.addCleanup(send_email.stop) - get_payment_url = patch( - # this also shadows one (1) call to _get_payment_gateway_controller - "erpnext.accounts.doctype.payment_request.payment_request.PaymentRequest.get_payment_url", - return_value=PAYMENT_URL, - ) - self.get_payment_url = get_payment_url.start() - self.addCleanup(get_payment_url.stop) - _get_payment_gateway_controller = patch( - "erpnext.accounts.doctype.payment_request.payment_request._get_payment_gateway_controller", - ) - self._get_payment_gateway_controller = _get_payment_gateway_controller.start() - self.addCleanup(_get_payment_gateway_controller.stop) - - def tearDown(self): - frappe.db.rollback() - ->>>>>>> d6d0a1b38d (test: make use of test fixture) def test_payment_request_linkings(self): so_inr = make_sales_order(currency="INR", do_not_save=True) so_inr.disable_rounded_total = 1