示例#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 user_ids_at_locations
    from corehq.apps.fixtures.models import UserFixtureType
    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 = 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 = user_ids_at_locations(ancestor_ids)
    update_fixture_status_for_users(user_ids, UserFixtureType.LOCATION)
示例#2
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 user_ids_at_locations
    from corehq.apps.fixtures.models import UserFixtureType
    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 = 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 = user_ids_at_locations(ancestor_ids)
    update_fixture_status_for_users(user_ids, UserFixtureType.LOCATION)
示例#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 = user_ids_at_locations(accessible_location_ids)
    accessible_ids = accessible_user_ids + list(accessible_location_ids)
    return accessible_ids
示例#4
0
def deactivate_users_at_location(location_id):
    from corehq.apps.locations.dbaccessors import user_ids_at_locations
    user_ids = 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)
示例#5
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))
示例#6
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))
示例#7
0
def _get_location_accessible_ids(request):
    accessible_location_ids = (SQLLocation.active_objects.accessible_location_ids(
        request.domain,
        request.couch_user
    ))
    accessible_user_ids = user_ids_at_locations(accessible_location_ids)
    accessible_ids = accessible_user_ids + list(accessible_location_ids)
    return accessible_ids
示例#8
0
 def scope_filter(self):
     # 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_location_ids = (
         SQLLocation.active_objects.accessible_location_ids(
             self.request.domain, self.request.couch_user))
     accessible_user_ids = user_ids_at_locations(accessible_location_ids)
     accessible_ids = accessible_user_ids + list(accessible_location_ids)
     return case_es.owner(accessible_ids)
示例#9
0
def update_users_at_locations(location_ids):
    """
    Update location fixtures for users given locations
    """
    from corehq.apps.users.models import update_fixture_status_for_users
    from corehq.apps.locations.dbaccessors import user_ids_at_locations
    from corehq.apps.fixtures.models import UserFixtureType

    user_ids = user_ids_at_locations(location_ids)
    update_fixture_status_for_users(user_ids, UserFixtureType.LOCATION)
示例#10
0
 def scope_filter(self):
     # 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_location_ids = (SQLLocation.active_objects.accessible_location_ids(
         self.request.domain,
         self.request.couch_user)
     )
     accessible_user_ids = user_ids_at_locations(accessible_location_ids)
     accessible_ids = accessible_user_ids + list(accessible_location_ids)
     return case_es.owner(accessible_ids)
示例#11
0
def _unassign_users_from_location(domain, location_id):
    """
    Unset location for all users assigned to that location.
    """
    from corehq.apps.locations.dbaccessors import user_ids_at_locations
    from corehq.apps.users.models import CommCareUser
    from dimagi.utils.couch.database import iter_docs

    user_ids = user_ids_at_locations([location_id])
    for doc in iter_docs(CommCareUser.get_db(), user_ids):
        user = CommCareUser.wrap(doc)
        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)
示例#12
0
def _unassign_users_from_location(domain, location_id):
    """
    Unset location for all users assigned to that location.
    """
    from corehq.apps.locations.dbaccessors import user_ids_at_locations
    from corehq.apps.users.models import CouchUser
    from dimagi.utils.couch.database import iter_docs

    user_ids = user_ids_at_locations([location_id])
    for doc in iter_docs(CouchUser.get_db(), user_ids):
        user = CouchUser.wrap_correctly(doc)
        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)
示例#13
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 = user_ids_at_locations(
         list(accessible_location_ids))
     return FormSubmittedByFilter(accessible_user_ids)
示例#14
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 = user_ids_at_locations(list(accessible_location_ids))
     return FormSubmittedByFilter(accessible_user_ids)