def get_conflict_by_teams(self, requests, users_teams): """ Returns requests conflicts by teams """ conflicts = {} for req in requests: user_teams = users_teams.get(req.user.dn, []) matched = {} # for all requests in conflict with current req for req2 in Request.in_conflict(self.session, req): # if we have some match between request teams # and conflicting request teams conflict_teams = users_teams.get(req2.user.dn, []) common_set = set(conflict_teams) & set(user_teams) if common_set: for team in common_set: if team not in matched: matched[team] = [] matched[team].append(req2.summary) req.conflict = matched if req.conflict: for team in req.conflict: if req.id not in conflicts: conflicts[req.id] = {} conflicts[req.id][team] = ('\n'.join([team] + req.conflict[team])) return conflicts
def render(self): req_list = {'requests': [], 'conflicts': {}} requests = [] if self.user.is_admin: requests = Request.all_for_admin(self.session) elif self.user.is_super: requests = Request.by_manager(self.session, self.user) if requests: conflicts = {} for req in requests: req.conflict = [req2.summary for req2 in Request.in_conflict(self.session, req)] if req.conflict: conflicts[req.id] = '\n'.join(req.conflict) req_list['requests'] = requests req_list['conflicts'] = conflicts # always add our requests for req in Request.by_user(self.session, self.user): if req not in req_list['requests']: req_list['requests'].append(req) return req_list
def test_in_conflict(self): from pyvac.models import Request req = Request.by_id(self.session, 1) self.assertIsInstance(req, Request) nb_conflicts = Request.in_conflict(self.session, req, count=True) self.assertEqual(nb_conflicts, 1)
def render(self): req_list = {'requests': [], 'conflicts': {}} requests = [] if self.user.is_admin: country = self.user.country requests = Request.all_for_admin_per_country(self.session, country) # check if admin user is also a manager, in this case merge all # requests requests_manager = Request.by_manager(self.session, self.user) # avoid duplicate entries req_to_add = [req for req in requests_manager if req not in requests] requests.extend(req_to_add) elif self.user.is_super: requests = Request.by_manager(self.session, self.user) if requests: conflicts = {} settings = self.request.registry.settings use_ldap = False if 'pyvac.use_ldap' in settings: use_ldap = asbool(settings.get('pyvac.use_ldap')) if use_ldap: ldap = LdapCache() users_teams = {} for team, members in ldap.list_teams().iteritems(): for member in members: users_teams.setdefault(member, []).append(team) for req in requests: user_teams = users_teams.get(req.user.dn, []) matched = {} # for all requests in conflict with current req for req2 in Request.in_conflict(self.session, req): # if we have some match between request teams # and conflicting request teams conflict_teams = users_teams.get(req2.user.dn, []) common_set = set(conflict_teams) & set(user_teams) if common_set: for team in common_set: if team not in matched: matched[team] = [] matched[team].append(req2.summary) req.conflict = matched if req.conflict: for team in req.conflict: if req.id not in conflicts: conflicts[req.id] = {} conflicts[req.id][team] = ('\n'.join([team] + req.conflict[team])) else: for req in requests: req.conflict = [req2.summary for req2 in Request.in_conflict_ou(self.session, req)] if req.conflict: conflicts[req.id] = '\n'.join(req.conflict) req_list['requests'] = requests req_list['conflicts'] = conflicts # always add our requests for req in Request.by_user(self.session, self.user): if req not in req_list['requests']: req_list['requests'].append(req) return req_list