From 35be3ac5a1e38b4e1dc731ac5162d2751524f541 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 17 Aug 2023 11:31:40 +0530 Subject: [PATCH] feat: Transaction currency columns in GL report --- .../accounts/doctype/gl_entry/gl_entry.json | 36 ++++++++++++++++-- .../report/general_ledger/general_ledger.js | 5 +++ .../report/general_ledger/general_ledger.py | 37 ++++++++++++++++++- erpnext/controllers/accounts_controller.py | 20 ++++++++++ 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json index e6d97a1fb2..5063ec6076 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.json +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json @@ -32,7 +32,11 @@ "finance_book", "to_rename", "due_date", - "is_cancelled" + "is_cancelled", + "transaction_currency", + "debit_in_transaction_currency", + "credit_in_transaction_currency", + "transaction_exchange_rate" ], "fields": [ { @@ -253,15 +257,40 @@ "fieldname": "is_cancelled", "fieldtype": "Check", "label": "Is Cancelled" + }, + { + "fieldname": "transaction_currency", + "fieldtype": "Link", + "label": "Transaction Currency", + "options": "Currency" + }, + { + "fieldname": "transaction_exchange_rate", + "fieldtype": "Float", + "label": "Transaction Exchange Rate" + }, + { + "fieldname": "debit_in_transaction_currency", + "fieldtype": "Currency", + "label": "Debit Amount in Transaction Currency", + "options": "transaction_currency" + }, + { + "fieldname": "credit_in_transaction_currency", + "fieldtype": "Currency", + "label": "Credit Amount in Transaction Currency", + "options": "transaction_currency" } ], "icon": "fa fa-list", "idx": 1, "in_create": 1, - "modified": "2020-04-07 16:22:33.766994", + "links": [], + "modified": "2023-08-16 21:38:44.072267", "modified_by": "Administrator", "module": "Accounts", "name": "GL Entry", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -290,5 +319,6 @@ "quick_entry": 1, "search_fields": "voucher_no,account,posting_date,against_voucher", "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "states": [] } \ No newline at end of file diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 57a9091cf9..37d0659acf 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -188,6 +188,11 @@ frappe.query_reports["General Ledger"] = { "fieldname": "show_net_values_in_party_account", "label": __("Show Net Values in Party Account"), "fieldtype": "Check" + }, + { + "fieldname": "add_values_in_transaction_currency", + "label": __("Add Columns in Transaction Currency"), + "fieldtype": "Check" } ] } diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index d7af167e38..e05a4e79e8 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -182,12 +182,18 @@ def get_gl_entries(filters, accounting_dimensions): if accounting_dimensions: dimension_fields = ", ".join(accounting_dimensions) + "," + transaction_currency_fields = "" + if filters.get("add_values_in_transaction_currency"): + transaction_currency_fields = ( + "debit_in_transaction_currency, credit_in_transaction_currency, transaction_currency," + ) + gl_entries = frappe.db.sql( """ select name as gl_entry, posting_date, account, party_type, party, voucher_type, voucher_no, {dimension_fields} - cost_center, project, + cost_center, project, {transaction_currency_fields} against_voucher_type, against_voucher, account_currency, remarks, against, is_opening, creation {select_fields} from `tabGL Entry` @@ -195,6 +201,7 @@ def get_gl_entries(filters, accounting_dimensions): {order_by_statement} """.format( dimension_fields=dimension_fields, + transaction_currency_fields=transaction_currency_fields, select_fields=select_fields, conditions=get_conditions(filters), order_by_statement=order_by_statement, @@ -562,6 +569,34 @@ def get_columns(filters): "fieldtype": "Float", "width": 130, }, + ] + + if filters.get("add_values_in_transaction_currency"): + columns += [ + { + "label": _("Debit (Transaction)"), + "fieldname": "debit_in_transaction_currency", + "fieldtype": "Currency", + "width": 130, + "options": "transaction_currency", + }, + { + "label": _("Credit (Transaction)"), + "fieldname": "credit_in_transaction_currency", + "fieldtype": "Currency", + "width": 130, + "options": "transaction_currency", + }, + { + "label": "Transaction Currency", + "fieldname": "transaction_currency", + "fieldtype": "Link", + "options": "Currency", + "width": 70, + }, + ] + + columns += [ {"label": _("Voucher Type"), "fieldname": "voucher_type", "width": 120}, { "label": _("Voucher No"), diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index fbf97aab59..7a643a01b6 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -803,8 +803,28 @@ class AccountsController(TransactionBase): gl_dict, account_currency, self.get("conversion_rate"), self.company_currency ) + # Update details in transaction currency + gl_dict.update( + { + "transaction_currency": 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" + ), + "credit_in_transaction_currency": self.get_value_in_transaction_currency( + account_currency, args, "credit" + ), + } + ) + return gl_dict + def get_value_in_transaction_currency(self, account_currency, args, field): + if account_currency == self.get("currency"): + return args.get(field + "_in_account_currency") + else: + return flt(args.get(field, 0) / self.get("conversion_rate", 1)) + def validate_qty_is_not_zero(self): if self.doctype != "Purchase Receipt": for item in self.items: