Exemplo n.º 1
0
def dots_submissions_by_case(case_id, query_date, username=None):
    """
    Actually run query for username submissions
    todo: do terms for the pact_ids instead of individual term?
    """
    xform_es = ReportXFormES(PACT_DOMAIN)
    script_fields = {
        "doc_id": get_report_script_field('_id', is_known=True),
        "pact_id": get_report_script_field("form.pact_id"),
        "encounter_date": get_report_script_field('form.encounter_date'),
        "username": get_report_script_field('form.meta.username', is_known=True),
        "visit_type": get_report_script_field('form.visit_type'),
        "visit_kept": get_report_script_field('form.visit_kept'),
        "contact_type": get_report_script_field('form.contact_type'),
        "observed_art": get_report_script_field('form.observed_art'),
        "observed_non_art": get_report_script_field('form.observed_non_art'),
        "observer_non_art_dose": get_report_script_field('form.observed_non_art_dose'),
        "observed_art_dose": get_report_script_field('form.observed_art_dose'),
        "pillbox_check": get_report_script_field('form.pillbox_check.check'),
        "scheduled": get_report_script_field('form.scheduled'),
    }

    term_block = {'form.#type': 'dots_form'}
    if username is not None:
        term_block['form.meta.username'] = username
    query = xform_es.by_case_id_query(PACT_DOMAIN, case_id, terms=term_block,
                                      date_field='form.encounter_date.#value', startdate=query_date,
                                      enddate=query_date)
    query['sort'] = {'received_on': 'asc'}
    query['script_fields'] = script_fields
    query['size'] = 1
    query['from'] = 0
    res = xform_es.run_query(query)
    print(json.dumps(res, indent=2))
    return res
Exemplo n.º 2
0
def dots_submissions_by_case(case_id, query_date, username=None):
    """
    Actually run query for username submissions
    todo: do terms for the pact_ids instead of individual term?
    """
    xform_es = ReportXFormES(PACT_DOMAIN)
    script_fields = {
        "doc_id": get_report_script_field('_id', is_known=True),
        "pact_id": get_report_script_field("form.pact_id"),
        "encounter_date": get_report_script_field('form.encounter_date'),
        "username": get_report_script_field('form.meta.username', is_known=True),
        "visit_type": get_report_script_field('form.visit_type'),
        "visit_kept": get_report_script_field('form.visit_kept'),
        "contact_type": get_report_script_field('form.contact_type'),
        "observed_art": get_report_script_field('form.observed_art'),
        "observed_non_art": get_report_script_field('form.observed_non_art'),
        "observer_non_art_dose": get_report_script_field('form.observed_non_art_dose'),
        "observed_art_dose": get_report_script_field('form.observed_art_dose'),
        "pillbox_check": get_report_script_field('form.pillbox_check.check'),
        "scheduled": get_report_script_field('form.scheduled'),
    }

    term_block = {'form.#type': 'dots_form'}
    if username is not None:
        term_block['form.meta.username'] = username
    query = xform_es.by_case_id_query(PACT_DOMAIN, case_id, terms=term_block,
                                      date_field='form.encounter_date.#value', startdate=query_date,
                                      enddate=query_date)
    query['sort'] = {'received_on': 'asc'}
    query['script_fields'] = script_fields
    query['size'] = 1
    query['from'] = 0
    res = xform_es.run_query(query)
    print simplejson.dumps(res, indent=2)
    return res
Exemplo n.º 3
0
    def report_context(self):
        ret = {}
        if 'dot_patient' not in self.request.GET or self.request.GET.get(
                'dot_patient') == "":
            self.report_template_path = "pact/dots/dots_report_nopatient.html"
            return ret
        submit_id = self.request.GET.get('submit_id', None)
        ret['dot_case_id'] = self.request.GET['dot_patient']
        casedoc = PactPatientCase.get(ret['dot_case_id'])
        ret['patient_case'] = casedoc
        start_date_str = self.request.GET.get(
            'startdate',
            json_format_date(datetime.utcnow() - timedelta(days=7)))
        end_date_str = self.request.GET.get(
            'enddate', json_format_date(datetime.utcnow()))

        start_date = datetime.combine(iso_string_to_date(start_date_str),
                                      time())
        end_date = datetime.combine(iso_string_to_date(end_date_str), time())

        ret['startdate'] = start_date_str
        ret['enddate'] = end_date_str

        dcal = DOTCalendarReporter(casedoc,
                                   start_date=start_date,
                                   end_date=end_date,
                                   submit_id=submit_id)
        ret['dot_calendar'] = dcal

        unique_visits = dcal.unique_xforms()
        xform_es = ReportXFormES(PACT_DOMAIN)

        q = xform_es.base_query(size=len(unique_visits))
        lvisits = list(unique_visits)
        if len(lvisits) > 0:
            q['filter']['and'].append({"ids": {"values": lvisits}})
            #todo double check pactid/caseid matches
        q['sort'] = {'received_on': 'desc'}
        res = xform_es.run_query(q)

        #ugh, not storing all form data by default - need to get?
        ret['sorted_visits'] = [
            DOTSubmission.wrap(x['_source']) for x in [
                x for x in res['hits']['hits']
                if x['_source']['xmlns'] == XMLNS_DOTS_FORM
            ]
        ]
        return ret
Exemplo n.º 4
0
    def handle(self, **options):
        xform_es = ReportXFormES(PACT_DOMAIN)
        offset = 0

        q = REPORT_XFORM_MISSING_DOTS_QUERY
        q['size'] = CHUNK_SIZE

        while True:
            #            q['from'] = offset
            res = xform_es.run_query(q)
            print("####### Query block total: %s" % res['hits']['total'])
            print(res['hits']['hits'])
            if len(res['hits'].get('hits', [])) == 0:
                break
            else:
                for hit in res['hits']['hits']:
                    doc_id = hit['_id']
                    if doc_id in self.seen_doc_ids:
                        continue
                    else:
                        self.seen_doc_ids[doc_id] = 1
            offset += CHUNK_SIZE
Exemplo n.º 5
0
    def report_context(self):
        ret = {}
        if not self.request.GET.has_key('dot_patient') or self.request.GET.get('dot_patient') == "":
            self.report_template_path = "pact/dots/dots_report_nopatient.html"
            return ret
        submit_id = self.request.GET.get('submit_id', None)
        ret['dot_case_id'] = self.request.GET['dot_patient']
        casedoc = PactPatientCase.get(ret['dot_case_id'])
        ret['patient_case'] = casedoc
        start_date_str = self.request.GET.get('startdate',
                                              (datetime.utcnow() - timedelta(days=7)).strftime(
                                                  '%Y-%m-%d'))
        end_date_str = self.request.GET.get('enddate', datetime.utcnow().strftime("%Y-%m-%d"))

        start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
        end_date = datetime.strptime(end_date_str, "%Y-%m-%d")

        ret['startdate'] = start_date_str
        ret['enddate'] = end_date_str

        dcal = DOTCalendarReporter(casedoc, start_date=start_date, end_date=end_date, submit_id=submit_id)
        ret['dot_calendar'] = dcal

        unique_visits = dcal.unique_xforms()
        xform_es = ReportXFormES(PACT_DOMAIN)

        q = xform_es.base_query(size=len(unique_visits))
        lvisits = list(unique_visits)
        if len(lvisits) > 0:
            q['filter']['and'].append({"ids": {"values": lvisits}})
            #todo double check pactid/caseid matches
        q['sort'] = {'received_on': 'desc'}
        res = xform_es.run_query(q)

        #ugh, not storing all form data by default - need to get?
        ret['sorted_visits'] = [DOTSubmission.wrap(x['_source']) for x in
                                filter(lambda x: x['_source']['xmlns'] == XMLNS_DOTS_FORM,
                                       res['hits']['hits'])]
        return ret
Exemplo n.º 6
0
    def handle_noargs(self, **options):
        xform_es = ReportXFormES(PACT_DOMAIN)
        offset = 0

        q = REPORT_XFORM_MISSING_DOTS_QUERY
        q['size'] = CHUNK_SIZE

        while True:
#            q['from'] = offset
            res = xform_es.run_query(q)
            print "####### Query block total: %s" % res['hits']['total']
            print res['hits']['hits']
            if len(res['hits'].get('hits', [])) == 0:
                break
            else:
                for hit in res['hits']['hits']:
                    doc_id = hit['_id']
                    if self.seen_doc_ids.has_key(doc_id):
                        continue
                    else:
                        self.seen_doc_ids[doc_id ] =1
            offset += CHUNK_SIZE