def case_users_and_owners(self): users_data = ExpandedMobileWorkerFilter.pull_users_and_groups(self.domain, self.request, True, True) user_ids = filter(None, [u.get("user_id") for u in users_data["combined_users"]]) group_owner_ids = [] for user_id in user_ids: group_owner_ids.extend([group._id for group in Group.by_user(user_id) if group.case_sharing]) return user_ids, filter(None, group_owner_ids)
def es_query(self): if not getattr(self, 'es_response', None): q = { "query": { "range": { self.time_field: { "from": self.datespan.startdate_param, "to": self.datespan.enddate_param, "include_upper": False}}}, "filter": {"and": ADD_TO_ES_FILTER["forms"][:]}} xmlnss = filter(None, [f["xmlns"] for f in self.all_relevant_forms.values()]) if xmlnss: q["filter"]["and"].append({"terms": {"xmlns.exact": xmlnss}}) users_data = ExpandedMobileWorkerFilter.pull_users_and_groups(self.domain, self.request, True, True) if "t__0" not in self.request.GET.getlist("emw") or users_data["admin_and_demo_users"]: q["filter"]["and"].append( {"terms": {"form.meta.userID": filter(None, [u["user_id"] for u in users_data["combined_users"]])}}) else: negated_ids = util.get_all_users_by_domain(self.domain, user_filter=HQUserType.all_but_users(), simplified=True) ids = filter(None, [user['user_id'] for user in negated_ids]) q["filter"]["and"].append({"not": {"terms": {"form.meta.userID": ids}}}) for cp in filter(None, self.request.GET.get('form_data', "").split(",")): q["filter"]["and"].append({"term": {"__props_for_querying": cp.lower()}}) q["sort"] = self.get_sorting_block() if self.get_sorting_block() else [{self.time_field : {"order": "desc"}}] self.es_response = es_query(params={"domain.exact": self.domain}, q=q, es_url=XFORM_INDEX + '/xform/_search', start_at=self.pagination.start, size=self.pagination.count) return self.es_response
def _es_extra_filters(self): if FormsByApplicationFilter.has_selections(self.request): def form_filter(form): app_id = form.get('app_id', None) if app_id and app_id != MISSING_APP_ID: return { 'and': [{ 'term': { 'xmlns.exact': form['xmlns'] } }, { 'term': { 'app_id': app_id } }] } return {'term': {'xmlns.exact': form['xmlns']}} form_values = self.all_relevant_forms.values() if form_values: yield {'or': [form_filter(f) for f in form_values]} truthy_only = functools.partial(filter, None) mobile_user_and_group_slugs = self.request.GET.getlist( ExpandedMobileWorkerFilter.slug) users_data = ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, mobile_user_and_group_slugs, include_inactive=True) all_mobile_workers_selected = 't__0' in self.request.GET.getlist('emw') if not all_mobile_workers_selected or users_data.admin_and_demo_users: yield { 'terms': { 'form.meta.userID': truthy_only(u.user_id for u in users_data.combined_users) } } else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) yield { 'not': { 'terms': { 'form.meta.userID': truthy_only(user.user_id for user in negated_ids) } } } if HQUserType.UNKNOWN not in ExpandedMobileWorkerFilter.selected_user_types( mobile_user_and_group_slugs): yield {'not': {'term': {'xmlns.exact': SYSTEM_FORM_XMLNS}}}
def _es_extra_filters(self): if FormsByApplicationFilter.has_selections(self.request): def form_filter(form): app_id = form.get('app_id', None) if app_id and app_id != MISSING_APP_ID: return {'and': [{'term': {'xmlns.exact': form['xmlns']}}, {'term': {'app_id': app_id}}]} return {'term': {'xmlns.exact': form['xmlns']}} form_values = self.all_relevant_forms.values() if form_values: yield {'or': [form_filter(f) for f in form_values]} truthy_only = functools.partial(filter, None) mobile_user_and_group_slugs = self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) users_data = ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, mobile_user_and_group_slugs, include_inactive=True ) all_mobile_workers_selected = 't__0' in self.request.GET.getlist('emw') if not all_mobile_workers_selected or users_data.admin_and_demo_users: yield { 'terms': { 'form.meta.userID': truthy_only( u.user_id for u in users_data.combined_users ) } } else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) yield { 'not': { 'terms': { 'form.meta.userID': truthy_only( user.user_id for user in negated_ids ) } } } props = truthy_only(self.request.GET.get('form_data', '').split(',')) for prop in props: yield { 'term': {'__props_for_querying': prop} } if HQUserType.UNKNOWN not in ExpandedMobileWorkerFilter.selected_user_types(mobile_user_and_group_slugs): yield { 'not': {'term': {'xmlns.exact': SYSTEM_FORM_XMLNS}} }
def report_config(self): emw = [u.user_id for u in ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, self.request, True, True).combined_users] if self.datespan.enddate - timedelta(days=30) > self.datespan.startdate: self.datespan.startdate = self.datespan.enddate - timedelta(days=30) config = dict( domain=self.domain, startdate=self.datespan.startdate, enddate=self.datespan.enddate, emw=tuple(emw) ) return config
def _es_extra_filters(self): if FormsByApplicationFilter.has_selections(self.request): def form_filter(form): app_id = form.get('app_id', None) if app_id and app_id != MISSING_APP_ID: return { 'and': [{ 'term': { 'xmlns.exact': form['xmlns'] } }, { 'term': { 'app_id': app_id } }] } return {'term': {'xmlns.exact': form['xmlns']}} form_values = self.all_relevant_forms.values() if form_values: yield {'or': [form_filter(f) for f in form_values]} truthy_only = functools.partial(filter, None) users_data = ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, self.request, True, True, include_inactive=True) all_mobile_workers_selected = 't__0' in self.request.GET.getlist('emw') if not all_mobile_workers_selected or users_data.admin_and_demo_users: yield { 'terms': { 'form.meta.userID': truthy_only(u.user_id for u in users_data.combined_users) } } else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) yield { 'not': { 'terms': { 'form.meta.userID': truthy_only(user.user_id for user in negated_ids) } } } props = truthy_only(self.request.GET.get('form_data', '').split(',')) for prop in props: yield {'term': {'__props_for_querying': prop.lower()}}
def users(self): mobile_user_and_group_slugs = self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) limit_user_ids = [] if self.selected_app_id: limit_user_ids = get_all_user_ids_submitted(self.domain, self.selected_app_id) users_data = ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, mobile_user_and_group_slugs, include_inactive=False, limit_user_ids=limit_user_ids, ) return users_data.combined_users
def report_config(self): emw = [ u.user_id for u in ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, self.request, True, True).combined_users ] if self.datespan.enddate - timedelta( days=30) > self.datespan.startdate: self.datespan.startdate = self.datespan.enddate - timedelta( days=30) config = dict(domain=self.domain, startdate=self.datespan.startdate, enddate=self.datespan.enddate, emw=tuple(emw)) return config
def _es_extra_filters(self): truthy_only = functools.partial(filter, None) form_values = self.all_relevant_forms.values() if form_values: yield { 'or': [ {'and': [{'term': {'xmlns.exact': f['xmlns']}}, {'term': {'app_id': f['app_id']}}]} for f in form_values ] } users_data = ExpandedMobileWorkerFilter.pull_users_and_groups( self.domain, self.request, True, True) all_mobile_workers_selected = 't__0' in self.request.GET.getlist('emw') if not all_mobile_workers_selected or users_data.admin_and_demo_users: yield { 'terms': { 'form.meta.userID': truthy_only( u.user_id for u in users_data.combined_users ) } } else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) yield { 'not': { 'terms': { 'form.meta.userID': truthy_only( user.user_id for user in negated_ids ) } } } props = truthy_only(self.request.GET.get('form_data', '').split(',')) for prop in props: yield { 'term': {'__props_for_querying': prop.lower()} }
def _get_users_filter(self, mobile_user_and_group_slugs): truthy_only = functools.partial(filter, None) users_data = EMWF.pull_users_and_groups(self.domain, mobile_user_and_group_slugs, include_inactive=True) selected_user_types = EMWF.selected_user_types( mobile_user_and_group_slugs) all_mobile_workers_selected = HQUserType.REGISTERED in selected_user_types if not all_mobile_workers_selected or users_data.admin_and_demo_users: return form_es.user_id( truthy_only(u.user_id for u in users_data.combined_users)) else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) return es_filters.NOT( form_es.user_id( truthy_only(user.user_id for user in negated_ids)))
def _get_users_filter(self, mobile_user_and_group_slugs): truthy_only = functools.partial(filter, None) users_data = EMWF.pull_users_and_groups( self.domain, mobile_user_and_group_slugs, include_inactive=True ) selected_user_types = EMWF.selected_user_types(mobile_user_and_group_slugs) all_mobile_workers_selected = HQUserType.REGISTERED in selected_user_types if not all_mobile_workers_selected or users_data.admin_and_demo_users: return form_es.user_id(truthy_only( u.user_id for u in users_data.combined_users )) else: negated_ids = util.get_all_users_by_domain( self.domain, user_filter=HQUserType.all_but_users(), simplified=True, ) return es_filters.NOT(form_es.user_id(truthy_only( user.user_id for user in negated_ids )))