Beispiel #1
0
    def _create_user_filter(self, user_types, user_ids, group_ids,
                            location_ids):
        all_user_filters = None
        user_type_filters = self._get_user_type_filters(user_types)
        user_id_filter = self._get_users_filter(user_ids)
        group_filter = self._get_group_filter(group_ids)
        location_filter = self._get_locations_filter(location_ids)

        if not location_filter and not group_filter:
            group_and_location_metafilter = None
        elif FILTER_ON_GROUPS_AND_LOCATIONS.enabled(
                self.domain_object.name) and location_ids and group_ids:
            group_and_location_metafilter = AND(group_filter, location_filter)
        else:
            group_and_location_metafilter = OR(
                *list(filter(None, [group_filter, location_filter])))

        if group_and_location_metafilter or user_id_filter or user_type_filters:
            all_user_filter_list = [
                group_and_location_metafilter, user_id_filter
            ]
            if user_type_filters:
                all_user_filter_list += user_type_filters
            all_user_filters = OR(*list(filter(None, all_user_filter_list)))

        return all_user_filters
Beispiel #2
0
    def _get_filters_from_slugs(self, mobile_user_and_group_slugs, can_access_all_locations):
        """
        for full organization access:
            for selected groups return group ids and groups user ids otherwise fetches case sharing groups and
            locations ids
        for restricted access:
            fetches case sharing location ids
        :return: set of filters using OwnerFilter and LastModifiedByFilter along with group independent filters
        """
        group_ids = None

        if can_access_all_locations:
            group_ids = self._get_group_ids(mobile_user_and_group_slugs)

        owner_filter_ids = []
        last_modified_filter_ids = []
        if group_ids:
            groups_static_user_ids = Group.get_static_user_ids_for_groups(group_ids)
            groups_static_user_ids = flatten_non_iterable_list(groups_static_user_ids)
            owner_filter_ids = group_ids + groups_static_user_ids
            last_modified_filter_ids = groups_static_user_ids

        return [OR(
            OwnerFilter(owner_filter_ids),
            LastModifiedByFilter(last_modified_filter_ids),
            *self._get_group_independent_filters(mobile_user_and_group_slugs, can_access_all_locations)
        )]
Beispiel #3
0
 def _scope_filter(self, accessible_location_ids):
     # Filter to be applied in AND with filters for export to add scope for restricted user
     # Restricts to cases owned by accessible locations and their respective users Or Cases
     # Last Modified by accessible users
     accessible_user_ids = user_ids_at_locations(list(accessible_location_ids))
     accessible_ids = accessible_user_ids + list(accessible_location_ids)
     return OR(OwnerFilter(accessible_ids), LastModifiedByFilter(accessible_user_ids))
Beispiel #4
0
 def test_or_filter(self):
     self.assertEqual(
         OR(OwnerFilter("foo"), OwnerFilter("bar")).to_es_filter(),
         {
             'or': (
                 {'term': {'owner_id': 'foo'}},
                 {'term': {'owner_id': 'bar'}}
             )
         }
     )
Beispiel #5
0
    def get_case_filter(self):
        group = self._get_group()
        if group:
            user_ids = set(group.get_static_user_ids())
            case_filter = [OR(
                OwnerFilter(group._id),
                OwnerFilter(user_ids),
                LastModifiedByFilter(user_ids)
            )]
        else:
            case_sharing_groups = [g.get_id for g in
                                   Group.get_case_sharing_groups(self.domain_object.name)]
            case_filter = [OR(
                OwnerTypeFilter(self._get_es_user_types()),
                OwnerFilter(case_sharing_groups),
                LastModifiedByFilter(case_sharing_groups)
            )]

        date_filter = self._get_datespan_filter()
        if date_filter:
            case_filter.append(date_filter)

        return case_filter
Beispiel #6
0
    def get_form_filter(self, mobile_user_and_group_slugs, can_access_all_locations):
        """
        :param mobile_user_and_group_slugs: slug from request like
        ['g__e80c5e54ab552245457d2546d0cdbb03', 'g__e80c5e54ab552245457d2546d0cdbb04',
        'u__e80c5e54ab552245457d2546d0cdbb05', 't__1']
        :param can_access_all_locations: if request user has full organization access permission
        :return: set of form filters for export
        :filters:
        OR
            for full access:
                group's user ids via GroupFormSubmittedByFilter,
                users under user types,
                users by user_ids,
                users at locations and their descendants
            for restrict access:
                users by user_ids
                users at locations and their descendants
        AND
            datespan filter
        """
        form_filters = []
        if can_access_all_locations:
            form_filters += filter(None, [
                self._get_group_filter(mobile_user_and_group_slugs),
                self._get_user_type_filter(mobile_user_and_group_slugs),
            ])

        form_filters += filter(None, [
            self._get_users_filter(mobile_user_and_group_slugs),
            self._get_locations_filter(mobile_user_and_group_slugs)
        ])

        form_filters = flatten_non_iterable_list(form_filters)
        if form_filters:
            form_filters = [OR(*form_filters)]
        form_filters.append(self._get_datespan_filter())
        return form_filters