from patch.include import *
from tqdm import tqdm
from cmf.system_data import scaffold_logic_type


@app_context(commit=True)
def patch():
    with cmfutil.disable_acl(), cmfutil.disable_notify():
        scaffold_logic_type()
        for project in tqdm(models.CmfProject.list(main_gantt_project=None, fields=['name'])):
            # По каждому проекту создаем ему main_gantt_project и каждому Гант-проекту оперативный план
            gantt_project = models.CmfTask()
            gantt_project.logic_type = models.CmfLogicType.get(code='task.gantt_project:default')
            gantt_project.parent = project
            gantt_project.name = f"Гант {project.name}"
            gantt_project.save()

            project.main_gantt_project = gantt_project
            project.save(only_data=True)

            for task in models.CmfTask.list(parent=project, gantt_project=None, fields=['parent_task']):
                task.gantt_project = gantt_project
                task.save(only_data=True, notify=False, emit=False)
            # Создаем Baseline внутри сейва Гант-проекта
            # Тут повторно ему вызываем скаффолд
            op_gantt_baseline = models.CmfGanttBaseline.get(is_operate=True, parent=gantt_project)
            op_gantt_baseline.scaffold_gantt_tasks()

            # op_gantt_baseline = models.CmfGanttBaseline()
            # op_gantt_baseline.parent = gantt_project
            # op_gantt_baseline.is_operate = True
            # op_gantt_baseline.save()
            commit_all_ds()


if __name__ == "__main__":
    patch()
