Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
    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)