Пример #1
0
 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])
Пример #2
0
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),
    }
Пример #3
0
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
Пример #4
0
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
            }
        ]
    }