示例#1
0
def get_all_users_by_domain(domain=None,
                            group=None,
                            individual=None,
                            user_filter=None,
                            simplified=False,
                            CommCareUser=None):
    """
        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)
    """
    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 individual:
        try:
            users = [CommCareUser.get_by_user_id(individual)]
        except Exception:
            users = []
        if users and users[0] is None:
            raise Http404()
    else:
        if not user_filter:
            user_filter = HQUserType.use_defaults()
        users = []
        submitted_user_ids = get_all_userids_submitted(domain)
        registered_user_ids = dict([
            (user.user_id, user) for user in CommCareUser.by_domain(domain)
        ])
        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
示例#2
0
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.use_defaults()
        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
示例#3
0
 def report_context(self):
     context = super(CaseReassignmentInterface, self).report_context
     active_users = util.get_all_users_by_domain(self.domain, user_filter=HQUserType.use_defaults(), simplified=True)
     context.update(
         users=[dict(ownerid=user.get('user_id'), name=user.get('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]
     )
     return context
示例#4
0
def get_all_users_by_domain(domain, **kwargs):
    """
        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)
    """
    group = kwargs.get('group')
    individual = kwargs.get('individual')
    user_filter = kwargs.get('user_filter')
    simplified = kwargs.get('simplified', False)

    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 individual:
        try:
            users = [CommCareUser.get_by_user_id(individual)]
        except Exception:
            users = []
        if users and users[0] is None:
            raise Http404()
    else:
        if not user_filter:
            user_filter = HQUserType.use_defaults()
        users = []
        submitted_user_ids = get_all_userids_submitted(domain)
        registered_user_ids = [user.user_id for user in CommCareUser.by_domain(domain)]
        for user_id in submitted_user_ids:
            if user_id in registered_user_ids and user_filter[HQUserType.REGISTERED].show:
                user = CommCareUser.get_by_user_id(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
示例#5
0
 def get_user_filter(cls, request):
     ufilter = group = individual = None
     try:
         if request.GET.get('ufilter', ''):
             ufilter = request.GET.getlist('ufilter')
         group = request.GET.get('group', '')
         individual = request.GET.get('individual', '')
     except KeyError:
         pass
     show_filter = True
     toggle = HQUserType.use_defaults()
     if ufilter and not (group or individual):
         toggle = HQUserType.use_filter(ufilter)
     elif group or individual:
         show_filter = False
     return toggle, show_filter
示例#6
0
 def get_user_filter(cls, request):
     ufilter = group = individual = None
     try:
         if request.GET.get('ufilter', ''):
             ufilter = request.GET.getlist('ufilter')
         group = request.GET.get('group', '')
         individual = request.GET.get('individual', '')
     except KeyError:
         pass
     show_filter = True
     toggle = HQUserType.use_defaults()
     if ufilter and not (group or individual):
         toggle = HQUserType.use_filter(ufilter)
     elif group or individual:
         show_filter = False
     return toggle, show_filter
示例#7
0
 def report_context(self):
     context = super(CaseReassignmentInterface, self).report_context
     active_users = self.get_all_users_by_domain(user_filter=tuple(
         HQUserType.use_defaults()),
                                                 simplified=True)
     context.update(
         users=[
             dict(ownerid=user.get('user_id'),
                  name=user.get('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
示例#8
0
    def get_user_filter(cls, request):
        ufilter = group = individual = None
        try:
            if request.GET.get("ufilter", ""):
                ufilter = request.GET.getlist("ufilter")
            group = request.GET.get("group", "")
            individual = request.GET.get("individual", "")
        except KeyError:
            pass
        except AttributeError:
            pass

        show_filter = True
        toggle = HQUserType.use_defaults()

        if not cls.always_show_filter and (group or individual):
            show_filter = False
        elif ufilter:
            toggle = HQUserType.use_filter(ufilter)
        return toggle, show_filter
示例#9
0
 def user_filter(self):
     if self.no_lucene:
         self._user_filter = HQUserType.use_defaults(show_all=True)
     return super(CaseListReport, self).user_filter