from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def set_system_true_active_sprints():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202411140929_set_system_true_active_sprints )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча set_system_true_active_sprints')
    counter_pr = 0
    step_pr = 300
    while True:
        projects = models.CmfProject.list(slice=[counter_pr, counter_pr + step_pr],
                                          filter=['logic_prefix', '!=', 'project.simple-board'],
                                          fields=['logic_prefix'])
        # simple-board не берём, т.к. в CmfProject.scaffold для этого logic_prefix не устанавливается system = True
        if not projects:
            break

        for project in tqdm(projects):
            counter_board = 0
            step_board = 100
            while True:
                boards = models.CmfKanbanBoard.list(slice=[counter_board, counter_board + step_board],
                                                    filter=['tree_parent', '=', project],
                                                    fields=['system', 'name'])
                if not boards:
                    break

                if any(board.system for board in boards):
                    break

                is_kanban = project.logic_prefix in ('project.kanban', 'project.servicedesk')
                board_name = 'Доска Kanban' if is_kanban else 'Активные спринты'
                target_boards = [board for board in boards if board.name == board_name]

                if target_boards:
                    target_board = target_boards[0]
                    target_board.system = True
                    target_board.save()
                    break

                counter_board += step_board

        counter_pr += step_pr

        if not projects:
            break


if __name__ == "__main__":
    set_system_true_active_sprints()
