from patch.include import *
from tqdm import tqdm


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

        if not obj_list:
            break

        for obj in tqdm(obj_list):
            # https://bcrm.carbonsoft.ru/project/Task/SD-1625010126
            if not obj.company:
                if obj.cmf_owner and obj.cmf_owner.company:
                    print(f'set task({obj}).company by owner to {obj.cmf_owner.company}')
                    obj.company = obj.cmf_owner.company
                elif obj.cmf_author and obj.cmf_author.company:
                    print(f'set task({obj}).company by author to {obj.cmf_author.company}')
                    obj.company = obj.cmf_author.company
                else:
                    print(f'cannot set task({obj}).company, task owner {obj.cmf_owner}, task author {obj.cmf_owner}')
            if obj.company:
                obj.share_companies = [obj.company]
            obj.save(only_data=True)


if __name__ == "__main__":
    set_share_companies()
