added script for subtab field
This commit is contained in:
parent
8d3e6aa467
commit
71ded58b0a
|
|
@ -247,7 +247,7 @@ fixtures = [
|
|||
]
|
||||
|
||||
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"
|
||||
|
|
|
|||
|
|
@ -1,30 +1,79 @@
|
|||
import frappe
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
from frappe.utils import get_bench_path
|
||||
|
||||
def execute():
|
||||
# Проверяем, существует ли такое свойство в Custom Field
|
||||
if frappe.db.exists("Custom Field", {"fieldname": "js_parent_subtab", "dt": "DocField"}):
|
||||
frappe.msgprint("Свойство 'js_parent_subtab' уже существует как Custom Field. Пропускаем создание.")
|
||||
return
|
||||
def add_field_to_docfield_json():
|
||||
"""
|
||||
Добавляет поле js_parent_subtab в JSON-определение DocField,
|
||||
используя автоматическое определение пути к bench
|
||||
"""
|
||||
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("""
|
||||
SELECT name, fieldname, label, parent
|
||||
FROM `tabDocField`
|
||||
WHERE fieldname = 'js_parent_subtab'
|
||||
""", as_dict=True)
|
||||
if field_details:
|
||||
frappe.msgprint(f"Свойство 'js_parent_subtab' уже существует в DocField. Пропускаем создание. Детали: {field_details}")
|
||||
return
|
||||
# Проверяем, существует ли файл
|
||||
if not os.path.exists(docfield_json_path):
|
||||
print(f"Ошибка: Файл {docfield_json_path} не найден.")
|
||||
return False
|
||||
|
||||
# Создаём новое свойство
|
||||
frappe.get_doc({
|
||||
"doctype": "Custom Field",
|
||||
"dt": "DocField", # Указываем DocType, для которого добавляем
|
||||
"fieldname": "js_parent_subtab",
|
||||
"label": "JS Parent Subtab",
|
||||
"fieldtype": "Data",
|
||||
"insert_after": "reqd", # Вставляем после поля "Mandatory"
|
||||
"description": "Укажите имя родительского таба"
|
||||
}).insert(ignore_permissions=True)
|
||||
# Создаем резервную копию файла
|
||||
backup_path = docfield_json_path + '.bak.' + str(int(os.path.getmtime(docfield_json_path)))
|
||||
shutil.copy2(docfield_json_path, backup_path)
|
||||
print(f"Создана резервная копия: {backup_path}")
|
||||
|
||||
frappe.msgprint("Поле 'js_parent_subtab' успешно добавлено в настройки вкладок.")
|
||||
# Новое поле, которое нужно добавить
|
||||
new_field = {
|
||||
"fieldname": "js_parent_subtab",
|
||||
"fieldtype": "Data",
|
||||
"label": "JS Parent Subtab",
|
||||
"description": "Укажите имя родительского таба",
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"in_preview": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"permlevel": 0,
|
||||
"translatable": 1
|
||||
}
|
||||
|
||||
# Загружаем 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