From 3f9693b31f7cf36cbdf95006d81a23da594bd28a Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sun, 31 Dec 2023 20:00:03 +0530 Subject: [PATCH] fix: GL values in transaction currency via JV (#38914) --- .../doctype/journal_entry/journal_entry.py | 24 +++++++++++++++++++ erpnext/controllers/accounts_controller.py | 6 ++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 79f1ab063d..ddf6460842 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1031,6 +1031,10 @@ class JournalEntry(AccountsController): def build_gl_map(self): gl_map = [] + conversion_rate_map = self.get_conversion_rate_map() + transaction_currency_map = self.get_transaction_currency_map() + company_currency = erpnext.get_company_currency(self.company) + self.get_against_accounts() for d in self.get("accounts"): if d.debit or d.credit or (self.voucher_type == "Exchange Gain Or Loss"): @@ -1060,6 +1064,12 @@ class JournalEntry(AccountsController): "cost_center": d.cost_center, "project": d.project, "finance_book": self.finance_book, + "conversion_rate": conversion_rate_map.get(d.against_account_link, 1) + if d.account_currency == company_currency + else 1, + "currency": transaction_currency_map.get(d.against_account_link, d.account_currency) + if d.account_currency == company_currency + else d.account_currency, }, item=d, ) @@ -1109,6 +1119,20 @@ class JournalEntry(AccountsController): return gl_map + def get_transaction_currency_map(self): + transaction_currency_map = {} + for account in self.get("accounts"): + transaction_currency_map.setdefault(account.party or account.account, account.account_currency) + + return transaction_currency_map + + def get_conversion_rate_map(self): + conversion_rate_map = {} + for account in self.get("accounts"): + conversion_rate_map.setdefault(account.party or account.account, account.exchange_rate) + + return conversion_rate_map + def make_gl_entries(self, cancel=0, adv_adj=0): from erpnext.accounts.general_ledger import make_gl_entries diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 729bb67182..13df9d591c 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -922,7 +922,7 @@ class AccountsController(TransactionBase): # Update details in transaction currency gl_dict.update( { - "transaction_currency": self.get("currency") or self.company_currency, + "transaction_currency": args.get("currency") or self.get("currency") or self.company_currency, "transaction_exchange_rate": self.get("conversion_rate", 1), "debit_in_transaction_currency": self.get_value_in_transaction_currency( account_currency, args, "debit" @@ -955,10 +955,10 @@ class AccountsController(TransactionBase): return self.doctype def get_value_in_transaction_currency(self, account_currency, args, field): - if account_currency == self.get("currency"): + if account_currency == args.get("currency") or self.get("currency"): return args.get(field + "_in_account_currency") else: - return flt(args.get(field, 0) / self.get("conversion_rate", 1)) + return flt(args.get(field, 0) / (args.get("conversion_rate") or self.get("conversion_rate", 1))) def validate_qty_is_not_zero(self): if self.doctype == "Purchase Receipt":