def options(self): user = self.request.couch_user options = [] if isinstance(user, WebUser) or _is_succeed_admin(user): options = CONFIG['groups'] else: groups = user.get_group_ids() for group_id in groups: group = Group.get(group_id) for grp in CONFIG['groups']: if group.name == grp['text']: options.append(grp) return options
def options(self): user = self.request.couch_user cm = dict(val=CONFIG['cm_role'], text=ugettext_noop("Care Manager")) chw = dict(val=CONFIG['chw_role'], text=ugettext_noop("Community Health Worker")) options = [] if isinstance(user, WebUser) or _is_succeed_admin(user) or _is_pm_or_pi(user): options = [ dict(val='', text=ugettext_noop("All Roles")), dict(val=CONFIG['pm_role'], text=ugettext_noop("Project Manager")), cm, chw ] else: role = user.user_data['role'] if role == CONFIG['cm_role']: options.append(cm) self.selected = cm['val'] elif role == CONFIG['chw_role']: options.append(chw) self.selected = chw['val'] return options
def es_results(self): q = { "query": { "bool": { "must": [ {"match": {"domain.exact": self.domain}} ], "must_not": [] } }, 'sort': self.get_sorting_block(), } sorting_block = self.get_sorting_block()[0].keys()[0] if len(self.get_sorting_block()) != 0 else None order = self.get_sorting_block()[0].values()[0] if len(self.get_sorting_block()) != 0 else None if sorting_block == 'last_interaction': sort = { "_script": { "script": """ last=0; break = true; for (i = _source.actions.size(); (i > 0 && break); i--){ if (inter_list.contains(_source.actions[i-1].get('xform_xmlns'))) { last = _source.actions[i-1].get('date'); break = false; } } return last; """, "type": "string", "params": { "inter_list": LAST_INTERACTION_LIST }, "order": order } } q['sort'] = sort elif sorting_block == 'target_date': sort = { "_script": { "script": """ next_visit=visits_list[0]; before_action=null; count=0; foreach(visit : visits_list) { skip = false; foreach(action : _source.actions) { if (!skip && visit.xmlns.equals(action.xform_xmlns) && !action.xform_id.equals(before_action)) { next_visit=visits_list[count+1]; before_visit=action.xform_id; skip=true; count++; } before_visit=action.xform_id; } } Calendar cal = Calendar.getInstance(); r = _source.randomization_date.get('#value').split('-'); int year = Integer.parseInt(r[0]); int month = Integer.parseInt(r[1]); int day = Integer.parseInt(r[2]); cal.set(year, month-1, day); nv=(cal.getTimeInMillis() + (next_visit.get('days') * 24 * 60 * 60 * 1000)); return Calendar.getInstance().getTimeInMillis() - nv; """, "type": "number", "params": { "visits_list": VISIT_SCHEDULE }, "order": order } } q['sort'] = sort elif sorting_block == 'visit_name': sort = { "_script": { "script": """ next_visit=visits_list[0]; before_action=null; count=0; foreach(visit : visits_list) { skip = false; foreach(action : _source.actions) { if (!skip && visit.xmlns.equals(action.xform_xmlns) && !action.xform_id.equals(before_action)) { next_visit=visits_list[count+1]; before_visit=action.xform_id; skip=true; count++; } before_visit=action.xform_id; } } return next_visit.get('visit_name'); """, "type": "string", "params": { "visits_list": VISIT_SCHEDULE }, "order": order } } q['sort'] = sort care_site = self.request_params.get('care_site', '') if care_site != '': q["query"]["bool"]["must"].append({"match": {"care_site.#value": care_site}}) else: if not isinstance(self.request.couch_user, WebUser) or _is_succeed_admin(self.request.couch_user): groups = self.request.couch_user.get_group_ids() party = [] for group_id in groups: group = Group.get(group_id) for grp in CONFIG['groups']: if group.name == grp['text']: party.append(grp['val']) q["query"]["bool"]["must"].append({"terms": {"care_site.#value": party, "minimum_should_match": 1}}) patient_status = self.request_params.get('patient_status', '') if patient_status != '': active_dict = {"nested": { "path": "actions", "query": { "match": { "actions.xform_xmlns": PM3}}}} if patient_status == "active": q["query"]["bool"]["must_not"].append(active_dict) else: q["query"]["bool"]["must"].append(active_dict) responsible_party = self.request_params.get('responsible_party', '') if responsible_party != '': users = [user.get_id for user in CommCareUser.by_domain(domain=self.domain) if 'role' in user.user_data and user.user_data['role'] == responsible_party.upper()] terms = {"terms": {"user_id": users, "minimum_should_match": 1}} q["query"]["bool"]["must"].append(terms) if self.case_type: q["query"]["bool"]["must"].append({"match": {"type.exact": 'participant'}}) logging.info("ESlog: [%s.%s] ESquery: %s" % (self.__class__.__name__, self.domain, simplejson.dumps(q))) return es_query(q=q, es_url=REPORT_CASE_INDEX + '/_search', dict_only=False)