コード例 #1
0
ファイル: asha_reports.py プロジェクト: xbryanc/commcare-hq
 def report(self):
     config = self.report_config
     if config.get('sf') == 'sf5':
         return DistrictFunctionalityReport(self.request, domain=self.domain)
     elif config.get('sf') == 'sf4':
         return BlockLevelAFReport(self.request, domain=self.domain)
     elif config.get('sf') == 'sf3':
         return BlockLevelMonthReport(self.request, domain=self.domain)
     elif config.get('sf') == 'sf2':
         return ASHAFacilitatorsReport(self.request, domain=self.domain)
     else:
         return ASHAFunctionalityChecklistReport(self.request, domain=self.domain)
コード例 #2
0
    def rows(self):
        rows = [[column.header] for column in self.model.columns[2:]]
        rows.append(
            [_("<b>Total number of ASHAs who did not report/not known</b>")])
        last_row = [_("<b>Total Number of ASHAs under each Facilitator</b>")]
        sums = [0] * len(rows)
        total = 0
        sum_row_10 = 0
        denom_row_10 = 0
        for af in self.get_afs_for_block():
            self.request_params['hierarchy_af'] = af[1]
            q = self.request.GET.copy()
            q['hierarchy_af'] = af[1]
            self.request.GET = q
            rs, afs_count = BlockLevelMonthReport(self.request,
                                                  domain=self.domain).rows
            total += afs_count
            last_row.append(format_datatables_data(afs_count, afs_count))
            for index, row in enumerate(rs):
                rows[index].append(row[-1])
                if index == 10:
                    numbers = re.split('/|\s|%', row[-1]['html'])
                    sum_row_10 += int(numbers[0])
                    denom_row_10 += int(numbers[1])
                else:
                    sums[index] += float(row[-1]['sort_key'])

        for index, sum in enumerate(sums):
            if index == 10:
                try:
                    percent = sum_row_10 * 100 / denom_row_10
                except ZeroDivisionError:
                    percent = 0
                html = "{0}/{1} ({2}%)".format(sum_row_10, denom_row_10,
                                               percent)
                rows[index].append(format_datatables_data(html, percent))
            else:
                rows[index].append(format_datatables_data(sum, sum))

        last_row.append(format_datatables_data(total, total))
        rows.append(last_row)
        return rows, total
コード例 #3
0
    def test_block_level_month_report(self, mock_run_query):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'lang': '',
            'sf': 'sf3',
            'startdate': '2018-01-01',
            'enddate': '2018-01-31',
            'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
            'month': '01',
            'year': '2018',
        }
        block_level_month_report = BlockLevelMonthReport(request=mock, domain=DOMAIN)
        rows = block_level_month_report.rows
        expected = (
            [
                [
                    'Newborn visits within first day of birth in case of home deliveries',
                    {'sort_key': 1, 'html': 1}, '--', '--', {'sort_key': '0', 'html': '0'}
                ],
                [
                    'Set of home visits for newborn care as specified in the HBNC guidelines<br/>'
                    '(six visits in case of Institutional delivery and seven in case of a home delivery)',
                    {'sort_key': 10, 'html': 10}, '--', '--', {'sort_key': '3', 'html': '3'}
                ],
                [
                    'Attending VHNDs/Promoting immunization',
                    {'sort_key': 14, 'html': 14}, '--', '--', {'sort_key': '5', 'html': '5'}
                ],
                [
                    'Supporting institutional delivery',
                    {'sort_key': 14, 'html': 14}, '--', '--', {'sort_key': '5', 'html': '5'}
                ],
                [
                    'Management of childhood illness - especially diarrhea and pneumonia',
                    {'sort_key': 11, 'html': 11}, '--', '--', {'sort_key': '4', 'html': '4'}
                ],
                [
                    'Household visits with nutrition counseling',
                    {'sort_key': 5, 'html': 5}, '--', '--', {'sort_key': '2', 'html': '2'}
                ],
                [
                    'Fever cases seen/malaria slides made in malaria endemic area',
                    {'sort_key': 0, 'html': 0}, '--', '--', {'sort_key': '0', 'html': '0'}
                ],
                [
                    'Acting as DOTS provider',
                    {'sort_key': 0, 'html': 0}, '--', '--', {'sort_key': '0', 'html': '0'}
                ],
                [
                    'Holding or attending village/VHSNC meeting',
                    {'sort_key': 0, 'html': 0}, '--', '--', {'sort_key': '0', 'html': '0'}
                ], [
                    'Successful referral of the IUD, female sterilization or male sterilization cases '
                    'and/or providing OCPs/Condoms',
                    {'sort_key': 14, 'html': 14}, '--', '--', {'sort_key': '5', 'html': '5'}
                ],
                [
                    '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                    {'sort_key': 86.66666666666667, 'html': '13/15 (86%)'}, {'sort_key': 0.0, 'html': '0/0 (0%)'},
                    {'sort_key': 0.0, 'html': '0/0 (0%)'}, {'sort_key': 28.88888888888889, 'html': '4/15 (28%)'}
                ],
                [
                    '<b>Total number of ASHAs who did not report/not known</b>',
                    {'sort_key': 17, 'html': 17}, {'sort_key': 17, 'html': 17},
                    {'sort_key': 2, 'html': 2}, {'sort_key': '12', 'html': '12'}
                ]
            ], 17
        )

        self.assertEqual(len(rows), len(expected))
        self.assertEqual(len(rows[0]), len(expected[0]))
        for i in range(len(rows[0])):
            self.assertEqual(len(rows[0][i]), len(expected[0][i]))
            for record in expected[0][i]:
                self.assertIn(record, rows[0][i])