diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json index ed9a4d84f53..4041a8ecad7 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json @@ -12,7 +12,7 @@ "posting_date", "company", "account", - "group_by", + "categorize_by", "cost_center", "territory", "ignore_exchange_rate_revaluation_journals", @@ -174,14 +174,6 @@ "fieldtype": "Date", "label": "Start Date" }, - { - "default": "Group by Voucher (Consolidated)", - "depends_on": "eval:(doc.report == 'General Ledger');", - "fieldname": "group_by", - "fieldtype": "Select", - "label": "Group By", - "options": "\nGroup by Voucher\nGroup by Voucher (Consolidated)" - }, { "depends_on": "eval: (doc.report == 'General Ledger');", "fieldname": "currency", @@ -397,10 +389,18 @@ "fieldname": "show_remarks", "fieldtype": "Check", "label": "Show Remarks" + }, + { + "default": "Categorize by Voucher (Consolidated)", + "depends_on": "eval:(doc.report == 'General Ledger');", + "fieldname": "categorize_by", + "fieldtype": "Select", + "label": "Categorize By", + "options": "\nCategorize by Voucher\nCategorize by Voucher (Consolidated)" } ], "links": [], - "modified": "2024-12-11 12:11:13.543134", + "modified": "2025-04-30 14:43:23.643006", "modified_by": "Administrator", "module": "Accounts", "name": "Process Statement Of Accounts", @@ -436,4 +436,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py index 48f400e1a46..1c4bb66357f 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py @@ -44,6 +44,7 @@ class ProcessStatementOfAccounts(Document): ageing_based_on: DF.Literal["Due Date", "Posting Date"] based_on_payment_terms: DF.Check body: DF.TextEditor | None + categorize_by: DF.Literal["", "Categorize by Voucher", "Categorize by Voucher (Consolidated)"] cc_to: DF.TableMultiSelect[ProcessStatementOfAccountsCC] collection_name: DF.DynamicLink | None company: DF.Link @@ -56,7 +57,6 @@ class ProcessStatementOfAccounts(Document): finance_book: DF.Link | None frequency: DF.Literal["Weekly", "Monthly", "Quarterly"] from_date: DF.Date | None - group_by: DF.Literal["", "Group by Voucher", "Group by Voucher (Consolidated)"] ignore_cr_dr_notes: DF.Check ignore_exchange_rate_revaluation_journals: DF.Check include_ageing: DF.Check @@ -204,7 +204,7 @@ def get_gl_filters(doc, entry, tax_id, presentation_currency): "party": [entry.customer], "party_name": [entry.customer_name] if entry.customer_name else None, "presentation_currency": presentation_currency, - "group_by": doc.group_by, + "categorize_by": doc.categorize_by, "currency": doc.currency, "project": [p.project_name for p in doc.project], "show_opening_entries": 0, diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 6fa846910a6..4039ea27ebd 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -49,7 +49,7 @@ frappe.query_reports["General Ledger"] = { label: __("Voucher No"), fieldtype: "Data", on_change: function () { - frappe.query_report.set_filter_value("group_by", "Group by Voucher (Consolidated)"); + frappe.query_report.set_filter_value("categorize_by", "Categorize by Voucher (Consolidated)"); }, }, { @@ -112,29 +112,29 @@ frappe.query_reports["General Ledger"] = { hidden: 1, }, { - fieldname: "group_by", - label: __("Group by"), + fieldname: "categorize_by", + label: __("Categorize by"), fieldtype: "Select", options: [ "", { - label: __("Group by Voucher"), - value: "Group by Voucher", + label: __("Categorize by Voucher"), + value: "Categorize by Voucher", }, { - label: __("Group by Voucher (Consolidated)"), - value: "Group by Voucher (Consolidated)", + label: __("Categorize by Voucher (Consolidated)"), + value: "Categorize by Voucher (Consolidated)", }, { - label: __("Group by Account"), - value: "Group by Account", + label: __("Categorize by Account"), + value: "Categorize by Account", }, { - label: __("Group by Party"), - value: "Group by Party", + label: __("Categorize by Party"), + value: "Categorize by Party", }, ], - default: "Group by Voucher (Consolidated)", + default: "Categorize by Voucher (Consolidated)", }, { fieldname: "tax_id", diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index a62ba2e3732..967bd1ce503 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -63,13 +63,13 @@ def validate_filters(filters, account_details): if not account_details.get(account): frappe.throw(_("Account {0} does not exists").format(account)) - if filters.get("account") and filters.get("group_by") == "Group by Account": + if filters.get("account") and filters.get("categorize_by") == "Categorize by Account": filters.account = frappe.parse_json(filters.get("account")) for account in filters.account: if account_details[account].is_group == 0: frappe.throw(_("Can not filter based on Child Account, if grouped by Account")) - if filters.get("voucher_no") and filters.get("group_by") in ["Group by Voucher"]: + if filters.get("voucher_no") and filters.get("categorize_by") in ["Categorize by Voucher"]: frappe.throw(_("Can not filter based on Voucher No, if grouped by Voucher")) if filters.from_date > filters.to_date: @@ -163,9 +163,9 @@ def get_gl_entries(filters, accounting_dimensions): if filters.get("include_dimensions"): order_by_statement = "order by posting_date, creation" - if filters.get("group_by") == "Group by Voucher": + if filters.get("categorize_by") == "Categorize by Voucher": order_by_statement = "order by posting_date, voucher_type, voucher_no" - if filters.get("group_by") == "Group by Account": + if filters.get("categorize_by") == "Categorize by Account": order_by_statement = "order by account, posting_date, creation" if filters.get("include_default_book_entries"): @@ -260,7 +260,7 @@ def get_conditions(filters): if filters.get("voucher_no_not_in"): conditions.append("voucher_no not in %(voucher_no_not_in)s") - if filters.get("group_by") == "Group by Party" and not filters.get("party_type"): + if filters.get("categorize_by") == "Categorize by Party" and not filters.get("party_type"): conditions.append("party_type in ('Customer', 'Supplier')") if filters.get("party_type"): @@ -272,7 +272,7 @@ def get_conditions(filters): if not ( filters.get("account") or filters.get("party") - or filters.get("group_by") in ["Group by Account", "Group by Party"] + or filters.get("categorize_by") in ["Categorize by Account", "Categorize by Party"] ): if not ignore_is_opening: conditions.append("(posting_date >=%(from_date)s or is_opening = 'Yes')") @@ -374,26 +374,26 @@ def get_data_with_opening_closing(filters, account_details, accounting_dimension # Opening for filtered account data.append(totals.opening) - if filters.get("group_by") != "Group by Voucher (Consolidated)": + if filters.get("categorize_by") != "Categorize by Voucher (Consolidated)": for _acc, acc_dict in gle_map.items(): # acc if acc_dict.entries: # opening data.append({"debit_in_transaction_currency": None, "credit_in_transaction_currency": None}) - if (not filters.get("group_by") and not filters.get("voucher_no")) or ( - filters.get("group_by") and filters.get("group_by") != "Group by Voucher" + if (not filters.get("categorize_by") and not filters.get("voucher_no")) or ( + filters.get("categorize_by") and filters.get("categorize_by") != "Categorize by Voucher" ): data.append(acc_dict.totals.opening) data += acc_dict.entries # totals - if filters.get("group_by") or not filters.voucher_no: + if filters.get("categorize_by") or not filters.voucher_no: data.append(acc_dict.totals.total) # closing - if (not filters.get("group_by") and not filters.get("voucher_no")) or ( - filters.get("group_by") and filters.get("group_by") != "Group by Voucher" + if (not filters.get("categorize_by") and not filters.get("voucher_no")) or ( + filters.get("categorize_by") and filters.get("categorize_by") != "Categorize by Voucher" ): data.append(acc_dict.totals.closing) @@ -430,9 +430,9 @@ def get_totals_dict(): def group_by_field(group_by): - if group_by == "Group by Party": + if group_by == "Categorize by Party": return "party" - elif group_by in ["Group by Voucher (Consolidated)", "Group by Account"]: + elif group_by in ["Categorize by Voucher (Consolidated)", "Categorize by Account"]: return "account" else: return "voucher_no" @@ -440,7 +440,7 @@ def group_by_field(group_by): def initialize_gle_map(gl_entries, filters, totals_dict): gle_map = OrderedDict() - group_by = group_by_field(filters.get("group_by")) + group_by = group_by_field(filters.get("categorize_by")) for gle in gl_entries: gle_map.setdefault(gle.get(group_by), _dict(totals=copy.deepcopy(totals_dict), entries=[])) @@ -450,8 +450,8 @@ def initialize_gle_map(gl_entries, filters, totals_dict): def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map, totals): entries = [] consolidated_gle = OrderedDict() - group_by = group_by_field(filters.get("group_by")) - group_by_voucher_consolidated = filters.get("group_by") == "Group by Voucher (Consolidated)" + group_by = group_by_field(filters.get("categorize_by")) + group_by_voucher_consolidated = filters.get("categorize_by") == "Categorize by Voucher (Consolidated)" if filters.get("show_net_values_in_party_account"): account_type_map = get_account_type_map(filters.get("company")) diff --git a/erpnext/accounts/report/general_ledger/test_general_ledger.py b/erpnext/accounts/report/general_ledger/test_general_ledger.py index af2c569949a..2684aa326e6 100644 --- a/erpnext/accounts/report/general_ledger/test_general_ledger.py +++ b/erpnext/accounts/report/general_ledger/test_general_ledger.py @@ -155,7 +155,7 @@ class TestGeneralLedger(FrappeTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", } ) ) @@ -246,7 +246,7 @@ class TestGeneralLedger(FrappeTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_err": True, } ) @@ -261,7 +261,7 @@ class TestGeneralLedger(FrappeTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_err": False, } ) @@ -308,7 +308,7 @@ class TestGeneralLedger(FrappeTestCase): "from_date": si.posting_date, "to_date": si.posting_date, "account": [si.debit_to], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_cr_dr_notes": False, } ) @@ -325,7 +325,7 @@ class TestGeneralLedger(FrappeTestCase): "from_date": si.posting_date, "to_date": si.posting_date, "account": [si.debit_to], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_cr_dr_notes": True, } ) diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js index 2c0be8f70d7..0df7e0787a9 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js @@ -76,14 +76,14 @@ frappe.query_reports["Supplier Quotation Comparison"] = { }, }, { - fieldname: "group_by", - label: __("Group by"), + fieldname: "categorize_by", + label: __("Categorize by"), fieldtype: "Select", options: [ - { label: __("Group by Supplier"), value: "Group by Supplier" }, - { label: __("Group by Item"), value: "Group by Item" }, + { label: __("Categorize by Supplier"), value: "Categorize by Supplier" }, + { label: __("Categorize by Item"), value: "Categorize by Item" }, ], - default: __("Group by Supplier"), + default: __("Categorize by Supplier"), }, { fieldtype: "Check", diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py index ad181802c79..3b445675e57 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py @@ -82,7 +82,9 @@ def prepare_data(supplier_quotation_data, filters): group_wise_map = defaultdict(list) supplier_qty_price_map = {} - group_by_field = "supplier_name" if filters.get("group_by") == "Group by Supplier" else "item_code" + group_by_field = ( + "supplier_name" if filters.get("categorize_by") == "Categorize by Supplier" else "item_code" + ) float_precision = cint(frappe.db.get_default("float_precision")) or 2 for data in supplier_quotation_data: @@ -266,7 +268,7 @@ def get_columns(filters): }, ] - if filters.get("group_by") == "Group by Item": + if filters.get("categorize_by") == "Categorize by Item": group_by_columns.reverse() columns[0:0] = group_by_columns # add positioned group by columns to the report diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 300ae9b8fec..58a708ceb07 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -402,3 +402,4 @@ erpnext.patches.v15_0.recalculate_amount_difference_field #2025-03-18 erpnext.patches.v15_0.rename_sla_fields #2025-03-12 erpnext.patches.v15_0.set_purchase_receipt_row_item_to_capitalization_stock_item erpnext.patches.v15_0.update_payment_schedule_fields_in_invoices +erpnext.patches.v15_0.rename_group_by_to_categorize_by diff --git a/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py b/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py new file mode 100644 index 00000000000..1490ec572f4 --- /dev/null +++ b/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py @@ -0,0 +1,20 @@ +import frappe +from frappe.model.utils.rename_field import rename_field + + +def execute(): + rename_field("Process Statement Of Accounts", "group_by", "categorize_by") + + frappe.db.sql( + """ + UPDATE + `tabProcess Statement Of Accounts` + SET + categorize_by = CASE + WHEN categorize_by = 'Group by Voucher (Consolidated)' THEN 'Categorize by Voucher (Consolidated)' + WHEN categorize_by = 'Group by Voucher' THEN 'Categorize by Voucher' + END + WHERE + categorize_by IN ('Group by Voucher (Consolidated)', 'Group by Voucher') + """ + )