Esempio n. 1
0
 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'))
     }
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
        ]
Esempio n. 4
0
    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))
Esempio n. 5
0
        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])