Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #4
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 = 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))
Beispiel #5
0
 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)