From c7d865ef3b4d25c7a1e587004b7e2228daaff86d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:23:45 +0000 Subject: [PATCH] fix(pos): use company-currency change amount when netting pos gl entries (backport #58599) (#58677) Co-authored-by: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com> Co-authored-by: diptanilsaha --- .../doctype/sales_invoice/sales_invoice.py | 2 +- .../sales_invoice/test_sales_invoice.py | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 59e72ced503..8e03802f54b 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1637,7 +1637,7 @@ class SalesInvoice(SellingController): for payment_mode in self.payments: if skip_change_gl_entries and payment_mode.account == self.account_for_change_amount: - payment_mode.base_amount -= flt(self.change_amount) + payment_mode.base_amount -= flt(self.base_change_amount) against_voucher = self.name if self.is_return and self.return_against and not self.update_outstanding_for_self: diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index bca0d58a57d..e0da8487485 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -1235,6 +1235,33 @@ class TestSalesInvoice(FrappeTestCase): frappe.db.set_single_value("Accounts Settings", "post_change_gl_entries", 1) + def test_pos_change_amount_multi_currency_gl_entry(self): + frappe.db.set_single_value("Accounts Settings", "post_change_gl_entries", 0) + + si = create_sales_invoice(do_not_save=True) + si.is_pos = 1 + si.currency = "USD" + si.conversion_rate = 50 + si.party_account_currency = "USD" + si.account_for_change_amount = "Cash - _TC" + si.change_amount = 50 + si.base_change_amount = 2500 + si.append( + "payments", + {"mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 150, "base_amount": 7500}, + ) + + gl_entries = [] + si.make_pos_gl_entries(gl_entries) + + debtors_entry = next(entry for entry in gl_entries if entry["account"] == si.debit_to) + cash_entry = next(entry for entry in gl_entries if entry["account"] == "Cash - _TC") + + self.assertEqual(flt(debtors_entry["credit"]), 5000.0) + self.assertEqual(flt(cash_entry["debit"]), 5000.0) + + frappe.db.set_single_value("Accounts Settings", "post_change_gl_entries", 1) + def validate_pos_gl_entry(self, si, pos, cash_amount, validate_without_change_gle=False): if validate_without_change_gle: cash_amount -= pos.change_amount