From 479e412a447d3d96778ca3cfa89ada4844c8caca Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Fri, 13 Jun 2025 16:39:46 +0530 Subject: [PATCH] refactor: get frozen accounts settings from Company in tests --- erpnext/accounts/doctype/account/account.py | 12 +++++++----- erpnext/accounts/doctype/gl_entry/gl_entry.py | 14 +++++++------- .../payment_ledger_entry/payment_ledger_entry.py | 2 +- .../test_process_deferred_accounting.py | 8 +++++--- .../doctype/sales_invoice/test_sales_invoice.py | 8 +++++--- .../doctype/subscription/test_subscription.py | 2 +- erpnext/accounts/party.py | 8 ++++---- erpnext/controllers/accounts_controller.py | 2 +- 8 files changed, 31 insertions(+), 25 deletions(-) diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index 1e6467e502f..3e32f6b8817 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -93,8 +93,10 @@ class Account(NestedSet): super().on_update() def onload(self): - frozen_accounts_modifier = frappe.get_single_value("Accounts Settings", "frozen_accounts_modifier") - if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles(): + role_allowed_for_frozen_entries = frappe.db.get_value( + "Company", self.company, "role_allowed_for_frozen_entries" + ) + if not role_allowed_for_frozen_entries or role_allowed_for_frozen_entries in frappe.get_roles(): self.set_onload("can_freeze_account", True) def autoname(self): @@ -303,10 +305,10 @@ class Account(NestedSet): if not doc_before_save or doc_before_save.freeze_account == self.freeze_account: return - frozen_accounts_modifier = frappe.get_cached_value( - "Accounts Settings", "Accounts Settings", "frozen_accounts_modifier" + role_allowed_for_frozen_entries = frappe.get_cached_value( + "Company", self.company, "role_allowed_for_frozen_entries" ) - if not frozen_accounts_modifier or frozen_accounts_modifier not in frappe.get_roles(): + if not role_allowed_for_frozen_entries or role_allowed_for_frozen_entries not in frappe.get_roles(): throw(_("You are not authorized to set Frozen value")) def validate_balance_must_be_debit_or_credit(self): diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index aefe293157b..68ef84a1365 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -100,7 +100,7 @@ class GLEntry(Document): self.validate_account_details(adv_adj) self.validate_dimensions_for_pl_and_bs() validate_balance_type(self.account, adv_adj) - validate_frozen_account(self.account, adv_adj) + validate_frozen_account(self.company, self.account, adv_adj) if ( self.voucher_type == "Journal Entry" @@ -276,7 +276,7 @@ class GLEntry(Document): ) def validate_party(self): - validate_party_frozen_disabled(self.party_type, self.party) + validate_party_frozen_disabled(self.company, self.party_type, self.party) validate_account_party_type(self) def validate_currency(self): @@ -419,16 +419,16 @@ def update_outstanding_amt( ref_doc.set_status(update=True) -def validate_frozen_account(account, adv_adj=None): +def validate_frozen_account(company, account, adv_adj=None): frozen_account = frappe.get_cached_value("Account", account, "freeze_account") if frozen_account == "Yes" and not adv_adj: - frozen_accounts_modifier = frappe.get_cached_value( - "Accounts Settings", None, "frozen_accounts_modifier" + role_allowed_for_frozen_entries = frappe.db_get_cached_value( + "Company", company, "role_allowed_for_frozen_entries" ) - if not frozen_accounts_modifier: + if not role_allowed_for_frozen_entries: frappe.throw(_("Account {0} is frozen").format(account)) - elif frozen_accounts_modifier not in frappe.get_roles(): + elif role_allowed_for_frozen_entries not in frappe.get_roles(): frappe.throw(_("Not authorized to edit frozen Account {0}").format(account)) diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py index 30e885adacc..c1a28d12350 100644 --- a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py +++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py @@ -159,7 +159,7 @@ class PaymentLedgerEntry(Document): def on_update(self): adv_adj = self.flags.adv_adj if not self.flags.from_repost: - validate_frozen_account(self.account, adv_adj) + validate_frozen_account(self.company, self.account, adv_adj) if not self.delinked: self.validate_account_details() self.validate_dimensions_for_pl_and_bs() diff --git a/erpnext/accounts/doctype/process_deferred_accounting/test_process_deferred_accounting.py b/erpnext/accounts/doctype/process_deferred_accounting/test_process_deferred_accounting.py index 97fc47b01b9..59764442a4e 100644 --- a/erpnext/accounts/doctype/process_deferred_accounting/test_process_deferred_accounting.py +++ b/erpnext/accounts/doctype/process_deferred_accounting/test_process_deferred_accounting.py @@ -16,7 +16,7 @@ from erpnext.stock.doctype.item.test_item import create_item class TestProcessDeferredAccounting(IntegrationTestCase): def test_creation_of_ledger_entry_on_submit(self): """test creation of gl entries on submission of document""" - change_acc_settings(acc_frozen_upto="2023-05-31", book_deferred_entries_based_on="Months") + change_acc_settings(acc_frozen_till_date="2023-05-31", book_deferred_entries_based_on="Months") deferred_account = create_account( account_name="Deferred Revenue for Accounts Frozen", @@ -92,8 +92,10 @@ class TestProcessDeferredAccounting(IntegrationTestCase): pda.cancel() -def change_acc_settings(acc_frozen_upto="", book_deferred_entries_based_on="Days"): +def change_acc_settings( + company="_Test Company", acc_frozen_till_date="", book_deferred_entries_based_on="Days" +): acc_settings = frappe.get_doc("Accounts Settings", "Accounts Settings") - acc_settings.acc_frozen_upto = acc_frozen_upto acc_settings.book_deferred_entries_based_on = book_deferred_entries_based_on + frappe.db.set_value("Company", company, "accounts_frozen_till_date", acc_frozen_till_date) acc_settings.save() diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index a2983e4555b..bae0de3f94c 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -63,7 +63,8 @@ class TestSalesInvoice(ERPNextTestSuite): set_default_account_for_mode_of_payment( mode_of_payment, "_Test Company with perpetual inventory", "_Test Bank - TCP1" ) - frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None) + for company in frappe.get_all("Company", pluck="name"): + frappe.db.set_value("Company", company, "acc_frozen_till_date", None) @change_settings( "Accounts Settings", @@ -3398,8 +3399,8 @@ class TestSalesInvoice(ERPNextTestSuite): si.commission_rate = commission_rate self.assertRaises(frappe.ValidationError, si.save) - @IntegrationTestCase.change_settings("Accounts Settings", {"acc_frozen_upto": add_days(getdate(), 1)}) def test_sales_invoice_submission_post_account_freezing_date(self): + frappe.db.set_value("Company", "_Test Company", "accounts_frozen_till_date", add_days(getdate(), 1)) si = create_sales_invoice(do_not_save=True) si.posting_date = add_days(getdate(), 1) si.save() @@ -3407,6 +3408,7 @@ class TestSalesInvoice(ERPNextTestSuite): self.assertRaises(frappe.ValidationError, si.submit) si.posting_date = getdate() si.submit() + frappe.db.set_value("Company", "_Test Company", "accounts_frozen_till_date", None) @IntegrationTestCase.change_settings("Accounts Settings", {"over_billing_allowance": 0}) def test_over_billing_case_against_delivery_note(self): @@ -3473,7 +3475,7 @@ class TestSalesInvoice(ERPNextTestSuite): si.save() si.submit() - frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", getdate("2019-01-31")) + frappe.db.set_value("Company", "_Test Company", "accounts_frozen_till_date", getdate("2019-01-31")) pda1 = frappe.get_doc( dict( diff --git a/erpnext/accounts/doctype/subscription/test_subscription.py b/erpnext/accounts/doctype/subscription/test_subscription.py index a121db20634..7bb72a1dcd7 100644 --- a/erpnext/accounts/doctype/subscription/test_subscription.py +++ b/erpnext/accounts/doctype/subscription/test_subscription.py @@ -27,7 +27,7 @@ class TestSubscription(IntegrationTestCase): make_plans() create_parties() reset_settings() - frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None) + frappe.db.set_value("Company", "_Test Company", "accounts_frozen_till_date", None) def tearDown(self): frappe.db.rollback() diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index eef82a398b9..39f25f5fcab 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -795,7 +795,7 @@ def get_payment_terms_template(party_name, party_type, company=None): return template -def validate_party_frozen_disabled(party_type, party_name): +def validate_party_frozen_disabled(company, party_type, party_name): if frappe.flags.ignore_party_validation: return @@ -805,10 +805,10 @@ def validate_party_frozen_disabled(party_type, party_name): if party.disabled: frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled) elif party.get("is_frozen"): - frozen_accounts_modifier = frappe.get_single_value( - "Accounts Settings", "frozen_accounts_modifier" + role_allowed_for_frozen_entries = frappe.db_get_cached_value( + "Company", company, "role_allowed_for_frozen_entries" ) - if frozen_accounts_modifier not in frappe.get_roles(): + if role_allowed_for_frozen_entries not in frappe.get_roles(): frappe.throw(_("{0} {1} is frozen").format(party_type, party_name), PartyFrozen) elif party_type == "Employee": diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index e2042c59ad7..1f11eabe458 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -2332,7 +2332,7 @@ class AccountsController(TransactionBase): def validate_party(self): party_type, party = self.get_party() - validate_party_frozen_disabled(party_type, party) + validate_party_frozen_disabled(self.company, party_type, party) def get_party(self): party_type = None