def get_local_missions(self, project: scoring_base.ScoringProject) \ -> association_pb2.VolunteeringMissions: """Get the civic service missions for the user departement""" departement_id = project.details.city.departement_id if not departement_id: return association_pb2.VolunteeringMissions() try: return self._db.get_collection(project.database)[departement_id] except KeyError: return association_pb2.VolunteeringMissions()
def volunteering_missions(self, project: scoring_base.ScoringProject) \ -> association_pb2.VolunteeringMissions: """Return a list of volunteering mission close to the project.""" departement_id = project.details.city.departement_id # Get data from MongoDB. volunteering_missions_dict: dict[str, association_pb2.VolunteeringMissions] = \ collections.defaultdict(association_pb2.VolunteeringMissions) collection = project.database.volunteering_missions for record in collection.find({'_id': {'$in': [departement_id, '']}}): record_id = record.pop('_id') proto.parse_from_mongo(record, volunteering_missions_dict[record_id]) # TODO(pascal): First get missions from target city if any. # Merge data. project_missions = association_pb2.VolunteeringMissions() for scope in [departement_id, '']: for mission in volunteering_missions_dict[scope].missions: mission.is_available_everywhere = not scope project_missions.missions.add().CopyFrom(mission) return project_missions