def test_data_monthly_adolescent_girls(self): data = get_demographics_data( 'icds-cas', (2017, 6, 1), { 'month': (2017, 5, 1), 'prev_month': (2017, 4, 1), 'aggregation_level': 1 }) expected = { "redirect": "demographics/adolescent_girls", "all": 24, "format": "percent_and_div", "color": "red", "percent": 37.49999999999998, "value": 2, "label": OUT_OF_SCHOOL_ADOLESCENT_GIRLS_11_14_YEARS, "frequency": "month", "help_text": percent_adolescent_girls_enrolled_help_text_v2() } self.assertDictEqual(expected, data['records'][2][1])
def get_adolescent_girls_data_map(domain, config, loc_level, show_test=False, beta=False): valid_col_name = 'cases_person_adolescent_girls_11_14_out_of_school' all_col_name = 'cases_person_adolescent_girls_11_14_all_v2' valid_num_title = 'Number of adolescent girls (11-14 years) who are out of school:' all_num_title = 'Total Number of adolescent girls (11-14 years) who are registered:' percent_title = 'Percentage of adolescent girls (11-14 years) who are out of school:' info_text = percent_adolescent_girls_enrolled_help_text_v2() def get_data_for(filters): filters['month'] = datetime(*filters['month']) queryset = AggAwcMonthly.objects.filter(**filters).values( '%s_name' % loc_level, '%s_map_location_name' % loc_level).annotate( valid=Sum(valid_col_name), all=Sum(all_col_name), ).order_by('%s_name' % loc_level, '%s_map_location_name' % loc_level) if not show_test: queryset = apply_exclude(domain, queryset) return queryset data_for_map = defaultdict( lambda: { 'valid': 0, 'all': 0, 'original_name': [], 'fillKey': 'Out of school Adolescent Girls' }) average = [] total_valid = 0 total = 0 for row in get_data_for(config): valid = row['valid'] or 0 all_adolescent = row['all'] or 0 name = row['%s_name' % loc_level] on_map_name = row['%s_map_location_name' % loc_level] or name average.append(valid) total_valid += valid total += all_adolescent data_for_map[on_map_name]['valid'] += valid data_for_map[on_map_name]['all'] += all_adolescent data_for_map[on_map_name]['original_name'].append(name) fills = OrderedDict() fills.update({'Out of school Adolescent Girls': MapColors.BLUE}) if beta: fills.update({'Not Launched': MapColors.GREY}) fills.update({'defaultFill': MapColors.GREY}) return { "slug": "adolescent_girls", "label": "", "fills": fills, "rightLegend": { "average": '%.2f' % (total_valid * 100 / float(total or 1)), "info": info_text, "extended_info": [{ 'indicator': valid_num_title, 'value': indian_formatted_number(total_valid) }, { 'indicator': all_num_title, 'value': indian_formatted_number(total) }, { 'indicator': percent_title, 'value': '%.2f%%' % (total_valid * 100 / float(total or 1)) }] }, "data": dict(data_for_map), }
def get_demographics_data(domain, now_date, config, show_test=False, beta=False): now_date = datetime(*now_date) current_month = datetime(*config['month']) previous_month = datetime(*config['prev_month']) del config['month'] del config['prev_month'] def get_data_for(query_class, filters): queryset = query_class.objects.filter( **filters).values('aggregation_level').annotate( household=Sum('cases_household'), child_health=Sum('cases_child_health'), child_health_all=Sum('cases_child_health_all'), ccs_pregnant=Sum('cases_ccs_pregnant'), ccs_pregnant_all=Sum('cases_ccs_pregnant_all'), css_lactating=Sum('cases_ccs_lactating'), css_lactating_all=Sum('cases_ccs_lactating_all'), person_adolescent=Sum('cases_person_adolescent_girls_11_14'), person_adolescent_all=Sum( 'cases_person_adolescent_girls_11_14_all'), person_aadhaar=Sum(person_has_aadhaar_column(beta)), all_persons=Sum(person_is_beneficiary_column(beta))) if not show_test: queryset = apply_exclude(domain, queryset) return queryset if beta: config['month'] = current_month data = get_data_for(AggAwcMonthly, config) config['month'] = previous_month prev_data = get_data_for(AggAwcMonthly, config) frequency = 'month' else: if current_month.month == now_date.month and current_month.year == now_date.year: config['date'] = now_date.date() data = None # keep the record in searched - current - month while data is None or (not data and config['date'].day != 1): config['date'] -= relativedelta(days=1) data = get_data_for(AggAwcDailyView, config) prev_data = None while prev_data is None or (not prev_data and config['date'].day != 1): config['date'] -= relativedelta(days=1) prev_data = get_data_for(AggAwcDailyView, config) frequency = 'day' else: config['month'] = current_month data = get_data_for(AggAwcMonthly, config) config['month'] = previous_month prev_data = get_data_for(AggAwcMonthly, config) frequency = 'month' if 'date' in config: del config['date'] config['month'] = current_month ag_data = get_adolescent_girls_data(domain, config, show_test) config['month'] = previous_month ag_data_prev_data = get_adolescent_girls_data(domain, config, show_test) demographics_data = { 'records': [[{ 'label': _('Registered Households'), 'help_text': _('Total number of households registered'), 'percent': percent_increase('household', data, prev_data), 'color': get_color_with_green_positive( percent_increase('household', data, prev_data)), 'value': get_value(data, 'household'), 'all': None, 'format': 'number', 'frequency': frequency, 'redirect': 'demographics/registered_household' }, { 'label': _(AADHAR_SEEDED_BENEFICIARIES), 'help_text': percent_aadhaar_seeded_beneficiaries_help_text(), 'percent': percent_diff('person_aadhaar', data, prev_data, 'all_persons'), 'color': get_color_with_green_positive( percent_diff('person_aadhaar', data, prev_data, 'all_persons')), 'value': get_value(data, 'person_aadhaar'), 'all': get_value(data, 'all_persons'), 'format': 'percent_and_div', 'frequency': frequency, 'redirect': 'demographics/adhaar' }], [{ 'label': _(CHILDREN_ENROLLED_FOR_ANGANWADI_SERVICES), 'help_text': percent_children_enrolled_help_text(), 'percent': percent_diff('child_health', data, prev_data, 'child_health_all'), 'color': get_color_with_green_positive( percent_diff('child_health', data, prev_data, 'child_health_all')), 'value': get_value(data, 'child_health'), 'all': get_value(data, 'child_health_all'), 'format': 'percent_and_div', 'frequency': frequency, 'redirect': 'demographics/enrolled_children' }, { 'label': _(PREGNANT_WOMEN_ENROLLED_FOR_ANGANWADI_SERVICES), 'help_text': percent_pregnant_women_enrolled_help_text(), 'percent': percent_diff('ccs_pregnant', data, prev_data, 'ccs_pregnant_all'), 'color': get_color_with_green_positive( percent_diff('ccs_pregnant', data, prev_data, 'ccs_pregnant_all')), 'value': get_value(data, 'ccs_pregnant'), 'all': get_value(data, 'ccs_pregnant_all'), 'format': 'percent_and_div', 'frequency': frequency, 'redirect': 'demographics/enrolled_women' }], [{ 'label': _(LACTATING_WOMEN_ENROLLED_FOR_ANGANWADI_SERVICES), 'help_text': percent_lactating_women_enrolled_help_text(), 'percent': percent_diff('css_lactating', data, prev_data, 'css_lactating_all'), 'color': get_color_with_green_positive( percent_diff('css_lactating', data, prev_data, 'css_lactating_all')), 'value': get_value(data, 'css_lactating'), 'all': get_value(data, 'css_lactating_all'), 'format': 'percent_and_div', 'frequency': frequency, 'redirect': 'demographics/lactating_enrolled_women' }, { 'label': _(OUT_OF_SCHOOL_ADOLESCENT_GIRLS_11_14_YEARS), 'help_text': percent_adolescent_girls_enrolled_help_text_v2(), 'percent': percent_diff('person_adolescent', ag_data, ag_data_prev_data, 'person_adolescent_all'), 'color': get_color_with_red_positive( percent_diff('person_adolescent', ag_data, ag_data_prev_data, 'person_adolescent_all')), 'value': get_value(ag_data, 'person_adolescent'), 'all': get_value(ag_data, 'person_adolescent_all'), 'format': 'percent_and_div', 'frequency': frequency, 'redirect': 'demographics/adolescent_girls' }]] } return demographics_data
def get_adolescent_girls_sector_data(domain, config, loc_level, location_id, show_test=False, beta=False): valid_col_name = 'cases_person_adolescent_girls_11_14_out_of_school' all_col_name = 'cases_person_adolescent_girls_11_14_all_v2' info_text = percent_adolescent_girls_enrolled_help_text_v2() group_by = ['%s_name' % loc_level] config['month'] = datetime(*config['month']) data = AggAwcMonthly.objects.filter( **config ).values( *group_by ).annotate( valid=Sum(valid_col_name), all=Sum(all_col_name), ).order_by('%s_name' % loc_level) if not show_test: data = apply_exclude(domain, data) chart_data = { 'blue': [] } tooltips_data = defaultdict(lambda: { 'valid': 0, 'all': 0 }) for row in data: valid = row['valid'] or 0 all_adolescent = row['all'] or 0 name = row['%s_name' % loc_level] row_values = { 'valid': valid, 'all': all_adolescent } for prop, value in row_values.items(): tooltips_data[name][prop] += value chart_data['blue'].append([ name, valid ]) chart_data['blue'] = sorted(chart_data['blue']) return { "tooltips_data": dict(tooltips_data), "format": "number", "info": info_text, "chart_data": [ { "values": chart_data['blue'], "key": "Number Of Girls", "strokeWidth": 2, "classed": "dashed", "color": MapColors.BLUE } ] }