added script for subtab field
This commit is contained in:
parent
8d3e6aa467
commit
71ded58b0a
|
|
@ -247,7 +247,7 @@ fixtures = [
|
||||||
]
|
]
|
||||||
|
|
||||||
after_migrate = [
|
after_migrate = [
|
||||||
"custom_subtabs.patches.add_parent_field.execute"
|
"custom_subtabs.patches.add_parent_field.add_field_to_docfield_json"
|
||||||
]
|
]
|
||||||
|
|
||||||
boot_session = "custom_subtabs.custom_subtabs.boot_session_handler"
|
boot_session = "custom_subtabs.custom_subtabs.boot_session_handler"
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,79 @@
|
||||||
import frappe
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
from frappe.utils import get_bench_path
|
||||||
|
|
||||||
def execute():
|
def add_field_to_docfield_json():
|
||||||
# Проверяем, существует ли такое свойство в Custom Field
|
"""
|
||||||
if frappe.db.exists("Custom Field", {"fieldname": "js_parent_subtab", "dt": "DocField"}):
|
Добавляет поле js_parent_subtab в JSON-определение DocField,
|
||||||
frappe.msgprint("Свойство 'js_parent_subtab' уже существует как Custom Field. Пропускаем создание.")
|
используя автоматическое определение пути к bench
|
||||||
return
|
"""
|
||||||
|
try:
|
||||||
|
# Автоматически определяем путь к bench и к файлу docfield.json
|
||||||
|
bench_path = get_bench_path()
|
||||||
|
docfield_json_path = os.path.join(bench_path, "apps", "frappe", "frappe", "core", "doctype", "docfield", "docfield.json")
|
||||||
|
|
||||||
# Проверяем, существует ли такое свойство в DocField
|
# Проверяем, существует ли файл
|
||||||
field_details = frappe.db.sql("""
|
if not os.path.exists(docfield_json_path):
|
||||||
SELECT name, fieldname, label, parent
|
print(f"Ошибка: Файл {docfield_json_path} не найден.")
|
||||||
FROM `tabDocField`
|
return False
|
||||||
WHERE fieldname = 'js_parent_subtab'
|
|
||||||
""", as_dict=True)
|
|
||||||
if field_details:
|
|
||||||
frappe.msgprint(f"Свойство 'js_parent_subtab' уже существует в DocField. Пропускаем создание. Детали: {field_details}")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Создаём новое свойство
|
# Создаем резервную копию файла
|
||||||
frappe.get_doc({
|
backup_path = docfield_json_path + '.bak.' + str(int(os.path.getmtime(docfield_json_path)))
|
||||||
"doctype": "Custom Field",
|
shutil.copy2(docfield_json_path, backup_path)
|
||||||
"dt": "DocField", # Указываем DocType, для которого добавляем
|
print(f"Создана резервная копия: {backup_path}")
|
||||||
|
|
||||||
|
# Новое поле, которое нужно добавить
|
||||||
|
new_field = {
|
||||||
"fieldname": "js_parent_subtab",
|
"fieldname": "js_parent_subtab",
|
||||||
"label": "JS Parent Subtab",
|
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"insert_after": "reqd", # Вставляем после поля "Mandatory"
|
"label": "JS Parent Subtab",
|
||||||
"description": "Укажите имя родительского таба"
|
"description": "Укажите имя родительского таба",
|
||||||
}).insert(ignore_permissions=True)
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"in_preview": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"translatable": 1
|
||||||
|
}
|
||||||
|
|
||||||
frappe.msgprint("Поле 'js_parent_subtab' успешно добавлено в настройки вкладок.")
|
# Загружаем JSON-файл
|
||||||
|
with open(docfield_json_path, 'r', encoding='utf-8') as file:
|
||||||
|
docfield_def = json.load(file)
|
||||||
|
|
||||||
|
# Проверяем, существует ли уже такое поле
|
||||||
|
for field in docfield_def.get('fields', []):
|
||||||
|
if field.get('fieldname') == 'js_parent_subtab':
|
||||||
|
print("⚠️ Поле 'js_parent_subtab' уже существует в определении DocField.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Добавляем новое поле в список полей после поля 'reqd'
|
||||||
|
insert_position = None
|
||||||
|
for i, field in enumerate(docfield_def.get('fields', [])):
|
||||||
|
if field.get('fieldname') == 'reqd':
|
||||||
|
insert_position = i + 1
|
||||||
|
break
|
||||||
|
|
||||||
|
if insert_position is not None:
|
||||||
|
docfield_def['fields'].insert(insert_position, new_field)
|
||||||
|
else:
|
||||||
|
# Если не нашли поле 'reqd', добавляем в конец
|
||||||
|
docfield_def['fields'].append(new_field)
|
||||||
|
|
||||||
|
# Записываем обновленный JSON обратно в файл
|
||||||
|
with open(docfield_json_path, 'w', encoding='utf-8') as file:
|
||||||
|
json.dump(docfield_def, file, indent=1, ensure_ascii=False)
|
||||||
|
|
||||||
|
print("✅ Поле 'js_parent_subtab' успешно добавлено в docfield.json")
|
||||||
|
print("Не забудьте выполнить 'bench migrate' для применения изменений")
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Произошла ошибка: {str(e)}")
|
||||||
|
print("Попробуйте запустить скрипт с использованием bench:")
|
||||||
|
print("bench execute path.to.script.add_field_to_docfield_json")
|
||||||
|
return False
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
add_field_to_docfield_json()
|
||||||
Loading…
Reference in New Issue