removed (to az locale) item group rename
This commit is contained in:
parent
64096d7c5a
commit
24a48a9bc7
|
|
@ -39,8 +39,6 @@ def after_migrate_combined():
|
|||
|
||||
from jey_erp.custom_fields import create_custom_fields
|
||||
create_custom_fields()
|
||||
from jey_erp.overrides.custom_install import rename_item_groups
|
||||
rename_item_groups()
|
||||
|
||||
|
||||
fixtures = [
|
||||
|
|
|
|||
|
|
@ -1,172 +0,0 @@
|
|||
import frappe
|
||||
import urllib.parse
|
||||
|
||||
def rename_item_groups():
|
||||
"""
|
||||
Переименовывает группы номенклатур: и названия, и ID на азербайджанский
|
||||
"""
|
||||
|
||||
# Маппинг: старый_ID -> {"new_name": "название", "new_id": "тоже_название"}
|
||||
translation_map = {
|
||||
"All Item Groups": {
|
||||
"new_name": "Bütün Məhsul Qrupları",
|
||||
},
|
||||
"Products": {
|
||||
"new_name": "Məhsullar",
|
||||
},
|
||||
"Raw Material": {
|
||||
"new_name": "Xammal",
|
||||
},
|
||||
"Services": {
|
||||
"new_name": "Xidmətlər",
|
||||
},
|
||||
"Sub Assemblies": {
|
||||
"new_name": "Alt Montajlar",
|
||||
},
|
||||
"Consumable": {
|
||||
"new_name": "İstehlak Malları",
|
||||
}
|
||||
}
|
||||
|
||||
# ID будет точно таким же, как и название (на азербайджанском)
|
||||
for key, value in translation_map.items():
|
||||
new_name = value["new_name"]
|
||||
# ID = название (без URL-encoding)
|
||||
value["new_id"] = new_name
|
||||
|
||||
try:
|
||||
updated_count = 0
|
||||
renamed_count = 0
|
||||
|
||||
frappe.flags.ignore_permissions = True
|
||||
frappe.flags.ignore_links = True
|
||||
frappe.flags.ignore_validate_update_after_submit = True
|
||||
|
||||
# Получаем все группы, отсортированные по иерархии
|
||||
all_groups = frappe.get_all(
|
||||
"Item Group",
|
||||
fields=["name", "item_group_name", "parent_item_group", "lft", "rgt"],
|
||||
order_by="lft" # От корневых к дочерним
|
||||
)
|
||||
|
||||
# Создаем маппинг для обновления родительских ссылок
|
||||
id_mapping = {}
|
||||
groups_to_process = []
|
||||
|
||||
# Собираем информацию о группах для переименования
|
||||
for old_id, translation in translation_map.items():
|
||||
new_name = translation["new_name"]
|
||||
new_id = translation["new_id"]
|
||||
|
||||
# Находим группу по текущему ID
|
||||
existing_group = None
|
||||
for group in all_groups:
|
||||
if group.name == old_id:
|
||||
existing_group = group
|
||||
break
|
||||
|
||||
if existing_group:
|
||||
id_mapping[old_id] = new_id
|
||||
groups_to_process.append({
|
||||
"old_id": old_id,
|
||||
"new_id": new_id,
|
||||
"new_name": new_name,
|
||||
"lft": existing_group.lft,
|
||||
"current_parent": existing_group.parent_item_group
|
||||
})
|
||||
|
||||
# Обрабатываем группы в правильном порядке (от корневых к дочерним)
|
||||
for group_info in sorted(groups_to_process, key=lambda x: x["lft"]):
|
||||
old_id = group_info["old_id"]
|
||||
new_id = group_info["new_id"]
|
||||
new_name = group_info["new_name"]
|
||||
current_parent = group_info["current_parent"]
|
||||
|
||||
# Проверяем, не существует ли уже группа с новым ID
|
||||
if frappe.db.exists("Item Group", new_id):
|
||||
continue
|
||||
|
||||
try:
|
||||
# Обновляем родительскую ссылку если родитель тоже переименовывается
|
||||
updated_parent = current_parent
|
||||
if current_parent and current_parent in id_mapping:
|
||||
updated_parent = id_mapping[current_parent]
|
||||
|
||||
# Сначала обновляем название
|
||||
frappe.db.sql("""
|
||||
UPDATE `tabItem Group`
|
||||
SET item_group_name = %s
|
||||
WHERE name = %s
|
||||
""", (new_name, old_id))
|
||||
|
||||
updated_count += 1
|
||||
|
||||
# Теперь переименовываем ID
|
||||
if old_id != new_id:
|
||||
# Используем низкоуровневые SQL запросы для избежания проверок
|
||||
|
||||
# 1. Обновляем основную запись
|
||||
frappe.db.sql("""
|
||||
UPDATE `tabItem Group`
|
||||
SET name = %s
|
||||
WHERE name = %s
|
||||
""", (new_id, old_id))
|
||||
|
||||
# 2. Обновляем parent_item_group ссылки
|
||||
frappe.db.sql("""
|
||||
UPDATE `tabItem Group`
|
||||
SET parent_item_group = %s
|
||||
WHERE parent_item_group = %s
|
||||
""", (new_id, old_id))
|
||||
|
||||
# 3. Обновляем ссылки в товарах
|
||||
frappe.db.sql("""
|
||||
UPDATE `tabItem`
|
||||
SET item_group = %s
|
||||
WHERE item_group = %s
|
||||
""", (new_id, old_id))
|
||||
|
||||
# 4. Обновляем другие возможные ссылки
|
||||
other_tables = [
|
||||
("tabItem Default", "parent_item_group"),
|
||||
("tabPurchase Invoice Item", "item_group"),
|
||||
("tabSales Invoice Item", "item_group"),
|
||||
("tabDelivery Note Item", "item_group"),
|
||||
("tabPurchase Receipt Item", "item_group")
|
||||
]
|
||||
|
||||
for table, field in other_tables:
|
||||
if frappe.db.has_column(table, field):
|
||||
frappe.db.sql(f"""
|
||||
UPDATE `{table}`
|
||||
SET `{field}` = %s
|
||||
WHERE `{field}` = %s
|
||||
""", (new_id, old_id))
|
||||
|
||||
renamed_count += 1
|
||||
|
||||
except Exception as process_error:
|
||||
continue
|
||||
|
||||
# Сохраняем изменения
|
||||
frappe.db.commit()
|
||||
|
||||
# Очищаем кэш
|
||||
frappe.clear_cache()
|
||||
|
||||
# Перестраиваем дерево
|
||||
try:
|
||||
from frappe.utils.nestedset import rebuild_tree
|
||||
rebuild_tree("Item Group", "parent_item_group")
|
||||
except Exception as tree_error:
|
||||
pass
|
||||
|
||||
except Exception as e:
|
||||
frappe.log_error(f"URL-encoded Item Groups Error: {str(e)}")
|
||||
frappe.db.rollback()
|
||||
raise
|
||||
|
||||
finally:
|
||||
frappe.flags.ignore_permissions = False
|
||||
frappe.flags.ignore_links = False
|
||||
frappe.flags.ignore_validate_update_after_submit = False
|
||||
Loading…
Reference in New Issue