def case_owners(self): q = (case_es.CaseES().domain(DOMAIN).case_type('vhnd').fields( ['owner_id', '_id'])) return { case['_id']: case['owner_id'] for case in q.run().hits if (case.get('_id') and case.get('owner_id')) }
def _build_query(self): query = (case_es.CaseES().domain(self.domain).size( self.pagination.count).start(self.pagination.start)) query.es_query['sort'] = self.get_sorting_block() mobile_user_and_group_slugs = self.request.GET.getlist(EMWF.slug) if self.case_filter: query = query.filter(self.case_filter) query = query.NOT(case_es.case_type("user-owner-mapping-case")) if self.case_type: query = query.case_type(self.case_type) if self.case_status: query = query.is_closed(self.case_status == 'closed') if self.request.can_access_all_locations and EMWF.show_all_data( mobile_user_and_group_slugs): pass elif self.request.can_access_all_locations and EMWF.show_project_data( mobile_user_and_group_slugs): # Show everything but stuff we know for sure to exclude user_types = EMWF.selected_user_types(mobile_user_and_group_slugs) ids_to_exclude = self.get_special_owner_ids( admin=HQUserType.ADMIN not in user_types, unknown=HQUserType.UNKNOWN not in user_types, demo=HQUserType.DEMO_USER not in user_types, commtrack=False, ) query = query.NOT(case_es.owner(ids_to_exclude)) else: # Only show explicit matches query = query.owner(self.case_owners) if not self.request.can_access_all_locations: query = query.OR(self.scope_filter()) search_string = CaseSearchFilter.get_value(self.request, self.domain) if search_string: query = query.set_query({"query_string": {"query": search_string}}) return query
def get_rows(self): query = case_es.CaseES().domain(self.domain)\ .fields([])\ .opened_range(lte=self.datespan.enddate_utc)\ .case_type(self.default_case_type) query.index = 'report_cases' if self.case_status == 'open': query = query.filter(es_filters.OR( case_es.is_closed(False), case_es.closed_range(gte=self.datespan.enddate_utc) )) elif self.case_status == 'closed': query = query.filter(case_es.closed_range(lte=self.datespan.enddate_utc)) query = query.owner([user['doc_id'] for user in self.users_matching_filter]) result = query.run() return [ CommCareCase.wrap(doc) for doc in iter_docs(CommCareCase.get_db(), result.ids) ]
def get_rows(self, datespan): def get_awc_filter(awcs): return get_nested_terms_filter("awc_name.#value", awcs) def get_gp_filter(gp): owner_ids = [ user._id for user in self.users if getattr(user, 'user_data', {}).get('gp') in self.gp ] return es_filters.term("owner_id", owner_ids) def get_block_filter(block): return es_filters.term("block_name.#value", block.lower()) query = case_es.CaseES().domain(self.domain)\ .fields([])\ .opened_range(lte=self.datespan.enddate_utc)\ .term("type.exact", self.default_case_type) query.index = 'report_cases' if self.display_open_cases_only: query = query.filter( es_filters.OR( case_es.is_closed(False), case_es.closed_range(gte=self.datespan.enddate_utc))) elif self.display_closed_cases_only: query = query.filter( case_es.closed_range(lte=self.datespan.enddate_utc)) if self.awcs: query = query.filter(get_awc_filter(self.awcs)) elif self.gp: query = query.filter(get_gp_filter(self.gp)) elif self.block: query = query.filter(get_block_filter(self.block)) result = query.run() return map(CommCareCase, iter_docs(CommCareCase.get_db(), result.ids))
return get_matching_users(self.awcs, self.gp, self.block) def get_rows(self): return self.cases @property @memoized def cases(self): if 'debug_case' in self.request.GET: case = CommCareCase.get(self.request.GET['debug_case']) if case.domain != DOMAIN: raise Http404() return [case] query = case_es.CaseES().domain(self.domain)\ .exclude_source()\ .opened_range(lte=self.datespan.enddate_utc)\ .case_type(self.default_case_type) query.index = 'report_cases' if self.case_status == 'open': query = query.filter( es_filters.OR( case_es.is_closed(False), case_es.closed_range(gte=self.datespan.enddate_utc))) elif self.case_status == 'closed': query = query.filter( case_es.closed_range(lte=self.datespan.enddate_utc)) query = query.owner( [user['doc_id'] for user in self.users_matching_filter])