def get_team_as_dto(team_id: int, user_id: int) -> TeamDTO: team = TeamService.get_team_by_id(team_id) if team is None: raise NotFound() team_dto = TeamDetailsDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id if user_id != 0: if UserService.is_user_an_admin(user_id): team_dto.is_general_admin = True if OrganisationService.is_user_an_org_manager( team.organisation.id, user_id): team_dto.is_org_admin = True else: team_dto.is_general_admin = False team_dto.is_org_admin = False team_members = TeamService._get_team_members(team_id) for member in team_members: user = UserService.get_user_by_id(member.user_id) member_dto = TeamMembersDTO() member_dto.username = user.username member_dto.pictureUrl = user.picture_url member_dto.function = TeamMemberFunctions(member.function).name member_dto.picture_url = user.picture_url member_dto.active = member.active team_dto.members.append(member_dto) team_projects = TeamService.get_projects_by_team_id(team.id) for team_project in team_projects: project_team_dto = TeamProjectDTO() project_team_dto.project_name = team_project.name project_team_dto.project_id = team_project.project_id project_team_dto.role = TeamRoles(team_project.role).name team_dto.team_projects.append(project_team_dto) org_projects = OrganisationService.get_projects_by_organisation_id( team.organisation.id) for org_project in org_projects: org_project_dto = OrganisationProjectsDTO() org_project_dto.project_id = org_project.id org_project_dto.project_name = org_project.name team_dto.organisation_projects.append(org_project_dto) return team_dto
def as_dto_inside_org(self): """ Returns a dto for the team """ team_dto = OrganisationTeamsDTO() team_dto.team_id = self.id team_dto.name = self.name team_dto.description = self.description team_dto.invite_only = self.invite_only team_dto.members = self._get_team_members() team_dto.visibility = TeamVisibility(self.visibility).name return team_dto
def as_dto(self): """ Returns a dto for the team """ team_dto = TeamDTO() team_dto.team_id = self.id team_dto.description = self.description team_dto.invite_only = self.invite_only team_dto.members = self._get_team_members() team_dto.name = self.name team_dto.organisation = self.organisation.name team_dto.organisation_id = self.organisation.id team_dto.logo = self.organisation.logo team_dto.visibility = TeamVisibility(self.visibility).name return team_dto
def get_team_as_dto(team_id: int, user_id: int, abbreviated: bool) -> TeamDetailsDTO: team = TeamService.get_team_by_id(team_id) if team is None: raise NotFound() team_dto = TeamDetailsDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id team_dto.organisation_slug = team.organisation.slug if user_id != 0: if UserService.is_user_an_admin(user_id): team_dto.is_general_admin = True if OrganisationService.is_user_an_org_manager( team.organisation.id, user_id): team_dto.is_org_admin = True else: team_dto.is_general_admin = False team_dto.is_org_admin = False if abbreviated: return team_dto team_dto.members = [ team.as_dto_team_member(member) for member in team.members ] team_projects = TeamService.get_projects_by_team_id(team.id) team_dto.team_projects = [ team.as_dto_team_project(project) for project in team_projects ] return team_dto
def get_all_teams( user_id: int = None, team_name_filter: str = None, team_role_filter: str = None, member_filter: int = None, member_request_filter: int = None, manager_filter: int = None, organisation_filter: int = None, omit_members: bool = False, ) -> TeamsListDTO: query = db.session.query(Team) orgs_query = None is_admin = UserService.is_user_an_admin(user_id) if organisation_filter: orgs_query = query.filter( Team.organisation_id == organisation_filter) if manager_filter and not (manager_filter == user_id and is_admin): manager_teams = query.filter( TeamMembers.user_id == manager_filter, TeamMembers.active == True, # noqa TeamMembers.function == TeamMemberFunctions.MANAGER.value, Team.id == TeamMembers.team_id, ) manager_orgs_teams = query.filter( Team.organisation_id.in_([ org.id for org in OrganisationService.get_organisations( manager_filter) ])) query = manager_teams.union(manager_orgs_teams) if team_name_filter: query = query.filter(Team.name.ilike("%" + team_name_filter + "%"), ) if team_role_filter: try: role = TeamRoles[team_role_filter.upper()].value project_teams = (db.session.query(ProjectTeams).filter( ProjectTeams.role == role).subquery()) query = query.join(project_teams) except KeyError: pass if member_filter: team_member = (db.session.query(TeamMembers).filter( TeamMembers.user_id == member_filter, TeamMembers.active.is_(True)).subquery()) query = query.join(team_member) if member_request_filter: team_member = (db.session.query(TeamMembers).filter( TeamMembers.user_id == member_request_filter, TeamMembers.active.is_(False), ).subquery()) query = query.join(team_member) if orgs_query: query = query.union(orgs_query) teams_list_dto = TeamsListDTO() for team in query.all(): team_dto = TeamDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id team_dto.members = [] is_team_member = TeamService.is_user_an_active_team_member( team.id, user_id) # Skip if members are not included if not omit_members: team_members = team.members team_dto.members = [ team.as_dto_team_member(member) for member in team_members ] if team_dto.visibility == "PRIVATE" and not is_admin: if is_team_member: teams_list_dto.teams.append(team_dto) else: teams_list_dto.teams.append(team_dto) return teams_list_dto
def get_all_teams( user_id: int = None, team_name_filter: str = None, team_role_filter: str = None, member_filter: int = None, member_request_filter: int = None, manager_filter: int = None, organisation_filter: int = None, ) -> TeamsListDTO: query = db.session.query(Team).outerjoin(TeamMembers).outerjoin( ProjectTeams) orgs_query = None is_admin = UserService.is_user_an_admin(user_id) if organisation_filter: orgs_query = query.filter( Team.organisation_id.in_(organisation_filter)) if manager_filter and not (manager_filter == user_id and is_admin): query = query.filter( TeamMembers.user_id == manager_filter, TeamMembers.active == True, # noqa TeamMembers.function == TeamMemberFunctions.MANAGER.value, ) if team_name_filter: query = query.filter(Team.name.contains(team_name_filter)) if team_role_filter: try: role = TeamRoles[team_role_filter.upper()].value query = query.filter(ProjectTeams.role == role) except KeyError: pass if member_filter: query = query.filter( TeamMembers.user_id == member_filter, TeamMembers.active == True # noqa ) if member_request_filter: query = query.filter( TeamMembers.user_id == member_request_filter, TeamMembers.active == False, # noqa ) if orgs_query: query = query.union(orgs_query) teams_list_dto = TeamsListDTO() for team in query.all(): team_dto = TeamDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id team_dto.members = [] team_members = TeamService._get_team_members(team.id) is_team_manager = False is_team_member = False for member in team_members: user = UserService.get_user_by_id(member.user_id) member_dto = TeamMembersDTO() member_dto.username = user.username member_dto.function = TeamMemberFunctions(member.function).name if member.user_id == user_id: is_team_member = True if member_dto.function == "MANAGER": is_team_manager = True member_dto.picture_url = user.picture_url member_dto.active = member.active team_dto.members.append(member_dto) if team_dto.visibility == "PRIVATE" and not is_admin: if is_team_manager or is_team_member: teams_list_dto.teams.append(team_dto) else: teams_list_dto.teams.append(team_dto) return teams_list_dto