from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def fill_counters_checklists():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202503111402_fill_counters_checklists )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча fill_counters_checklists')
    start = 0
    step = 1000
    # заполняем счётчики чек-листов у задач (если счётчики не заполнены)
    for task in models.CmfTask.list(fields=['checklists', 'checklists_items_count', 'checklists_items_done_count'],
                                    filter=['checklists', 'EXISTS', []],
                                    slice=[start, start + step]):
        checklists_items_count = 0
        checklists_items_done_count = 0
        # получаем пункты чек-листов
        for item in models.CmfChecklistItem.list(fields='status', filter=['cache_task', '=', task]):
            if item.status in ['DONE', 'CANCEL']:
                checklists_items_done_count += 1
            checklists_items_count += 1
        if checklists_items_count or checklists_items_done_count:
            task.checklists_items_count = checklists_items_count
            task.checklists_items_done_count = checklists_items_done_count
            task.save(only_data=True)

        start += step

if __name__ == "__main__":
    fill_counters_checklists()
