def rows(self): def format_val(val): return self.no_value if val is None else val def avg(values, idx=None): sum = 0 denom = 0 for v in values: if idx == 10: numbers = re.split(r'/|\s|%', v['html']) sum += int(numbers[0]) if int(numbers[1]) > denom: denom = int(numbers[1]) else: sum += v['sort_key'] if v is not None else 0 mean = (float(sum) / float(len(values))) if idx == 10: try: percent = mean * 100 / denom except ZeroDivisionError: percent = 0 html = "{0}/{1} ({2}%)".format(int(mean), int(denom), int(percent)) return format_datatables_data(html, percent) mean = "%.0f" % mean return format_datatables_data(mean, mean) data = [] config = self.report_config for i in range(0, 3): config['enddate'] = ( config['startdate'] + relativedelta(months=1) - relativedelta(days=1) ).replace(hour=23, minute=59, second=59) for index, row_data in ASHAFacilitatorsData(config).data.items(): data.append(row_data) config['startdate'] += relativedelta(months=1) rows = [[ column.header, format_val(column.get_value(data[2])), format_val(column.get_value(data[1])), format_val(column.get_value(data[0])), avg([column.get_value(data[2]), column.get_value(data[1]), column.get_value(data[0])], idx) ] for idx, column in enumerate(self.model.columns[2:])] total = [self.model.columns[0].get_raw_value(d) for d in data] reporting = [self.model.columns[1].get_raw_value(d) for d in data] not_reporting = [format_datatables_data(i - (j or 0), i - (j or 0)) for i, j in zip(total, reporting)] rows.append([_("<b>Total number of ASHAs who did not report/not known</b>")] + not_reporting + [avg(not_reporting)]) return rows, sum(total) // len(total)
def model(self): return ASHAFacilitatorsData(config=self.report_config)