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✓ Файлов для изменения не найдено.")