taxes_az/taxes_az/fix_adi_universal.py

114 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import json
def fix_adi_fields(json_path, dry_run=True):
"""Переименовывает поле 'adi' в зависимости от типа"""
try:
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
if 'fields' not in data:
return False
# Ищем оба поля
adi_field = None
adi_turk_field = None
for idx, field in enumerate(data['fields']):
if 'fieldname' in field:
if field['fieldname'] == 'adi':
adi_field = (idx, field)
elif field['fieldname'] == 'adı':
adi_turk_field = (idx, field)
# Если оба поля найдены
if adi_field and adi_turk_field:
idx, field = adi_field
field_type = field.get('fieldtype', 'Unknown')
# Определяем новое имя в зависимости от типа
new_name = None
if field_type == 'Select':
new_name = 'ad_select'
elif field_type == 'Data':
new_name = 'ad_data'
else:
# Для других типов тоже переименовываем
new_name = f'ad_{field_type.lower()}'
print(f"\n📄 DocType: {data.get('name', 'Unknown')}")
print(f" Файл: {json_path}")
print(f" Найдено поле 'adi' с типом '{field_type}'")
print(f" ➜ Переименование: 'adi''{new_name}'")
if not dry_run:
data['fields'][idx]['fieldname'] = new_name
with open(json_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=1)
print(f" ✓ Изменения сохранены")
return True
return False
except Exception as e:
print(f"❌ Ошибка при обработке {json_path}: {e}")
return False
# Путь к приложению
app_path = '/home/frappe/frappe-bench/apps/taxes_az/taxes_az/taxes_az'
doctype_path = os.path.join(app_path, 'doctype')
if not os.path.exists(doctype_path):
print(f"❌ Путь не найден: {doctype_path}")
exit(1)
print("=" * 60)
print("РЕЖИМ ПРОСМОТРА (dry run)")
print("Поиск полей 'adi' рядом с 'adı'")
print("=" * 60)
fixed_count = 0
by_type = {}
for root, dirs, files in os.walk(doctype_path):
for file in files:
if file.endswith('.json'):
json_path = os.path.join(root, file)
if fix_adi_fields(json_path, dry_run=True):
fixed_count += 1
if fixed_count > 0:
print("\n" + "=" * 60)
print(f"Найдено {fixed_count} файлов для изменения")
print("=" * 60)
response = input("\n❓ Применить изменения? (yes/no): ")
if response.lower() in ['yes', 'y', 'да', 'д']:
print("\n" + "=" * 60)
print("ПРИМЕНЕНИЕ ИЗМЕНЕНИЙ")
print("=" * 60)
fixed_count = 0
for root, dirs, files in os.walk(doctype_path):
for file in files:
if file.endswith('.json'):
json_path = os.path.join(root, file)
if fix_adi_fields(json_path, dry_run=False):
fixed_count += 1
print("\n" + "=" * 60)
print(f"✓ Исправлено {fixed_count} файлов!")
print("=" * 60)
print("\n📋 Следующие шаги:")
print(" 1. bench clear-cache")
print(" 2. bench migrate")
print("\n или для переустановки приложения:")
print(" bench --site frontend reinstall-app taxes_az")
else:
print("\n❌ Отменено. Изменения не применены.")
else:
print("\n✓ Файлов для изменения не найдено.")