mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-04 18:23:05 +00:00
Merge pull request #57356 from mihir-kandoi/company-restriction-link-scan-perf
perf: scan link fields once per table in company restriction check
This commit is contained in:
@@ -154,24 +154,28 @@ def validate_transaction_company(doc, method=None):
|
||||
|
||||
def get_master_references(doc):
|
||||
references = defaultdict(set)
|
||||
collect_master_references(doc, references)
|
||||
collect_master_references([doc], references)
|
||||
for table_field in doc.meta.get_table_fields():
|
||||
for row in doc.get(table_field.fieldname) or []:
|
||||
collect_master_references(row, references)
|
||||
if rows := doc.get(table_field.fieldname):
|
||||
collect_master_references(rows, references)
|
||||
|
||||
return references
|
||||
|
||||
|
||||
def collect_master_references(row, references):
|
||||
meta = frappe.get_meta(row.doctype)
|
||||
for field in meta.get_link_fields():
|
||||
if field.options in RESTRICTABLE_MASTER_DOCTYPES and (value := row.get(field.fieldname)):
|
||||
references[field.options].add(value)
|
||||
def collect_master_references(rows, references):
|
||||
meta = frappe.get_meta(rows[0].doctype)
|
||||
link_fields = [field for field in meta.get_link_fields() if field.options in RESTRICTABLE_MASTER_DOCTYPES]
|
||||
dynamic_link_fields = meta.get_dynamic_link_fields()
|
||||
|
||||
for field in meta.get_dynamic_link_fields():
|
||||
doctype = row.get(field.options)
|
||||
if doctype in RESTRICTABLE_MASTER_DOCTYPES and (value := row.get(field.fieldname)):
|
||||
references[doctype].add(value)
|
||||
for row in rows:
|
||||
for field in link_fields:
|
||||
if value := row.get(field.fieldname):
|
||||
references[field.options].add(value)
|
||||
|
||||
for field in dynamic_link_fields:
|
||||
doctype = row.get(field.options)
|
||||
if doctype in RESTRICTABLE_MASTER_DOCTYPES and (value := row.get(field.fieldname)):
|
||||
references[doctype].add(value)
|
||||
|
||||
|
||||
def get_blocked_masters(doctype, names, company):
|
||||
|
||||
Reference in New Issue
Block a user