diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index b6032bba1fe..35b33b7a195 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -56,6 +56,9 @@ "reconciliation_queue_size", "column_break_resa", "exchange_gain_loss_posting_date", + "payment_entry_settings", + "show_account_balance", + "show_party_balance", "invoicing_settings_tab", "accounts_transactions_settings_section", "over_billing_allowance", @@ -95,7 +98,8 @@ "legacy_section", "ignore_is_opening_check_for_reporting", "payment_request_settings", - "create_pr_in_draft_status" + "create_pr_in_draft_status", + "column_break_xrnd" ], "fields": [ { @@ -636,6 +640,23 @@ "fieldname": "use_legacy_controller_for_pcv", "fieldtype": "Check", "label": "Use Legacy Controller For Period Closing Voucher" + }, + { + "fieldname": "payment_entry_settings", + "fieldtype": "Section Break", + "label": "Payment Entry Settings" + }, + { + "default": "0", + "fieldname": "show_account_balance", + "fieldtype": "Check", + "label": "Show Account Balance" + }, + { + "default": "0", + "fieldname": "show_party_balance", + "fieldtype": "Check", + "label": "Show Party Balance" } ], "icon": "icon-cog", @@ -643,7 +664,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2025-10-20 14:06:08.870427", + "modified": "2025-11-06 17:48:07.682837", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", @@ -668,8 +689,9 @@ } ], "quick_entry": 1, + "row_format": "Dynamic", "sort_field": "modified", "sort_order": "ASC", "states": [], "track_changes": 1 -} +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 5144e87a3a2..c54ae9bac65 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -65,8 +65,10 @@ class AccountsSettings(Document): role_allowed_to_over_bill: DF.Link | None role_to_override_stop_action: DF.Link | None round_row_wise_tax: DF.Check + show_account_balance: DF.Check show_balance_in_coa: DF.Check show_inclusive_tax_in_print: DF.Check + show_party_balance: DF.Check show_payment_schedule_in_print: DF.Check show_taxes_as_table_in_print: DF.Check stale_days: DF.Int @@ -105,6 +107,7 @@ class AccountsSettings(Document): frappe.clear_cache() self.validate_and_sync_auto_reconcile_config() + self.hide_or_show_party_and_account_balance() def validate_stale_days(self): if not self.allow_stale and cint(self.stale_days) <= 0: @@ -112,6 +115,18 @@ class AccountsSettings(Document): _("Stale Days should start from 1."), title="Error", indicator="red", raise_exception=1 ) + def hide_or_show_party_and_account_balance(self): + def set_property(fieldname, value): + make_property_setter("Payment Entry", fieldname, "hidden", value, "Check") + + if self.has_value_changed("show_party_balance"): + set_property("party_balance", not self.show_party_balance) + + if self.has_value_changed("show_account_balance"): + account_fields = ["paid_from_account_balance", "paid_to_account_balance"] + for field in account_fields: + set_property(field, not self.show_account_balance) + def enable_payment_schedule_in_print(self): show_in_print = cint(self.show_payment_schedule_in_print) for doctype in ("Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"): diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index cc0da8e7b09..4196b81c9ba 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -449,7 +449,7 @@ class PaymentEntry(AccountsController): self.contact_person = get_default_contact(self.party_type, self.party) complete_contact_details(self) - if not self.party_balance: + if not self.party_balance and frappe.get_single_value("Accounts Settings", "show_party_balance"): self.party_balance = get_balance_on( party_type=self.party_type, party=self.party, date=self.posting_date, company=self.company ) @@ -2684,11 +2684,17 @@ def get_party_details(company, party_type, party, date, cost_center=None): party_account = get_party_account(party_type, party, company) account_currency = get_account_currency(party_account) - account_balance = get_balance_on(party_account, date, cost_center=cost_center) + account_balance = ( + get_balance_on(party_account, date, cost_center=cost_center) + if frappe.get_single_value("Accounts Settings", "show_account_balance") + else 0 + ) _party_name = "title" if party_type == "Shareholder" else party_type.lower() + "_name" party_name = frappe.db.get_value(party_type, party, _party_name) - party_balance = get_balance_on( - party_type=party_type, party=party, company=company, cost_center=cost_center + party_balance = ( + get_balance_on(party_type=party_type, party=party, company=company, cost_center=cost_center) + if frappe.get_single_value("Accounts Settings", "show_party_balance") + else 0 ) if party_type in ["Customer", "Supplier"]: party_bank_account = get_party_bank_account(party_type, party) @@ -2717,7 +2723,11 @@ def get_account_details(account, date, cost_center=None): if not account_list: frappe.throw(_("Account: {0} is not permitted under Payment Entry").format(account)) - account_balance = get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True) + account_balance = ( + get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True) + if frappe.get_single_value("Accounts Settings", "show_account_balance") + else 0 + ) return frappe._dict( { @@ -3529,11 +3539,18 @@ def get_paid_amount(dt, dn, party_type, party, account, due_date): def get_party_and_account_balance( company, date, paid_from=None, paid_to=None, ptype=None, pty=None, cost_center=None ): + show_account_balance = frappe.get_single_value("Accounts Settings", "show_account_balance") return frappe._dict( { - "party_balance": get_balance_on(party_type=ptype, party=pty, cost_center=cost_center), - "paid_from_account_balance": get_balance_on(paid_from, date, cost_center=cost_center), - "paid_to_account_balance": get_balance_on(paid_to, date=date, cost_center=cost_center), + "party_balance": get_balance_on(party_type=ptype, party=pty, cost_center=cost_center) + if frappe.get_single_value("Accounts Settings", "show_party_balance") + else 0, + "paid_from_account_balance": get_balance_on(paid_from, date, cost_center=cost_center) + if show_account_balance + else 0, + "paid_to_account_balance": get_balance_on(paid_to, date=date, cost_center=cost_center) + if show_account_balance + else 0, } ) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index bb3d5f07ef8..33c1e6c79df 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -424,3 +424,5 @@ erpnext.patches.v15_0.update_uae_zero_rated_fetch erpnext.patches.v15_0.update_fieldname_in_accounting_dimension_filter erpnext.patches.v15_0.set_asset_status_if_not_already_set erpnext.patches.v15_0.toggle_legacy_controller_for_period_closing +execute:frappe.db.set_single_value("Accounts Settings", "show_party_balance", 1) +execute:frappe.db.set_single_value("Accounts Settings", "show_account_balance", 1) \ No newline at end of file