from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def patch():
    """
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    sys_types =[
"tasks",
"approved",
"archive",
"pfeed",
"trash",
"disk",
"chat",
"epic",
"sprint",
"release",
"roadmap",
]
    leafs = []
    branch_list = {}
    for classname in ['CmfRole', 'CmfOrgUnit',
         'CmfList','CmfProject', 'CmfFolder',
         'CmfActiveEntityFilter', 'CmfDocument','CmfRoadmap']:
        leafs=vars(models)[classname].list(filter=['tree_parent_id', '!=', None],
            fields=['tree_parent', 'sys_type',
             "parent.*"
            ])
        for leaf in leafs:
            if 'sys_type' in vars(leaf) \
                and leaf.sys_type in sys_types:
                show_field=f'show_{leaf.sys_type}'
                if leaf.parent.value and leaf.parent.value.__dict__[show_field] == False:
                    leaf.tree_hidden=True
                    leaf.save(only_data=True)
            if leaf.tree_parent:
                branch_list[f'{leaf.tree_parent_id}'] = leaf.tree_parent
    for branch, v in branch_list.items():
           # print(branch , v)
           v.tree_node_is_branch = True
           v.save(only_data=True)


if __name__ == "__main__":
    patch()
