def update_users_at_locations(domain, location_ids, supply_point_ids, ancestor_ids): """ Update location fixtures for users given locations """ from corehq.apps.users.models import CouchUser, update_fixture_status_for_users from corehq.apps.locations.dbaccessors import mobile_user_ids_at_locations from corehq.apps.fixtures.models import UserLookupTableType from dimagi.utils.couch.database import iter_docs # close supply point cases for supply_point_id in supply_point_ids: close_supply_point_case(domain, supply_point_id) # unassign users from locations unassign_user_ids = mobile_user_ids_at_locations(location_ids) for doc in iter_docs(CouchUser.get_db(), unassign_user_ids): user = CouchUser.wrap_correctly(doc) for location_id in location_ids: if location_id not in user.get_location_ids(domain): continue if user.is_web_user(): user.unset_location_by_id(domain, location_id, fall_back_to_next=True) elif user.is_commcare_user(): user.unset_location_by_id(location_id, fall_back_to_next=True) # update fixtures for users at ancestor locations user_ids = mobile_user_ids_at_locations(ancestor_ids) update_fixture_status_for_users(user_ids, UserLookupTableType.LOCATION)
def deactivate_users_at_location(location_id): from corehq.apps.locations.dbaccessors import mobile_user_ids_at_locations user_ids = mobile_user_ids_at_locations([location_id]) for doc in iter_docs(CouchUser.get_db(), user_ids): user = CouchUser.wrap_correctly(doc) user.is_active = False user.save(spawn_task=True)
def _get_location_accessible_ids(request): accessible_location_ids = ( SQLLocation.active_objects.accessible_location_ids( request.domain, request.couch_user)) accessible_user_ids = mobile_user_ids_at_locations(accessible_location_ids) accessible_ids = accessible_user_ids + list(accessible_location_ids) return accessible_ids
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 = mobile_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))
def _scope_filter(self, accessible_location_ids): # Filter to be applied in AND with filters for export for restricted user # Restricts to forms submitted by users at accessible locations accessible_user_ids = mobile_user_ids_at_locations( list(accessible_location_ids)) return FormSubmittedByFilter(accessible_user_ids)