def pi_details(request): year = int(request.GET["year"]) month = int(request.GET["month"]) clinic = request.GET["clinic"] report_slug = request.GET["report"] col_slug = request.GET["col"] results = get_db().view(const.get_view_name(report_slug), reduce=False, key=[year, month -1, clinic, col_slug], include_docs=True) forms = [] for row in results: num, denom = row["value"] # only count forms for now, and make sure they have a patient id # and contributed to the report denominator if row["doc"]["doc_type"] == "CXFormInstance" and denom > 0: form = CXFormInstance.wrap(row["doc"]) try: form.patient_id = form.xpath("case/patient_id") form.bhoma_patient_id = CPatient.get(form.patient_id).formatted_id except ResourceNotFound: form.patient = form.patient_id = form.bhoma_patient_id = None form.num = num form.denom = denom form.good = num == denom forms.append(form) elif row["doc"]["doc_type"] == "PregnancyReportRecord" and denom > 0: # for the pregnancy PI force the aggregated pregnancy docs # to look like forms preg = PregnancyReportRecord.wrap(row["doc"]) try: preg.bhoma_patient_id = CPatient.get(preg.patient_id).formatted_id except ResourceNotFound: form.patient = form.patient_id = form.bhoma_patient_id = None preg.num = num preg.denom = denom preg.good = num == denom preg.encounter_date = preg.first_visit_date forms.append(preg) title = "PI Details - %s: %s (%s, %s)" % (const.get_name(report_slug), const.get_display_name(report_slug, col_slug), datetime(year, month, 1).strftime("%B %Y"), clinic_display_name(clinic)) return render_to_response(request, "reports/pi_details.html", {"report": {"name": title}, "forms": forms})
def disease_details(request): year = int(request.GET["year"]) month = int(request.GET["month"]) clinic = request.GET["clinic"] report_slug = request.GET["report"] col_slug = request.GET["col"] results = get_db().view(const.get_view_name(report_slug), reduce=True, startkey=[year, month -1, clinic, col_slug], endkey=[year, month -1, clinic, col_slug, {}], group=True, group_level=5) results_dict = dict([(row["key"][4], row["value"]) for row in results]) title = "Clinic: %s, Category: %s, %s" % \ (clinic_display_name(clinic), const.get_display_name(report_slug, col_slug), datetime(year, month, 1).strftime("%B, %Y")) return render_to_response(request, "reports/disease_details.html", {"report": {"name": title}, "values": results_dict})
def entrytime(request): clinic_id = request.GET.get("clinic", None) user_id = request.GET.get("user", None) user_data = {} data = {} name = "Form Entry Time Report" if clinic_id: user_data = get_users(clinic_id) if user_id: selected_user = [user for user, _ in user_data if user["_id"] == user_id][0] name = "Form Entry Time Report for %s at %s" % (render_user_inline(selected_user), clinic_display_name(clinic_id)) else: name = "Form Entry Time Report for %s (%s)" % (clinic_display_name(clinic_id), clinic_id) clinic_data = get_clinics() return render_to_response(request, "reports/entrytimes.html", {"report": {"name": name}, "chart_extras": get_sparkline_extras(data), "clinic_data": clinic_data, "user_data": user_data, "clinic_id": clinic_id, "user_id": user_id})
def punchcard(request): # todo clinic_id = request.GET.get("clinic", None) user_id = request.GET.get("user", None) url = None user_data = {} name = "Punchcard Report" if clinic_id: url = get_punchcard_url(get_data(clinic_id, user_id)) user_data = get_users(clinic_id) if user_id: selected_user = [user for user, _ in user_data if user["_id"] == user_id][0] name = "Punchcard Report for %s at %s" % (render_user_inline(selected_user), clinic_display_name(clinic_id)) else: name = "Punchcard Report for %s (%s)" % (clinic_display_name(clinic_id), clinic_id) clinic_data = get_clinics() return render_to_response(request, "reports/punchcard.html", {"report": {"name": name}, "chart_url": url, "clinic_data": clinic_data, "user_data": user_data, "clinic_id": clinic_id, "user_id": user_id})
def wrapper(error): def truncate(message, length=100, append="..."): if length < len(append): raise Exception("Can't truncate to less than %s characters!" % len(append)) return "%s%s" % (message[:length], append) if len(message) > length else message def format_type(type): return escape(type) clinic_code = error.clinic_id if "clinic_id" in error else None clinic_display = "%s (%s)" % (clinic_display_name(clinic_code), clinic_code)\ if clinic_code else "UNKNOWN" return [error.get_id, error.archived, clinic_display, error.date.strftime('%Y-%m-%d %H:%M:%S') if error.date else "", format_type(error.type), truncate(error.message), error.url, "archive", "email"]
def current_clinic_display(self): return clinic_display_name(self.address.clinic_id)
def clinics_display(self): return [clinic_display_name(clinic_id) for clinic_id in self.clinic_ids]
def households(self): return [clinic_display_name(clinic_id) for clinic_id in self.clinic_ids]