Esempio n. 1
0
    def save(self):
        from corehq.apps.users.views.utils import log_commcare_user_locations_changes

        selected_users = set(self.cleaned_data['selected_ids'])
        previous_users = set([u['id'] for u in self.get_users_at_location()])
        to_remove = previous_users - selected_users
        to_add = selected_users - previous_users
        users_to_be_updated = set.union(to_add, to_remove)

        # fetch before updates and fetch from Couch to avoid any ES lag
        targeted_users_old_locations = {
            user_doc['_id']: {
                'location_id': user_doc['location_id'],
                'assigned_location_ids': user_doc['assigned_location_ids']
            }
            for user_doc in iter_docs(CommCareUser.get_db(),
                                      users_to_be_updated)
        }

        self.unassign_users(to_remove)
        self.assign_users(to_add)
        self.cache_users_at_location(selected_users)

        # re-fetch users to get fresh locations
        for updated_user_doc in iter_docs(CommCareUser.get_db(),
                                          users_to_be_updated):
            updated_user = CommCareUser.wrap_correctly(updated_user_doc)
            user_old_locations = targeted_users_old_locations[
                updated_user.get_id]
            log_commcare_user_locations_changes(
                self.request,
                updated_user,
                old_location_id=user_old_locations['location_id'],
                old_assigned_location_ids=user_old_locations[
                    'assigned_location_ids'])
Esempio n. 2
0
    def tearDownClass(cls):
        delete_domain_phone_numbers(TEST_DOMAIN)
        if cls.sms_backend_mapping.id is not None:
            cls.sms_backend_mapping.delete()
        if cls.sms_backend.id is not None:
            cls.sms_backend.delete()
        users = get_user_docs_by_username([
            'stella',
            'bella',
            'trella',
            'msd_person',
        ])
        if users:
            CommCareUser.bulk_delete([
                CommCareUser.wrap_correctly(user)
                for user in users
            ])

        for product in Product.by_domain(TEST_DOMAIN):
            product.delete()
        SQLProduct.objects.all().delete()
        ils_gateway_config = ILSGatewayConfig.for_domain(TEST_DOMAIN)
        if ils_gateway_config:
            ils_gateway_config.delete()
        DocDomainMapping.objects.all().delete()
        for site_code in [
            'loc1',
            'loc2',
            'dis1',
            'reg1',
            'moh1',
        ]:
            location = cls.get_location_by_site_code(site_code)
            if location:
                location.delete()
        SQLLocation.objects.all().delete()
        test_domain = Domain.get_by_name(TEST_DOMAIN, strict=True)
        if test_domain:
            test_domain.delete()
        super(ILSTestScript, cls).tearDownClass()
Esempio n. 3
0
    def tearDownClass(cls):
        delete_domain_phone_numbers(TEST_DOMAIN)
        if cls.sms_backend_mapping.id is not None:
            cls.sms_backend_mapping.delete()
        if cls.sms_backend.id is not None:
            cls.sms_backend.delete()
        users = get_user_docs_by_username([
            'stella',
            'bella',
            'trella',
            'msd_person',
        ])
        if users:
            CommCareUser.bulk_delete([
                CommCareUser.wrap_correctly(user)
                for user in users
            ])

        for product in Product.by_domain(TEST_DOMAIN):
            product.delete()
        SQLProduct.objects.all().delete()
        ils_gateway_config = ILSGatewayConfig.for_domain(TEST_DOMAIN)
        if ils_gateway_config:
            ils_gateway_config.delete()
        DocDomainMapping.objects.all().delete()
        for site_code in [
            'loc1',
            'loc2',
            'dis1',
            'reg1',
            'moh1',
        ]:
            location = cls.get_location_by_site_code(site_code)
            if location:
                location.delete()
        SQLLocation.objects.all().delete()
        test_domain = Domain.get_by_name(TEST_DOMAIN, strict=True)
        if test_domain:
            test_domain.delete()
        super(ILSTestScript, cls).tearDownClass()