Exemple #1
0
 def submission_or_completion_time(self):
     time = iso_string_to_datetime(safe_index(self.form, self.report.time_field.split('.')))
     if self.report.by_submission_time:
         user_time = ServerTime(time).user_time(self.report.timezone)
     else:
         user_time = PhoneTime(time, self.report.timezone).user_time(self.report.timezone)
     return user_time.ui_string(USER_DATETIME_FORMAT_WITH_SEC)
Exemple #2
0
    def rows(self):
        def form_data_link(instance_id):
            return "<a class='ajax_dialog' href='%(url)s'>%(text)s</a>" % {
                "url": absolute_reverse('render_form_data', args=[self.domain, instance_id]),
                "text": _("View Form")
            }

        submissions = [res['_source'] for res in self.es_results.get('hits', {}).get('hits', [])]

        for form in submissions:
            uid = form["form"]["meta"]["userID"]
            username = form["form"]["meta"].get("username")
            try:
                if username not in ['demo_user', 'admin']:
                    full_name = get_cached_property(CouchUser, uid, 'full_name', expiry=7*24*60*60)
                    name = '"%s"' % full_name if full_name else ""
                else:
                    name = ""
            except (ResourceNotFound, IncompatibleDocument):
                name = "<b>[unregistered]</b>"

            init_cells = [
                form_data_link(form["_id"]),
                (username or _('No data for username')) + (" %s" % name if name else ""),
                DateTimeProperty().wrap(safe_index(form, self.time_field.split('.'))).strftime("%Y-%m-%d %H:%M:%S"),
                xmlns_to_name(self.domain, form.get("xmlns"), app_id=form.get("app_id")),
            ]
            def cell(field):
                return form["form"].get(field)
            init_cells.extend([cell(field) for field in self.other_fields])
            yield init_cells
Exemple #3
0
    def rows(self):
        def form_data_link(instance_id):
            return "<a class='ajax_dialog' target='_new' href='%(url)s'>%(text)s</a>" % {
                "url":
                absolute_reverse('render_form_data',
                                 args=[self.domain, instance_id]),
                "text":
                _("View Form")
            }

        submissions = [
            res['_source']
            for res in self.es_results.get('hits', {}).get('hits', [])
        ]

        for form in submissions:
            uid = form["form"]["meta"]["userID"]
            username = form["form"]["meta"].get("username")
            try:
                if username not in ['demo_user', 'admin']:
                    full_name = get_cached_property(CouchUser,
                                                    uid,
                                                    'full_name',
                                                    expiry=7 * 24 * 60 * 60)
                    name = '"%s"' % full_name if full_name else ""
                else:
                    name = ""
            except (ResourceNotFound, IncompatibleDocument):
                name = "<b>[unregistered]</b>"

            time = iso_string_to_datetime(
                safe_index(form, self.time_field.split('.')))
            if self.by_submission_time:
                user_time = ServerTime(time).user_time(self.timezone)
            else:
                user_time = PhoneTime(time,
                                      self.timezone).user_time(self.timezone)

            init_cells = [
                form_data_link(form["_id"]),
                (username or _('No data for username')) +
                (" %s" % name if name else ""),
                user_time.ui_string(USER_DATETIME_FORMAT_WITH_SEC),
                xmlns_to_name(self.domain,
                              form.get("xmlns"),
                              app_id=form.get("app_id")),
            ]

            def cell(field):
                return form["form"].get(field)

            init_cells.extend([cell(field) for field in self.other_fields])
            yield init_cells
Exemple #4
0
 def from_bhoma_case(cls, case):
     if not case.patient:
         logging.warning("No patient found found inside %s, will not be downloaded to phone" % case)
         return None
     
     # complicated logic, but basically a case is open based on the conditions 
     # below which amount to it not being closed, and if it has a start date, 
     # that start date being before or up to today
     open_inner_cases = [cinner for cinner in case.commcare_cases if not cinner.closed]
                            
     if len(open_inner_cases) == 0:
         logging.warning("No open case found inside %s, will not be downloaded to phone" % case)
         return None
     elif len(open_inner_cases) > 1:
         logging.warning("More than one open case found inside %s.  Only the most recent will not be downloaded to phone" % case)
         ccase = sorted(open_inner_cases, key=lambda case: case.opened_on)[0]
     else:
         ccase = open_inner_cases[0]
     return PhoneCase(**{"case_id": ccase._id,
                         "date_modified": case.modified_on,
                         "case_type_id": const.CASE_TYPE_BHOMA_FOLLOWUP,
                         "user_id": ccase.user_id,
                         "case_name": ccase.name,
                         "external_id": ccase.external_id,
                         "patient_id": case.patient.get_id,
                         "patient_rev": case.patient.get_rev,
                         "first_name": case.patient.first_name,
                         "last_name": case.patient.last_name,
                         "birth_date": case.patient.birthdate,
                         "birth_date_est": case.patient.birthdate_estimated, 
                         "age": case.patient.formatted_age, 
                         "sex": case.patient.gender,
                         "village": ', '.join(filter(lambda s: s, [case.patient.address.address, case.patient.address.village])),
                         "contact": case.patient.default_phone,
                         "bhoma_case_id": case.get_id, # TODO: remove? duplicate with external_id
                         "bhoma_patient_id": case.patient.get_id, 
                         
                         "followup_type": phonehacks.followup_type_transform(ccase.followup_type), # (post-hospital, missed appt, chw followup, etc.)
                         "orig_visit_type": phonehacks.original_visit_type_transform(case.get_encounter().type), # (general, under-5, etc.)
                         "orig_visit_diagnosis": case.type,
                         "orig_visit_date": case.get_encounter().visit_date,
                         "activation_date": ccase.activation_date, 
                         "due_date": ccase.due_date, 
                         
                         "missed_appt_date": safe_index(ccase, ["missed_appointment_date",]),
                         "start_date": ccase.start_date,
                         "ltfu_date": case.ltfu_date,
                         "visit_number": ccase.visit_number,
                         })
Exemple #5
0
    def rows(self):
        def form_data_link(instance_id):
            return "<a class='ajax_dialog' href='%(url)s'>%(text)s</a>" % {
                "url": reverse('render_form_data',
                               args=[self.domain, instance_id]),
                "text": _("View Form")
            }

        submissions = [
            res['_source']
            for res in self.es_results.get('hits', {}).get('hits', [])
        ]

        for form in submissions:
            uid = form["form"]["meta"]["userID"]
            username = form["form"]["meta"].get("username")
            try:
                if username not in ['demo_user', 'admin']:
                    full_name = get_cached_property(CouchUser,
                                                    uid,
                                                    'full_name',
                                                    expiry=7 * 24 * 60 * 60)
                    name = '"%s"' % full_name if full_name else ""
                else:
                    name = ""
            except (ResourceNotFound, IncompatibleDocument):
                name = "<b>[unregistered]</b>"

            init_cells = [
                form_data_link(form["_id"]),
                (username or _('No data for username')) +
                (" %s" % name if name else ""),
                DateTimeProperty().wrap(
                    safe_index(form, self.time_field.split('.'))).strftime(
                        "%Y-%m-%d %H:%M:%S"),
                xmlns_to_name(self.domain,
                              form.get("xmlns"),
                              app_id=form.get("app_id")),
            ]

            def cell(field):
                return form["form"].get(field)

            init_cells.extend([cell(field) for field in self.other_fields])
            yield init_cells
Exemple #6
0
def not_on_haart(visit_data):
    haart = safe_index(visit_data, ["on_haart"])
    if haart is not None:
        return haart == "n"
    return False
Exemple #7
0
def get_hiv_result(healthy_visit):
    hiv = safe_index(healthy_visit, ["hiv_result"])
    if hiv:  return hiv
    return None
Exemple #8
0
 def xpath(self, path):
     """
     Evaluates an xpath expression like: path/to/node and returns the value 
     of that element, or None if there is no value.
     """
     return safe_index(self, path.split("/"))