Exemplo n.º 1
0
 def get_children_percents(return_dict, row_data):
     return_dict['gm'] = percent_or_not_entered(row_data['gm_3_5'],
                                                row_data['children_3_5'])
     if should_show_25():
         return_dict['pse'] = percent_or_not_entered(
             row_data['pse_25_days'], row_data['pse_eligible'])
         return_dict['sn'] = percent_or_not_entered(
             row_data['lunch_25_days'], row_data['pse_eligible'])
     else:
         return_dict['pse'] = percent_or_not_entered(
             row_data['pse_21_days'], row_data['pse_eligible'])
         return_dict['sn'] = percent_or_not_entered(
             row_data['lunch_21_days'], row_data['pse_eligible'])
     return return_dict
Exemplo n.º 2
0
 def get_pw_lw_percents(return_dict, row_data):
     return_dict['home_visits'] = percent_or_not_entered(
         row_data['valid_visits'], row_data['expected_visits'])
     return_dict['gm'] = percent_or_not_entered(row_data['gm_0_3'],
                                                row_data['children_0_3'])
     return_dict['cbe'] = percent_or_not_entered(
         row_data['num_awcs_conducted_cbe'], row_data['num_launched_awcs'])
     if should_show_25():
         return_dict['thr'] = percent_or_not_entered(
             row_data['thr_25_days'], row_data['thr_eligible'])
     else:
         return_dict['thr'] = percent_or_not_entered(
             row_data['thr_21_days'], row_data['thr_eligible'])
     return return_dict
Exemplo n.º 3
0
def _get_pre_percents(base_dict, row_data, service_name, eligibility):
    base_dict[f'{service_name}_0_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_0_days'],
        row_data[f'{eligibility}_eligible'])
    base_dict[f'{service_name}_1_7_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_1_7_days'],
        row_data[f'{eligibility}_eligible'])
    base_dict[f'{service_name}_8_14_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_8_14_days'],
        row_data[f'{eligibility}_eligible'])
    base_dict[f'{service_name}_15_20_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_15_20_days'],
        row_data[f'{eligibility}_eligible'])
    base_dict[f'{service_name}_21_24_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_21_24_days'],
        row_data[f'{eligibility}_eligible'])
    base_dict[f'{service_name}_25_days_val'] = percent_or_not_entered(
        row_data[f'{service_name}_25_days'],
        row_data[f'{eligibility}_eligible'])
    return base_dict
Exemplo n.º 4
0
 def base_data(row_data):
     if step == 'pw_lw_children':
         return dict(
             state_name=get_value_or_data_not_entered(row_data, 'state_name'),
             district_name=get_value_or_data_not_entered(row_data, 'district_name'),
             block_name=get_value_or_data_not_entered(row_data, 'block_name'),
             supervisor_name=get_value_or_data_not_entered(row_data, 'supervisor_name'),
             awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
             num_launched_awcs=get_value_or_data_not_entered(row_data, 'num_launched_awcs'),
             valid_visits=get_value_or_data_not_entered(row_data, 'valid_visits'),
             expected_visits=get_value_or_data_not_entered(row_data, 'expected_visits'),
             home_visits=percent_or_not_entered(row_data['valid_visits'], row_data['expected_visits']),
             gm_0_3=get_value_or_data_not_entered(row_data, 'gm_0_3'),
             children_0_3=get_value_or_data_not_entered(row_data, 'children_0_3'),
             gm=percent_or_not_entered(row_data['gm_0_3'], row_data['children_0_3']),
             num_awcs_conducted_cbe=get_value_or_data_not_entered(row_data, 'num_awcs_conducted_cbe'),
             num_awcs_conducted_vhnd=get_value_or_data_not_entered(row_data, 'num_awcs_conducted_vhnd'),
             thr_given_21_days=get_value_or_data_not_entered(row_data, 'thr_given_21_days'),
             total_thr_candidates=get_value_or_data_not_entered(row_data, 'total_thr_candidates'),
             thr=percent_or_not_entered(row_data['thr_given_21_days'], row_data['total_thr_candidates']),
         )
     else:
         return dict(
             num_launched_awcs=get_value_or_data_not_entered(row_data, 'num_launched_awcs'),
             state_name=get_value_or_data_not_entered(row_data, 'state_name'),
             district_name=get_value_or_data_not_entered(row_data, 'district_name'),
             block_name=get_value_or_data_not_entered(row_data, 'block_name'),
             supervisor_name=get_value_or_data_not_entered(row_data, 'supervisor_name'),
             awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
             lunch_count_21_days=get_value_or_data_not_entered(row_data, 'lunch_count_21_days'),
             children_3_6=get_value_or_data_not_entered(row_data, 'children_3_6'),
             sn=percent_or_not_entered(row_data['lunch_count_21_days'], row_data['children_3_6']),
             pse_attended_21_days=get_value_or_data_not_entered(row_data, 'pse_attended_21_days'),
             pse=percent_or_not_entered(row_data['pse_attended_21_days'], row_data['children_3_6']),
             gm_3_5=get_value_or_data_not_entered(row_data, 'gm_3_5'),
             children_3_5=get_value_or_data_not_entered(row_data, 'children_3_5'),
             gm=percent_or_not_entered(row_data['gm_3_5'], row_data['children_3_5']),
         )
Exemplo n.º 5
0
 def base_data(row_data):
     if age_sdd == '0_3':
         return dict(
             state_name=get_value_or_data_not_entered(row_data, 'state_name'),
             district_name=get_value_or_data_not_entered(row_data, 'district_name'),
             block_name=get_value_or_data_not_entered(row_data, 'block_name'),
             supervisor_name=get_value_or_data_not_entered(row_data, 'supervisor_name'),
             awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
             num_launched_awcs=get_value_or_data_not_entered(row_data, 'num_launched_awcs'),
             valid_visits=get_value_or_data_not_entered(row_data, 'valid_visits'),
             expected_visits=get_value_or_data_not_entered(row_data, 'expected_visits'),
             home_visits=percent_or_not_entered(row_data['valid_visits'], row_data['expected_visits']),
             gm_0_3=get_value_or_data_not_entered(row_data, 'gm_0_3'),
             children_0_3=get_value_or_data_not_entered(row_data, 'children_0_3'),
             gm=percent_or_not_entered(row_data['gm_0_3'], row_data['children_0_3']),
             num_awcs_conducted_cbe=get_value_or_data_not_entered(row_data, 'num_awcs_conducted_cbe'),
             num_awcs_conducted_vhnd=get_value_or_data_not_entered(row_data, 'num_awcs_conducted_vhnd'),
             thr_given_21_days=get_value_or_data_not_entered(row_data, 'thr_given_21_days'),
             total_thr_candidates=get_value_or_data_not_entered(row_data, 'total_thr_candidates'),
             thr=percent_or_not_entered(row_data['thr_given_21_days'], row_data['total_thr_candidates']),
         )
     else:
         return dict(
             num_launched_awcs=get_value_or_data_not_entered(row_data, 'num_launched_awcs'),
             state_name=get_value_or_data_not_entered(row_data, 'state_name'),
             district_name=get_value_or_data_not_entered(row_data, 'district_name'),
             block_name=get_value_or_data_not_entered(row_data, 'block_name'),
             supervisor_name=get_value_or_data_not_entered(row_data, 'supervisor_name'),
             awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
             lunch_count_21_days=get_value_or_data_not_entered(row_data, 'lunch_count_21_days'),
             children_3_6=get_value_or_data_not_entered(row_data, 'children_3_6'),
             sn=percent_or_not_entered(row_data['lunch_count_21_days'], row_data['children_3_6']),
             pse_attended_21_days=get_value_or_data_not_entered(row_data, 'pse_attended_21_days'),
             pse=percent_or_not_entered(row_data['pse_attended_21_days'], row_data['children_3_6']),
             gm_3_5=get_value_or_data_not_entered(row_data, 'gm_3_5'),
             children_3_5=get_value_or_data_not_entered(row_data, 'children_3_5'),
             gm=percent_or_not_entered(row_data['gm_3_5'], row_data['children_3_5']),
         )
Exemplo n.º 6
0
def get_service_delivery_report_data(domain,
                                     start,
                                     length,
                                     order,
                                     reversed_order,
                                     location_filters,
                                     year,
                                     month,
                                     step,
                                     include_test=False):
    if location_filters.get('aggregation_level') == 1:
        default_order = 'state_name'
    elif location_filters.get('aggregation_level') == 2:
        default_order = 'district_name'
    elif location_filters.get('aggregation_level') == 3:
        default_order = 'block_name'
    elif location_filters.get('aggregation_level') == 4:
        default_order = 'supervisor_name'
    else:
        default_order = 'awc_name'

    location_fields = [
        'state_name', 'district_name', 'block_name', 'supervisor_name',
        'awc_name'
    ]
    value_fields = location_fields + [
        'num_launched_awcs', 'valid_visits', 'expected_visits', 'gm_0_3',
        'children_0_3', 'num_awcs_conducted_cbe', 'num_awcs_conducted_vhnd',
        'thr_21_days', 'thr_25_days', 'thr_eligible', 'lunch_21_days',
        'lunch_25_days', 'pse_eligible', 'pse_21_days', 'pse_25_days',
        'gm_3_5', 'children_3_5', 'vhnd_conducted'
    ]
    data = ServiceDeliveryReportView.objects.filter(
        month=date(year, month, 1),
        **location_filters).order_by(default_order).values(*value_fields)
    if not include_test:
        data = apply_exclude(domain, data)
    data_count = data.count()
    config = {
        'data': [],
    }

    def should_show_25():
        return year >= 2020 and month >= 4

    def update_total_row(first_dict, second_dict):
        for key, value in first_dict.items():
            # excluding location and percentage fields
            if key not in location_fields + [
                    'cbe', 'thr', 'pse', 'sn', 'gm', 'home_visits'
            ]:
                first_dict[key] = format_data_not_entered_to_zero(first_dict[key]) +\
                                  format_data_not_entered_to_zero(second_dict[key])
        return first_dict

    def get_pw_lw_percents(return_dict, row_data):
        return_dict['home_visits'] = percent_or_not_entered(
            row_data['valid_visits'], row_data['expected_visits'])
        return_dict['gm'] = percent_or_not_entered(row_data['gm_0_3'],
                                                   row_data['children_0_3'])
        return_dict['cbe'] = percent_or_not_entered(
            row_data['num_awcs_conducted_cbe'], row_data['num_launched_awcs'])
        if should_show_25():
            return_dict['thr'] = percent_or_not_entered(
                row_data['thr_25_days'], row_data['thr_eligible'])
        else:
            return_dict['thr'] = percent_or_not_entered(
                row_data['thr_21_days'], row_data['thr_eligible'])
        return return_dict

    def get_children_percents(return_dict, row_data):
        return_dict['gm'] = percent_or_not_entered(row_data['gm_3_5'],
                                                   row_data['children_3_5'])
        if should_show_25():
            return_dict['pse'] = percent_or_not_entered(
                row_data['pse_25_days'], row_data['pse_eligible'])
            return_dict['sn'] = percent_or_not_entered(
                row_data['lunch_25_days'], row_data['pse_eligible'])
        else:
            return_dict['pse'] = percent_or_not_entered(
                row_data['pse_21_days'], row_data['pse_eligible'])
            return_dict['sn'] = percent_or_not_entered(
                row_data['lunch_21_days'], row_data['pse_eligible'])
        return return_dict

    def base_data(row_data):
        if step == 'pw_lw_children':
            return_dict = dict(
                state_name=get_value_or_data_not_entered(
                    row_data, 'state_name'),
                district_name=get_value_or_data_not_entered(
                    row_data, 'district_name'),
                block_name=get_value_or_data_not_entered(
                    row_data, 'block_name'),
                supervisor_name=get_value_or_data_not_entered(
                    row_data, 'supervisor_name'),
                awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
                num_launched_awcs=get_value_or_data_not_entered(
                    row_data, 'num_launched_awcs'),
                valid_visits=get_value_or_data_not_entered(
                    row_data, 'valid_visits'),
                expected_visits=get_value_or_data_not_entered(
                    row_data, 'expected_visits'),
                gm_0_3=get_value_or_data_not_entered(row_data, 'gm_0_3'),
                children_0_3=get_value_or_data_not_entered(
                    row_data, 'children_0_3'),
                num_awcs_conducted_cbe=get_value_or_data_not_entered(
                    row_data, 'num_awcs_conducted_cbe'),
                num_awcs_conducted_vhnd=get_value_or_data_not_entered(
                    row_data, 'num_awcs_conducted_vhnd'),
                thr_21_days=get_value_or_data_not_entered(
                    row_data, 'thr_21_days'),
                thr_25_days=get_value_or_data_not_entered(
                    row_data, 'thr_25_days'),
                thr_eligible=get_value_or_data_not_entered(
                    row_data, 'thr_eligible'),
                vhnd_conducted=get_value_or_data_not_entered(
                    row_data, 'vhnd_conducted'))
            return_dict = get_pw_lw_percents(return_dict, row_data)
        else:
            return_dict = dict(
                num_launched_awcs=get_value_or_data_not_entered(
                    row_data, 'num_launched_awcs'),
                state_name=get_value_or_data_not_entered(
                    row_data, 'state_name'),
                district_name=get_value_or_data_not_entered(
                    row_data, 'district_name'),
                block_name=get_value_or_data_not_entered(
                    row_data, 'block_name'),
                supervisor_name=get_value_or_data_not_entered(
                    row_data, 'supervisor_name'),
                awc_name=get_value_or_data_not_entered(row_data, 'awc_name'),
                lunch_21_days=get_value_or_data_not_entered(
                    row_data, 'lunch_21_days'),
                lunch_25_days=get_value_or_data_not_entered(
                    row_data, 'lunch_25_days'),
                pse_eligible=get_value_or_data_not_entered(
                    row_data, 'pse_eligible'),
                pse_21_days=get_value_or_data_not_entered(
                    row_data, 'pse_21_days'),
                pse_25_days=get_value_or_data_not_entered(
                    row_data, 'pse_25_days'),
                gm_3_5=get_value_or_data_not_entered(row_data, 'gm_3_5'),
                children_3_5=get_value_or_data_not_entered(
                    row_data, 'children_3_5'))
            return_dict = get_children_percents(return_dict, row_data)
        return return_dict

    all_row = dict()

    data_length = len(data)
    for index, row in enumerate(data):
        base_row = base_data(row)
        if not all_row.keys():
            all_row = copy.deepcopy(base_row)
        else:
            all_row = update_total_row(all_row, base_row)
        config['data'].append(base_row)
    if data_length:
        # setting location params to all
        for location in location_fields:
            all_row[location] = 'All'
        # Calculating percentages for all row
        if step == 'pw_lw_children':
            get_pw_lw_percents(all_row, all_row)
            all_row['cbe_sector_percent'] = percent_or_not_entered(
                all_row['num_awcs_conducted_cbe'], data_length)
            all_row['vhnd_sector_value'] = get_value_or_data_not_entered(
                all_row, 'num_awcs_conducted_vhnd')
        else:
            get_children_percents(all_row, all_row)

        percentage_fields = ('home_visits', 'gm', 'thr', 'sn', 'pse')
        if order:
            if order in percentage_fields:
                config['data'].sort(key=lambda x: float(x[order][:-1] if x[
                    order] != DATA_NOT_ENTERED else 0),
                                    reverse=reversed_order)
            else:
                config['data'].sort(key=lambda x: x[order],
                                    reverse=reversed_order)
        config['data'] = config['data'][start:(start + length)]
        config['data'].insert(0, all_row)
    config["aggregationLevel"] = location_filters['aggregation_level']
    config["recordsTotal"] = data_count
    config["recordsFiltered"] = data_count
    return config