90% ready formula editor with small bugs
This commit is contained in:
parent
2f077b7752
commit
282ba65f58
|
|
@ -3,10 +3,10 @@ import frappe
|
||||||
def get_doctype_fields(doctype):
|
def get_doctype_fields(doctype):
|
||||||
meta = frappe.get_meta(doctype)
|
meta = frappe.get_meta(doctype)
|
||||||
fields = []
|
fields = []
|
||||||
# Получаем все int-поля
|
# Получаем все числовые поля
|
||||||
for field in meta.fields:
|
for field in meta.fields:
|
||||||
if field.fieldtype in ["Int", "Float", "Currency"]:
|
if field.fieldtype in ["Int", "Float", "Currency"]:
|
||||||
fields.append({"fieldname": field.fieldname, "label": field.label})
|
fields.append({"fieldname": field.fieldname, "label": field.label, "fieldtype": field.fieldtype})
|
||||||
# Проверяем таблицы внутри DocType (например, items в Sales Invoice)
|
# Проверяем таблицы внутри DocType (например, items в Sales Invoice)
|
||||||
for child in meta.fields:
|
for child in meta.fields:
|
||||||
if child.fieldtype == "Table":
|
if child.fieldtype == "Table":
|
||||||
|
|
@ -14,14 +14,15 @@ def get_doctype_fields(doctype):
|
||||||
for sub_field in child_meta.fields:
|
for sub_field in child_meta.fields:
|
||||||
if sub_field.fieldtype in ["Int", "Float", "Currency"]:
|
if sub_field.fieldtype in ["Int", "Float", "Currency"]:
|
||||||
fields.append({
|
fields.append({
|
||||||
"fieldname": f"{child.fieldname}{sub_field.fieldname}",
|
"fieldname": f"{child.fieldname}_{sub_field.fieldname}",
|
||||||
"label": f"{child.label} → {sub_field.label}"
|
"label": f"{child.label} → {sub_field.label}",
|
||||||
|
"fieldtype": sub_field.fieldtype
|
||||||
})
|
})
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_doctype_fields(doctype):
|
def get_all_doctype_fields(doctype):
|
||||||
"""Получение отфильтрованных полей DocType без служебных полей"""
|
"""Получение отфильтрованных полей DocType включая расширенные типы для фильтров"""
|
||||||
meta = frappe.get_meta(doctype)
|
meta = frappe.get_meta(doctype)
|
||||||
fields = []
|
fields = []
|
||||||
|
|
||||||
|
|
@ -29,18 +30,46 @@ def get_all_doctype_fields(doctype):
|
||||||
excluded_types = [
|
excluded_types = [
|
||||||
"Tab Break", "Column Break", "Button", "Section Break", "Column Break",
|
"Tab Break", "Column Break", "Button", "Section Break", "Column Break",
|
||||||
"HTML", "Table", "Attach", "Attach Image", "Code", "Text Editor", "Image",
|
"HTML", "Table", "Attach", "Attach Image", "Code", "Text Editor", "Image",
|
||||||
"Read Only", "Heading", "Fold", "Table MultiSelect"
|
"Heading", "Fold", "Table MultiSelect"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Получаем все поля, которые не входят в исключенные типы
|
# Получаем все поля, которые не входят в исключенные типы
|
||||||
for field in meta.fields:
|
for field in meta.fields:
|
||||||
if field.fieldname and field.fieldtype not in excluded_types:
|
if field.fieldname and field.fieldtype not in excluded_types:
|
||||||
fields.append({
|
field_data = {
|
||||||
"fieldname": field.fieldname,
|
"fieldname": field.fieldname,
|
||||||
"label": field.label or field.fieldname,
|
"label": field.label or field.fieldname,
|
||||||
"fieldtype": field.fieldtype
|
"fieldtype": field.fieldtype
|
||||||
})
|
}
|
||||||
|
|
||||||
|
# Добавляем опции для полей типа Select и Link
|
||||||
|
if field.fieldtype in ["Select", "Link"] and field.options:
|
||||||
|
field_data["options"] = field.options
|
||||||
|
|
||||||
|
fields.append(field_data)
|
||||||
|
|
||||||
# Мы не добавляем поля из таблиц, так как они были исключены из списка
|
return fields
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def on_trash(doc, method=None):
|
||||||
|
"""Удаляет клиентские скрипты, созданные для DocType при удалении Formula Editor"""
|
||||||
|
if not doc.target_doctype:
|
||||||
|
return
|
||||||
|
|
||||||
return fields
|
# Ищем клиентские скрипты, созданные для целевого DocType
|
||||||
|
client_scripts = frappe.get_all(
|
||||||
|
"Client Script",
|
||||||
|
filters={
|
||||||
|
"dt": doc.target_doctype,
|
||||||
|
"name": ["like", "Formula_Editor_Script_for_%"]
|
||||||
|
},
|
||||||
|
fields=["name"]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Удаляем найденные скрипты
|
||||||
|
for script in client_scripts:
|
||||||
|
try:
|
||||||
|
frappe.delete_doc("Client Script", script.name, force=True)
|
||||||
|
frappe.db.commit()
|
||||||
|
except Exception as e:
|
||||||
|
frappe.log_error(f"Не удалось удалить клиентский скрипт {script.name}: {str(e)}")
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -140,13 +140,11 @@ app_license = "unlicense"
|
||||||
# ---------------
|
# ---------------
|
||||||
# Hook on document methods and events
|
# Hook on document methods and events
|
||||||
|
|
||||||
# doc_events = {
|
doc_events = {
|
||||||
# "*": {
|
"Formula Editor": {
|
||||||
# "on_update": "method",
|
"on_trash": "formula_editor.api.on_trash"
|
||||||
# "on_cancel": "method",
|
}
|
||||||
# "on_trash": "method"
|
}
|
||||||
# }
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Scheduled Tasks
|
# Scheduled Tasks
|
||||||
# ---------------
|
# ---------------
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue