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, )
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"])
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")
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, )
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, )