perf: Use cached accounts settings (#47947)

This commit is contained in:
Ankush Menat
2025-06-06 19:29:18 +05:30
committed by GitHub
parent ea5c2c454b
commit 45a4beb401
32 changed files with 65 additions and 98 deletions

View File

@@ -317,7 +317,7 @@ def get_already_booked_amount(doc, item):
def book_deferred_income_or_expense(doc, deferred_process, posting_date=None): def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense" enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") accounts_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto")
def _book_deferred_revenue_or_expense( def _book_deferred_revenue_or_expense(
item, item,

View File

@@ -92,7 +92,7 @@ class Account(NestedSet):
super().on_update() super().on_update()
def onload(self): def onload(self):
frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier") frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier")
if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles(): if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles():
self.set_onload("can_freeze_account", True) self.set_onload("can_freeze_account", True)

View File

@@ -25,7 +25,7 @@ class AutoMatchParty:
deposit=self.deposit, deposit=self.deposit,
).match() ).match()
fuzzy_matching_enabled = frappe.db.get_single_value("Accounts Settings", "enable_fuzzy_matching") fuzzy_matching_enabled = frappe.get_settings("Accounts Settings", "enable_fuzzy_matching")
if not result and fuzzy_matching_enabled: if not result and fuzzy_matching_enabled:
result = AutoMatchbyPartyNameDescription( result = AutoMatchbyPartyNameDescription(
bank_party_name=self.bank_party_name, description=self.description, deposit=self.deposit bank_party_name=self.bank_party_name, description=self.description, deposit=self.deposit

View File

@@ -121,7 +121,7 @@ class BankTransaction(Document):
self.allocate_payment_entries() self.allocate_payment_entries()
self.set_status() self.set_status()
if frappe.db.get_single_value("Accounts Settings", "enable_party_matching"): if frappe.get_settings("Accounts Settings", "enable_party_matching"):
self.auto_set_party() self.auto_set_party()
def before_update_after_submit(self): def before_update_after_submit(self):

View File

@@ -1171,7 +1171,7 @@ class JournalEntry(AccountsController):
def make_gl_entries(self, cancel=0, adv_adj=0): def make_gl_entries(self, cancel=0, adv_adj=0):
from erpnext.accounts.general_ledger import make_gl_entries from erpnext.accounts.general_ledger import make_gl_entries
merge_entries = frappe.db.get_single_value("Accounts Settings", "merge_similar_account_heads") merge_entries = frappe.get_settings("Accounts Settings", "merge_similar_account_heads")
gl_map = self.build_gl_map() gl_map = self.build_gl_map()
if self.voucher_type in ("Deferred Revenue", "Deferred Expense"): if self.voucher_type in ("Deferred Revenue", "Deferred Expense"):

View File

@@ -2969,7 +2969,7 @@ def get_payment_entry(
created_from_payment_request=False, created_from_payment_request=False,
): ):
doc = frappe.get_doc(dt, dn) doc = frappe.get_doc(dt, dn)
over_billing_allowance = frappe.db.get_single_value("Accounts Settings", "over_billing_allowance") over_billing_allowance = frappe.get_settings("Accounts Settings", "over_billing_allowance")
if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (100.0 + over_billing_allowance): if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (100.0 + over_billing_allowance):
frappe.throw(_("Can only make payment against unbilled {0}").format(_(dt))) frappe.throw(_("Can only make payment against unbilled {0}").format(_(dt)))
@@ -3109,7 +3109,7 @@ def get_payment_entry(
if party_account and bank: if party_account and bank:
if discount_amount: if discount_amount:
base_total_discount_loss = 0 base_total_discount_loss = 0
if frappe.db.get_single_value("Accounts Settings", "book_tax_discount_loss"): if frappe.get_settings("Accounts Settings", "book_tax_discount_loss"):
base_total_discount_loss = split_early_payment_discount_loss(pe, doc, valid_discounts) base_total_discount_loss = split_early_payment_discount_loss(pe, doc, valid_discounts)
set_pending_discount_loss( set_pending_discount_loss(
@@ -3463,7 +3463,7 @@ def set_pending_discount_loss(pe, doc, discount_amount, base_total_discount_loss
# If tax loss booking is enabled, pending loss will be rounding loss. # If tax loss booking is enabled, pending loss will be rounding loss.
# Otherwise it will be the total discount loss. # Otherwise it will be the total discount loss.
book_tax_loss = frappe.db.get_single_value("Accounts Settings", "book_tax_discount_loss") book_tax_loss = frappe.get_settings("Accounts Settings", "book_tax_discount_loss")
account_type = "round_off_account" if book_tax_loss else "default_discount_account" account_type = "round_off_account" if book_tax_loss else "default_discount_account"
pe.append( pe.append(

View File

@@ -407,7 +407,7 @@ class PaymentReconciliation(Document):
@frappe.whitelist() @frappe.whitelist()
def is_auto_process_enabled(self): def is_auto_process_enabled(self):
return frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments") return frappe.get_settings("Accounts Settings", "auto_reconcile_payments")
@frappe.whitelist() @frappe.whitelist()
def calculate_difference_on_allocation_change(self, payment_entry, invoice, allocated_amount): def calculate_difference_on_allocation_change(self, payment_entry, invoice, allocated_amount):
@@ -532,7 +532,7 @@ class PaymentReconciliation(Document):
@frappe.whitelist() @frappe.whitelist()
def reconcile(self): def reconcile(self):
if frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): if frappe.get_settings("Accounts Settings", "auto_reconcile_payments"):
running_doc = is_any_doc_running( running_doc = is_any_doc_running(
dict( dict(
company=self.company, company=self.company,

View File

@@ -60,9 +60,7 @@ class POSClosingEntry(StatusUpdater):
if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open": if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open":
frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry")) frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry"))
self.is_pos_using_sales_invoice = frappe.db.get_single_value( self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos")
"Accounts Settings", "use_sales_invoice_in_pos"
)
if self.is_pos_using_sales_invoice == 0: if self.is_pos_using_sales_invoice == 0:
self.validate_duplicate_pos_invoices() self.validate_duplicate_pos_invoices()
@@ -301,7 +299,7 @@ def make_closing_entry_from_opening(opening_entry):
closing_entry.net_total = 0 closing_entry.net_total = 0
closing_entry.total_quantity = 0 closing_entry.total_quantity = 0
is_pos_using_sales_invoice = frappe.db.get_single_value("Accounts Settings", "use_sales_invoice_in_pos") is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos")
pos_invoices = ( pos_invoices = (
get_pos_invoices( get_pos_invoices(

View File

@@ -424,9 +424,7 @@ class POSInvoice(SalesInvoice):
) )
def validate_is_pos_using_sales_invoice(self): def validate_is_pos_using_sales_invoice(self):
self.is_pos_using_sales_invoice = frappe.db.get_single_value( self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos")
"Accounts Settings", "use_sales_invoice_in_pos"
)
if self.is_pos_using_sales_invoice and not self.is_return: if self.is_pos_using_sales_invoice and not self.is_return:
frappe.throw(_("Sales Invoice mode is activated in POS. Please create Sales Invoice instead.")) frappe.throw(_("Sales Invoice mode is activated in POS. Please create Sales Invoice instead."))

View File

@@ -142,7 +142,7 @@ def trigger_job_for_doc(docname: str | None = None):
if not docname: if not docname:
return return
if not frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"):
frappe.throw( frappe.throw(
_("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format(
get_link_to_form("Accounts Settings", "Accounts Settings") get_link_to_form("Accounts Settings", "Accounts Settings")
@@ -190,7 +190,7 @@ def trigger_reconciliation_for_queued_docs():
Will be called from Cron Job Will be called from Cron Job
Fetch queued docs and start reconciliation process for each one Fetch queued docs and start reconciliation process for each one
""" """
if not frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"):
frappe.msgprint( frappe.msgprint(
_("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format(
get_link_to_form("Accounts Settings", "Accounts Settings") get_link_to_form("Accounts Settings", "Accounts Settings")
@@ -210,7 +210,7 @@ def trigger_reconciliation_for_queued_docs():
docs_to_trigger = [] docs_to_trigger = []
unique_filters = set() unique_filters = set()
queue_size = frappe.db.get_single_value("Accounts Settings", "reconciliation_queue_size") or 5 queue_size = frappe.get_settings("Accounts Settings", "reconciliation_queue_size") or 5
fields = ["company", "party_type", "party", "receivable_payable_account", "default_advance_account"] fields = ["company", "party_type", "party", "receivable_payable_account", "default_advance_account"]

View File

@@ -1729,7 +1729,7 @@ class PurchaseInvoice(BuyingController):
frappe.throw(_("Supplier Invoice Date cannot be greater than Posting Date")) frappe.throw(_("Supplier Invoice Date cannot be greater than Posting Date"))
if self.bill_no: if self.bill_no:
if cint(frappe.db.get_single_value("Accounts Settings", "check_supplier_invoice_uniqueness")): if cint(frappe.get_settings("Accounts Settings", "check_supplier_invoice_uniqueness")):
fiscal_year = get_fiscal_year(self.posting_date, company=self.company, as_dict=True) fiscal_year = get_fiscal_year(self.posting_date, company=self.company, as_dict=True)
pi = frappe.db.sql( pi = frappe.db.sql(

View File

@@ -1096,9 +1096,7 @@ class SalesInvoice(SellingController):
if self.is_created_using_pos and not self.pos_profile: if self.is_created_using_pos and not self.pos_profile:
frappe.throw(_("POS Profile is mandatory to mark this invoice as POS Transaction.")) frappe.throw(_("POS Profile is mandatory to mark this invoice as POS Transaction."))
self.is_pos_using_sales_invoice = frappe.db.get_single_value( self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos")
"Accounts Settings", "use_sales_invoice_in_pos"
)
if not self.is_pos_using_sales_invoice and not self.is_return: if not self.is_pos_using_sales_invoice and not self.is_return:
frappe.throw(_("Transactions using Sales Invoice in POS are disabled.")) frappe.throw(_("Transactions using Sales Invoice in POS are disabled."))
@@ -1635,7 +1633,7 @@ class SalesInvoice(SellingController):
def make_pos_gl_entries(self, gl_entries): def make_pos_gl_entries(self, gl_entries):
if cint(self.is_pos): if cint(self.is_pos):
skip_change_gl_entries = not cint( skip_change_gl_entries = not cint(
frappe.db.get_single_value("Accounts Settings", "post_change_gl_entries") frappe.get_settings("Accounts Settings", "post_change_gl_entries")
) )
for payment_mode in self.payments: for payment_mode in self.payments:
@@ -2920,7 +2918,7 @@ def check_if_return_invoice_linked_with_payment_entry(self):
# If a Return invoice is linked with payment entry along with other invoices, # If a Return invoice is linked with payment entry along with other invoices,
# the cancellation of the Return causes allocated amount to be greater than paid # the cancellation of the Return causes allocated amount to be greater than paid
if not frappe.db.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): if not frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"):
return return
payment_entries = [] payment_entries = []

View File

@@ -35,7 +35,7 @@ def make_gl_entries(
): ):
if gl_map: if gl_map:
if ( if (
frappe.db.get_single_value("Accounts Settings", "use_new_budget_controller") frappe.get_settings("Accounts Settings", "use_new_budget_controller")
and gl_map[0].voucher_type != "Period Closing Voucher" and gl_map[0].voucher_type != "Period Closing Voucher"
): ):
bud_val = BudgetValidation(gl_map=gl_map) bud_val = BudgetValidation(gl_map=gl_map)
@@ -743,11 +743,9 @@ def check_freezing_date(posting_date, adv_adj=False):
Hence stop admin to bypass if accounts are freezed Hence stop admin to bypass if accounts are freezed
""" """
if not adv_adj: if not adv_adj:
acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto")
if acc_frozen_upto: if acc_frozen_upto:
frozen_accounts_modifier = frappe.db.get_single_value( frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier")
"Accounts Settings", "frozen_accounts_modifier"
)
if getdate(posting_date) <= getdate(acc_frozen_upto) and ( if getdate(posting_date) <= getdate(acc_frozen_upto) and (
frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator" frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator"
): ):
@@ -825,4 +823,4 @@ def validate_allowed_dimensions(gl_entry, dimension_filter_map):
def is_immutable_ledger_enabled(): def is_immutable_ledger_enabled():
return frappe.db.get_single_value("Accounts Settings", "enable_immutable_ledger") return frappe.get_settings("Accounts Settings", "enable_immutable_ledger")

View File

@@ -689,7 +689,7 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_
return return
if default_due_date != posting_date and getdate(due_date) > getdate(default_due_date): if default_due_date != posting_date and getdate(due_date) > getdate(default_due_date):
if frappe.db.get_single_value("Accounts Settings", "credit_controller") in frappe.get_roles(): if frappe.get_settings("Accounts Settings", "credit_controller") in frappe.get_roles():
party_type = "supplier" if doctype == "Purchase Invoice" else "customer" party_type = "supplier" if doctype == "Purchase Invoice" else "customer"
msgprint( msgprint(
@@ -703,9 +703,7 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_
@frappe.whitelist() @frappe.whitelist()
def get_address_tax_category(tax_category=None, billing_address=None, shipping_address=None): def get_address_tax_category(tax_category=None, billing_address=None, shipping_address=None):
addr_tax_category_from = frappe.db.get_single_value( addr_tax_category_from = frappe.get_settings("Accounts Settings", "determine_address_tax_category_from")
"Accounts Settings", "determine_address_tax_category_from"
)
if addr_tax_category_from == "Shipping Address": if addr_tax_category_from == "Shipping Address":
if shipping_address: if shipping_address:
tax_category = frappe.db.get_value("Address", shipping_address, "tax_category") or tax_category tax_category = frappe.db.get_value("Address", shipping_address, "tax_category") or tax_category
@@ -803,7 +801,7 @@ def validate_party_frozen_disabled(party_type, party_name):
if party.disabled: if party.disabled:
frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled) frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled)
elif party.get("is_frozen"): elif party.get("is_frozen"):
frozen_accounts_modifier = frappe.db.get_single_value( frozen_accounts_modifier = frappe.get_settings(
"Accounts Settings", "frozen_accounts_modifier" "Accounts Settings", "frozen_accounts_modifier"
) )
if frozen_accounts_modifier not in frappe.get_roles(): if frozen_accounts_modifier not in frappe.get_roles():

View File

@@ -57,8 +57,7 @@ class ReceivablePayableReport:
self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()] self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()]
self.range_numbers = [num for num in range(1, len(self.ranges) + 2)] self.range_numbers = [num for num in range(1, len(self.ranges) + 2)]
self.ple_fetch_method = ( self.ple_fetch_method = (
frappe.db.get_single_value("Accounts Settings", "receivable_payable_fetch_method") frappe.get_settings("Accounts Settings", "receivable_payable_fetch_method") or "Buffered Cursor"
or "Buffered Cursor"
) # Fail Safe ) # Fail Safe
def run(self, args): def run(self, args):
@@ -849,7 +848,7 @@ class ReceivablePayableReport:
) )
if self.filters.get("show_remarks"): if self.filters.get("show_remarks"):
if remarks_length := frappe.db.get_single_value( if remarks_length := frappe.get_settings(
"Accounts Settings", "receivable_payable_remarks_length" "Accounts Settings", "receivable_payable_remarks_length"
): ):
query = query.select(Substring(ple.remarks, 1, remarks_length).as_("remarks")) query = query.select(Substring(ple.remarks, 1, remarks_length).as_("remarks"))

View File

@@ -435,9 +435,7 @@ def set_gl_entries_by_account(
gl_entries = [] gl_entries = []
# For balance sheet # For balance sheet
ignore_closing_balances = frappe.db.get_single_value( ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance")
"Accounts Settings", "ignore_account_closing_balance"
)
if not from_date and not ignore_closing_balances: if not from_date and not ignore_closing_balances:
last_period_closing_voucher = frappe.db.get_all( last_period_closing_voucher = frappe.db.get_all(
"Period Closing Voucher", "Period Closing Voucher",
@@ -519,9 +517,7 @@ def get_accounting_entries(
.where(gl_entry.company == filters.company) .where(gl_entry.company == filters.company)
) )
ignore_is_opening = frappe.db.get_single_value( ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting")
"Accounts Settings", "ignore_is_opening_check_for_reporting"
)
if doctype == "GL Entry": if doctype == "GL Entry":
query = query.select(gl_entry.posting_date, gl_entry.is_opening, gl_entry.fiscal_year) query = query.select(gl_entry.posting_date, gl_entry.is_opening, gl_entry.fiscal_year)

View File

@@ -163,7 +163,7 @@ def get_gl_entries(filters, accounting_dimensions):
credit_in_account_currency """ credit_in_account_currency """
if filters.get("show_remarks"): if filters.get("show_remarks"):
if remarks_length := frappe.db.get_single_value("Accounts Settings", "general_ledger_remarks_length"): if remarks_length := frappe.get_settings("Accounts Settings", "general_ledger_remarks_length"):
select_fields += f",substr(remarks, 1, {remarks_length}) as 'remarks'" select_fields += f",substr(remarks, 1, {remarks_length}) as 'remarks'"
else: else:
select_fields += """,remarks""" select_fields += """,remarks"""
@@ -218,9 +218,7 @@ def get_gl_entries(filters, accounting_dimensions):
def get_conditions(filters): def get_conditions(filters):
conditions = [] conditions = []
ignore_is_opening = frappe.db.get_single_value( ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting")
"Accounts Settings", "ignore_is_opening_check_for_reporting"
)
if filters.get("account"): if filters.get("account"):
filters.account = get_accounts_with_children(filters.account) filters.account = get_accounts_with_children(filters.account)
@@ -480,7 +478,7 @@ def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map):
if filters.get("show_net_values_in_party_account"): if filters.get("show_net_values_in_party_account"):
account_type_map = get_account_type_map(filters.get("company")) account_type_map = get_account_type_map(filters.get("company"))
immutable_ledger = frappe.db.get_single_value("Accounts Settings", "enable_immutable_ledger") immutable_ledger = frappe.get_settings("Accounts Settings", "enable_immutable_ledger")
def update_value_in_dict(data, key, gle): def update_value_in_dict(data, key, gle):
data[key].debit += gle.debit data[key].debit += gle.debit

View File

@@ -89,9 +89,7 @@ def get_data(filters):
) )
company_currency = filters.presentation_currency or erpnext.get_company_currency(filters.company) company_currency = filters.presentation_currency or erpnext.get_company_currency(filters.company)
ignore_is_opening = frappe.db.get_single_value( ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting")
"Accounts Settings", "ignore_is_opening_check_for_reporting"
)
if not accounts: if not accounts:
return None return None
@@ -148,9 +146,7 @@ def get_rootwise_opening_balances(filters, report_type, ignore_is_opening):
gle = [] gle = []
last_period_closing_voucher = "" last_period_closing_voucher = ""
ignore_closing_balances = frappe.db.get_single_value( ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance")
"Accounts Settings", "ignore_account_closing_balance"
)
if not ignore_closing_balances: if not ignore_closing_balances:
last_period_closing_voucher = frappe.db.get_all( last_period_closing_voucher = frappe.db.get_all(

View File

@@ -886,7 +886,7 @@ def cancel_common_party_journal(self):
if self.doctype not in ["Sales Invoice", "Purchase Invoice"]: if self.doctype not in ["Sales Invoice", "Purchase Invoice"]:
return return
if not frappe.db.get_single_value("Accounts Settings", "enable_common_party_accounting"): if not frappe.get_settings("Accounts Settings", "enable_common_party_accounting"):
return return
party_link = self.get_common_party_link() party_link = self.get_common_party_link()
@@ -2312,7 +2312,7 @@ def run_ledger_health_checks():
def sync_auto_reconcile_config(auto_reconciliation_job_trigger: int = 15): def sync_auto_reconcile_config(auto_reconciliation_job_trigger: int = 15):
auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.db.get_single_value( auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.get_settings(
"Accounts Settings", "auto_reconciliation_job_trigger" "Accounts Settings", "auto_reconciliation_job_trigger"
) )
method = "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_reconciliation_for_queued_docs" method = "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_reconciliation_for_queued_docs"

View File

@@ -35,9 +35,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched
def post_depreciation_entries(date=None): def post_depreciation_entries(date=None):
# Return if automatic booking of asset depreciation is disabled # Return if automatic booking of asset depreciation is disabled
if not cint( if not cint(frappe.get_settings("Accounts Settings", "book_asset_depreciation_entry_automatically")):
frappe.db.get_single_value("Accounts Settings", "book_asset_depreciation_entry_automatically")
):
return return
date = date or today() date = date or today()
@@ -114,12 +112,12 @@ def make_depreciation_entry_on_disposal(asset_doc, disposal_date=None):
def get_acc_frozen_upto(): def get_acc_frozen_upto():
acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto")
if not acc_frozen_upto: if not acc_frozen_upto:
return return
frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier") frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier")
if frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator": if frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator":
return getdate(acc_frozen_upto) return getdate(acc_frozen_upto)

View File

@@ -251,7 +251,7 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod):
return depr_booked_for_months return depr_booked_for_months
def get_total_pending_days_or_years(self): def get_total_pending_days_or_years(self):
if cint(frappe.db.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")):
last_depr_date = self.get_last_booked_depreciation_date() last_depr_date = self.get_last_booked_depreciation_date()
if last_depr_date: if last_depr_date:
self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) - 1 self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) - 1

View File

@@ -38,7 +38,7 @@ class StraightLineMethod(Document):
return daily_depr_amount * total_depreciable_days return daily_depr_amount * total_depreciable_days
def get_daily_depr_amount(self): def get_daily_depr_amount(self):
if cint(frappe.db.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")):
return self.depreciable_value / self.total_pending_days return self.depreciable_value / self.total_pending_days
else: else:
yearly_depr_amount = self.depreciable_value / self.total_pending_years yearly_depr_amount = self.depreciable_value / self.total_pending_years

View File

@@ -403,7 +403,7 @@ class AccountsController(TransactionBase):
self.remove_serial_and_batch_bundle() self.remove_serial_and_batch_bundle()
# delete sl and gl entries on deletion of transaction # delete sl and gl entries on deletion of transaction
if frappe.db.get_single_value("Accounts Settings", "delete_linked_ledger_entries"): if frappe.get_settings("Accounts Settings", "delete_linked_ledger_entries"):
# delete linked exchange gain/loss journal # delete linked exchange gain/loss journal
delete_exchange_gain_loss_journal(self) delete_exchange_gain_loss_journal(self)
@@ -744,9 +744,7 @@ class AccountsController(TransactionBase):
frappe.throw(_(msg), title=_("Internal Transfer Reference Missing")) frappe.throw(_(msg), title=_("Internal Transfer Reference Missing"))
def validate_internal_transaction(self): def validate_internal_transaction(self):
if not cint( if not cint(frappe.get_settings("Accounts Settings", "maintain_same_internal_transaction_rate")):
frappe.db.get_single_value("Accounts Settings", "maintain_same_internal_transaction_rate")
):
return return
doctypes_list = ["Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"] doctypes_list = ["Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"]
@@ -1143,7 +1141,7 @@ class AccountsController(TransactionBase):
return True return True
def set_taxes_and_charges(self): def set_taxes_and_charges(self):
if frappe.db.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): if frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"):
if hasattr(self, "taxes_and_charges") and not self.get("taxes") and not self.get("is_pos"): if hasattr(self, "taxes_and_charges") and not self.get("taxes") and not self.get("is_pos"):
if tax_master_doctype := self.meta.get_field("taxes_and_charges").options: if tax_master_doctype := self.meta.get_field("taxes_and_charges").options:
self.append_taxes_from_master(tax_master_doctype) self.append_taxes_from_master(tax_master_doctype)
@@ -1156,7 +1154,7 @@ class AccountsController(TransactionBase):
self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges"))) self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges")))
def append_taxes_from_item_tax_template(self): def append_taxes_from_item_tax_template(self):
if not frappe.db.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): if not frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"):
return return
for row in self.items: for row in self.items:
@@ -1497,7 +1495,7 @@ class AccountsController(TransactionBase):
return res return res
def is_inclusive_tax(self): def is_inclusive_tax(self):
is_inclusive = cint(frappe.db.get_single_value("Accounts Settings", "show_inclusive_tax_in_print")) is_inclusive = cint(frappe.get_settings("Accounts Settings", "show_inclusive_tax_in_print"))
if is_inclusive: if is_inclusive:
is_inclusive = 0 is_inclusive = 0
@@ -1507,7 +1505,7 @@ class AccountsController(TransactionBase):
return is_inclusive return is_inclusive
def should_show_taxes_as_table_in_print(self): def should_show_taxes_as_table_in_print(self):
return cint(frappe.db.get_single_value("Accounts Settings", "show_taxes_as_table_in_print")) return cint(frappe.get_settings("Accounts Settings", "show_taxes_as_table_in_print"))
def validate_advance_entries(self): def validate_advance_entries(self):
order_field = "sales_order" if self.doctype == "Sales Invoice" else "purchase_order" order_field = "sales_order" if self.doctype == "Sales Invoice" else "purchase_order"
@@ -1884,13 +1882,11 @@ class AccountsController(TransactionBase):
cancel_exchange_gain_loss_journal(self) cancel_exchange_gain_loss_journal(self)
cancel_common_party_journal(self) cancel_common_party_journal(self)
if frappe.db.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): if frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"):
unlink_ref_doc_from_payment_entries(self) unlink_ref_doc_from_payment_entries(self)
elif self.doctype in ["Sales Order", "Purchase Order"]: elif self.doctype in ["Sales Order", "Purchase Order"]:
if frappe.db.get_single_value( if frappe.get_settings("Accounts Settings", "unlink_advance_payment_on_cancelation_of_order"):
"Accounts Settings", "unlink_advance_payment_on_cancelation_of_order"
):
unlink_ref_doc_from_payment_entries(self) unlink_ref_doc_from_payment_entries(self)
if self.doctype == "Sales Order": if self.doctype == "Sales Order":
@@ -2448,7 +2444,7 @@ class AccountsController(TransactionBase):
grand_total = grand_total - flt(self.write_off_amount) grand_total = grand_total - flt(self.write_off_amount)
po_or_so, doctype, fieldname = self.get_order_details() po_or_so, doctype, fieldname = self.get_order_details()
automatically_fetch_payment_terms = cint( automatically_fetch_payment_terms = cint(
frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms")
) )
if self.get("total_advance"): if self.get("total_advance"):
@@ -2731,7 +2727,7 @@ class AccountsController(TransactionBase):
if not is_invoice: if not is_invoice:
return return
if frappe.db.get_single_value("Accounts Settings", "enable_common_party_accounting"): if frappe.get_settings("Accounts Settings", "enable_common_party_accounting"):
party_link = self.get_common_party_link() party_link = self.get_common_party_link()
if party_link and self.outstanding_amount: if party_link and self.outstanding_amount:
self.create_advance_and_reconcile(party_link) self.create_advance_and_reconcile(party_link)
@@ -3517,7 +3513,7 @@ def set_child_tax_template_and_map(item, child_item, parent_doc):
def add_taxes_from_tax_template(child_item, parent_doc, db_insert=True): def add_taxes_from_tax_template(child_item, parent_doc, db_insert=True):
add_taxes_from_item_tax_template = frappe.db.get_single_value( add_taxes_from_item_tax_template = frappe.get_settings(
"Accounts Settings", "add_taxes_from_item_tax_template" "Accounts Settings", "add_taxes_from_item_tax_template"
) )

View File

@@ -842,7 +842,7 @@ class BuyingController(SubcontractingController):
self.update_fixed_asset(field, delete_asset=True) self.update_fixed_asset(field, delete_asset=True)
def validate_budget(self): def validate_budget(self):
if frappe.db.get_single_value("Accounts Settings", "use_new_budget_controller"): if frappe.get_settings("Accounts Settings", "use_new_budget_controller"):
from erpnext.controllers.budget_controller import BudgetValidation from erpnext.controllers.budget_controller import BudgetValidation
val = BudgetValidation(doc=self) val = BudgetValidation(doc=self)

View File

@@ -339,9 +339,7 @@ class StatusUpdater(Document):
role_allowed_to_over_deliver_receive = frappe.get_settings( role_allowed_to_over_deliver_receive = frappe.get_settings(
"Stock Settings", "role_allowed_to_over_deliver_receive" "Stock Settings", "role_allowed_to_over_deliver_receive"
) )
role_allowed_to_over_bill = frappe.db.get_single_value( role_allowed_to_over_bill = frappe.get_settings("Accounts Settings", "role_allowed_to_over_bill")
"Accounts Settings", "role_allowed_to_over_bill"
)
role = role_allowed_to_over_deliver_receive if qty_or_amount == "qty" else role_allowed_to_over_bill role = role_allowed_to_over_deliver_receive if qty_or_amount == "qty" else role_allowed_to_over_bill
overflow_percent = ( overflow_percent = (

View File

@@ -28,9 +28,7 @@ class calculate_taxes_and_totals:
def __init__(self, doc: Document): def __init__(self, doc: Document):
self.doc = doc self.doc = doc
frappe.flags.round_off_applicable_accounts = [] frappe.flags.round_off_applicable_accounts = []
frappe.flags.round_row_wise_tax = frappe.db.get_single_value( frappe.flags.round_row_wise_tax = frappe.get_settings("Accounts Settings", "round_row_wise_tax")
"Accounts Settings", "round_row_wise_tax"
)
if doc.get("round_off_applicable_accounts_for_tax_withholding"): if doc.get("round_off_applicable_accounts_for_tax_withholding"):
frappe.flags.round_off_applicable_accounts.append( frappe.flags.round_off_applicable_accounts.append(
@@ -1170,7 +1168,7 @@ def get_rounded_tax_amount(itemised_tax, precision):
@frappe.whitelist() @frappe.whitelist()
def get_rounding_tax_settings(): def get_rounding_tax_settings():
return frappe.db.get_single_value("Accounts Settings", "round_row_wise_tax") return frappe.get_settings("Accounts Settings", "round_row_wise_tax")
class init_landed_taxes_and_totals: class init_landed_taxes_and_totals:

View File

@@ -554,7 +554,7 @@ def check_credit_limit(customer, company, ignore_outstanding_sales_order=False,
message += "<br><br>" message += "<br><br>"
# If not authorized person raise exception # If not authorized person raise exception
credit_controller_role = frappe.db.get_single_value("Accounts Settings", "credit_controller") credit_controller_role = frappe.get_settings("Accounts Settings", "credit_controller")
if not credit_controller_role or credit_controller_role not in frappe.get_roles(): if not credit_controller_role or credit_controller_role not in frappe.get_roles():
# form a list of emails for the credit controller users # form a list of emails for the credit controller users
credit_controller_users = get_users_with_role(credit_controller_role or "Sales Master Manager") credit_controller_users = get_users_with_role(credit_controller_role or "Sales Master Manager")

View File

@@ -1220,7 +1220,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False):
) )
automatically_fetch_payment_terms = cint( automatically_fetch_payment_terms = cint(
frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms")
) )
if automatically_fetch_payment_terms: if automatically_fetch_payment_terms:
doclist.set_payment_schedule() doclist.set_payment_schedule()

View File

@@ -20,10 +20,8 @@ def boot_session(bootinfo):
bootinfo.sysdefaults.use_server_side_reactivity = frappe.db.get_single_value( bootinfo.sysdefaults.use_server_side_reactivity = frappe.db.get_single_value(
"Selling Settings", "use_server_side_reactivity" "Selling Settings", "use_server_side_reactivity"
) )
bootinfo.sysdefaults.allow_stale = cint( bootinfo.sysdefaults.allow_stale = cint(frappe.get_settings("Accounts Settings", "allow_stale"))
frappe.db.get_single_value("Accounts Settings", "allow_stale") bootinfo.sysdefaults.over_billing_allowance = frappe.get_settings(
)
bootinfo.sysdefaults.over_billing_allowance = frappe.db.get_single_value(
"Accounts Settings", "over_billing_allowance" "Accounts Settings", "over_billing_allowance"
) )

View File

@@ -901,7 +901,7 @@ def make_sales_invoice(source_name, target_doc=None, args=None):
) )
automatically_fetch_payment_terms = cint( automatically_fetch_payment_terms = cint(
frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms")
) )
if automatically_fetch_payment_terms and not doc.is_return: if automatically_fetch_payment_terms and not doc.is_return:
doc.set_payment_schedule() doc.set_payment_schedule()

View File

@@ -1199,7 +1199,7 @@ def get_billed_amount_against_po(po_items):
def update_billing_percentage(pr_doc, update_modified=True, adjust_incoming_rate=False): def update_billing_percentage(pr_doc, update_modified=True, adjust_incoming_rate=False):
# Update Billing % based on pending accepted qty # Update Billing % based on pending accepted qty
buying_settings = frappe.get_single("Buying Settings") buying_settings = frappe.get_single("Buying Settings")
over_billing_allowance = frappe.db.get_single_value("Accounts Settings", "over_billing_allowance") over_billing_allowance = frappe.get_settings("Accounts Settings", "over_billing_allowance")
total_amount, total_billed_amount = 0, 0 total_amount, total_billed_amount = 0, 0
item_wise_returned_qty = get_item_wise_returned_qty(pr_doc) item_wise_returned_qty = get_item_wise_returned_qty(pr_doc)

View File

@@ -354,7 +354,7 @@ class TransactionBase(StatusUpdater):
self.set_rate_based_on_price_list(item_obj, item_details) self.set_rate_based_on_price_list(item_obj, item_details)
def add_taxes_from_item_template(self, item_obj: object, item_details: dict) -> None: def add_taxes_from_item_template(self, item_obj: object, item_details: dict) -> None:
if item_details.item_tax_rate and frappe.db.get_single_value( if item_details.item_tax_rate and frappe.get_settings(
"Accounts Settings", "add_taxes_from_item_tax_template" "Accounts Settings", "add_taxes_from_item_tax_template"
): ):
item_tax_template = frappe.json.loads(item_details.item_tax_rate) item_tax_template = frappe.json.loads(item_details.item_tax_rate)