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
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
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
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
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
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