Example #1
0
def get_daily_activity_values(name, form_list, chw, member_list, start_date, end_date, stats, domain):
    # get a sum of all the forms
    member_list = [r.chw_username for r in ReporterProfile.objects.filter(domain=domain)]
    if chw not in member_list: raise Exception("No matching CHW could be identified")
    username_counts = get_username_count(form_list, member_list, start_date, end_date)
    date = start_date
    day = timedelta(days=1)
    values_per_day = Values( name )
    if chw in username_counts:
        for daily_count in username_counts[chw]:
            # values are tuples of dates and daily counts
            values_per_day.append( (date.strftime("%Y-%m-%d"), daily_count) )
            date = date + day
    else:
        # should return a set of '0s' even when no forms submitted
        timespan = get_timespan(start_date, end_date)
        for i in range(0,timespan.days+1):
            values_per_day.append( (date.strftime("%Y-%m-%d"), 0) )
            date = date + day
    values_per_day.run_stats(stats)
    return values_per_day
Example #2
0
def get_user_activity_report(request, ids, index, value, start_date, end_date, stats):
    """ CHW Group Total Activity Report - submissions per user over time

    ids: list of form id's
    index: title for the x-axis. something like, 'users', 'chws', etc. 
    value: title for the y-axis. usually corresponds to the form name(s)
    start_date: start of reporting period
    end_date: end of reporting period
    stats: any requested stats. 
    Returns a Report object populated with requested data. 
    
    """    

    domain = request.user.selected_domain
    if not ids: raise Exception("The requested form was not found")
    
    _report = Report("CHW Group Total Activity Report")
    _report.generating_url = request.path
    metadata = Metadata.objects.filter(timestart__gte=start_date)
    # the query below is used if you want to query by submission time (instead of form completion time)
    #metadata = Metadata.objects.filter(attachment__submission__submit_time__gte=start_date)
    
    # since we are working at a granularity of 'days', we want to make sure include 
    # complete days in our queries, so we round up
    timespan = get_timespan(start_date, end_date)
    delta = timedelta(days=timespan.days+1)
    metadata = metadata.filter(timeend__lt=start_date+delta)
    # the query below is used if you want to query by submission time (instead of form completion time)
    #metadata = metadata.filter(attachment__submission__submit_time__lte=end_date)
    
    dataset = DataSet( unicode(value[0]) + " per " + unicode(index) )
    dataset.indices = unicode(index)
    dataset.params = request.GET

    # when 'organization' is properly populated, we can start using that
    #       member_list = utils.get_members(organization)
    # for now, just use domain
    member_list = [r.chw_username for r in ReporterProfile.objects.filter(domain=domain).order_by("chw_username")]

    # get a sum of all forms
    visits_per_member = Values( "visits" )
    for member in member_list:
        visits_per_member.append( (member, metadata.filter(username=member).count()) )
    visits_per_member.run_stats(stats)
    visits_per_member.sort(key=operator.itemgetter(1), reverse=True) 
    dataset.valuesets.append( visits_per_member )
    
    # this report only requires the first form. you can imagine other reports doing 
    # this iteration: for id in ids:
    form_per_member = Values( unicode(value[0]) )
    form_metadata = metadata.filter(formdefmodel=ids[0])
    for member in member_list:
        # values are tuples of dates and counts
        form_per_member.append( (member, form_metadata.filter(username=member).count()) )
    form_per_member.run_stats(stats)
    form_per_member.sort(key=operator.itemgetter(1), reverse=True) 
    dataset.valuesets.append( form_per_member )
    
    _report.datasets.append(dataset)
    return _report