def fhd_submission_stats(request, district_id=None): stats = [] # columns to be sent to generic start out as blank user_location = Location.objects.get(pk=district_id) if district_id else get_location_for_user(request.user) location = Location.tree.root_nodes()[0] dates = get_xform_dates(request) values = total_attribute_value(['dpt_males'], start_date=dates.get('start'), end_date=dates.get('end'), location=location) stats.append(('males', location_values(user_location, values))) values = total_attribute_value(['dpt_females'], start_date=dates.get('start'), end_date=dates.get('end'), location=location) stats.append(('females', location_values(user_locaiton, values))) res = {'dates': dates, 'stats': stats} return res
def notifiable_disease_test(request): METRICS = { 'malaria': { 'threshold': 3, 'slug': 'cases_ma', 'gen': mk_notifiable_disease_alert, } } REPORTING_INTERVAL = 'weekly' timestamp = datetime.now() if REPORTING_INTERVAL == 'weekly': yr, wk, dow = timestamp.isocalendar() reporting_period = '%dw%02d' % (yr, wk) #period_start = timestamp.date() - timedelta(days=dow - 1) #period_end = period_start + timedelta(days=6) period_start = datetime(2012, 1, 1) period_end = timestamp print period_start, period_end else: raise Exception('unsupported reporting interval [%s]' % REPORTING_INTERVAL) for metric, info in METRICS.iteritems(): #todo: is the end date inclusive or exclusive? data = total_attribute_value(info['slug'], period_start, period_end, Location.objects.get(name='Uganda')) for total in data: loc = Location.objects.get(id=total['location_id']) val = total['value'] if val > info['threshold']: # trigger alert yield info['gen'](metric, 'alerts._prototyping.NotifiableDiseaseThresholdAlert', reporting_period, val, loc)
def abuse_stats(request, district_id=None): stats = [] user_location = get_location(request, district_id) location = Location.tree.root_nodes()[0] start_date, end_date = previous_calendar_month() dates = {"start": start_date, "end": end_date} values = total_attribute_value("gemabuse_cases", start_date=start_date, end_date=end_date, location=location) stats.append(("GEM reported abuse cases", location_values(user_location, values))) htabuse = ( Poll.objects.get(name="emis_abuse") .responses.exclude(has_errors=True) .filter(date__range=(start_date, end_date)) .filter( message__connection__contact__emisreporter__reporting_location__in=user_location.get_descendants( include_self=True ).all() ) .values("eav_values__value_int") .annotate(Sum("eav_values__value_int")) .values_list("eav_values__value_int__sum", flat=True) ) stats.append(("headteacher reported abuse cases", htabuse[0] if htabuse[0] else "-")) res = {} res["dates"] = dates res["stats"] = stats return res
def attendance_stats(district): stats = [] location = Location.tree.root_nodes()[0] start_date, end_date = previous_calendar_week() dates = {'start':start_date, 'end':end_date} # import pdb;pdb.set_trace() boys = ["boys_%s" % g for g in GRADES] values = total_attribute_value(boys, start_date=start_date, end_date=end_date, location=location) stats.append(('boys', location_values(district, values))) girls = ["girls_%s" % g for g in GRADES] values = total_attribute_value(girls, start_date=start_date, end_date=end_date, location=location) stats.append(('girls', location_values(district, values))) total_pupils = ["boys_%s" % g for g in GRADES] + ["girls_%s" % g for g in GRADES] values = total_attribute_value(total_pupils, start_date=start_date, end_date=end_date, location=location) stats.append(('total pupils', location_values(district, values))) values = total_attribute_value("teachers_f", start_date=start_date, end_date=end_date, location=location) stats.append(('female teachers', location_values(district, values))) values = total_attribute_value("teachers_m", start_date=start_date, end_date=end_date, location=location) stats.append(('male teachers', location_values(district, values))) values = total_attribute_value(["teachers_f", "teachers_m"], start_date=start_date, end_date=end_date, location=location) stats.append(('total teachers', location_values(district, values))) res = {} res['dates'] = dates res['stats'] = stats return res
def attendance_stats(district): stats = [] location = Location.tree.root_nodes()[0] start_date, end_date = previous_calendar_week() dates = {'start': start_date, 'end': end_date} # import pdb;pdb.set_trace() boys = ["boys_%s" % g for g in GRADES] values = total_attribute_value(boys, start_date=start_date, end_date=end_date, location=location) stats.append(('boys', location_values(district, values))) girls = ["girls_%s" % g for g in GRADES] values = total_attribute_value(girls, start_date=start_date, end_date=end_date, location=location) stats.append(('girls', location_values(district, values))) total_pupils = ["boys_%s" % g for g in GRADES] + ["girls_%s" % g for g in GRADES] values = total_attribute_value(total_pupils, start_date=start_date, end_date=end_date, location=location) stats.append(('total pupils', location_values(district, values))) values = total_attribute_value("teachers_f", start_date=start_date, end_date=end_date, location=location) stats.append(('female teachers', location_values(district, values))) values = total_attribute_value("teachers_m", start_date=start_date, end_date=end_date, location=location) stats.append(('male teachers', location_values(district, values))) values = total_attribute_value(["teachers_f", "teachers_m"], start_date=start_date, end_date=end_date, location=location) stats.append(('total teachers', location_values(district, values))) res = {} res['dates'] = dates res['stats'] = stats return res
def enrollment_stats(request, district_id=None): stats = [] user_location = get_location(request, district_id) location = Location.tree.root_nodes()[0] # start_date, end_date = previous_calendar_week() start_date = datetime.datetime(datetime.datetime.now().year, 1, 1) end_date = datetime.datetime.now() dates = {"start": start_date, "end": end_date} boys = ["enrolledb_%s" % g for g in GRADES] values = total_attribute_value(boys, start_date=start_date, end_date=end_date, location=location) stats.append(("boys", location_values(user_location, values))) girls = ["enrolledg_%s" % g for g in GRADES] values = total_attribute_value(girls, start_date=start_date, end_date=end_date, location=location) stats.append(("girls", location_values(user_location, values))) total_pupils = ["enrolledb_%s" % g for g in GRADES] + ["enrolledg_%s" % g for g in GRADES] values = total_attribute_value(total_pupils, start_date=start_date, end_date=end_date, location=location) stats.append(("total pupils", location_values(user_location, values))) values = total_attribute_value("deploy_f", start_date=start_date, end_date=end_date, location=location) stats.append(("female teachers", location_values(user_location, values))) values = total_attribute_value("deploy_m", start_date=start_date, end_date=end_date, location=location) stats.append(("male teachers", location_values(user_location, values))) values = total_attribute_value( ["deploy_f", "deploy_m"], start_date=start_date, end_date=end_date, location=location ) stats.append(("total teachers", location_values(user_location, values))) headteachers = School.objects.filter(location__in=user_location.get_descendants(include_self=True)).count() stats.append(("total head teachers", headteachers)) stats.append(("total schools", headteachers)) res = {} res["dates"] = dates res["stats"] = stats return res
def add_to_report(self, report, key, dictionary): val = total_attribute_value(self.keyword, self.start_date, self.end_date, report.location, self.extra_filters) reorganize_location(key, val, dictionary)
def attendance_stats(request, district_id=None): stats = [] user_location = get_location(request, district_id) location = Location.tree.root_nodes()[0] start_date, end_date = previous_calendar_week() dates = {"start": start_date, "end": end_date} # import pdb;pdb.set_trace() boys = ["boys_%s" % g for g in GRADES] values = total_attribute_value(boys, start_date=start_date, end_date=end_date, location=location) stats.append(("boys", location_values(user_location, values))) girls = ["girls_%s" % g for g in GRADES] values = total_attribute_value(girls, start_date=start_date, end_date=end_date, location=location) stats.append(("girls", location_values(user_location, values))) total_pupils = ["boys_%s" % g for g in GRADES] + ["girls_%s" % g for g in GRADES] values = total_attribute_value(total_pupils, start_date=start_date, end_date=end_date, location=location) attendance_ratio = location_values(user_location, values) stats.append(("total pupils", location_values(user_location, values))) enrolled_total = ["enrolledb_%s" % g for g in GRADES] + ["enrolledg_%s" % g for g in GRADES] values = total_attribute_value( enrolled_total, start_date=datetime.datetime(datetime.datetime.now().year, 1, 1), end_date=datetime.datetime.now(), location=location, ) if ( not type(location_values(user_location, values)) == str and not type(attendance_ratio) == str and location_values(user_location, values) > 0 ): attendance_ratio /= float(location_values(user_location, values)) if type(attendance_ratio) == str: stats.append(("% absent", "-")) else: stats.append(("% absent", "%0.1f%%" % (100 - (attendance_ratio * 100)))) values = total_attribute_value("teachers_f", start_date=start_date, end_date=end_date, location=location) stats.append(("female teachers", location_values(user_location, values))) values = total_attribute_value("teachers_m", start_date=start_date, end_date=end_date, location=location) stats.append(("male teachers", location_values(user_location, values))) values = total_attribute_value( ["teachers_f", "teachers_m"], start_date=start_date, end_date=end_date, location=location ) attendance_ratio = location_values(user_location, values) stats.append(("total teachers", location_values(user_location, values))) enrolled_total = ["deploy_f", "deploy_m"] values = total_attribute_value( enrolled_total, start_date=datetime.datetime(datetime.datetime.now().year, 1, 1), end_date=datetime.datetime.now(), location=location, ) if ( not type(location_values(user_location, values)) == str and not type(attendance_ratio) == str and location_values(user_location, values) > 0 ): attendance_ratio /= float(location_values(user_location, values)) if type(attendance_ratio) == str: stats.append(("% absent", "-")) else: stats.append(("% absent", "%0.1f%%" % (100 - (attendance_ratio * 100)))) res = {} res["dates"] = dates res["stats"] = stats return res