def user_query(self, pagination=True): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug)) user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = (user_query.set_sorting_block(self.get_sorting_block())) if pagination: user_query = (user_query.size(self.pagination.count).start( self.pagination.start)) if self.selected_app_id: # adding nested filter for reporting_metadata.last_submissions.app_id # and reporting_metadata.last_syncs.app_id when app is selected last_submission_filter = filters.nested( 'reporting_metadata.last_submissions', filters.term('reporting_metadata.last_submissions.app_id', self.selected_app_id)) last_sync_filter = filters.nested( 'reporting_metadata.last_syncs', filters.term("reporting_metadata.last_syncs.app_id", self.selected_app_id)) user_query = user_query.OR(last_submission_filter, last_sync_filter) return user_query
def user_query(self, pagination=True): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) ) user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = (user_query .set_sorting_block(self.get_sorting_block())) if pagination: user_query = (user_query .size(self.pagination.count) .start(self.pagination.start)) if self.selected_app_id: # adding nested filter for reporting_metadata.last_submissions.app_id # and reporting_metadata.last_syncs.app_id when app is selected last_submission_filter = filters.nested('reporting_metadata.last_submissions', filters.term('reporting_metadata.last_submissions.app_id', self.selected_app_id) ) last_sync_filter = filters.nested('reporting_metadata.last_syncs', filters.term("reporting_metadata.last_syncs.app_id", self.selected_app_id) ) user_query = user_query.OR(last_submission_filter, last_sync_filter ) return user_query
def get_by_case_id_form_es_query(start, size, case_id): base_query = get_base_form_es_query(start, size) return (base_query.filter( filters.nested( 'form.case', filters.OR(filters.term('form.case.@case_id', case_id), filters.term('form.case.case_id', case_id)))))
def login_as_user_query(domain, couch_user, search_string, limit, offset, user_data_fields=None): ''' Takes in various parameters to determine which users to populate the login as screen. :param domain: String domain :param couch_user: The CouchUser that is using the Login As feature :param search_string: The query that filters the users returned. Filters based on the `search_fields` as well as any fields defined in `user_data_fields`. :param limit: The max amount of users returned. :param offset: From where to start the query. :param user_data_fields: A list of custom user data fields that should also be searched by the `search_string` :returns: An EsQuery instance. ''' search_fields = [ "base_username", "last_name", "first_name", "phone_numbers" ] should_criteria_query = [ queries.search_string_query(search_string, search_fields), ] if user_data_fields: or_criteria = [] for field in user_data_fields: or_criteria.append( filters.AND( filters.term('user_data_es.key', field), filters.term('user_data_es.value', search_string), ), ) should_criteria_query.append( queries.nested_filter('user_data_es', filters.OR(*or_criteria))) user_es = ( UserES().domain(domain).start(offset).size(limit). sort('username.exact').set_query( queries.BOOL_CLAUSE( queries.SHOULD_CLAUSE( should_criteria_query, # It should either match on the search fields like username or it # should match on the custom user data fields. If this were 2, then # it would require the search string to match both on the search fields and # the custom user data fields. minimum_should_match=1, ), ))) if not couch_user.has_permission(domain, 'access_all_locations'): loc_ids = SQLLocation.objects.accessible_to_user( domain, couch_user).location_ids() user_es = user_es.location(list(loc_ids)) if not couch_user.has_permission( domain, get_permission_name(Permissions.login_as_all_users)): user_es = user_es.filter( filters.nested( 'user_data_es', filters.AND( filters.term('user_data_es.key', 'login_as_user'), filters.term('user_data_es.value', couch_user.username), ))) return user_es.mobile_users()