monkey patched asset categories
This commit is contained in:
parent
7db5238874
commit
22d22f4529
|
|
@ -60,6 +60,54 @@ def get_account_by_name(account_name, company):
|
|||
return account
|
||||
|
||||
|
||||
def create_asset_categories_on_company_update(doc, method):
|
||||
"""
|
||||
Автоматически создает категории активов при создании компании.
|
||||
Вызывается через doc_events на Company.on_update.
|
||||
|
||||
Это стандартный паттерн ERPNext (как создаются Warehouses, Departments, Cost Centers).
|
||||
|
||||
Args:
|
||||
doc: Company document
|
||||
method: "on_update"
|
||||
"""
|
||||
company_name = doc.name
|
||||
|
||||
# Идемпотентность: проверяем, есть ли уже системные категории
|
||||
system_categories = get_system_asset_categories()
|
||||
|
||||
# Проверяем первую категорию из списка
|
||||
if frappe.db.exists("Asset Category", {"asset_category_name": system_categories[0]}):
|
||||
# Категории уже созданы (они создаются для всех компаний сразу)
|
||||
frappe.log_error(
|
||||
f"Asset categories already exist, skipping creation\nCompany: {company_name}\nFirst category found: {system_categories[0]}",
|
||||
"AC Skip Existing"
|
||||
)
|
||||
return
|
||||
|
||||
# Логируем начало создания
|
||||
frappe.log_error(
|
||||
f"Creating asset categories automatically\nTriggered by: Company.on_update\nCompany: {company_name}",
|
||||
"AC Auto Create"
|
||||
)
|
||||
|
||||
try:
|
||||
# Создаем категории
|
||||
_create_categories_for_company(company_name)
|
||||
|
||||
frappe.log_error(
|
||||
f"Asset categories created successfully\nCompany: {company_name}\nCategories: {len(system_categories)}",
|
||||
"AC Created"
|
||||
)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
frappe.log_error(
|
||||
f"Failed to create asset categories\nCompany: {company_name}\nError: {str(e)}\n\nTraceback:\n{traceback.format_exc()}",
|
||||
"AC Create Failed"
|
||||
)
|
||||
# Не пробрасываем исключение - не блокируем создание компании
|
||||
|
||||
|
||||
def create_asset_categories_for_company(company_name):
|
||||
"""
|
||||
Создает категории активов для конкретной компании.
|
||||
|
|
|
|||
|
|
@ -88,12 +88,19 @@ def diagnose():
|
|||
print(" Логи не найдены")
|
||||
|
||||
# 5. Проверка хука
|
||||
print("\n5. Проверка хука setup_wizard_complete:")
|
||||
hooks = frappe.get_hooks("setup_wizard_complete")
|
||||
if hooks:
|
||||
print(f" ✓ Хук зарегистрирован: {hooks}")
|
||||
print("\n5. Проверка doc_events на Company:")
|
||||
company_events = frappe.get_hooks("doc_events", {}).get("Company", {})
|
||||
on_update_hooks = company_events.get("on_update", [])
|
||||
|
||||
if on_update_hooks:
|
||||
print(f" ✓ Company.on_update хуки зарегистрированы:")
|
||||
if isinstance(on_update_hooks, str):
|
||||
on_update_hooks = [on_update_hooks]
|
||||
for hook in on_update_hooks:
|
||||
status = "✓" if "asset_categories" in hook.lower() else " "
|
||||
print(f" {status} {hook}")
|
||||
else:
|
||||
print(" ✗ Хук НЕ зарегистрирован!")
|
||||
print(" ✗ Company.on_update хуки НЕ зарегистрированы!")
|
||||
|
||||
# 6. Проверка фоновых задач
|
||||
print("\n6. Проверка фоновых задач:")
|
||||
|
|
@ -160,18 +167,20 @@ def force_create():
|
|||
|
||||
|
||||
def test_hook():
|
||||
"""Тестирует вызов хука setup_wizard_complete напрямую"""
|
||||
"""Тестирует вызов Company.on_update хука напрямую"""
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("ТЕСТ ХУКА setup_wizard_complete")
|
||||
print("ТЕСТ ХУКА Company.on_update")
|
||||
print("=" * 80 + "\n")
|
||||
|
||||
# Проверяем, что хук зарегистрирован
|
||||
hooks = frappe.get_hooks("setup_wizard_complete")
|
||||
print(f"Зарегистрированные хуки: {hooks}\n")
|
||||
company_events = frappe.get_hooks("doc_events", {}).get("Company", {})
|
||||
on_update_hooks = company_events.get("on_update", [])
|
||||
|
||||
if not hooks:
|
||||
print("✗ Хук НЕ зарегистрирован в hooks.py!")
|
||||
print(f"Зарегистрированные Company.on_update хуки: {on_update_hooks}\n")
|
||||
|
||||
if not on_update_hooks:
|
||||
print("✗ Company.on_update хук НЕ зарегистрирован в hooks.py!")
|
||||
return
|
||||
|
||||
# Получаем первую компанию
|
||||
|
|
@ -183,27 +192,22 @@ def test_hook():
|
|||
company_name = companies[0].name
|
||||
print(f"Компания найдена: {company_name}\n")
|
||||
|
||||
# Вызываем хук напрямую с тестовыми аргументами
|
||||
# Получаем Company document
|
||||
print("Загружаем Company document...\n")
|
||||
company_doc = frappe.get_doc("Company", company_name)
|
||||
|
||||
# Вызываем хук напрямую
|
||||
print("Вызываем хук напрямую...\n")
|
||||
|
||||
try:
|
||||
from jey_erp.setup.setup_wizard_handler import setup_wizard_complete_handler
|
||||
from jey_erp.custom.create_asset_categories import create_asset_categories_on_company_update
|
||||
|
||||
test_args = {
|
||||
"company_name": company_name,
|
||||
"country": "Test",
|
||||
"currency": "AZN"
|
||||
}
|
||||
|
||||
setup_wizard_complete_handler(test_args)
|
||||
create_asset_categories_on_company_update(company_doc, "on_update")
|
||||
|
||||
print("\n✓ Хук вызван успешно!")
|
||||
print("\nПроверьте Error Log для записей с префиксом 'AC'")
|
||||
print("Также проверьте фоновые задачи: bench --site <site> console")
|
||||
print(">>> from rq import Queue; import redis")
|
||||
print(">>> conn = redis.from_url('redis://localhost:11000')")
|
||||
print(">>> q = Queue('default', connection=conn)")
|
||||
print(">>> [job.func_name for job in q.jobs]")
|
||||
print("\nИли проверьте категории:")
|
||||
print(">>> frappe.db.count('Asset Category')")
|
||||
|
||||
except Exception as e:
|
||||
import traceback
|
||||
|
|
|
|||
|
|
@ -48,16 +48,18 @@ doc_events = {
|
|||
],
|
||||
"before_save": "jey_erp.custom.sales_order_vat.set_vat_fields_permissions"
|
||||
},
|
||||
"Company": {
|
||||
"on_update": "jey_erp.custom.create_asset_categories.create_asset_categories_on_company_update"
|
||||
},
|
||||
"Asset Category": {
|
||||
"validate": "jey_erp.custom.create_asset_categories.prevent_create_new_asset_categories",
|
||||
"on_trash": "jey_erp.custom.create_asset_categories.prevent_delete_system_asset_categories"
|
||||
}
|
||||
}
|
||||
|
||||
# Setup Wizard
|
||||
# ------------
|
||||
|
||||
setup_wizard_complete = "jey_erp.setup.setup_wizard_handler.setup_wizard_complete_handler"
|
||||
# REMOVED: setup_wizard_complete hook
|
||||
# Asset categories are now created automatically via Company.on_update event
|
||||
# setup_wizard_complete = "jey_erp.setup.setup_wizard_handler.setup_wizard_complete_handler"
|
||||
|
||||
after_migrate = "jey_erp.hooks.after_migrate_combined"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue