bfd67241c4
- ad_connector: restrict provisioning to office employees (user_location_type='office') in sync service, signals and command; disable AD account on transfer out of office, re-enable on return - ad_connector: /ad-mapping/ page (staff only) — match office employees to AD accounts with suggestions by email/login/full name, link/unlink/ create actions, list of unmatched domain accounts; sidebar nav item - core: auto-rebuild treenode Directory tree (_path/_depth) after import-export imports and post_migrate; "rebuild tree" button in DirectoryAdmin and rebuild_directory_tree management command Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
import logging
|
|
|
|
from django.apps import AppConfig
|
|
from django.db.models.signals import post_migrate
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def rebuild_directory_tree(sender, **kwargs):
|
|
"""
|
|
Перестройка дерева справочников после миграций.
|
|
|
|
Data-миграции работают с historical-моделями и создают записи Directory
|
|
в обход treenode-логики — _path/_depth остаются пустыми и дерево в админке
|
|
ломается. Пересчитываем после каждого migrate.
|
|
"""
|
|
try:
|
|
from core.models import Directory
|
|
Directory.update_tree()
|
|
logger.info('Дерево справочников перестроено после migrate')
|
|
except Exception as e:
|
|
# Никогда не роняем migrate из-за перестройки дерева
|
|
logger.error(f'Не удалось перестроить дерево справочников: {e}')
|
|
|
|
|
|
class CoreConfig(AppConfig):
|
|
name = 'core'
|
|
|
|
def ready(self):
|
|
post_migrate.connect(rebuild_directory_tree, sender=self)
|