from patch.include import *
from tqdm import tqdm

from sqlalchemy import and_


@app_context(commit=True)
def fix_gantt_project():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202406041428_fix_gantt_project )
    BCRM ~ 2 сек
    """
    print('Запуск патча fix_gantt_project')

    def get_batch():
        return (
            session.query(dp_task, dp_gantt_task, dp_project)
            .join(dp_gantt_task, dp_task.op_gantt_task_id == dp_gantt_task.id)
            .join(dp_project, dp_task.parent_id == dp_project.id)
            .filter(
                and_(dp_task.gantt_project_id.isnot(None),
                     dp_task.gantt_project_id != dp_project.main_gantt_project_id)
            )
            .limit(1000)
            .all()
        )

    dp_task = models.CmfTask.dp_model
    dp_gantt_task = models.CmfGanttTask.dp_model
    dp_project = models.CmfProject.dp_model
    session = models.CmfTask.dp.data_driver.Session()

    while True:
        batch = get_batch()

        if not batch:
            break

        for task, gantt_task, project in batch:
            task.gantt_project_id = project.main_gantt_project_id
            gantt_task.gantt_project_id = project.main_gantt_project_id

        session.commit()

if __name__ == "__main__":
    fix_gantt_project()
