from patch.include import *
from sqlalchemy import or_


@app_context(commit=True)
def fix_gantt_task_project():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202402060841_fix_gantt_task_project )
    # На базе bcrm ~3000 задач с неверным проектом в гант-задаче
    # Время выполнения: 2.5 сек.
    """
    def get_batch():
        return (
            session.query(dp_gantt_task, dp_task)
            .filter(dp_gantt_task.task_id == dp_task.id)
            .filter(dp_task.parent_id.like('CmfProject%'))
            .filter(or_(dp_gantt_task.project_id != dp_task.parent_id, dp_gantt_task.project_id.is_(None)))
            .limit(1000)
            .all()
        )

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

    batch = get_batch()
    while batch:
        for gantt_task, task in batch:
            gantt_task.project_id = task.parent_id
        session.commit()
        batch = get_batch()


if __name__ == "__main__":
    fix_gantt_task_project()
