Esempio n. 1
0
def get_sequences_schedule_items(project_id, task_type_id, episode_id=None):
    """
    Return all asset type schedule items for given project. If no schedule item
    exists for a given asset type, it creates one.
    """
    if episode_id is not None:
        sequences = shots_service.get_sequences_for_episode(episode_id)
    else:
        sequences = shots_service.get_sequences_for_project(project_id)
    sequence_map = base_service.get_model_map_from_array(sequences)
    sequence_type = shots_service.get_sequence_type()

    query = (
        ScheduleItem.query.join(Entity, ScheduleItem.object_id == Entity.id)
        .filter(ScheduleItem.project_id == project_id)
        .filter(Entity.entity_type_id == sequence_type["id"])
        .filter(ScheduleItem.task_type_id == task_type_id)
    )
    if episode_id is not None:
        query = query.filter(Entity.parent_id == episode_id)
    existing_schedule_items = set(query.all())

    return get_entity_schedule_items(
        project_id,
        task_type_id,
        sequences,
        sequence_map,
        existing_schedule_items,
    )
Esempio n. 2
0
def get_schedule_items(project_id):
    """
    Return all schedule items for given project. If no schedule item exists
    for a given task type, it creates one.
    """
    task_types = tasks_service.get_task_types_for_project(project_id)
    task_type_map = base_service.get_model_map_from_array(task_types)
    schedule_items = set(
        ScheduleItem.query.filter_by(project_id=project_id).all())
    schedule_item_map = {
        str(schedule_item.task_type_id): schedule_item
        for schedule_item in schedule_items
    }

    new_schedule_items = set()
    schedule_item_to_remove = set()
    for schedule_item in schedule_items:
        if schedule_item.task_type_id is not None:
            if str(schedule_item.task_type_id) not in task_type_map:
                schedule_item_to_remove.add(schedule_item)

    for task_type in task_types:
        if task_type["id"] not in schedule_item_map:
            new_schedule_item = ScheduleItem.create(
                project_id=project_id,
                start_date=date.today(),
                end_date=date.today() + timedelta(days=1),
                task_type_id=task_type["id"])
            new_schedule_items.add(new_schedule_item)

    schedule_items = \
        schedule_items.union(new_schedule_items) - schedule_item_to_remove
    return sorted(
        [schedule_item.present() for schedule_item in schedule_items],
        key=lambda x: x["start_date"])
Esempio n. 3
0
 def test_get_model_map_from_array(self):
     models = [
         {"id": "1", "name": "first"},
         {"id": "2", "name": "second"},
         {"id": "3", "name": "third"}
     ]
     model_map = base_service.get_model_map_from_array(models)
     self.assertEqual(model_map["1"]["name"], "first")
     self.assertEqual(model_map["2"]["name"], "second")
     self.assertEqual(model_map["3"]["name"], "third")
Esempio n. 4
0
def get_asset_types_schedule_items(project_id, task_type_id):
    """
    Return all asset type schedule items for given project. If no schedule item
    exists for a given asset type, it creates one.
    """
    asset_types = assets_service.get_asset_types_for_project(project_id)
    asset_type_map = base_service.get_model_map_from_array(asset_types)
    existing_schedule_items = set(
        ScheduleItem.query.join(
            EntityType, ScheduleItem.object_id == EntityType.id).filter(
                ScheduleItem.project_id == project_id).filter(
                    ScheduleItem.task_type_id == task_type_id).all())
    return get_entity_schedule_items(
        project_id,
        task_type_id,
        asset_types,
        asset_type_map,
        existing_schedule_items,
    )
Esempio n. 5
0
def get_episodes_schedule_items(project_id, task_type_id):
    """
    Return all episode schedule items for given project. If no schedule item
    exists for a given asset type, it creates one.
    """
    episode_type = shots_service.get_episode_type()
    episodes = shots_service.get_episodes_for_project(project_id)
    episodes_map = base_service.get_model_map_from_array(episodes)
    existing_schedule_items = set(
        ScheduleItem.query.join(
            Entity, ScheduleItem.object_id == Entity.id).filter(
                ScheduleItem.project_id == project_id).filter(
                    Entity.entity_type_id == episode_type["id"]).filter(
                        ScheduleItem.task_type_id == task_type_id).all())
    return get_entity_schedule_items(
        project_id,
        task_type_id,
        episodes,
        episodes_map,
        existing_schedule_items,
    )