from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def fix_has_child_tasks():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202507281356_fix_has_child_tasks )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча fix_has_child_tasks')

    count = 0
    with cmfutil.disable_acl(), cmfutil.disable_notify():
        tasks = models.CmfTask.list(
            filter=[
                'OR',
                [['has_child_tasks', '=', True], ['child_tasks', 'NOT EXISTS', '']],
                [['has_child_tasks', '=', False], ['child_tasks', 'EXISTS', '']]
            ],
            fields=['has_child_tasks']
        )
        for task in tqdm(tasks):
            count += 1
            task.has_child_tasks = not task.has_child_tasks

            if task.has_child_tasks.is_changed:
                task.save(only_data=True, emit=False, notify=False)

            if count % 100 == 0:
                cmf_commit()

if __name__ == "__main__":
    fix_has_child_tasks()
