mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 08:24:47 +00:00
optimizing transactions by caching
This commit is contained in:
@@ -179,7 +179,7 @@ def get_account_currency(account):
|
|||||||
if not account:
|
if not account:
|
||||||
return
|
return
|
||||||
def generator():
|
def generator():
|
||||||
account_currency, company = frappe.db.get_value("Account", account, ["account_currency", "company"])
|
account_currency, company = frappe.get_cached_value("Account", account, ["account_currency", "company"])
|
||||||
if not account_currency:
|
if not account_currency:
|
||||||
account_currency = frappe.get_cached_value('Company', company, "default_currency")
|
account_currency = frappe.get_cached_value('Company', company, "default_currency")
|
||||||
|
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ class SalesInvoice(SellingController):
|
|||||||
from erpnext.selling.doctype.customer.customer import check_credit_limit
|
from erpnext.selling.doctype.customer.customer import check_credit_limit
|
||||||
|
|
||||||
validate_against_credit_limit = False
|
validate_against_credit_limit = False
|
||||||
bypass_credit_limit_check_at_sales_order = cint(frappe.db.get_value("Customer", self.customer,
|
bypass_credit_limit_check_at_sales_order = cint(frappe.get_cached_value("Customer", self.customer,
|
||||||
"bypass_credit_limit_check_at_sales_order"))
|
"bypass_credit_limit_check_at_sales_order"))
|
||||||
if bypass_credit_limit_check_at_sales_order:
|
if bypass_credit_limit_check_at_sales_order:
|
||||||
validate_against_credit_limit = True
|
validate_against_credit_limit = True
|
||||||
@@ -388,7 +388,7 @@ class SalesInvoice(SellingController):
|
|||||||
return frappe.db.sql("select abbr from tabCompany where name=%s", self.company)[0][0]
|
return frappe.db.sql("select abbr from tabCompany where name=%s", self.company)[0][0]
|
||||||
|
|
||||||
def validate_debit_to_acc(self):
|
def validate_debit_to_acc(self):
|
||||||
account = frappe.db.get_value("Account", self.debit_to,
|
account = frappe.get_cached_value("Account", self.debit_to,
|
||||||
["account_type", "report_type", "account_currency"], as_dict=True)
|
["account_type", "report_type", "account_currency"], as_dict=True)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
@@ -460,9 +460,9 @@ class SalesInvoice(SellingController):
|
|||||||
"""check in manage account if sales order / delivery note required or not."""
|
"""check in manage account if sales order / delivery note required or not."""
|
||||||
dic = {'Sales Order':['so_required', 'is_pos'],'Delivery Note':['dn_required', 'update_stock']}
|
dic = {'Sales Order':['so_required', 'is_pos'],'Delivery Note':['dn_required', 'update_stock']}
|
||||||
for i in dic:
|
for i in dic:
|
||||||
if frappe.db.get_value('Selling Settings', None, dic[i][0]) == 'Yes':
|
if frappe.db.get_single_value('Selling Settings', dic[i][0]) == 'Yes':
|
||||||
for d in self.get('items'):
|
for d in self.get('items'):
|
||||||
if frappe.db.get_value('Item', d.item_code, 'is_stock_item') == 1 \
|
if frappe.get_cached_value('Item', d.item_code, 'is_stock_item') == 1 \
|
||||||
and not d.get(i.lower().replace(' ','_')) and not self.get(dic[i][1]):
|
and not d.get(i.lower().replace(' ','_')) and not self.get(dic[i][1]):
|
||||||
msgprint(_("{0} is mandatory for Item {1}").format(i,d.item_code), raise_exception=1)
|
msgprint(_("{0} is mandatory for Item {1}").format(i,d.item_code), raise_exception=1)
|
||||||
|
|
||||||
@@ -1153,7 +1153,7 @@ def validate_inter_company_party(doctype, party, company, inter_company_invoice_
|
|||||||
ref_party = doc.supplier if doctype == "Sales Invoice" else doc.customer
|
ref_party = doc.supplier if doctype == "Sales Invoice" else doc.customer
|
||||||
if not frappe.db.get_value(partytype, {"represents_company": doc.company}, "name") == party:
|
if not frappe.db.get_value(partytype, {"represents_company": doc.company}, "name") == party:
|
||||||
frappe.throw(_("Invalid {0} for Inter Company Invoice.").format(partytype))
|
frappe.throw(_("Invalid {0} for Inter Company Invoice.").format(partytype))
|
||||||
if not frappe.db.get_value(ref_partytype, {"name": ref_party}, "represents_company") == company:
|
if not frappe.get_cached_value(ref_partytype, ref_party, "represents_company") == company:
|
||||||
frappe.throw(_("Invalid Company for Inter Company Invoice."))
|
frappe.throw(_("Invalid Company for Inter Company Invoice."))
|
||||||
|
|
||||||
elif frappe.db.get_value(partytype, {"name": party, internal: 1}, "name") == party:
|
elif frappe.db.get_value(partytype, {"name": party, internal: 1}, "name") == party:
|
||||||
@@ -1260,10 +1260,10 @@ def set_account_for_mode_of_payment(self):
|
|||||||
def get_inter_company_details(doc, doctype):
|
def get_inter_company_details(doc, doctype):
|
||||||
if doctype == "Sales Invoice":
|
if doctype == "Sales Invoice":
|
||||||
party = frappe.db.get_value("Supplier", {"disabled": 0, "is_internal_supplier": 1, "represents_company": doc.company}, "name")
|
party = frappe.db.get_value("Supplier", {"disabled": 0, "is_internal_supplier": 1, "represents_company": doc.company}, "name")
|
||||||
company = frappe.db.get_value("Customer", {"name": doc.customer}, "represents_company")
|
company = frappe.get_cached_value("Customer", doc.customer, "represents_company")
|
||||||
else:
|
else:
|
||||||
party = frappe.db.get_value("Customer", {"disabled": 0, "is_internal_customer": 1, "represents_company": doc.company}, "name")
|
party = frappe.db.get_value("Customer", {"disabled": 0, "is_internal_customer": 1, "represents_company": doc.company}, "name")
|
||||||
company = frappe.db.get_value("Supplier", {"name": doc.supplier}, "represents_company")
|
company = frappe.get_cached_value("Supplier", doc.supplier, "represents_company")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"party": party,
|
"party": party,
|
||||||
|
|||||||
@@ -142,8 +142,8 @@ def get_default_price_list(party):
|
|||||||
return party.default_price_list
|
return party.default_price_list
|
||||||
|
|
||||||
if party.doctype == "Customer":
|
if party.doctype == "Customer":
|
||||||
price_list = frappe.db.get_value("Customer Group",
|
price_list = frappe.get_cached_value("Customer Group",
|
||||||
party.customer_group, "default_price_list", cache=True)
|
party.customer_group, "default_price_list")
|
||||||
if price_list:
|
if price_list:
|
||||||
return price_list
|
return price_list
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ def get_party_account(party_type, party, company):
|
|||||||
|
|
||||||
if not account and party_type in ['Customer', 'Supplier']:
|
if not account and party_type in ['Customer', 'Supplier']:
|
||||||
party_group_doctype = "Customer Group" if party_type=="Customer" else "Supplier Group"
|
party_group_doctype = "Customer Group" if party_type=="Customer" else "Supplier Group"
|
||||||
group = frappe.db.get_value(party_type, party, scrub(party_group_doctype))
|
group = frappe.get_cached_value(party_type, party, scrub(party_group_doctype))
|
||||||
account = frappe.db.get_value("Party Account",
|
account = frappe.db.get_value("Party Account",
|
||||||
{"parenttype": party_group_doctype, "parent": group, "company": company}, "account")
|
{"parenttype": party_group_doctype, "parent": group, "company": company}, "account")
|
||||||
|
|
||||||
@@ -215,7 +215,7 @@ def get_party_account(party_type, party, company):
|
|||||||
existing_gle_currency = get_party_gle_currency(party_type, party, company)
|
existing_gle_currency = get_party_gle_currency(party_type, party, company)
|
||||||
if existing_gle_currency:
|
if existing_gle_currency:
|
||||||
if account:
|
if account:
|
||||||
account_currency = frappe.db.get_value("Account", account, "account_currency")
|
account_currency = frappe.db.get_value("Account", account, "account_currency", cache=True)
|
||||||
if (account and account_currency != existing_gle_currency) or not account:
|
if (account and account_currency != existing_gle_currency) or not account:
|
||||||
account = get_party_gle_account(party_type, party, company)
|
account = get_party_gle_account(party_type, party, company)
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ def get_party_account(party_type, party, company):
|
|||||||
def get_party_account_currency(party_type, party, company):
|
def get_party_account_currency(party_type, party, company):
|
||||||
def generator():
|
def generator():
|
||||||
party_account = get_party_account(party_type, party, company)
|
party_account = get_party_account(party_type, party, company)
|
||||||
return frappe.db.get_value("Account", party_account, "account_currency")
|
return frappe.db.get_value("Account", party_account, "account_currency", cache=True)
|
||||||
|
|
||||||
return frappe.local_cache("party_account_currency", (party_type, party, company), generator)
|
return frappe.local_cache("party_account_currency", (party_type, party, company), generator)
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ def validate_party_accounts(doc):
|
|||||||
else:
|
else:
|
||||||
companies.append(account.company)
|
companies.append(account.company)
|
||||||
|
|
||||||
party_account_currency = frappe.db.get_value("Account", account.account, "account_currency")
|
party_account_currency = frappe.db.get_value("Account", account.account, "account_currency", cache=True)
|
||||||
existing_gle_currency = get_party_gle_currency(doc.doctype, doc.name, account.company)
|
existing_gle_currency = get_party_gle_currency(doc.doctype, doc.name, account.company)
|
||||||
company_default_currency = frappe.get_cached_value('Company',
|
company_default_currency = frappe.get_cached_value('Company',
|
||||||
frappe.db.get_default("Company"), "default_currency")
|
frappe.db.get_default("Company"), "default_currency")
|
||||||
@@ -296,8 +296,8 @@ def get_due_date(posting_date, party_type, party, company=None, bill_date=None):
|
|||||||
due_date = get_due_date_from_template(template_name, posting_date, bill_date).strftime("%Y-%m-%d")
|
due_date = get_due_date_from_template(template_name, posting_date, bill_date).strftime("%Y-%m-%d")
|
||||||
else:
|
else:
|
||||||
if party_type == "Supplier":
|
if party_type == "Supplier":
|
||||||
supplier_group = frappe.db.get_value(party_type, party, fieldname="supplier_group")
|
supplier_group = frappe.get_cached_value(party_type, party, "supplier_group")
|
||||||
template_name = frappe.db.get_value("Supplier Group", supplier_group, fieldname="payment_terms")
|
template_name = frappe.get_cached_value("Supplier Group", supplier_group, "payment_terms")
|
||||||
if template_name:
|
if template_name:
|
||||||
due_date = get_due_date_from_template(template_name, posting_date, bill_date).strftime("%Y-%m-%d")
|
due_date = get_due_date_from_template(template_name, posting_date, bill_date).strftime("%Y-%m-%d")
|
||||||
# If due date is calculated from bill_date, check this condition
|
# If due date is calculated from bill_date, check this condition
|
||||||
@@ -387,19 +387,19 @@ def get_pyt_term_template(party_name, party_type, company=None):
|
|||||||
return
|
return
|
||||||
template = None
|
template = None
|
||||||
if party_type == 'Customer':
|
if party_type == 'Customer':
|
||||||
customer = frappe.db.get_value("Customer", party_name,
|
customer = frappe.get_cached_value("Customer", party_name,
|
||||||
fieldname=['payment_terms', "customer_group"], as_dict=1)
|
fieldname=['payment_terms', "customer_group"], as_dict=1)
|
||||||
template = customer.payment_terms
|
template = customer.payment_terms
|
||||||
|
|
||||||
if not template and customer.customer_group:
|
if not template and customer.customer_group:
|
||||||
template = frappe.db.get_value("Customer Group",
|
template = frappe.get_cached_value("Customer Group",
|
||||||
customer.customer_group, fieldname='payment_terms')
|
customer.customer_group, 'payment_terms')
|
||||||
else:
|
else:
|
||||||
supplier = frappe.db.get_value("Supplier", party_name,
|
supplier = frappe.get_cached_value("Supplier", party_name,
|
||||||
fieldname=['payment_terms', "supplier_group"], as_dict=1)
|
fieldname=['payment_terms', "supplier_group"], as_dict=1)
|
||||||
template = supplier.payment_terms
|
template = supplier.payment_terms
|
||||||
if not template and supplier.supplier_group:
|
if not template and supplier.supplier_group:
|
||||||
template = frappe.db.get_value("Supplier Group", supplier.supplier_group, fieldname='payment_terms')
|
template = frappe.get_cached_value("Supplier Group", supplier.supplier_group, 'payment_terms')
|
||||||
|
|
||||||
if not template and company:
|
if not template and company:
|
||||||
template = frappe.get_cached_value('Company', company, fieldname='payment_terms')
|
template = frappe.get_cached_value('Company', company, fieldname='payment_terms')
|
||||||
@@ -408,11 +408,11 @@ def get_pyt_term_template(party_name, party_type, company=None):
|
|||||||
def validate_party_frozen_disabled(party_type, party_name):
|
def validate_party_frozen_disabled(party_type, party_name):
|
||||||
if party_type and party_name:
|
if party_type and party_name:
|
||||||
if party_type in ("Customer", "Supplier"):
|
if party_type in ("Customer", "Supplier"):
|
||||||
party = frappe.db.get_value(party_type, party_name, ["is_frozen", "disabled"], as_dict=True)
|
party = frappe.get_cached_value(party_type, party_name, ["is_frozen", "disabled"], as_dict=True)
|
||||||
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_value( 'Accounts Settings', None,'frozen_accounts_modifier')
|
frozen_accounts_modifier = frappe.db.get_single_value( 'Accounts Settings', 'frozen_accounts_modifier')
|
||||||
if not frozen_accounts_modifier in frappe.get_roles():
|
if not frozen_accounts_modifier in frappe.get_roles():
|
||||||
frappe.throw(_("{0} {1} is frozen").format(party_type, party_name), PartyFrozen)
|
frappe.throw(_("{0} {1} is frozen").format(party_type, party_name), PartyFrozen)
|
||||||
|
|
||||||
|
|||||||
@@ -605,6 +605,7 @@ class AccountsController(TransactionBase):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def company_abbr(self):
|
def company_abbr(self):
|
||||||
|
self._abbr = None
|
||||||
if not hasattr(self, "_abbr") and self.company:
|
if not hasattr(self, "_abbr") and self.company:
|
||||||
self._abbr = frappe.get_cached_value('Company', self.company, "abbr")
|
self._abbr = frappe.get_cached_value('Company', self.company, "abbr")
|
||||||
|
|
||||||
|
|||||||
@@ -315,11 +315,11 @@ def get_credit_limit(customer, company):
|
|||||||
credit_limit = None
|
credit_limit = None
|
||||||
|
|
||||||
if customer:
|
if customer:
|
||||||
credit_limit, customer_group = frappe.db.get_value("Customer",
|
credit_limit, customer_group = frappe.get_cached_value("Customer",
|
||||||
customer, ["credit_limit", "customer_group"])
|
customer, ["credit_limit", "customer_group"])
|
||||||
|
|
||||||
if not credit_limit:
|
if not credit_limit:
|
||||||
credit_limit = frappe.db.get_value("Customer Group", customer_group, "credit_limit")
|
credit_limit = frappe.get_cached_value("Customer Group", customer_group, "credit_limit")
|
||||||
|
|
||||||
if not credit_limit:
|
if not credit_limit:
|
||||||
credit_limit = frappe.get_cached_value('Company', company, "credit_limit")
|
credit_limit = frappe.get_cached_value('Company', company, "credit_limit")
|
||||||
|
|||||||
@@ -547,7 +547,7 @@ def get_party_item_code(args, item_doc, out):
|
|||||||
if customer_item_code:
|
if customer_item_code:
|
||||||
out.customer_item_code = customer_item_code[0].ref_code
|
out.customer_item_code = customer_item_code[0].ref_code
|
||||||
else:
|
else:
|
||||||
customer_group = frappe.db.get_value("Customer", args.customer, "customer_group", cache=True)
|
customer_group = frappe.get_cached_value("Customer", args.customer, "customer_group")
|
||||||
customer_group_item_code = item_doc.get("customer_items", {"customer_group": customer_group})
|
customer_group_item_code = item_doc.get("customer_items", {"customer_group": customer_group})
|
||||||
if customer_group_item_code and not customer_group_item_code[0].customer_name:
|
if customer_group_item_code and not customer_group_item_code[0].customer_name:
|
||||||
out.customer_item_code = customer_group_item_code[0].ref_code
|
out.customer_item_code = customer_group_item_code[0].ref_code
|
||||||
|
|||||||
Reference in New Issue
Block a user