Esempio n. 1
0
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)
Esempio n. 3
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
 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)
Esempio n. 8
0
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