#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Исправление Classification Codes - заполнение поля code
"""
import frappe

def fix_codes():
	"""Исправление поля code"""

	print('\n🔧 Исправление Classification Codes...\n')

	# Получаем все записи
	codes = frappe.get_all('Classification code', fields=['name'])

	print(f'📊 Всего записей: {len(codes)}')

	fixed = 0
	for code_doc in codes:
		# Загружаем документ
		doc = frappe.get_doc('Classification code', code_doc.name)

		# Если code пустое, устанавливаем его равным name
		if not doc.code:
			doc.code = doc.name
			doc.save(ignore_permissions=True)
			fixed += 1

			if fixed % 20 == 0:
				print(f'  ✓ Исправлено {fixed}/{len(codes)}...')
				frappe.db.commit()

	frappe.db.commit()

	print(f'\n✅ Исправлено записей: {fixed}')

	# Проверка
	print('\n🔍 Проверка первых 5 записей:')
	print('='*100)
	codes = frappe.get_all('Classification code',
		fields=['name', 'code', 'name_az'],
		limit=5,
		order_by='code')

	for idx, c in enumerate(codes, 1):
		name_short = c.name_az[:60] + '...' if c.name_az and len(c.name_az) > 60 else (c.name_az or '')
		code_val = c.code or 'None'
		name_val = c.name or 'None'
		print(f'{idx}. ID: {name_val:10} | Code: {code_val:10} | Name: {name_short}')
	print('='*100)

if __name__ == '__main__':
	frappe.init(site='site1')
	frappe.connect()
	fix_codes()
	frappe.destroy()
