def report_context(self): context = super(CaseReassignmentInterface, self).report_context if not self.request.can_access_all_locations: accessible_location_ids = ( SQLLocation.active_objects.accessible_location_ids( self.request.domain, self.request.couch_user)) user_query = UserES().location(accessible_location_ids) active_users = get_simplified_users(user_query) context.update(groups=[ dict(ownerid=group.get_id, name=group.name, type="group") for group in self.accessible_case_sharing_locations( self.request.couch_user) ], ) else: active_users = self.get_all_users_by_domain(user_filter=tuple( HQUserType.all()), simplified=True) context.update(groups=[ dict(ownerid=group.get_id, name=group.name, type="group") for group in self.all_case_sharing_groups ], ) context.update(users=[ dict(ownerid=user.user_id, name=user.username_in_report, type="user") for user in active_users ], ) return context
def get_all_users_by_domain(domain=None, group=None, user_ids=None, user_filter=None, simplified=False, CommCareUser=None, include_inactive=False): """ WHEN THERE ARE A LOT OF USERS, THIS IS AN EXPENSIVE OPERATION. Returns a list of CommCare Users based on domain, group, and user filter (demo_user, admin, registered, unknown) """ user_ids = user_ids if user_ids and user_ids[0] else None if not CommCareUser: from corehq.apps.users.models import CommCareUser if group: # get all the users only in this group and don't bother filtering. if not isinstance(group, Group): group = Group.get(group) users = group.get_users(is_active=(not include_inactive), only_commcare=True) elif user_ids is not None: try: users = [CommCareUser.get_by_user_id(id) for id in user_ids] except Exception: users = [] if users and users[0] is None: raise Http404() else: if not user_filter: user_filter = HQUserType.all() users = [] submitted_user_ids = get_all_userids_submitted(domain) registered_user_ids = dict([(user.user_id, user) for user in CommCareUser.by_domain(domain)]) if include_inactive: registered_user_ids.update(dict([(u.user_id, u) for u in CommCareUser.by_domain(domain, is_active=False)])) for user_id in submitted_user_ids: if user_id in registered_user_ids and user_filter[HQUserType.REGISTERED].show: user = registered_user_ids[user_id] users.append(user) elif not user_id in registered_user_ids and \ (user_filter[HQUserType.ADMIN].show or user_filter[HQUserType.DEMO_USER].show or user_filter[HQUserType.UNKNOWN].show): username = get_username_from_forms(domain, user_id) temp_user = TempCommCareUser(domain, username, user_id) if user_filter[temp_user.filter_flag].show: users.append(temp_user) if user_filter[HQUserType.UNKNOWN].show: users.append(TempCommCareUser(domain, '*', None)) if user_filter[HQUserType.REGISTERED].show: # now add all the registered users who never submitted anything for user_id in registered_user_ids: if not user_id in submitted_user_ids: user = CommCareUser.get_by_user_id(user_id) users.append(user) if simplified: return [_report_user_dict(user) for user in users] return users
def get_all_users_by_domain(domain=None, group=None, user_ids=None, user_filter=None, simplified=False, CommCareUser=None, include_inactive=False): """ WHEN THERE ARE A LOT OF USERS, THIS IS AN EXPENSIVE OPERATION. Returns a list of CommCare Users based on domain, group, and user filter (demo_user, admin, registered, unknown) """ user_ids = user_ids if user_ids and user_ids[0] else None if not CommCareUser: from corehq.apps.users.models import CommCareUser if group: # get all the users only in this group and don't bother filtering. if not isinstance(group, Group): group = Group.get(group) users = group.get_users(only_commcare=True) elif user_ids is not None: try: users = [CommCareUser.get_by_user_id(id) for id in user_ids] except Exception: users = [] if users and users[0] is None: raise Http404() else: if not user_filter: user_filter = HQUserType.all() users = [] submitted_user_ids = get_all_userids_submitted(domain) registered_user_ids = dict([(user.user_id, user) for user in CommCareUser.by_domain(domain)]) if include_inactive: registered_user_ids.update(dict([(u.user_id, u) for u in CommCareUser.by_domain(domain, is_active=False)])) for user_id in submitted_user_ids: if user_id in registered_user_ids and user_filter[HQUserType.REGISTERED].show: user = registered_user_ids[user_id] users.append(user) elif not user_id in registered_user_ids and \ (user_filter[HQUserType.ADMIN].show or user_filter[HQUserType.DEMO_USER].show or user_filter[HQUserType.UNKNOWN].show): username = get_username_from_forms(domain, user_id) temp_user = TempCommCareUser(domain, username, user_id) if user_filter[temp_user.filter_flag].show: users.append(temp_user) if user_filter[HQUserType.UNKNOWN].show: users.append(TempCommCareUser(domain, '*', None)) if user_filter[HQUserType.REGISTERED].show: # now add all the registered users who never submitted anything for user_id in registered_user_ids: if not user_id in submitted_user_ids: user = CommCareUser.get_by_user_id(user_id) users.append(user) if simplified: return [_report_user_dict(user) for user in users] return users
def report_context(self): context = super(CaseReassignmentInterface, self).report_context active_users = self.get_all_users_by_domain(user_filter=tuple(HQUserType.all()), simplified=True) context.update( users=[dict(ownerid=user.user_id, name=user.username_in_report, type="user") for user in active_users], groups=[dict(ownerid=group.get_id, name=group.name, type="group") for group in self.all_case_sharing_groups], user_ids=self.user_ids, ) return context