Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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))
Ejemplo n.º 10
0
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))
Ejemplo n.º 11
0
 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)