48 lines
897 B
Python
48 lines
897 B
Python
import frappe
|
|
from frappe.model.document import get_controller
|
|
from pypika import Criterion
|
|
|
|
|
|
@frappe.whitelist()
|
|
def sort_options(doctype: str):
|
|
c = get_controller(doctype)
|
|
|
|
if not hasattr(c, "sort_options"):
|
|
return []
|
|
|
|
return c.sort_options()
|
|
|
|
@frappe.whitelist()
|
|
def get_filterable_fields(doctype: str):
|
|
DocField = frappe.qb.DocType("DocField")
|
|
allowed_fieldtypes = [
|
|
"Check",
|
|
"Data",
|
|
"Float",
|
|
"Int",
|
|
"Link",
|
|
"Long Text",
|
|
"Select",
|
|
"Small Text",
|
|
"Text Editor",
|
|
"Text",
|
|
]
|
|
|
|
from_doc_fields = (
|
|
frappe.qb.from_(DocField)
|
|
.select(
|
|
DocField.fieldname,
|
|
DocField.fieldtype,
|
|
DocField.label,
|
|
DocField.name,
|
|
DocField.options,
|
|
)
|
|
.where(DocField.parent == doctype)
|
|
.where(DocField.hidden == False)
|
|
.where(Criterion.any([DocField.fieldtype == i for i in allowed_fieldtypes]))
|
|
.run(as_dict=True)
|
|
)
|
|
res = []
|
|
res.extend(from_doc_fields)
|
|
return res
|