def filter(self): user_ids = set(CouchUser.ids_by_domain(self.domain)) user_ids.update(CouchUser.ids_by_domain(self.domain, is_active=False)) f = SerializableFunction(form_matches_users, users=user_ids) if self.app_id is not None: f.add(reports.util.app_export_filter, app_id=self.app_id) if not self.include_errors: f.add(couchforms.filters.instances) return f
def sync_phone_numbers_for_domain(domain): for user_id in CouchUser.ids_by_domain(domain, is_active=True): _sync_user_phone_numbers(user_id) for user_id in CouchUser.ids_by_domain(domain, is_active=False): _sync_user_phone_numbers(user_id) case_ids = CaseAccessors(domain).get_case_ids_in_domain() for case in CaseAccessors(domain).iter_cases(case_ids): _sync_case_phone_number(case) MigrationStatus.set_migration_completed('phone_sync_domain_%s' % domain)
def filter(self): user_ids = set(CouchUser.ids_by_domain(self.domain)) user_ids.update(CouchUser.ids_by_domain(self.domain, is_active=False)) def _top_level_filter(form): # careful, closures used return form_matches_users(form, user_ids) or is_commconnect_form(form) f = SerializableFunction(_top_level_filter) if self.app_id is not None: f.add(reports.util.app_export_filter, app_id=self.app_id) if not self.include_errors: f.add(couchforms.filters.instances) actual = SerializableFunction(default_form_filter, filter=f) return actual
def total_distinct_users(domains=None): """ Get total number of users who've ever submitted a form. """ query = { "in": { "domain.exact": domains } } if domains is not None else { "match_all": {} } q = { "query": query, "filter": { "and": ADD_TO_ES_FILTER["forms"][:] }, } res = es_query(q=q, facets=["form.meta.userID"], es_index='forms', size=0) user_ids = reduce(list.__add__, [CouchUser.ids_by_domain(d) for d in domains], []) terms = [t.get('term') for t in res["facets"]["form.meta.userID"]["terms"]] return len( filter(lambda t: t and t not in WEIRD_USER_IDS and t in user_ids, terms))
def active_mobile_users(domain, *args): """ Returns the number of mobile users who have submitted a form in the last 30 days """ now = datetime.now() then = (now - timedelta(days=30)).strftime(DATE_FORMAT) now = now.strftime(DATE_FORMAT) q = { "query": { "range": { "form.meta.timeEnd": { "from": then, "to": now } } }, "filter": { "and": ADD_TO_ES_FILTER["forms"][:] } } facets = ['form.meta.userID'] data = es_query(params={"domain.exact": domain}, q=q, facets=facets, es_url=XFORM_INDEX + '/xform/_search', size=1) terms = [ t.get('term') for t in data["facets"]["form.meta.userID"]["terms"] ] user_ids = CouchUser.ids_by_domain(domain) return len(filter(lambda t: t and t in user_ids, terms))
def total_distinct_users(domain): """ Get total number of users who've ever submitted a form in a domain. """ query = FormES().domain(domain).user_aggregation() terms = { user_id for user_id in query.run().aggregations.user.keys if user_id not in WEIRD_USER_IDS } user_ids = terms.intersection(set(CouchUser.ids_by_domain(domain))) return len(user_ids)
def total_distinct_users(domains=None): """ Get total number of users who've ever submitted a form. """ query = {"in": {"domain.exact": domains}} if domains is not None else {"match_all": {}} q = {"query": query, "filter": {"and": ADD_TO_ES_FILTER["forms"][:]}} res = es_query(q=q, facets=["form.meta.userID"], es_url=ES_URLS["forms"], size=0) user_ids = reduce(list.__add__, [CouchUser.ids_by_domain(d) for d in domains], []) terms = [t.get("term") for t in res["facets"]["form.meta.userID"]["terms"]] return len(filter(lambda t: t and t not in WEIRD_USER_IDS and t in user_ids, terms))
def active_mobile_users(domain, *args): """ Returns the number of mobile users who have submitted a form in the last 30 days """ now = datetime.now() then = (now - timedelta(days=30)).strftime(DATE_FORMAT) now = now.strftime(DATE_FORMAT) q = { "query": {"range": {"form.meta.timeEnd": {"from": then, "to": now}}}, "filter": {"and": ADD_TO_ES_FILTER["forms"][:]}, } facets = ["form.meta.userID"] data = es_query(params={"domain.exact": domain}, q=q, facets=facets, es_url=XFORM_INDEX + "/xform/_search", size=1) terms = [t.get("term") for t in data["facets"]["form.meta.userID"]["terms"]] user_ids = CouchUser.ids_by_domain(domain) return len(filter(lambda t: t and t in user_ids, terms))
def clear_dropdown_cache_for_all_domain_users(cls, domain): from corehq.apps.users.models import CouchUser for user_id in CouchUser.ids_by_domain(domain): cls.clear_dropdown_cache(domain, user_id)