from patch.include import *
from tqdm import tqdm

from sqlalchemy import or_, and_


@app_context(commit=True)
def fix_gantt_task_no_project():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202404050853_fix_gantt_task_no_project )
        ...
    """
    print('Запуск патча fix_gantt_task_project')
    def get_batch():
        return (
            session.query(dp_gantt_task, dp_task)
            .join(dp_task, dp_gantt_task.id == dp_task.op_gantt_task_id)
            .filter(
                and_(dp_gantt_task.project_id.is_(None),
                     dp_task.project_id.isnot(None))
            )
            .limit(1000)
            .all()
        )

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

    while True:
        batch = get_batch()

        if not batch:
            break

        for gantt_task, task in batch:
            gantt_task.project_id = task.project_id

        session.commit()

if __name__ == "__main__":
    fix_gantt_task_no_project()
