def charts(self): data = self.rows ret = [] sum_all = 0 colors = [] if data: data = data[0] for key in self.vals_config[data.title]: if getattr(data, key, None): sum_all = sum_all + getattr(data, key) for key in self.vals_config[data.title]: if getattr(data, key, None): entry = {} entry['value'] = round(float(getattr(data, key)) * 100 / float((sum_all or 1)), 1) colors.append(self.chart_config[key]['color']) entry['label'] = self.chart_config[key]['display'] params = ( entry['value'], getattr(data, key), entry['label'], self.config['startdate'].strftime("%b %Y") ) entry['description'] = "%.1f%% (%d) %s (%s)" % params ret.append(entry) chart = PieChart('', '', ret, color=colors) chart.marginLeft = 10 chart.marginRight = 10 chart.height = 500 return [chart]
def charts(self): if 'location_id' in self.request.GET: # hack: only get data if we're loading an actual report return [ PieChart(None, _('Current Reporting'), self.master_pie_chart_data()) ]
def charts(self): case_finding_sql_data = self.case_finding_sql_data[0] sputum_conversion_report = ReportFactory.from_spec( StaticReportConfiguration.by_id('static-%s-sputum_conversion' % self.domain), include_prefilters=True) filter_values = {'date': self.datespan} locations_id = [ Choice(value=location_id, display='') for location_id in self.report_config.locations_id if location_id ] if locations_id: filter_values['village'] = locations_id if self.report_config.is_migrated is not None: filter_values['is_migrated'] = Choice( value=self.report_config.is_migrated, display='') sputum_conversion_report.set_filter_values(filter_values) sputum_conversion_data = sputum_conversion_report.get_data()[0] charts_sql_data = self.charts_sql_data[0] treatment_outcome_sql_data = self.treatment_outcome_sql_data[0] default_value = {'sort_key': 0} chart = PieChart(title=_('Cases by Gender'), key='gender', values=[]) chart.data = [{ 'label': _('Male'), 'value': case_finding_sql_data.get('male_total', default_value)['sort_key'] }, { 'label': _('Female'), 'value': case_finding_sql_data.get('female_total', default_value)['sort_key'] }, { 'label': _('Transgender'), 'value': case_finding_sql_data.get('transgender_total', default_value)['sort_key'] }] chart2 = MultiBarChart(_('Cases By Type'), x_axis=Axis(''), y_axis=Axis('')) chart2.stacked = False chart2.showLegend = False positive_smear = case_finding_sql_data.get('new_positive_tb_pulmonary', default_value)['sort_key'] negative_smear = case_finding_sql_data.get('new_negative_tb_pulmonary', default_value)['sort_key'] positive_extra_pulmonary = case_finding_sql_data.get( 'new_positive_tb_extrapulmonary', default_value)['sort_key'] relapse_cases = case_finding_sql_data.get('recurrent_positive_tb', default_value)['sort_key'] failure_cases = case_finding_sql_data.get('failure_positive_tb', default_value)['sort_key'] lfu_cases = case_finding_sql_data.get('lfu_positive_tb', default_value)['sort_key'] others_cases = case_finding_sql_data.get('others_positive_tb', default_value)['sort_key'] chart2.add_dataset(_('New'), [{ 'x': 'Smear +ve', 'y': positive_smear }, { 'x': 'Smear -ve', 'y': negative_smear }, { 'x': 'EP', 'y': positive_extra_pulmonary }]) chart2.add_dataset(_('Retreatment'), [{ 'x': 'Relapse', 'y': relapse_cases }, { 'x': 'Failure', 'y': failure_cases }, { 'x': 'Treatment After Default', 'y': lfu_cases }, { 'x': 'Others', 'y': others_cases }]) chart3 = MultiBarChart('Sputum Conversion By Patient Type', Axis(''), Axis('')) chart3.stacked = True chart3.add_dataset('Positive', [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get( 'new_sputum_positive_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get( 'new_sputum_positive_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('positive_endofip_patients_cat2', 0) }, ]) chart3.add_dataset(_('Negative'), [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get( 'new_sputum_negative_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get( 'new_sputum_negative_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('negative_endofip_patients_cat2', 0) }, ]) chart3.add_dataset('NA', [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get('new_sputum_na_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get('new_sputum_na_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('na_endofip_patients_cat2', 0) }, ]) chart4 = PieChart(title=_('Total number of patients by category'), key='', values=[]) chart4.data = [{ 'label': _('Cat1'), 'value': charts_sql_data.get('cat1_patients', default_value)['sort_key'] }, { 'label': _('Cat2'), 'value': charts_sql_data.get('cat2_patients', default_value)['sort_key'] }] chart5 = MultiBarChart('Outcome By Type', Axis(''), Axis('')) chart5.stacked = True chart5.add_dataset(_('Cured'), [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_cured', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_cured', default_value)['sort_key'] }]) chart5.add_dataset('Treatment Complete', [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_treatment_complete', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_treatment_complete', default_value)['sort_key'] }]) chart5.add_dataset('Died', [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_died', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_died', default_value)['sort_key'] }]) chart5.add_dataset(_('Failure'), [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_treatment_failure', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_treatment_failure', default_value)['sort_key'] }]) chart5.add_dataset(_('Loss to Follow-up'), [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_loss_to_follow_up', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_loss_to_follow_up', default_value)['sort_key'] }]) chart5.add_dataset(_('Regimen Changed'), [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_regimen_changed', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_regimen_changed', default_value)['sort_key'] }]) chart5.add_dataset('Not Evaluated', [{ 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_not_evaluated', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_not_evaluated', default_value)['sort_key'] }]) return [chart, chart2, chart3, chart4, chart5]
def charts(self): if 'location_id' in self.request.GET: # hack: only get data if we're loading an actual report chart = PieChart(_('Current Reporting'), 'current_reporting', []) chart.data = self.master_pie_chart_data() return [chart]
def get_chart(self, rows, x_label, y_label, data_provider): def _get_label_with_percentage(row): return "%s [%d: %s%%]" % (row[0]['html'], int(row[-2]['html']), str(int(row[-1]['html'][:-1]))) if isinstance(data_provider, NutritionBirthWeightDetails): chart = PieChart(data_provider.chart_title, '', [{'label': _get_label_with_percentage(row), 'value': int(row[-1]['html'][:-1])} for row in rows[2:]], ['red', 'green']) chart.showLabels = False chart.marginLeft = 20 chart.marginRight = 0 chart.marginBottom = 20 elif isinstance(data_provider, DeliveryPlaceDetailsExtended): chart = PieChart(data_provider.chart_title, '', [{'label': _get_label_with_percentage(row), 'value': int(row[-1]['html'][:-1])} for row in rows[1:]]) chart.showLabels = False elif isinstance(data_provider, (PostnatalCareOverview, ImmunizationOverview)): chart = MultiBarChart(data_provider.chart_title, x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 150 chart.marginLeft = 45 chart.marginRight = 0 if isinstance(data_provider, ImmunizationOverview): chart.stacked = True chart.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[3]['html'][:-1]) / 100.0} for row in rows], color='green') chart.add_dataset('Dropout Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows], color='red') else: chart.add_dataset('Percentage', [{'x': row[0]['html'], 'y':int(row[-1]['html'][:-1]) / 100.0} for row in rows]) elif isinstance(data_provider, AnteNatalCareServiceOverviewExtended): chart1 = MultiBarChart('ANC Visits', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart2 = MultiBarChart('Maternal TT & IFA', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart1.rotateLabels = -45 chart2.rotateLabels = -45 chart1.marginBottom = 150 chart2.marginBottom = 150 chart1.marginLeft = 20 chart2.marginLeft = 45 chart1.marginRight = 0 chart2.marginRight = 0 chart1.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows[1:6]]) chart2.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows[6:12]]) return [chart1, chart2] elif isinstance(data_provider, ChildrenDeathsByMonth): chart = MultiBarChart(data_provider.chart_title, x_axis=Axis(x_label, dateFormat="%B"), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 50 chart.marginLeft = 20 chart.add_dataset('Percentage', [{'x': row[0], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows]) else: chart = PieChart(data_provider.chart_title, '', [{'label': _get_label_with_percentage(row), 'value': int(row[-1]['html'][:-1])} for row in rows]) chart.showLabels = False chart.marginLeft = 20 chart.marginRight = 0 chart.marginBottom = 0 return [chart]
def charts(self): case_finding_sql_data = self.case_finding_sql_data[0] sputum_conversion_report = ReportFactory.from_spec( StaticReportConfiguration.by_id('static-%s-sputum_conversion' % self.domain), include_prefilters=True ) filter_values = {'date': QuarterFilter.get_value(self.request, self.domain)} locations_id = [ Choice(value=location_id, display='') for location_id in self.report_config.locations_id if location_id ] if locations_id: filter_values['village'] = locations_id sputum_conversion_report.set_filter_values(filter_values) sputum_conversion_data = sputum_conversion_report.get_data()[0] charts_sql_data = self.charts_sql_data[0] treatment_outcome_sql_data = self.treatment_outcome_sql_data[0] default_value = {'sort_key': 0} chart = PieChart(title=_('Cases by Gender'), key='gender', values=[]) chart.data = [ {'label': _('Male'), 'value': case_finding_sql_data.get('male_total', default_value)['sort_key']}, { 'label': _('Female'), 'value': case_finding_sql_data.get('female_total', default_value)['sort_key'] }, { 'label': _('Transgender'), 'value': case_finding_sql_data.get('transgender_total', default_value)['sort_key'] } ] chart2 = MultiBarChart(_('Cases By Type'), x_axis=Axis(''), y_axis=Axis('')) chart2.stacked = False chart2.showLegend = False positive_smear = case_finding_sql_data.get('new_positive_tb_pulmonary', default_value)['sort_key'] negative_smear = case_finding_sql_data.get('new_negative_tb_pulmonary', default_value)['sort_key'] positive_extra_pulmonary = case_finding_sql_data.get( 'new_positive_tb_extrapulmonary', default_value )['sort_key'] relapse_cases = case_finding_sql_data.get('recurrent_positive_tb', default_value)['sort_key'] failure_cases = case_finding_sql_data.get('failure_positive_tb', default_value)['sort_key'] lfu_cases = case_finding_sql_data.get('lfu_positive_tb', default_value)['sort_key'] others_cases = case_finding_sql_data.get('others_positive_tb', default_value)['sort_key'] chart2.add_dataset( _('New'), [ {'x': 'Smear +ve', 'y': positive_smear}, {'x': 'Smear -ve', 'y': negative_smear}, {'x': 'EP', 'y': positive_extra_pulmonary} ] ) chart2.add_dataset( _('Retreatment'), [ {'x': 'Relapse', 'y': relapse_cases}, {'x': 'Failure', 'y': failure_cases}, {'x': 'Treatment After Default', 'y': lfu_cases}, {'x': 'Others', 'y': others_cases} ] ) chart3 = MultiBarChart('Sputum Conversion By Patient Type', Axis(''), Axis('')) chart3.stacked = True chart3.add_dataset('Positive', [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get('new_sputum_positive_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get('new_sputum_positive_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('positive_endofip_patients_cat2', 0) }, ]) chart3.add_dataset(_('Negative'), [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get('new_sputum_negative_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get('new_sputum_negative_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('negative_endofip_patients_cat2', 0) }, ]) chart3.add_dataset('NA', [ { 'x': _('New Sputum +ve (2 month IP)'), 'y': sputum_conversion_data.get('new_sputum_na_patient_2months_ip', 0) }, { 'x': _('New Sputum +ve (3 month IP)'), 'y': sputum_conversion_data.get('new_sputum_na_patient_3months_ip', 0) }, { 'x': _('Cat II (3 month IP)'), 'y': sputum_conversion_data.get('na_endofip_patients_cat2', 0) }, ]) chart4 = PieChart( title=_('Total number of patients by category'), key='', values=[] ) chart4.data = [ { 'label': _('Cat1'), 'value': charts_sql_data.get('cat1_patients', default_value)['sort_key'] }, { 'label': _('Cat2'), 'value': charts_sql_data.get('cat2_patients', default_value)['sort_key'] } ] chart5 = MultiBarChart('Outcome By Type', Axis(''), Axis('')) chart5.stacked = True chart5.add_dataset(_('Cured'), [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_cured', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_cured', default_value)['sort_key'] } ]) chart5.add_dataset('Treatment Complete', [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_treatment_complete', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_treatment_complete', default_value)['sort_key'] } ]) chart5.add_dataset('Died', [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_died', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_died', default_value)['sort_key'] } ]) chart5.add_dataset(_('Failure'), [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_treatment_failure', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_treatment_failure', default_value )['sort_key'] } ]) chart5.add_dataset(_('Loss to Follow-up'), [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_loss_to_follow_up', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_loss_to_follow_up', default_value )['sort_key'] } ]) chart5.add_dataset(_('Regimen Changed'), [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_regimen_changed', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get( 'recurrent_patients_regimen_changed', default_value )['sort_key'] } ]) chart5.add_dataset('Not Evaluated', [ { 'x': _('New'), 'y': treatment_outcome_sql_data.get('new_patients_not_evaluated', default_value)['sort_key'] }, { 'x': _('Retreatment'), 'y': treatment_outcome_sql_data.get('recurrent_patients_not_evaluated', default_value)['sort_key'] } ]) return [ chart, chart2, chart3, chart4, chart5 ]
def charts(self): if 'location_id' in self.request.GET: # hack: only get data if we're loading an actual report return [PieChart(None, **self._chart_data())] return []
def get_chart(self, rows, x_label, y_label, data_provider): def _get_label_with_percentage(row): return "%s [%d: %s%%]" % (row[0]["html"], int(row[-2]["html"]), str(int(row[-1]["html"][:-1]))) if isinstance(data_provider, NutritionBirthWeightDetails): chart = PieChart( data_provider.chart_title, "", [{"label": _get_label_with_percentage(row), "value": int(row[-1]["html"][:-1])} for row in rows[2:]], ["red", "green"], ) chart.showLabels = False chart.marginLeft = 20 chart.marginRight = 0 chart.marginBottom = 20 elif isinstance(data_provider, DeliveryPlaceDetailsExtended): chart = PieChart( data_provider.chart_title, "", [{"label": _get_label_with_percentage(row), "value": int(row[-1]["html"][:-1])} for row in rows[1:]], ) chart.showLabels = False elif isinstance(data_provider, (PostnatalCareOverview, ImmunizationOverview)): chart = MultiBarChart(data_provider.chart_title, x_axis=Axis(x_label), y_axis=Axis(y_label, ".2%")) chart.rotateLabels = -45 chart.marginBottom = 150 chart.marginLeft = 45 chart.marginRight = 0 if isinstance(data_provider, ImmunizationOverview): chart.stacked = True chart.add_dataset( "Percentage", [{"x": row[0]["html"], "y": int(row[3]["html"][:-1]) / 100.0} for row in rows], color="green", ) chart.add_dataset( "Dropout Percentage", [{"x": row[0]["html"], "y": int(row[-1]["html"][:-1]) / 100.0} for row in rows], color="red", ) else: chart.add_dataset( "Percentage", [{"x": row[0]["html"], "y": int(row[-1]["html"][:-1]) / 100.0} for row in rows] ) elif isinstance(data_provider, AnteNatalCareServiceOverviewExtended): chart1 = MultiBarChart("ANC Visits", x_axis=Axis(x_label), y_axis=Axis(y_label, ".2%")) chart2 = MultiBarChart("Maternal TT & IFA", x_axis=Axis(x_label), y_axis=Axis(y_label, ".2%")) chart1.rotateLabels = -45 chart2.rotateLabels = -45 chart1.marginBottom = 150 chart2.marginBottom = 150 chart1.marginLeft = 20 chart2.marginLeft = 45 chart1.marginRight = 0 chart2.marginRight = 0 chart1.add_dataset( "Percentage", [{"x": row[0]["html"], "y": int(row[-1]["html"][:-1]) / 100.0} for row in rows[1:6]] ) chart2.add_dataset( "Percentage", [{"x": row[0]["html"], "y": int(row[-1]["html"][:-1]) / 100.0} for row in rows[6:12]] ) return [chart1, chart2] elif isinstance(data_provider, ChildrenDeathsByMonth): chart = MultiBarChart( data_provider.chart_title, x_axis=Axis(x_label, dateFormat="%B"), y_axis=Axis(y_label, ".2%") ) chart.rotateLabels = -45 chart.marginBottom = 50 chart.marginLeft = 20 chart.add_dataset("Percentage", [{"x": row[0], "y": int(row[-1]["html"][:-1]) / 100.0} for row in rows]) else: chart = PieChart( data_provider.chart_title, "", [{"label": _get_label_with_percentage(row), "value": int(row[-1]["html"][:-1])} for row in rows], ) chart.showLabels = False chart.marginLeft = 20 chart.marginRight = 0 chart.marginBottom = 0 return [chart]
def get_chart(self, rows, x_label, y_label, data_provider): def _get_label_with_percentage(row): return "%s [%s%%]" % (row[0]['html'], str(int(row[-1]['html'][:-1]))) if isinstance(data_provider, NutritionBirthWeightDetails): chart = PieChart('BirthWeight', '', [{'label': "%s [%s%%]" % (row[0]['html'], str(int(row[-1]['html'][:-1]))), 'value': int(row[-1]['html'][:-1])} for row in rows[2:]], ['red', 'green']) chart.showLabels = False elif isinstance(data_provider, DeliveryPlaceDetailsExtended): chart = PieChart('', '', [{'label': _get_label_with_percentage(row), 'value': int(row[-1]['html'][:-1])} for row in rows[1:]]) chart.showLabels = False elif isinstance(data_provider, (PostnatalCareOverview, ImmunizationOverview)): chart = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 120 if isinstance(data_provider, ImmunizationOverview): chart.stacked = True chart.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[3]['html'][:-1]) / 100.0} for row in rows], color='green') chart.add_dataset('Dropout Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows], color='red') else: chart.add_dataset('Percentage', [{'x': row[0]['html'], 'y':int(row[-1]['html'][:-1]) / 100.0} for row in rows]) elif isinstance(data_provider, AnteNatalCareServiceOverviewExtended): chart1 = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart2 = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart1.rotateLabels = -45 chart2.rotateLabels = -45 chart1.marginBottom = 120 chart2.marginBottom = 120 chart1.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows[1:6]]) chart2.add_dataset('Percentage', [{'x': row[0]['html'], 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows[6:12]]) return [chart1, chart2] elif isinstance(data_provider, ChildrenDeathsByMonth): chart = LineChart('Seasonal Variation of Child Deaths', x_axis=Axis(x_label, dateFormat="%B"), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 120 months_mapping = dict((v, k) for k, v in enumerate(calendar.month_abbr)) chart.add_dataset('Percentage', [{'x': datetime.date(1, months_mapping[row[0][:3]], 1), 'y': int(row[-1]['html'][:-1]) / 100.0} for row in rows]) else: chart = PieChart('', '', [{'label': "%s [%s%%]" % (row[0]['html'], str(int(row[-1]['html'][:-1]))), 'value': int(row[-1]['html'][:-1])} for row in rows]) chart.showLabels = False return [chart]
def get_chart(self, rows, x_label, y_label, data_provider): def _get_label_with_percentage(row): return "%s [%s%%]" % (row[0], str(float(row[-1]['html'][:-1]))) if isinstance(data_provider, (ClosedMotherCasesBreakdown, ClosedChildCasesBreakdown)): chart = PieChart('', '', [{ 'label': _get_label_with_percentage(row), 'value': float(row[-1]['html'][:-1]) } for row in rows]) elif isinstance(data_provider, NutritionBirthWeightDetails): chart = PieChart('BirthWeight', '', [{ 'label': "%s [%s%%]" % (row[0]['html'], str(float(row[-1]['html'][:-1]))), 'value': float(row[-1]['html'][:-1]) } for row in rows[1:]], ['red', 'green']) elif isinstance(data_provider, DeliveryPlaceDetailsExtended): chart = PieChart('', '', [{ 'label': _get_label_with_percentage(row), 'value': float(row[-1]['html'][:-1]) } for row in rows[1:]]) elif isinstance(data_provider, (PostnatalCareOverview, ImmunizationOverview)): chart = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 120 if isinstance(data_provider, ImmunizationOverview): chart.stacked = True chart.add_dataset('Percentage', [{ 'x': row[0]['html'], 'y': float(row[3]['html'][:-1]) / 100 } for row in rows], color='green') chart.add_dataset('Dropout Percentage', [{ 'x': row[0]['html'], 'y': float(row[-1]['html'][:-1]) / 100 } for row in rows], color='red') else: chart.add_dataset('Percentage', [{ 'x': row[0]['html'], 'y': float(row[-1]['html'][:-1]) / 100 } for row in rows]) elif isinstance(data_provider, AnteNatalCareServiceOverviewExtended): chart1 = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart2 = MultiBarChart('', x_axis=Axis(x_label), y_axis=Axis(y_label, '.2%')) chart1.rotateLabels = -45 chart2.rotateLabels = -45 chart1.marginBottom = 120 chart2.marginBottom = 120 chart1.add_dataset('Percentage', [{ 'x': row[0]['html'], 'y': float(row[-1]['html'][:-1]) / 100 } for row in rows[1:6]]) chart2.add_dataset('Percentage', [{ 'x': row[0]['html'], 'y': float(row[-1]['html'][:-1]) / 100 } for row in rows[6:12]]) return [chart1, chart2] elif isinstance(data_provider, ChildrenDeathsByMonth): chart = LineChart('Seasonal Variation of Child Deaths', x_axis=Axis(x_label, dateFormat="%B"), y_axis=Axis(y_label, '.2%')) chart.rotateLabels = -45 chart.marginBottom = 120 months_mapping = dict( (v, k) for k, v in enumerate(calendar.month_abbr)) chart.add_dataset( 'Percentage', [{ 'x': datetime.date(1, months_mapping[row[0][:3]], 1), 'y': float(row[-1]['html'][:-1]) / 100 } for row in rows]) else: chart = PieChart('', '', [{ 'label': "%s [%s%%]" % (row[0]['html'], str(float(row[-1]['html'][:-1]))), 'value': float(row[-1]['html'][:-1]) } for row in rows]) return [chart]