from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def set_current_sla_cycle():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202312051229_set_current_sla_cycle )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча set_current_sla_cycle')
    limit = 100
    start = 0
    while True:        
        obj_list = models.CmfTask.list(
            filter=['parent_logic_prefix', '=', 'project.servicedesk'],
            slice=[start, start + limit]
        )
        start += limit

        if not obj_list:
            break
        
        for obj in tqdm(obj_list):
            excluded_sla_id = []
            cycles_for_update = []
            
            cycles = models.CmfSDeskSlaCycle.list(
                fields=['start_time', 'current', 'sla_id'], 
                filter=['parent', '=', obj], 
                order_by=['-start_time']
            )
            for cycle in cycles:                
                if cycle.sla_id not in excluded_sla_id:
                    # первыми самые свежие циклы по времени (их исключаем)
                    excluded_sla_id.append(cycle.sla_id)
                else:
                    # если цикл уже есть, то это уже более старый неактивный
                    cycles_for_update.append(cycle)

            for cycle in cycles_for_update:
                cycle.current = False
                cycle.save(only_data=True)


if __name__ == "__main__":
    set_current_sla_cycle()
