示例#1
0
    def test_report_data(self):
        mock = MagicMock()
        mock.couch_user = self.web_user
        mock.GET = {
            'location_id': 'd1',
            'startdate': '2017-11-01',
            'enddate': '2017-11-30'
        }
        mock.datespan = DateSpan(datetime(2017, 11, 1), datetime(2017, 11, 30))

        fiche_report = FicheConsommationReport(request=mock, domain='test-domain')
        header = fiche_report.headers
        rows = fiche_report.rows

        self.assertEqual(
            [column_group.html for column_group in header],
            ['', 'Product 1', 'Product 2', 'Product 3']
        )
        self.assertEqual(
            rows,
            [
                [
                    'PPS 1',
                    {'sort_key': 10, 'html': 10}, {'sort_key': 5, 'html': 5}, {'sort_key': 5, 'html': 5},
                    {'sort_key': 2, 'html': 2}, {'sort_key': 2, 'html': 2}, {'sort_key': 0, 'html': 0},
                    {'sort_key': 6, 'html': 6}, {'sort_key': 4, 'html': 4}, {'sort_key': 2, 'html': 2}
                ],
                [
                    'PPS 2',
                    {'sort_key': 13, 'html': 13}, {'sort_key': 11, 'html': 11}, {'sort_key': 2, 'html': 2},
                    {'sort_key': 0, 'html': 0}, {'sort_key': 0, 'html': 0}, {'sort_key': 0, 'html': 0},
                    {'sort_key': 150, 'html': 150}, {'sort_key': 11, 'html': 11}, {'sort_key': 139, 'html': 139}
                ]
            ]
        )
示例#2
0
    def test_valuation_of_pna_stock_per_product_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard3_report = Dashboard3Report(request=mock, domain='test-pna')

        valuation_of_pna_stock_per_product_data_report = \
            dashboard3_report.report_context['reports'][1]['report_table']
        headers = valuation_of_pna_stock_per_product_data_report['headers'].as_export_table[0]
        rows = valuation_of_pna_stock_per_product_data_report['rows']
        total_row = valuation_of_pna_stock_per_product_data_report['total_row']

        self.assertEqual(
            headers,
            ['Produit', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018']
        )
        self.assertItemsEqual(
            rows,
            sorted([
                ['ACETATE DE MEDROXY PROGESTERONE 104MG/0.65ML INJ. (SAYANA PRESS)', '0', '0', '0', '0', '0',
                 '0'],
                ['ACETATE DE MEDROXY PROGESTERONE 150MG/ML+S A B KIT (1+1) (DEPO-PROVERA)', '0', '0', '0',
                 '0', '0', '0'], ['ACT ADULTE', '0', '0', '0', '0', '0', '0'],
                ['ACT PETIT ENFANT', '0', '0', '0', '0', '0', '0'],
                ['ALBENDAZOL 4% SB.', '0', '0', '0', '0', '0', '0'],
                ['DISPOSITIF INTRA UTERIN (TCU 380 A) - DIU', '0', '0', '0', '0', '0', '0'],
                ['EFAVIRENZ 600MG CP.', '0', '0', '0', '0', '0', '0'],
                ['LAMIVUDINE+NEVIRAPINE+ZIDOVUDINE (30+50+60)MG CP.', '0', '0', '0', '0', '0', '0'],
                ['LEVONORGESTREL+ETHYNILESTRADIOL+FER (0.15+0.03+75)MG (MICROGYNON)', '0', '0', '0', '0',
                 '0', '0'], ['NEVIRAPINE 200MG CP.', '0', '0', '0', '0', '0', '0'],
                ['PARACETAMOL 500MG CP.', '0', '0', '0', '0', '0', '0'],
                ['Produit 1', '0', '0', '0', '0', '0', '0'],
                ['Produit 10', '0', '0', '0', '0', '0', '0'],
                ['Produit 12', '0', '0', '0', '0', '0', '0'],
                ['Produit 14', '0', '0', '0', '0', '0', '0'],
                ['Produit 15', '0', '0', '0', '0', '0', '0'],
                ['Produit 2', '0', '0', '0', '0', '0', '0'],
                ['Produit A', '442.500', '717.500', '412.500', '150.000', '437.500', '150.000'],
                ['Produit B', '336.000', '558.000', '334.500', '157.500', '453.000', '127.500'],
                ['Produit C', '198.000', '386.400', '0', '120.000', '0', '0'],
                ['RIFAMPICINE+ISONIAZIDE (150+75)MG CP.', '0', '0', '0', '0', '0', '0'],
                ['RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE (60+30+150)MG CP. DISPER', '0', '0', '0', '0', '0',
                 '0'],
                ['RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE+ETHAMBUTOL (150+75+400+2', '0', '0', '0', '0', '0',
                 '0'], ['TEST RAPIDE HIV 1/2 (SD BIOLINE)', '0', '0', '0', '0', '0', '0']
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            ['Total (CFA)', '976.500', '1.661.900', '747.000', '427.500', '890.500', '277.500']
        )
示例#3
0
    def test_extract_value_from_report_table_row_value_input_string(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }
        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna1')
        report_table = {
            'fix_column': False,
            'comment': 'test_comment',
            'rows': [['0', '4', '8', '12'],
                     ['1', '5', '9', '13'],
                     ['2', '6', '10', '14'],
                     ['3', '7', '11', '15']],
            'datatables': False,
            'title': 'test_title',
            'total_row': ['row_0', 'row_1', 'row_2', 'row_3'],
            'slug': 'disponibilite',
            'default_rows': 10
        }
        report_table_value = dashboard1_report._sanitize_single_row(report_table['total_row'])
        self.assertEqual(report_table_value, ['row_0', 'row_1', 'row_2', 'row_3'])

        all_rows = dashboard1_report._sanitize_all_rows(report_table)
        self.assertEqual(all_rows, [['0', '4', '8', '12'],
                                    ['1', '5', '9', '13'],
                                    ['2', '6', '10', '14'],
                                    ['3', '7', '11', '15']])
示例#4
0
    def test_recovery_rate_by_pps_report_pps_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': 'ccf4430f5c3f493797486d6ce1c39682',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_pps_report = dashboard2_report.report_context[
            'reports'][2]['report_table']
        headers = recovery_rate_by_pps_report['headers'].as_export_table[0]
        rows = recovery_rate_by_pps_report['rows']
        total_row = recovery_rate_by_pps_report['total_row']
        self.assertEqual(headers, [
            'PPS', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017',
            'Janvier 2018', 'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'P2'
            }, {
                'html': '93.02%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '42.55%'
            }]],
                   key=lambda x: x[0]))
        self.assertEqual(total_row, [{
            'html': 'Taux par PPS'
        }, {
            'html': '93.02%'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': '0.00%'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': '42.55%'
        }])
示例#5
0
    def test_conventure_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2014-06-01',
            'enddate': '2014-07-31',
            'location_id': '1991b4dfe166335e342f28134b85fcac',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1),
                                 datetime.datetime(2014, 7, 31))

        tableu_de_board_report2_report = TableuDeBoardReport2(
            request=mock, domain='test-pna')

        conventure_report = tableu_de_board_report2_report.report_context[
            'reports'][0]['report_table']
        headers = conventure_report['headers'].as_export_table[0]
        rows = conventure_report['rows']

        self.assertEqual(headers, [
            'Mois', 'No de PPS (number of PPS registered in that region)',
            'No de PPS planifie (number of PPS planned)',
            'No de PPS avec livrasion cet mois (number of PPS visited this month)',
            'Taux de couverture (coverage ratio)',
            'No de PPS avec donnees soumises (number of PPS which submitted data)',
            'Exhaustivite des donnees'
        ])
        self.assertEqual(rows, [['Ao\xfbt', 0, 0, 1, '100.00%', 1, '100.00%']])
示例#6
0
    def test_extract_value_from_report_table_row_value_input_string(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }
        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna1')
        report_table = {
            'fix_column': False,
            'comment': 'test_comment',
            'rows': [['0', '4', '8', '12'],
                     ['1', '5', '9', '13'],
                     ['2', '6', '10', '14'],
                     ['3', '7', '11', '15']],
            'datatables': False,
            'title': 'test_title',
            'total_row': ['row_0', 'row_1', 'row_2', 'row_3'],
            'slug': 'disponibilite',
            'default_rows': 10
        }
        report_table_value = dashboard1_report._sanitize_single_row(report_table['total_row'])
        self.assertEqual(report_table_value, ['row_0', 'row_1', 'row_2', 'row_3'])

        all_rows = dashboard1_report._sanitize_all_rows(report_table)
        self.assertEqual(all_rows, [['0', '4', '8', '12'],
                                    ['1', '5', '9', '13'],
                                    ['2', '6', '10', '14'],
                                    ['3', '7', '11', '15']])
    def test_fiche_consommation_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2014-06-01',
            'enddate': '2014-07-31',
            'location_id': '1991b4dfe166335e342f28134b85fcac',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1), datetime.datetime(2014, 7, 31))

        fiche_consommation_report2_report = FicheConsommationReport2(request=mock, domain='test-pna')

        fiche_consommation_report = fiche_consommation_report2_report.report_context['reports'][0]['report_table']
        headers = fiche_consommation_report['headers'].as_export_table[0]
        rows = fiche_consommation_report['rows']
        self.assertEqual(
            headers,
            ['', 'CU', ' ', ' ', 'DIU', ' ', ' ', 'Depo-Provera', ' ', ' ',
             'Jadelle', ' ', ' ', 'Microgynon/Lof.', ' ', ' ', 'Microlut/Ovrette', ' ', ' ',
             'Preservatif Feminin', ' ', ' ', 'Preservatif Masculin', ' ', ' ']
        )
        self.assertEqual(
            rows,
            [['LERANE COLY', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]]
        )
示例#8
0
 def test_extract_value_from_report_table_row_value_input_dict(self):
     mock = MagicMock()
     mock.couch_user = self.user
     mock.GET = {
         'location_id': '',
         'program': '',
         'month_start': '10',
         'year_start': '2017',
         'month_end': '3',
         'year_end': '2018',
     }
     dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')
     report_table = {
         'fix_column': False,
         'comment': 'test_comment',
         'rows': [],
         'datatables': False,
         'title': 'test_title',
         'total_row': [
             {'html': 'row_0'},
             {'html': 'row_1'},
             {'html': 'row_2'},
             {'html': 'row_3'}
         ],
         'slug': 'disponibilite',
         'default_rows': 10
     }
     report_table_value = dashboard1_report._extract_value_from_report_table_row_value(report_table)
     self.assertEqual(report_table_value, ['row_0', 'row_1', 'row_2', 'row_3'])
示例#9
0
    def test_expiration_rate_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        expiration_rate_report = dashboard2_report.report_context['reports'][1]['report_table']
        headers = expiration_rate_report['headers'].as_export_table[0]
        rows = expiration_rate_report['rows']
        total_row = expiration_rate_report['total_row']
        self.assertEqual(
            headers,
            ['R\xe9gion', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017', 'Janvier 2018',
             'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen']
        )
        self.assertEqual(
            rows,
            sorted([
                [{'html': 'Dakar'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
                [{'html': 'Fatick'}, {'html': 'pas de donn\xe9es'},
                 {'style': 'color: red', 'html': '7.75%'}, {'style': '', 'html': '3.59%'},
                 {'style': '', 'html': '3.51%'}, {'html': 'pas de donn\xe9es'},
                 {'style': '', 'html': '2.70%'}, {'style': 'color: red', 'html': '5.11%'}],
                [{'html': 'Region 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
                [{'html': 'Region Test'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
                [{'html': 'Saint-Louis'}, {'style': 'color: red', 'html': '6.50%'},
                 {'style': 'color: red', 'html': '8.55%'}, {'style': '', 'html': '0.00%'},
                 {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '1.12%'},
                 {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '4.93%'}],
                [{'html': 'Thies'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}]
            ], key=lambda x: x[0]['html'])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Taux par Pays'}, {'style': 'color: red', 'html': '6.50%'},
                {'style': 'color: red', 'html': '8.17%'}, {'style': '', 'html': '2.34%'},
                {'style': '', 'html': '3.51%'}, {'style': '', 'html': '1.12%'},
                {'style': '', 'html': '2.70%'}, {'style': '', 'html': '5.00%'}
            ]
        )
示例#10
0
    def test_availability_report_pps_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': 'ccf4430f5c3f493797486d6ce1c39682',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0]['report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(
            headers,
            ['PPS', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen de disponibilité']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    {'html': 'P2'},
                    {'style': '', 'html': '100%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Disponibilit\xe9 (%)'},
                {'style': '', 'html': '100.00%'},
                {'html': 'pas de donn\xe9es'},
                {'html': 'pas de donn\xe9es'},
                {'html': 'pas de donn\xe9es'},
                {'style': '', 'html': '100.00%'},
                {'html': 'pas de donn\xe9es'},
                {'style': '', 'html': '100.00%'}
            ]
        )
示例#11
0
    def test_recovery_rate_by_pps_report_country_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_pps_report = dashboard2_report.report_context['reports'][3]['report_table']
        headers = recovery_rate_by_pps_report['headers'].as_export_table[0]
        rows = recovery_rate_by_pps_report['rows']
        total_row = recovery_rate_by_pps_report['total_row']
        self.assertEqual(
            headers,
            ['Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen']
        )
        self.assertEqual(
            rows,
            sorted([
                [{'html': 'Dakar'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '0.00%'}, {'html': '0.00%'}],
                [{'html': 'Fatick'}, {'html': 'pas de donn\xe9es'}, {'html': '90.47%'}, {'html': '2.75%'},
                 {'html': '0.00%'}, {'html': 'pas de donn\xe9es'}, {'html': '0.00%'}, {'html': '29.88%'}],
                [{'html': 'Region 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '92.31%'}, {'html': '92.31%'}],
                [{'html': 'Region Test'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': '64.98%'},
                 {'html': 'pas de donn\xe9es'}, {'html': '64.98%'}],
                [{'html': 'Saint-Louis'}, {'html': '78.36%'}, {'html': '87.68%'}, {'html': '0.00%'},
                 {'html': 'pas de donn\xe9es'}, {'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': '65.73%'}],
                [{'html': 'Thies'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}]
            ], key=lambda x: x[0]['html'])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Taux par Pays'}, {'html': '78.36%'}, {'html': '88.53%'}, {'html': '1.59%'},
                {'html': '0.00%'}, {'html': '15.90%'}, {'html': '22.13%'}, {'html': '54.80%'}
            ]
        )
示例#12
0
    def test_availability_report_pps_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': 'ccf4430f5c3f493797486d6ce1c39682',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0]['report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(
            headers,
            ['PPS', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen de disponibilité']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    {'html': 'P2'},
                    {'style': '', 'html': '100%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Disponibilit\xe9 (%)'},
                {'style': '', 'html': '100.00%'},
                {'html': 'pas de donn\xe9es'},
                {'html': 'pas de donn\xe9es'},
                {'html': 'pas de donn\xe9es'},
                {'style': '', 'html': '100.00%'},
                {'html': 'pas de donn\xe9es'},
                {'style': '', 'html': '100.00%'}
            ]
        )
示例#13
0
    def test_consommation_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2016-05-28',
            'enddate': '2018-06-04',
            'location_id': '',
        }
        mock.datespan = DateSpan(datetime.datetime(2016, 5, 28),
                                 datetime.datetime(2018, 6, 4))

        tableu_de_board_report2_report = TableuDeBoardReport2(
            request=mock, domain='test-pna')

        consommation_data_report = tableu_de_board_report2_report.report_context[
            'reports'][3]['report_table']
        headers = consommation_data_report['headers'].as_export_table[0]
        rows = consommation_data_report['rows']

        self.assertEqual(headers, [
            'PPS', 'ACT Adulte', 'ACT Grand Enfant', 'ACT Nourisson',
            'ACT Petit Enfant', 'Amoxicilline 250mg SP', 'Ampiciline 1G Amp',
            'CU', u'Calcium 100mg', 'Cefixime 100MG/5ML SUSP.BUV',
            'Ceftriaxone 1G', 'Collier', 'DIU', u'Depo-Provera',
            'Dexamethasone 4mg', 'Diazepam 10MG/2ML AMP. INJ.',
            'Epinephrine 1MG/1ML AMP. INJ.', 'Fer 0.68% SP',
            'Gentamicin INJ 80mg/2ml', 'Hydrocortisone 100MG AMP. INJ.',
            'IMPLANON', 'Jadelle', 'Kit de depistage Rapide du VIH B/30',
            'Mebendazole 100MG SP', 'Mebendazole 500MG CP.', 'Microgynon/Lof.',
            'Microlut/Ovrette', 'Oxytocine 5 UI', 'Paracetamol 120MG/5ML SP',
            'Paracetamol 1G/100ML INJ.', 'Phytomenadione 10mg',
            'Preservatif Feminin', 'Preservatif Masculin', 'Recto caps 200 mg',
            'Recto caps 50 mg', 'S.R.O. Faible osmolarite', 'Sayana Press',
            'Sulfate de Magnesium 20 ml', 'Test depistage rapide Palu',
            u'Zinc 20mg'
        ])
        self.assertEqual(
            sorted(rows, key=lambda x: x[0]),
            sorted([[
                'GATE', 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
                0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0
            ],
                    [
                        None, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1
                    ]],
                   key=lambda x: x[0]))
示例#14
0
    def test_valuation_of_pna_stock_per_product_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard3_report = Dashboard3Report(request=mock, domain='test-pna')

        valuation_of_pna_stock_per_product_data_report = \
            dashboard3_report.report_context['reports'][1]['report_table']
        headers = valuation_of_pna_stock_per_product_data_report[
            'headers'].as_export_table[0]
        rows = valuation_of_pna_stock_per_product_data_report['rows']
        total_row = valuation_of_pna_stock_per_product_data_report['total_row']

        self.assertEqual(headers, [
            'Produit', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017',
            'Janvier 2018', 'Février 2018', 'Mars 2018'
        ])
        self.assertItemsEqual(
            rows,
            sorted([
                [
                    'Produit A', '442.500', '717.500', '412.500', '150.000',
                    '437.500', '150.000'
                ],
                [
                    'Produit B', '336.000', '558.000', '334.500', '157.500',
                    '453.000', '127.500'
                ],
                [
                    'Produit C', '198.000', '386.400', 'pas de donn\xe9es',
                    '120.000', 'pas de donn\xe9es', 'pas de donn\xe9es'
                ],
            ],
                   key=lambda x: x[0]))
        self.assertEqual(total_row, [
            'Total (CFA)', '976.500', '1.661.900', '747.000', '427.500',
            '890.500', '277.500'
        ])
    def test_recap_passage_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'month': '07',
            'year': '2014',
            'location_id': '1991b4dfe166335e342f28134b85fcac',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1), datetime.datetime(2014, 6, 30))

        recap_passage_report2 = RecapPassageReport2(request=mock, domain='test-pna')

        recap_passage_report2_first = recap_passage_report2.report_context['reports'][0]['report_table']
        headers = recap_passage_report2_first['headers'].as_export_table[0]
        rows = recap_passage_report2_first['rows']
        title = recap_passage_report2_first['title']
        self.assertEqual(
            title,
            'Recap Passage 2014-07-22'
        )
        self.assertEqual(
            headers,
            [
                'Designations', 'Stock apres derniere livraison',
                'Stock disponible et utilisable a la livraison',
                'Livraison', 'Stock Total', 'Precedent', 'Recu hors entrepots mobiles', 'Non Facturable',
                'Facturable', 'Reelle', 'Stock Total', 'PPS Restant', 'Pertes et Adjustement'
            ]
        )
        self.assertEqual(
            rows,
            [
                ['CU', 3, 3, 2, 5, 0, 0, 0, 0, 0, 5, 0, 0],
                ['DIU', 2, 2, 3, 5, 0, 0, 0, 0, 0, 5, 0, 0],
                ['Depo-Provera', 60, 52, 25, 77, 0, 0, 0, 8, 8, 77, -8, 0],
                ['Jadelle', 6, 6, 5, 11, 0, 0, 0, 0, 0, 11, 0, 0],
                ['Microgynon/Lof.', 42, 42, 0, 42, 0, 0, 0, 0, 0, 42, 0, 0],
                ['Microlut/Ovrette', 15, 12, 18, 30, 0, 0, 0, 3, 3, 30, -3, 0],
                ['Preservatif Feminin', 5, 5, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0],
                ['Preservatif Masculin', 100, 100, 0, 100, 0, 0, 0, 0, 0, 100, 0, 0]
            ]
        )
示例#16
0
    def test_recap_passage_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'month': '07',
            'year': '2014',
            'location_id': '1991b4dfe166335e342f28134b85fcac',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1),
                                 datetime.datetime(2014, 6, 30))

        recap_passage_report2 = RecapPassageReport2(request=mock,
                                                    domain='test-pna')

        recap_passage_report2_first = recap_passage_report2.report_context[
            'reports'][0]['report_table']
        headers = recap_passage_report2_first['headers'].as_export_table[0]
        rows = recap_passage_report2_first['rows']
        title = recap_passage_report2_first['title']
        self.assertEqual(title, 'Recap Passage 2014-07-22')
        self.assertEqual(headers, [
            'Designations', 'Stock apres derniere livraison',
            'Stock disponible et utilisable a la livraison', 'Livraison',
            'Stock Total', 'Precedent', 'Recu hors entrepots mobiles',
            'Non Facturable', 'Facturable', 'Reelle', 'Stock Total',
            'PPS Restant', 'Pertes et Adjustement'
        ])
        self.assertEqual(
            rows,
            [['CU', 3, 3, 2, 5, 0, 0, 0, 0, 0, 5, 0, 0],
             ['DIU', 2, 2, 3, 5, 0, 0, 0, 0, 0, 5, 0, 0],
             ['Depo-Provera', 60, 52, 25, 77, 0, 0, 0, 8, 8, 77, -8, 0],
             ['Jadelle', 6, 6, 5, 11, 0, 0, 0, 0, 0, 11, 0, 0],
             ['Microgynon/Lof.', 42, 42, 0, 42, 0, 0, 0, 0, 0, 42, 0, 0],
             ['Microlut/Ovrette', 15, 12, 18, 30, 0, 0, 0, 3, 3, 30, -3, 0],
             ['Preservatif Feminin', 5, 5, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0],
             [
                 'Preservatif Masculin', 100, 100, 0, 100, 0, 0, 0, 0, 0, 100,
                 0, 0
             ]])
示例#17
0
 def test_asha_functionality_checklist_report(self, mock_run_query):
     mock = MagicMock()
     mock.couch_user = self.user
     mock.GET = {
         'lang': '',
         'sf': '',
         'startdate': '2018-01-01',
         'enddate': '2018-01-31',
         'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
         'month': '01',
         'year': '2018',
         'hierarchy_district': 'kaushambi',
         'hierarchy_block': 'Chail',
     }
     asha_functionality_checklist_report = ASHAFunctionalityChecklistReport(request=mock, domain='up-nrhm')
     rows = asha_functionality_checklist_report.rows
     self.assertEqual(
         rows,
         [
             ['', 'Date when cheklist was filled', 'Total no. of ASHAs functional on each tasks'],
             [1, 'Newborn visits within first day of birth in case of home deliveries', 0],
             [2,
              'Set of home visits for newborn care as specified in the HBNC guidelines (six visits in case '
              'of Institutional delivery and seven in case of a home delivery)',
              0],
             [3, 'Attending VHNDs/Promoting immunization', 0], [4, 'Supporting institutional delivery', 0],
             [5, 'Management of childhood illness - especially diarrhea and pneumonia', 0],
             [6, 'Household visits with nutrition counseling', 0],
             [7, 'Fever cases seen/malaria slides made in malaria endemic area', 0],
             [8, 'Acting as DOTS provider', 0], [9, 'Holding or attending village/VHSNC meeting', 0],
             [10,
              'Successful referral of the IUD, female sterilization or male sterilization cases and/or '
              'providing OCPs/Condoms',
              0],
             ['', 'Total of number of tasks on which ASHA reported being functional', ''],
             ['', 'Total number of ASHAs who are functional on at least 60% of the tasks', 0],
             ['', 'Remark', '']
         ]
     )
    def test_fiche_consommation_report_countrywide(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2014-06-01',
            'enddate': '2014-07-31',
            'location_id': '',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1), datetime.datetime(2014, 7, 31))

        fiche_consommation_report2_report = FicheConsommationReport2(request=mock, domain='test-pna')

        fiche_consommation_report = fiche_consommation_report2_report.report_context['reports'][0]['report_table']
        headers = fiche_consommation_report['headers'].as_export_table[0]
        rows = fiche_consommation_report['rows']
        self.assertEqual(
            headers,
            ['', 'CU', ' ', ' ', 'Collier', ' ', ' ', 'DIU', ' ', ' ', 'Depo-Provera', ' ', ' ',
             'Jadelle', ' ', ' ', 'Microgynon/Lof.', ' ', ' ', 'Microlut/Ovrette', ' ', ' ',
             'Preservatif Feminin', ' ', ' ', 'Preservatif Masculin', ' ', ' ']
        )
        self.assertEqual(
            rows,
            [
                ['DEBI TIQUET', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0],
                ['DIOGO', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0],
                ['LERANE COLY', 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0],
                ['NDIAWAR RICHARD TOLL', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
                 1, 1, 0],
                ['NIANGUE DIAW', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0],
                ['PS CAMP MILITAIRE', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
                 1, 0],
                ['PS DIOKOUL WAGUE', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1,
                 0],
                ['PS NGOR', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0],
                ['PS PLLES ASS. UNITE 12', 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
                 1, 1, 0]
            ]
        )
示例#19
0
    def test_recovery_rate_by_pps_report_pps_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': 'ccf4430f5c3f493797486d6ce1c39682',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_pps_report = dashboard2_report.report_context['reports'][2]['report_table']
        headers = recovery_rate_by_pps_report['headers'].as_export_table[0]
        rows = recovery_rate_by_pps_report['rows']
        total_row = recovery_rate_by_pps_report['total_row']
        self.assertEqual(
            headers,
            ['PPS', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017', 'Janvier 2018', 'F\xe9vrier 2018',
             'Mars 2018', 'Taux moyen']
        )
        self.assertEqual(
            rows,
            sorted([
                [{'html': 'P2'}, {'html': '93.02%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': '0.00%'},
                 {'html': 'pas de donn\xe9es'}, {'html': '42.55%'}]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Taux par PPS'}, {'html': '93.02%'}, {'html': 'pas de donn\xe9es'},
                {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': '0.00%'},
                {'html': 'pas de donn\xe9es'}, {'html': '42.55%'}
            ]
        )
示例#20
0
 def test_asha_functionality_checklist_report(self, mock_run_query):
     mock = MagicMock()
     mock.couch_user = self.user
     mock.GET = {
         'lang': '',
         'sf': '',
         'startdate': '2018-01-01',
         'enddate': '2018-01-31',
         'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
         'month': '01',
         'year': '2018',
         'hierarchy_district': 'kaushambi',
         'hierarchy_block': 'Chail',
     }
     asha_functionality_checklist_report = ASHAFunctionalityChecklistReport(request=mock, domain=DOMAIN)
     rows = asha_functionality_checklist_report.rows
     self.assertEqual(
         rows,
         [
             ['', 'Date when cheklist was filled', 'Total no. of ASHAs functional on each tasks'],
             [1, 'Newborn visits within first day of birth in case of home deliveries', 0],
             [2,
              'Set of home visits for newborn care as specified in the HBNC guidelines (six visits in case '
              'of Institutional delivery and seven in case of a home delivery)',
              0],
             [3, 'Attending VHNDs/Promoting immunization', 0], [4, 'Supporting institutional delivery', 0],
             [5, 'Management of childhood illness - especially diarrhea and pneumonia', 0],
             [6, 'Household visits with nutrition counseling', 0],
             [7, 'Fever cases seen/malaria slides made in malaria endemic area', 0],
             [8, 'Acting as DOTS provider', 0], [9, 'Holding or attending village/VHSNC meeting', 0],
             [10,
              'Successful referral of the IUD, female sterilization or male sterilization cases and/or '
              'providing OCPs/Condoms',
              0],
             ['', 'Total of number of tasks on which ASHA reported being functional', ''],
             ['', 'Total number of ASHAs who are functional on at least 60% of the tasks', 0],
             ['', 'Remark', '']
         ]
     )
示例#21
0
    def test_PPS_avec_donnees_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2014-06-01',
            'enddate': '2014-07-31',
            'location_id': '1991b4dfe166335e342f28134b85fcac',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1),
                                 datetime.datetime(2014, 7, 31))

        tableu_de_board_report2_report = TableuDeBoardReport2(
            request=mock, domain='test-pna')

        PPS_avec_donnees_report = tableu_de_board_report2_report.report_context[
            'reports'][1]['report_table']
        headers = PPS_avec_donnees_report['headers'].as_export_table[0]
        rows = PPS_avec_donnees_report['rows']

        self.assertEqual(headers, ['PPS', 'PPS Avec Donn\xe9es Soumises'])
        self.assertEqual(sorted(rows, key=lambda x: x[0]),
                         sorted([['PASSY', 1]], key=lambda x: x[0]))
示例#22
0
    def test_valuation_of_pna_stock_per_product_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard3_report = Dashboard3Report(request=mock, domain='test-pna')

        valuation_of_pna_stock_per_product_data_report = \
            dashboard3_report.report_context['reports'][1]['report_table']
        headers = valuation_of_pna_stock_per_product_data_report['headers'].as_export_table[0]
        rows = valuation_of_pna_stock_per_product_data_report['rows']
        total_row = valuation_of_pna_stock_per_product_data_report['total_row']

        self.assertEqual(
            headers,
            ['Produit', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018']
        )
        self.assertItemsEqual(
            rows,
            sorted([
                ['Produit A', '442.500', '717.500', '412.500', '150.000', '437.500', '150.000'],
                ['Produit B', '336.000', '558.000', '334.500', '157.500', '453.000', '127.500'],
                ['Produit C', '198.000', '386.400', 'pas de donn\xe9es', '120.000', 'pas de donn\xe9es',
                 'pas de donn\xe9es'],
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            ['Total (CFA)', '976.500', '1.661.900', '747.000', '427.500', '890.500', '277.500']
        )
示例#23
0
    def test_extract_value_from_report_table_row_value_input_dict(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }
        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')
        report_table = {
            'fix_column': False,
            'comment': 'test_comment',
            'rows': [[{'style': 'style0', 'html': 'html0'}, {'style': 'style3', 'html': 'html3'}],
                     [{'style': 'style1', 'html': 'html1'}, {'style': 'style4', 'html': 'html4'}],
                     [{'style': 'style2', 'html': 'html2'}, {'style': 'style5', 'html': 'html5'}]],
            'datatables': False,
            'title': 'test_title',
            'total_row': [
                {'html': 'pas de donn\xe9es0'},
                {'html': 'pas de donn\xe9es1'},
                {'html': 'pas de donn\xe9es2'},
                {'html': 'pas de donn\xe9es3'}
            ],
            'slug': 'disponibilite',
            'default_rows': 10
        }
        total_row = dashboard1_report._sanitize_single_row(report_table['total_row'])
        self.assertEqual(total_row, ['pas de donn\xe9es0', 'pas de donn\xe9es1',
                                     'pas de donn\xe9es2', 'pas de donn\xe9es3'])

        all_rows = dashboard1_report._sanitize_all_rows(report_table)
        self.assertEqual(all_rows, [['html0', 'html3'],
                                    ['html1', 'html4'],
                                    ['html2', 'html5']])
示例#24
0
    def test_extract_value_from_report_table_row_value_input_dict(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }
        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')
        report_table = {
            'fix_column': False,
            'comment': 'test_comment',
            'rows': [[{'style': 'style0', 'html': 'html0'}, {'style': 'style3', 'html': 'html3'}],
                     [{'style': 'style1', 'html': 'html1'}, {'style': 'style4', 'html': 'html4'}],
                     [{'style': 'style2', 'html': 'html2'}, {'style': 'style5', 'html': 'html5'}]],
            'datatables': False,
            'title': 'test_title',
            'total_row': [
                {'html': 'pas de donn\xe9es0'},
                {'html': 'pas de donn\xe9es1'},
                {'html': 'pas de donn\xe9es2'},
                {'html': 'pas de donn\xe9es3'}
            ],
            'slug': 'disponibilite',
            'default_rows': 10
        }
        total_row = dashboard1_report._sanitize_single_row(report_table['total_row'])
        self.assertEqual(total_row, ['pas de donn\xe9es0', 'pas de donn\xe9es1',
                                     'pas de donn\xe9es2', 'pas de donn\xe9es3'])

        all_rows = dashboard1_report._sanitize_all_rows(report_table)
        self.assertEqual(all_rows, [['html0', 'html3'],
                                    ['html1', 'html4'],
                                    ['html2', 'html5']])
示例#25
0
    def test_rupture_rate_by_pps_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        rupture_rate_by_pps_report = dashboard1_report.report_context['reports'][1]['report_table']
        headers = rupture_rate_by_pps_report['headers'].as_export_table[0]
        rows = rupture_rate_by_pps_report['rows']
        total_row = rupture_rate_by_pps_report['total_row']
        self.assertEqual(
            headers,
            ['PPS', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen']
        )
        expected = [
            [{'html': 'District Test 2'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'F1'}, {'html': 'pas de donn\xe9es'}, {'style': 'color: red', 'html': '50.00%'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': 'color: red', 'html': '16.67%'}],
            [{'html': 'F2'}, {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'G1'}, {'html': 'pas de donn\xe9es'}, {'style': 'color: red', 'html': '66.67%'},
             {'html': 'pas de donn\xe9es'}, {'style': 'color: red', 'html': '33.33%'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '50.00%'}],
            [{'html': 'Ngor'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'P1'}, {'style': 'color: red', 'html': '33.33%'},
             {'style': 'color: red', 'html': '50.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '37.50%'}],
            [{'html': 'P2'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '46.15%'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '46.15%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
            [{'html': 'PPS 2'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 2'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 2'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 3'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 3'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'PPS 3'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '50.00%'}, {'style': 'color: red', 'html': '50.00%'}],
            [{'html': 'PPS Alexis'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'Pps test 2 bbb'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}],
            [{'html': 'SL1'}, {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'SL2'}, {'style': '', 'html': '0.00%'}, {'style': 'color: red', 'html': '50.00%'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '12.50%'}],
            [{'html': 'Virage 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': 'color: red', 'html': '20.00%'}, {'style': 'color: red', 'html': '20.00%'}],
            [{'html': 'Virage 1'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'Virage 2'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}],
            [{'html': 'Virage 2'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'style': '', 'html': '0.00%'}, {'style': '', 'html': '0.00%'}],
            [{'html': 'test pps 1'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'style': '', 'html': '0.00%'}]
        ]
        self.assertEqual(
            len(rows),
            len(expected)
        )
        for row in expected:
            self.assertIn(row, rows)
        self.assertEqual(
            total_row,
            [
                {'html': 'Taux par Pays'}, {'style': 'color: red', 'html': '8.33%'},
                {'style': 'color: red', 'html': '35.71%'}, {'style': '', 'html': '0.00%'},
                {'style': 'color: red', 'html': '5.00%'}, {'style': 'color: red', 'html': '21.43%'},
                {'style': 'color: red', 'html': '4.17%'}, {'style': 'color: red', 'html': '11.35%'}
            ]
        )
示例#26
0
    def test_district_functionality_report(self, mock_run_query):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'lang': '',
            'sf': 'sf5',
            'startdate': '2018-01-01',
            'enddate': '2018-01-31',
            'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
            'month': '01',
            'year': '2018',
            'hierarchy_district': 'kaushambi',
            'hierarchy_block': 'Chail',
        }
        district_functionality_report = DistrictFunctionalityReport(request=mock, domain='up-nrhm')
        rows = district_functionality_report.rows
        expected = (
            [
                [
                    'Newborn visits within first day of birth in case of home deliveries',
                    {'sort_key': '2.8%', 'html': '2.8%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '2.3%', 'html': '2.3%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '2.4%', 'html': '2.4%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '2.6%', 'html': '2.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '3.0%', 'html': '3.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '3.2%', 'html': '3.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '4.7%', 'html': '4.7%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    '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': '22.5%', 'html': '22.5%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '20.9%', 'html': '20.9%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '17.2%', 'html': '17.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '21.0%', 'html': '21.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '19.6%', 'html': '19.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '21.6%', 'html': '21.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '19.0%', 'html': '19.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '20.2%', 'html': '20.2%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Attending VHNDs/Promoting immunization',
                    {'sort_key': '30.3%', 'html': '30.3%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '29.5%', 'html': '29.5%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '25.3%', 'html': '25.3%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '29.8%', 'html': '29.8%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '29.6%', 'html': '29.6%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '29.1%', 'html': '29.1%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '28.6%', 'html': '28.6%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '27.1%', 'html': '27.1%'}, {'sort_key': 'C', 'html': 'C'}
                ],
                [
                    'Supporting institutional delivery',
                    {'sort_key': '22.5%', 'html': '22.5%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '27.1%', 'html': '27.1%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '20.2%', 'html': '20.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '22.6%', 'html': '22.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '24.9%', 'html': '24.9%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '24.6%', 'html': '24.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '23.0%', 'html': '23.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '17.8%', 'html': '17.8%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Management of childhood illness - especially diarrhea and pneumonia',
                    {'sort_key': '23.9%', 'html': '23.9%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '18.6%', 'html': '18.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '27.3%', 'html': '27.3%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '20.2%', 'html': '20.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '17.5%', 'html': '17.5%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '10.4%', 'html': '10.4%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '24.6%', 'html': '24.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '22.5%', 'html': '22.5%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Household visits with nutrition counseling',
                    {'sort_key': '21.1%', 'html': '21.1%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '9.3%', 'html': '9.3%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '13.1%', 'html': '13.1%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '9.0%', 'html': '9.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.7%', 'html': '0.7%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '15.5%', 'html': '15.5%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Fever cases seen/malaria slides made in malaria endemic area',
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '1.0%', 'html': '1.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Acting as DOTS provider',
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '8.5%', 'html': '8.5%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '5.1%', 'html': '5.1%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '5.6%', 'html': '5.6%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '4.2%', 'html': '4.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '2.2%', 'html': '2.2%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '6.2%', 'html': '6.2%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Holding or attending village/VHSNC meeting',
                    {'sort_key': '8.5%', 'html': '8.5%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '2.3%', 'html': '2.3%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '7.1%', 'html': '7.1%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '8.9%', 'html': '8.9%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '0.0%', 'html': '0.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '9.0%', 'html': '9.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '4.0%', 'html': '4.0%'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': '12.4%', 'html': '12.4%'}, {'sort_key': 'D', 'html': 'D'}
                ],
                [
                    'Successful referral of the IUD, female sterilization or male sterilization cases '
                    'and/or providing OCPs/Condoms',
                    {'sort_key': '28.9%', 'html': '28.9%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '31.0%', 'html': '31.0%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '29.3%', 'html': '29.3%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '28.2%', 'html': '28.2%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '25.9%', 'html': '25.9%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '28.4%', 'html': '28.4%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '27.0%', 'html': '27.0%'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': '27.1%', 'html': '27.1%'}, {'sort_key': 'C', 'html': 'C'}
                ],
                [
                    '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                    {'sort_key': 27, 'html': '36/131 (27%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 27, 'html': '34/122 (27%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 24, 'html': '22/91 (24%)'}, {'sort_key': 'D', 'html': 'D'},
                    {'sort_key': 26, 'html': '31/116 (26%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 26, 'html': '46/175 (26%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 28, 'html': '34/121 (28%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 27, 'html': '31/111 (27%)'}, {'sort_key': 'C', 'html': 'C'},
                    {'sort_key': 26, 'html': '30/114 (26%)'}, {'sort_key': 'C', 'html': 'C'}
                ]
            ], 0
        )

        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])
示例#27
0
    def test_availability_report_with_chosen_program(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': 'a99fe8331e3dbcc127917e41af45ad81',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0][
            'report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(headers, [
            'Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017',
            'Janvier 2018', 'Février 2018', 'Mars 2018',
            'Taux moyen de disponibilité'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'Region 1'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': 'color: red',
                'html': '50.00%'
            }, {
                'style': 'color: red',
                'html': '50.00%'
            }],
                    [{
                        'html': 'Region Test'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }],
                    [{
                        'html': 'Thies'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }]],
                   key=lambda x: x[0]))
        self.assertEqual(total_row, [{
            'html': 'Disponibilit\xe9 (%)'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'style': 'color: red',
            'html': '66.67%'
        }, {
            'style': 'color: red',
            'html': '91.67%'
        }])
    def test_recap_passage_report_countrywide(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'month': '06',
            'year': '2014',
            'location_id': '',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1), datetime.datetime(2014, 6, 30))

        recap_passage_report2 = RecapPassageReport2(request=mock, domain='test-pna')

        recap_passage_report2_first = recap_passage_report2.report_context['reports'][0]['report_table']
        headers = recap_passage_report2_first['headers'].as_export_table[0]
        rows = recap_passage_report2_first['rows']
        title = recap_passage_report2_first['title']
        recap_passage_report2_second = recap_passage_report2.report_context['reports'][1]['report_table']
        self.assertEqual(
            title,
            'Recap Passage 2014-06-10'
        )
        self.assertEqual(
            headers,
            [
                'Designations', 'Stock apres derniere livraison',
                'Stock disponible et utilisable a la livraison',
                'Livraison', 'Stock Total', 'Precedent', 'Recu hors entrepots mobiles', 'Non Facturable',
                'Facturable', 'Reelle', 'Stock Total', 'PPS Restant', 'Pertes et Adjustement'
            ]
        )
        self.assertEqual(
            rows,
            [
                ['CU', 12, 12, 0, 12, 0, 0, 0, 0, 0, 12, 0, 0],
                ['Collier', 9, 9, 0, 9, 4, 0, 0, 0, 0, 9, 4, 0],
                ['DIU', 21, 7, 30, 37, 0, 0, 0, 14, 14, 37, -14, 0],
                ['Depo-Provera', 791, 606, 0, 606, 0, 0, 0, 185, 185, 606, -185, 0],
                ['Jadelle', 45, 28, 20, 48, 0, 0, 0, 17, 17, 48, -17, 0],
                ['Microgynon/Lof.', 801, 522, 160, 682, 0, 0, 0, 279, 279, 682, -279, 0],
                ['Microlut/Ovrette', 234, 197, 0, 197, 0, 0, 0, 37, 37, 197, -37, 0],
                ['Preservatif Feminin', 20, 10, 10, 20, 0, 0, 0, 10, 10, 20, -10, 0],
                ['Preservatif Masculin', 279, 258, 100, 358, 68, 0, 21, 0, 21, 358, 47, 0],
            ]
        )
        headers = recap_passage_report2_second['headers'].as_export_table[0]
        rows = recap_passage_report2_second['rows']
        title = recap_passage_report2_second['title']
        self.assertEqual(
            title,
            'Recap Passage 2014-06-11'
        )
        self.assertEqual(
            headers,
            [
                'Designations', 'Stock apres derniere livraison',
                'Stock disponible et utilisable a la livraison',
                'Livraison', 'Stock Total', 'Precedent', 'Recu hors entrepots mobiles', 'Non Facturable',
                'Facturable', 'Reelle', 'Stock Total', 'PPS Restant', 'Pertes et Adjustement'
            ]
        )
        self.assertEqual(
            rows,
            [
                ['CU', 10, 9, 0, 9, 0, 0, 0, 1, 1, 9, -1, 0],
                ['Collier', 6, 6, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0],
                ['DIU', 6, 6, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0],
                ['Depo-Provera', 160, 145, 0, 145, 0, 0, 0, 15, 15, 145, -15, 0],
                ['Jadelle', 13, 13, 0, 13, 0, 0, 0, 0, 0, 13, 0, 0],
                ['Microgynon/Lof.', 189, 156, 0, 156, 0, 0, 0, 33, 33, 156, -33, 0],
                ['Microlut/Ovrette', 100, 88, 18, 106, 0, 0, 0, 12, 12, 106, -12, 0],
                ['Preservatif Feminin', 15, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0],
                ['Preservatif Masculin', 160, 160, 0, 160, 0, 0, 0, 0, 0, 160, 0, 0],
            ]
        )
示例#29
0
    def test_satisfaction_rate_after_delivery_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard3_report = Dashboard3Report(request=mock, domain='test-pna')

        satisfaction_rate_after_delivery_data_report = \
            dashboard3_report.report_context['reports'][0]['report_table']
        headers = satisfaction_rate_after_delivery_data_report['headers'].as_export_table[0]
        rows = satisfaction_rate_after_delivery_data_report['rows']
        total_row = satisfaction_rate_after_delivery_data_report['total_row']

        self.assertEqual(
            headers,
            ['Produit', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    'ACETATE DE MEDROXY PROGESTERONE 104MG/0.65ML INJ. (SAYANA PRESS)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ACETATE DE MEDROXY PROGESTERONE 150MG/ML+S A B KIT (1+1) (DEPO-PROVERA)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '150.00%'}
                ],
                [
                    'ACT ADULTE',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ACT PETIT ENFANT',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ALBENDAZOL 4% SB.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'DISPOSITIF INTRA UTERIN (TCU 380 A) - DIU',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '1462.40%'}
                ],
                [
                    'EFAVIRENZ 600MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '80.77%'}
                ],
                [
                    'LAMIVUDINE+NEVIRAPINE+ZIDOVUDINE (30+50+60)MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'LEVONORGESTREL+ETHYNILESTRADIOL+FER (0.15+0.03+75)MG (MICROGYNON)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '222.22%'}
                ],
                [
                    'NEVIRAPINE 200MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '93.30%'}
                ],
                [
                    'PARACETAMOL 500MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 1',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 10',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '87.10%'},
                    {'style': '', 'html': '96.30%'}
                ],
                [
                    'Produit 12',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 14',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '90.00%'}
                ],
                [
                    'Produit 15',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit 2',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit A',
                    {'style': '', 'html': '97.63%'},
                    {'style': '', 'html': '94.86%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '95.24%'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit B',
                    {'style': '', 'html': '98.28%'},
                    {'style': '', 'html': '98.94%'},
                    {'style': '', 'html': '98.60%'},
                    {'style': 'color: orange', 'html': '142.86%'},
                    {'style': 'color: orange', 'html': '166.67%'},
                    {'style': 'color: orange', 'html': '114.29%'}
                ],
                [
                    'Produit C',
                    {'style': '', 'html': '93.88%'},
                    {'style': '', 'html': '93.28%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '111.11%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE (150+75)MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '101.21%'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE (60+30+150)MG CP. DISPER',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE+ETHAMBUTOL (150+75+400+2',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'TEST RAPIDE HIV 1/2 (SD BIOLINE)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                'Total (%)',
                {'style': '', 'html': '96.89%'},
                {'style': '', 'html': '95.77%'},
                {'style': '', 'html': '99.02%'},
                {'style': 'color: orange', 'html': '119.05%'},
                {'style': 'color: orange', 'html': '114.47%'},
                {'style': 'color: orange', 'html': '188.23%'}
            ]

        )
示例#30
0
    def test_recap_passage_report_countrywide(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'month': '06',
            'year': '2014',
            'location_id': '',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1),
                                 datetime.datetime(2014, 6, 30))

        recap_passage_report2 = RecapPassageReport2(request=mock,
                                                    domain='test-pna')

        recap_passage_report2_first = recap_passage_report2.report_context[
            'reports'][0]['report_table']
        headers = recap_passage_report2_first['headers'].as_export_table[0]
        rows = recap_passage_report2_first['rows']
        title = recap_passage_report2_first['title']
        recap_passage_report2_second = recap_passage_report2.report_context[
            'reports'][1]['report_table']
        self.assertEqual(title, 'Recap Passage 2014-06-10')
        self.assertEqual(headers, [
            'Designations', 'Stock apres derniere livraison',
            'Stock disponible et utilisable a la livraison', 'Livraison',
            'Stock Total', 'Precedent', 'Recu hors entrepots mobiles',
            'Non Facturable', 'Facturable', 'Reelle', 'Stock Total',
            'PPS Restant', 'Pertes et Adjustement'
        ])
        self.assertEqual(rows, [
            ['CU', 12, 12, 0, 12, 0, 0, 0, 0, 0, 12, 0, 0],
            ['Collier', 9, 9, 0, 9, 4, 0, 0, 0, 0, 9, 4, 0],
            ['DIU', 21, 7, 30, 37, 0, 0, 0, 14, 14, 37, -14, 0],
            [
                'Depo-Provera', 791, 606, 0, 606, 0, 0, 0, 185, 185, 606, -185,
                0
            ],
            ['Jadelle', 45, 28, 20, 48, 0, 0, 0, 17, 17, 48, -17, 0],
            [
                'Microgynon/Lof.', 801, 522, 160, 682, 0, 0, 0, 279, 279, 682,
                -279, 0
            ],
            [
                'Microlut/Ovrette', 234, 197, 0, 197, 0, 0, 0, 37, 37, 197,
                -37, 0
            ],
            [
                'Preservatif Feminin', 20, 10, 10, 20, 0, 0, 0, 10, 10, 20,
                -10, 0
            ],
            [
                'Preservatif Masculin', 279, 258, 100, 358, 68, 0, 21, 0, 21,
                358, 47, 0
            ],
        ])
        headers = recap_passage_report2_second['headers'].as_export_table[0]
        rows = recap_passage_report2_second['rows']
        title = recap_passage_report2_second['title']
        self.assertEqual(title, 'Recap Passage 2014-06-11')
        self.assertEqual(headers, [
            'Designations', 'Stock apres derniere livraison',
            'Stock disponible et utilisable a la livraison', 'Livraison',
            'Stock Total', 'Precedent', 'Recu hors entrepots mobiles',
            'Non Facturable', 'Facturable', 'Reelle', 'Stock Total',
            'PPS Restant', 'Pertes et Adjustement'
        ])
        self.assertEqual(rows, [
            ['CU', 10, 9, 0, 9, 0, 0, 0, 1, 1, 9, -1, 0],
            ['Collier', 6, 6, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0],
            ['DIU', 6, 6, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0],
            ['Depo-Provera', 160, 145, 0, 145, 0, 0, 0, 15, 15, 145, -15, 0],
            ['Jadelle', 13, 13, 0, 13, 0, 0, 0, 0, 0, 13, 0, 0],
            [
                'Microgynon/Lof.', 189, 156, 0, 156, 0, 0, 0, 33, 33, 156, -33,
                0
            ],
            [
                'Microlut/Ovrette', 100, 88, 18, 106, 0, 0, 0, 12, 12, 106,
                -12, 0
            ],
            ['Preservatif Feminin', 15, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0],
            [
                'Preservatif Masculin', 160, 160, 0, 160, 0, 0, 0, 0, 0, 160,
                0, 0
            ],
        ])
示例#31
0
    def test_availability_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0]['report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(
            headers,
            ['Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen de disponibilité']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    {'html': 'Dakar'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    {'html': 'Fatick'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '33.33%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': 'color: red', 'html': '0.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': 'color: red', 'html': '58.33%'}
                ],
                [
                    {'html': 'Region 1'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '50.00%'},
                    {'style': 'color: red', 'html': '50.00%'}
                ],
                [
                    {'html': 'Region Test'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    {'html': 'Saint-Louis'},
                    {'style': 'color: red', 'html': '75.00%'},
                    {'style': 'color: red', 'html': '33.33%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '77.08%'}
                ],
                [
                    {'html': 'Thies'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '87.50%'},
                    {'style': 'color: red', 'html': '87.50%'}
                ]
            ], key=lambda x: x[0]['html'])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Disponibilit\xe9 (%)'},
                {'style': 'color: red', 'html': '90.00%'},
                {'style': 'color: red', 'html': '33.33%'},
                {'style': '', 'html': '100.00%'},
                {'style': 'color: red', 'html': '80.00%'},
                {'style': '', 'html': '100.00%'},
                {'style': 'color: red', 'html': '88.24%'},
                {'style': 'color: red', 'html': '83.67%'}
            ]
        )
示例#32
0
    def test_satisfaction_rate_after_delivery_data_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard3_report = Dashboard3Report(request=mock, domain='test-pna')

        satisfaction_rate_after_delivery_data_report = \
            dashboard3_report.report_context['reports'][0]['report_table']
        headers = satisfaction_rate_after_delivery_data_report['headers'].as_export_table[0]
        rows = satisfaction_rate_after_delivery_data_report['rows']
        total_row = satisfaction_rate_after_delivery_data_report['total_row']

        self.assertEqual(
            headers,
            ['Produit', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    'ACETATE DE MEDROXY PROGESTERONE 104MG/0.65ML INJ. (SAYANA PRESS)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ACETATE DE MEDROXY PROGESTERONE 150MG/ML+S A B KIT (1+1) (DEPO-PROVERA)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '150.00%'}
                ],
                [
                    'ACT ADULTE',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ACT PETIT ENFANT',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'ALBENDAZOL 4% SB.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'DISPOSITIF INTRA UTERIN (TCU 380 A) - DIU',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '1462.40%'}
                ],
                [
                    'EFAVIRENZ 600MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '80.77%'}
                ],
                [
                    'LAMIVUDINE+NEVIRAPINE+ZIDOVUDINE (30+50+60)MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'LEVONORGESTREL+ETHYNILESTRADIOL+FER (0.15+0.03+75)MG (MICROGYNON)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '222.22%'}
                ],
                [
                    'NEVIRAPINE 200MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '93.30%'}
                ],
                [
                    'PARACETAMOL 500MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 1',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 10',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '87.10%'},
                    {'style': '', 'html': '96.30%'}
                ],
                [
                    'Produit 12',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'Produit 14',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '90.00%'}
                ],
                [
                    'Produit 15',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit 2',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit A',
                    {'style': '', 'html': '97.63%'},
                    {'style': '', 'html': '94.86%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '95.24%'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'Produit B',
                    {'style': '', 'html': '98.28%'},
                    {'style': '', 'html': '98.94%'},
                    {'style': '', 'html': '98.60%'},
                    {'style': 'color: orange', 'html': '142.86%'},
                    {'style': 'color: orange', 'html': '166.67%'},
                    {'style': 'color: orange', 'html': '114.29%'}
                ],
                [
                    'Produit C',
                    {'style': '', 'html': '93.88%'},
                    {'style': '', 'html': '93.28%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '111.11%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE (150+75)MG CP.',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: orange', 'html': '101.21%'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE (60+30+150)MG CP. DISPER',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'RIFAMPICINE+ISONIAZIDE+PYRAZINAMIDE+ETHAMBUTOL (150+75+400+2',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    'TEST RAPIDE HIV 1/2 (SD BIOLINE)',
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                'Total (%)',
                {'style': '', 'html': '96.89%'},
                {'style': '', 'html': '95.77%'},
                {'style': '', 'html': '99.02%'},
                {'style': 'color: orange', 'html': '119.05%'},
                {'style': 'color: orange', 'html': '114.47%'},
                {'style': 'color: orange', 'html': '188.23%'}
            ]

        )
示例#33
0
    def test_loss_rate_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        loss_rate_report = dashboard2_report.report_context['reports'][0][
            'report_table']
        headers = loss_rate_report['headers'].as_export_table[0]
        rows = loss_rate_report['rows']
        total_row = loss_rate_report['total_row']
        self.assertEqual(headers, [
            'R\xe9gion', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017',
            'Janvier 2018', 'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'Dakar'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }],
                    [{
                        'html': 'Fatick'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '9.69%'
                    }, {
                        'html': '5.49%'
                    }, {
                        'html': '0.75%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': '5.48%'
                    }],
                    [{
                        'html': 'Region 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'Region Test'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'Saint-Louis'
                    }, {
                        'html': '6.36%'
                    }, {
                        'html': '9.88%'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '2.94%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '5.92%'
                    }],
                    [{
                        'html': 'Thies'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }]],
                   key=lambda x: x[0]['html']))
        self.assertEqual(total_row, [{
            'html': 'Taux par Pays'
        }, {
            'html': '6.36%'
        }, {
            'html': '9.79%'
        }, {
            'html': '3.61%'
        }, {
            'html': '0.75%'
        }, {
            'html': '2.94%'
        }, {
            'html': '0.00%'
        }, {
            'html': '5.74%'
        }])
示例#34
0
    def test_recovery_rate_by_district_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_district_report = dashboard2_report.report_context[
            'reports'][2]['report_table']
        headers = recovery_rate_by_district_report['headers'].as_export_table[
            0]
        rows = recovery_rate_by_district_report['rows']
        total_row = recovery_rate_by_district_report['total_row']
        self.assertEqual(headers, [
            'R\xe9gion', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017',
            'Janvier 2018', 'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen'
        ])
        self.assertListEqual(rows[0:1], [
            [{
                'html': 'DISTRICT PNA'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
        ])
        # Current implementation does not guarantee order of rows with the same district name
        self.assertCountEqual(rows[1:3], [
            [{
                'html': 'Dakar'
            }, {
                'html': '0.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }],
            [{
                'html': 'Dakar'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }, {
                'html': '0.00%'
            }],
        ])
        self.assertListEqual(rows[3:], [
            [{
                'html': 'District Centre'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }, {
                'html': '0.00%'
            }],
            [{
                'html': 'District Gu\xe9diawaye'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Joal Fadiouth'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Khombole'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Mbao'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District M\xe9kh\xe9'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Pikine'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Sud'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Test'
            }, {
                'html': '100.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Test 2'
            }, {
                'html': '0.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }],
            [{
                'html': 'District Thiadiaye'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'District Tivaoune'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }, {
                'html': '100.00%'
            }],
            [{
                'html': 'New York'
            }, {
                'html': '19.15%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '19.15%'
            }],
            [{
                'html': 'Thies'
            }, {
                'html': '100.00%'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '100.00%'
            }],
        ])
        self.assertEqual(total_row, [{
            'html': 'Taux par Pays'
        }, {
            'html': '44.46%'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': '100.00%'
        }, {
            'html': '100.00%'
        }, {
            'html': '75.86%'
        }, {
            'html': '80.43%'
        }])
    def test_expiration_rate_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        expiration_rate_report = dashboard2_report.report_context['reports'][
            1]['report_table']
        headers = expiration_rate_report['headers'].as_export_table[0]
        rows = expiration_rate_report['rows']
        total_row = expiration_rate_report['total_row']
        self.assertEqual(headers, [
            'R\xe9gion', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017',
            'Janvier 2018', 'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'Dakar'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }],
                    [{
                        'html': 'Fatick'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '7.75%'
                    }, {
                        'style': '',
                        'html': '3.59%'
                    }, {
                        'style': '',
                        'html': '3.51%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '2.70%'
                    }, {
                        'style': 'color: red',
                        'html': '5.11%'
                    }],
                    [{
                        'html': 'Region 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'Region Test'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'Saint-Louis'
                    }, {
                        'style': 'color: red',
                        'html': '6.50%'
                    }, {
                        'style': 'color: red',
                        'html': '8.55%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '1.12%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '4.93%'
                    }],
                    [{
                        'html': 'Thies'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }]],
                   key=lambda x: x[0]))
        self.assertEqual(total_row, [{
            'html': 'Taux par Pays'
        }, {
            'style': 'color: red',
            'html': '6.50%'
        }, {
            'style': 'color: red',
            'html': '8.17%'
        }, {
            'style': '',
            'html': '2.34%'
        }, {
            'style': '',
            'html': '3.51%'
        }, {
            'style': '',
            'html': '1.12%'
        }, {
            'style': '',
            'html': '2.70%'
        }, {
            'style': '',
            'html': '5.00%'
        }])
示例#36
0
    def test_block_level_af_report(self, mock_run_query):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'lang': '',
            'sf': 'sf4',
            'startdate': '2018-01-01',
            'enddate': '2018-01-31',
            'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
            'month': '01',
            'year': '2018',
            'hierarchy_district': 'kaushambi',
            'hierarchy_block': 'Chail',
        }
        block_level_af_report = BlockLevelAFReport(request=mock, domain='up-nrhm')
        rows = block_level_af_report.rows
        expected = (
            [
                [
                    'Newborn visits within first day of birth in case of home deliveries',
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '2', 'html': '2'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '1', 'html': '1'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '1', 'html': '1'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': 4.0, 'html': 4.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': '5', 'html': '5'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': '2', 'html': '2'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': 32.0, 'html': 32.0}
                ],
                [
                    'Attending VHNDs/Promoting immunization',
                    {'sort_key': '6', 'html': '6'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '5', 'html': '5'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': 43.0, 'html': 43.0}
                ],
                [
                    'Supporting institutional delivery',
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '1', 'html': '1'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': 32.0, 'html': 32.0}
                ],
                [
                    'Management of childhood illness - especially diarrhea and pneumonia',
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': 34.0, 'html': 34.0}
                ],
                [
                    'Household visits with nutrition counseling',
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': '3', 'html': '3'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': 30.0, 'html': 30.0}
                ],
                [
                    'Fever cases seen/malaria slides made in malaria endemic area',
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': 0.0, 'html': 0.0}],
                [
                    'Acting as DOTS provider',
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': 0.0, 'html': 0.0}
                ],
                [
                    'Holding or attending village/VHSNC meeting',
                    {'sort_key': '1', 'html': '1'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '0', 'html': '0'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '0', 'html': '0'},
                    {'sort_key': '3', 'html': '3'}, {'sort_key': 12.0, 'html': 12.0}
                ],
                [
                    'Successful referral of the IUD, female sterilization or male '
                    'sterilization cases and/or providing OCPs/Condoms',
                    {'sort_key': '6', 'html': '6'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '5', 'html': '5'},
                    {'sort_key': '5', 'html': '5'}, {'sort_key': '4', 'html': '4'},
                    {'sort_key': '4', 'html': '4'}, {'sort_key': 41.0, 'html': 41.0}
                ],
                [
                    '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                    {'sort_key': 29.629629629629626, 'html': '5/18 (29%)'},
                    {'sort_key': 30.76923076923077, 'html': '4/13 (30%)'},
                    {'sort_key': 28.88888888888889, 'html': '4/15 (28%)'},
                    {'sort_key': 33.33333333333333, 'html': '4/13 (33%)'},
                    {'sort_key': 33.333333333333336, 'html': '4/14 (33%)'},
                    {'sort_key': 27.083333333333332, 'html': '4/16 (27%)'},
                    {'sort_key': 27.083333333333332, 'html': '4/16 (27%)'},
                    {'sort_key': 30.555555555555554, 'html': '3/12 (30%)'},
                    {'sort_key': 30.952380952380953, 'html': '4/14 (30%)'},
                    {'sort_key': 27, 'html': '36/131 (27%)'}
                ],
                [
                    '<b>Total number of ASHAs who did not report/not known</b>',
                    {'sort_key': '12', 'html': '12'}, {'sort_key': '11', 'html': '11'},
                    {'sort_key': '11', 'html': '11'}, {'sort_key': '11', 'html': '11'},
                    {'sort_key': '10', 'html': '10'}, {'sort_key': '12', 'html': '12'},
                    {'sort_key': '12', 'html': '12'}, {'sort_key': '10', 'html': '10'},
                    {'sort_key': '10', 'html': '10'}, {'sort_key': 99.0, 'html': 99.0}
                ],
                [
                    '<b>Total Number of ASHAs under each Facilitator</b>',
                    {'sort_key': 18, 'html': 18}, {'sort_key': 15, 'html': 15},
                    {'sort_key': 16, 'html': 16}, {'sort_key': 15, 'html': 15},
                    {'sort_key': 15, 'html': 15}, {'sort_key': 17, 'html': 17},
                    {'sort_key': 17, 'html': 17}, {'sort_key': 14, 'html': 14},
                    {'sort_key': 15, 'html': 15}, {'sort_key': 142, 'html': 142}
                ]
            ], 142
        )

        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])
示例#37
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])
示例#38
0
    def test_products_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'startdate': '2014-06-01',
            'enddate': '2014-07-31',
            'location_id': '',
        }
        mock.datespan = DateSpan(datetime.datetime(2014, 6, 1),
                                 datetime.datetime(2014, 7, 31))

        tableu_de_board_report2_report = TableuDeBoardReport2(
            request=mock, domain='test-pna')

        products_report = tableu_de_board_report2_report.report_context[
            'reports'][2]['report_table']
        headers = products_report['headers'].as_export_table[0]
        rows = products_report['rows']
        self.assertEqual(headers, [
            'Quantity', 'ACT Adulte', 'ACT Grand Enfant', 'ACT Nourisson',
            'ACT Petit Enfant', 'ASAQ Adulte', 'ASAQ Grand Enfant',
            'ASAQ Petit Enfant', 'Amoxicillin 250mg', 'Ampiciline 1G Amp',
            'Bo\xeete de s\xe9curit\xe9', 'CU', u'Calcium 100mg',
            'Cefixime 100MG/5ML SUSP.BUV', 'Ceftriaxone 1G', 'Chlorexedine',
            'Collier', 'DIU', 'Depo-Provera', 'Dexamethasone 4mg',
            'Diazepam 10MG/2ML AMP. INJ.', 'Diluant BCG',
            'Diluant Fi\xe8vre Jaune (VAA)', 'Diluant Rougeole (RR)',
            'EFAVIRENZ 600MG CP.', 'Epinephrine 1MG/1ML AMP. INJ.',
            'Fer 0.68% SP', 'Gentamicin 40mg/2ml',
            'Hydrocortisone 100MG AMP. INJ.', 'IMPLANON',
            'ISONIAZIDE 100MG CP.', 'Jadelle',
            'Kit de depistage Rapide du VIH B/30',
            'LAMIVUDINE 30 NEVIRAPINE 50 ZIDOVUDINE 60 MG CP.',
            'Magnesium sulfate 500mg', 'Mebendazole 100MG SP',
            'Mebendazole 500MG CP.', 'Microgynon/Lof.', 'Microlut/Ovrette',
            'Misoprostol 200mcg', 'NEVIRAPINE 200MG CP', 'Oxytocine 5 UI',
            'Paracetamol 120MG/5ML SP', 'Paracetamol 1G/100ML INJ.',
            'Phytomenadione 10mg', 'Pneumo', 'Preservatif Feminin',
            'Preservatif Masculin', 'Product 7',
            'RIFAMPICINE 150 ISONIAZIDE 75MG CP.',
            'RIFAMPICINE 60 ISONIAZIDE 30MG CP. DISPERSIBLE',
            'RIFAMPICINE150 ISONIAZIDE 75 PYRAZINAMIDE400 ETHAMBUTOL2',
            'RIFAMPICINE60 ISONIAZIDE30 PYRAZINAMIDE150MG CP.DISPER',
            'Recto caps 200 mg', 'Recto caps 50 mg', 'Rota',
            'S.R.O. Faible osmolarite', 'STREPTOMYCINE 1G AMP. INJ.',
            'Sayana Press', 'Seringue Autobloquante 0,05 ml',
            'Seringue Autobloquante 0,5 ml', 'Seringue de dilution 2 ML',
            'Seringue de dilution 5 ML (SD)',
            'TENOFOVIR 300 LAMIVUDINE 300 EFAVIRENZ  600 MG CP.',
            'TENOFOVIR 300 LAMIVUDINE 300MG CP.', 'Test depistage rapide Palu',
            u'Tubercoline', 'Vaccin BCG', 'Vaccin DIPH - T\xe9tanique (Td)',
            'Vaccin Fi\xe8vre Jaune (VAA)', 'Vaccin H\xe9patite B',
            'Vaccin Penta', 'Vaccin Rougeole (RR)', 'Vaccin VPI', 'Vaccin VPO',
            'ZIDOVUDINE 300 LAMIVUDINE 150MG CP', 'Zinc 20mg'
        ])
        self.assertEqual(
            rows, [[
                'Commandes', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 0, 0,
                217, 2194, 90675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7510, 0,
                0, 0, 0, 0, 113080, 7200, 0, 0, 0, 0, 0, 0, 0, 4000, 48000, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0
            ],
                   [
                       'Raux', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 0, 0,
                       217, 2194, 51308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                       5810, 0, 0, 0, 0, 0, 59080, 7200, 0, 0, 0, 0, 0, 0, 0,
                       4000, 48000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                   ],
                   [
                       'Taux', '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%',
                       '0%', '0%', '100%', '0%', '0%', '0%', '0%', '100%',
                       '100%', '176%', '0%', '0%', '0%', '0%', '0%', '0%',
                       '0%', '0%', '0%', '0%', '0%', '0%', '129%', '0%', '0%',
                       '0%', '0%', '0%', '191%', '100%', '0%', '0%', '0%',
                       '0%', '0%', '0%', '0%', '100%', '100%', '0%', '0%',
                       '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%',
                       '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%',
                       '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%'
                   ]])
示例#39
0
    def test_block_level_af_report(self, mock_run_query):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'lang': '',
            'sf': 'sf4',
            'startdate': '2018-01-01',
            'enddate': '2018-01-31',
            'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
            'month': '01',
            'year': '2018',
            'hierarchy_district': 'kaushambi',
            'hierarchy_block': 'Chail',
        }
        block_level_af_report = BlockLevelAFReport(request=mock,
                                                   domain='up-nrhm')
        rows = block_level_af_report.rows
        expected = ([
            [
                'Newborn visits within first day of birth in case of home deliveries',
                {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '2',
                    'html': '2'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '1',
                    'html': '1'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '1',
                    'html': '1'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': 4.0,
                    'html': 4.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': '5',
                    'html': '5'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '2',
                    'html': '2'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': 32.0,
                    'html': 32.0
                }
            ],
            [
                'Attending VHNDs/Promoting immunization', {
                    'sort_key': '6',
                    'html': '6'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': 43.0,
                    'html': 43.0
                }
            ],
            [
                'Supporting institutional delivery', {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '1',
                    'html': '1'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': 32.0,
                    'html': 32.0
                }
            ],
            [
                'Management of childhood illness - especially diarrhea and pneumonia',
                {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': 34.0,
                    'html': 34.0
                }
            ],
            [
                'Household visits with nutrition counseling', {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': 30.0,
                    'html': 30.0
                }
            ],
            [
                'Fever cases seen/malaria slides made in malaria endemic area',
                {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': 0.0,
                    'html': 0.0
                }
            ],
            [
                'Acting as DOTS provider', {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': 0.0,
                    'html': 0.0
                }
            ],
            [
                'Holding or attending village/VHSNC meeting', {
                    'sort_key': '1',
                    'html': '1'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '0',
                    'html': '0'
                }, {
                    'sort_key': '3',
                    'html': '3'
                }, {
                    'sort_key': 12.0,
                    'html': 12.0
                }
            ],
            [
                'Successful referral of the IUD, female sterilization or male '
                'sterilization cases and/or providing OCPs/Condoms', {
                    'sort_key': '6',
                    'html': '6'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '5',
                    'html': '5'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': '4',
                    'html': '4'
                }, {
                    'sort_key': 41.0,
                    'html': 41.0
                }
            ],
            [
                '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                {
                    'sort_key': 29.629629629629626,
                    'html': '5/18 (29%)'
                }, {
                    'sort_key': 30.76923076923077,
                    'html': '4/13 (30%)'
                }, {
                    'sort_key': 28.88888888888889,
                    'html': '4/15 (28%)'
                }, {
                    'sort_key': 33.33333333333333,
                    'html': '4/13 (33%)'
                }, {
                    'sort_key': 33.333333333333336,
                    'html': '4/14 (33%)'
                }, {
                    'sort_key': 27.083333333333332,
                    'html': '4/16 (27%)'
                }, {
                    'sort_key': 27.083333333333332,
                    'html': '4/16 (27%)'
                }, {
                    'sort_key': 30.555555555555554,
                    'html': '3/12 (30%)'
                }, {
                    'sort_key': 30.952380952380953,
                    'html': '4/14 (30%)'
                }, {
                    'sort_key': 27,
                    'html': '36/131 (27%)'
                }
            ],
            [
                '<b>Total number of ASHAs who did not report/not known</b>', {
                    'sort_key': '12',
                    'html': '12'
                }, {
                    'sort_key': '11',
                    'html': '11'
                }, {
                    'sort_key': '11',
                    'html': '11'
                }, {
                    'sort_key': '11',
                    'html': '11'
                }, {
                    'sort_key': '10',
                    'html': '10'
                }, {
                    'sort_key': '12',
                    'html': '12'
                }, {
                    'sort_key': '12',
                    'html': '12'
                }, {
                    'sort_key': '10',
                    'html': '10'
                }, {
                    'sort_key': '10',
                    'html': '10'
                }, {
                    'sort_key': 99.0,
                    'html': 99.0
                }
            ],
            [
                '<b>Total Number of ASHAs under each Facilitator</b>', {
                    'sort_key': 18,
                    'html': 18
                }, {
                    'sort_key': 15,
                    'html': 15
                }, {
                    'sort_key': 16,
                    'html': 16
                }, {
                    'sort_key': 15,
                    'html': 15
                }, {
                    'sort_key': 15,
                    'html': 15
                }, {
                    'sort_key': 17,
                    'html': 17
                }, {
                    'sort_key': 17,
                    'html': 17
                }, {
                    'sort_key': 14,
                    'html': 14
                }, {
                    'sort_key': 15,
                    'html': 15
                }, {
                    'sort_key': 142,
                    'html': 142
                }
            ]
        ], 142)

        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])
示例#40
0
    def test_district_functionality_report(self, mock_run_query):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'lang': '',
            'sf': 'sf5',
            'startdate': '2018-01-01',
            'enddate': '2018-01-31',
            'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
            'month': '01',
            'year': '2018',
            'hierarchy_district': 'kaushambi',
            'hierarchy_block': 'Chail',
        }
        district_functionality_report = DistrictFunctionalityReport(
            request=mock, domain='up-nrhm')
        rows = district_functionality_report.rows
        expected = ([
            [
                'Newborn visits within first day of birth in case of home deliveries',
                {
                    'sort_key': '2.8%',
                    'html': '2.8%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '2.3%',
                    'html': '2.3%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '2.4%',
                    'html': '2.4%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '2.6%',
                    'html': '2.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '3.0%',
                    'html': '3.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '3.2%',
                    'html': '3.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '4.7%',
                    'html': '4.7%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                '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': '22.5%',
                    'html': '22.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '20.9%',
                    'html': '20.9%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '17.2%',
                    'html': '17.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '21.0%',
                    'html': '21.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '19.6%',
                    'html': '19.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '21.6%',
                    'html': '21.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '19.0%',
                    'html': '19.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '20.2%',
                    'html': '20.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Attending VHNDs/Promoting immunization', {
                    'sort_key': '30.3%',
                    'html': '30.3%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '29.5%',
                    'html': '29.5%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '25.3%',
                    'html': '25.3%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '29.8%',
                    'html': '29.8%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '29.6%',
                    'html': '29.6%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '29.1%',
                    'html': '29.1%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '28.6%',
                    'html': '28.6%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '27.1%',
                    'html': '27.1%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }
            ],
            [
                'Supporting institutional delivery', {
                    'sort_key': '22.5%',
                    'html': '22.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '27.1%',
                    'html': '27.1%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '20.2%',
                    'html': '20.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '22.6%',
                    'html': '22.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '24.9%',
                    'html': '24.9%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '24.6%',
                    'html': '24.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '23.0%',
                    'html': '23.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '17.8%',
                    'html': '17.8%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Management of childhood illness - especially diarrhea and pneumonia',
                {
                    'sort_key': '23.9%',
                    'html': '23.9%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '18.6%',
                    'html': '18.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '27.3%',
                    'html': '27.3%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '20.2%',
                    'html': '20.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '17.5%',
                    'html': '17.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '10.4%',
                    'html': '10.4%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '24.6%',
                    'html': '24.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '22.5%',
                    'html': '22.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Household visits with nutrition counseling', {
                    'sort_key': '21.1%',
                    'html': '21.1%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '9.3%',
                    'html': '9.3%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '13.1%',
                    'html': '13.1%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '9.0%',
                    'html': '9.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.7%',
                    'html': '0.7%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '15.5%',
                    'html': '15.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Fever cases seen/malaria slides made in malaria endemic area',
                {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '1.0%',
                    'html': '1.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Acting as DOTS provider', {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '8.5%',
                    'html': '8.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '5.1%',
                    'html': '5.1%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '5.6%',
                    'html': '5.6%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '4.2%',
                    'html': '4.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '2.2%',
                    'html': '2.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '6.2%',
                    'html': '6.2%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Holding or attending village/VHSNC meeting', {
                    'sort_key': '8.5%',
                    'html': '8.5%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '2.3%',
                    'html': '2.3%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '7.1%',
                    'html': '7.1%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '8.9%',
                    'html': '8.9%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '0.0%',
                    'html': '0.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '9.0%',
                    'html': '9.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '4.0%',
                    'html': '4.0%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': '12.4%',
                    'html': '12.4%'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }
            ],
            [
                'Successful referral of the IUD, female sterilization or male sterilization cases '
                'and/or providing OCPs/Condoms', {
                    'sort_key': '28.9%',
                    'html': '28.9%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '31.0%',
                    'html': '31.0%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '29.3%',
                    'html': '29.3%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '28.2%',
                    'html': '28.2%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '25.9%',
                    'html': '25.9%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '28.4%',
                    'html': '28.4%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '27.0%',
                    'html': '27.0%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': '27.1%',
                    'html': '27.1%'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }
            ],
            [
                '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                {
                    'sort_key': 27,
                    'html': '36/131 (27%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 27,
                    'html': '34/122 (27%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 24,
                    'html': '22/91 (24%)'
                }, {
                    'sort_key': 'D',
                    'html': 'D'
                }, {
                    'sort_key': 26,
                    'html': '31/116 (26%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 26,
                    'html': '46/175 (26%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 28,
                    'html': '34/121 (28%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 27,
                    'html': '31/111 (27%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }, {
                    'sort_key': 26,
                    'html': '30/114 (26%)'
                }, {
                    'sort_key': 'C',
                    'html': 'C'
                }
            ]
        ], 0)

        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])
示例#41
0
 def test_asha_facilitators_report(self, mock_run_query):
     mock = MagicMock()
     mock.couch_user = self.user
     mock.GET = {
         'lang': '',
         'sf': 'sf2',
         'startdate': '2018-01-01',
         'enddate': '2018-01-31',
         'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
         'month': '01',
         'year': '2018',
     }
     asha_facilitators_report = ASHAFacilitatorsReport(request=mock,
                                                       domain='up-nrhm')
     rows = asha_facilitators_report.rows
     expected = ([
         [
             'Newborn visits within first day of birth in case of home deliveries',
             '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             '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': 17,
                 'html': 17
             }, ''
         ],
         [
             'Attending VHNDs/Promoting immunization', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Supporting institutional delivery', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Management of childhood illness - especially diarrhea and pneumonia',
             '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Household visits with nutrition counseling', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Fever cases seen/malaria slides made in malaria endemic area',
             '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Acting as DOTS provider', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Holding or attending village/VHSNC meeting', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             'Successful referral of the IUD, female sterilization or male sterilization cases and/or '
             'providing OCPs/Condoms', '--', {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ],
         [
             '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
             {
                 'sort_key': 0.0,
                 'html': '0/0 (0%)'
             }, {
                 'sort_key': 17,
                 'html': 17
             }, ''
         ]
     ], 17, 0)
     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])
示例#42
0
    def test_availability_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0][
            'report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(headers, [
            'Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017',
            'Janvier 2018', 'Février 2018', 'Mars 2018',
            'Taux moyen de disponibilité'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'Dakar'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': 'pas de donn\xe9es'
            }, {
                'style': '',
                'html': '100.00%'
            }, {
                'style': '',
                'html': '100.00%'
            }],
                    [{
                        'html': 'Fatick'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '33.33%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': 'color: red',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': 'color: red',
                        'html': '58.33%'
                    }],
                    [{
                        'html': 'Region 1'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }],
                    [{
                        'html': 'Region Test'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }],
                    [{
                        'html': 'Saint-Louis'
                    }, {
                        'style': 'color: red',
                        'html': '75.00%'
                    }, {
                        'style': 'color: red',
                        'html': '33.33%'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '100.00%'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '77.08%'
                    }],
                    [{
                        'html': 'Thies'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '87.50%'
                    }, {
                        'style': 'color: red',
                        'html': '87.50%'
                    }]],
                   key=lambda x: x[0]['html']))
        self.assertEqual(total_row, [{
            'html': 'Disponibilit\xe9 (%)'
        }, {
            'style': 'color: red',
            'html': '90.00%'
        }, {
            'style': 'color: red',
            'html': '33.33%'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'style': 'color: red',
            'html': '80.00%'
        }, {
            'style': '',
            'html': '100.00%'
        }, {
            'style': 'color: red',
            'html': '88.24%'
        }, {
            'style': 'color: red',
            'html': '83.67%'
        }])
示例#43
0
 def test_asha_facilitators_report(self, mock_run_query):
     mock = MagicMock()
     mock.couch_user = self.user
     mock.GET = {
         'lang': '',
         'sf': 'sf2',
         'startdate': '2018-01-01',
         'enddate': '2018-01-31',
         'hierarchy_af': '646eb23165f2f3ee9966b0512efc9494',
         'month': '01',
         'year': '2018',
     }
     asha_facilitators_report = ASHAFacilitatorsReport(request=mock, domain='up-nrhm')
     rows = asha_facilitators_report.rows
     expected = (
         [
             [
                 'Newborn visits within first day of birth in case of home deliveries', '--',
                 {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 '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': 17, 'html': 17}, ''
             ],
             [
                 'Attending VHNDs/Promoting immunization', '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Supporting institutional delivery', '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Management of childhood illness - especially diarrhea and pneumonia', '--',
                 {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Household visits with nutrition counseling', '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Fever cases seen/malaria slides made in malaria endemic area', '--',
                 {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Acting as DOTS provider', '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Holding or attending village/VHSNC meeting', '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 'Successful referral of the IUD, female sterilization or male sterilization cases and/or '
                 'providing OCPs/Condoms',
                 '--', {'sort_key': 17, 'html': 17}, ''
             ],
             [
                 '<b>Total number of ASHAs who are functional on at least 60% of the tasks</b>',
                 {'sort_key': 0.0, 'html': '0/0 (0%)'},
                 {'sort_key': 17, 'html': 17},
                 ''
             ]
         ], 17, 0
     )
     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])
示例#44
0
    def test_rupture_rate_by_pps_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        rupture_rate_by_pps_report = dashboard1_report.report_context[
            'reports'][1]['report_table']
        headers = rupture_rate_by_pps_report['headers'].as_export_table[0]
        rows = rupture_rate_by_pps_report['rows']
        total_row = rupture_rate_by_pps_report['total_row']
        self.assertEqual(headers, [
            'PPS', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017',
            'Janvier 2018', 'Février 2018', 'Mars 2018', 'Taux moyen'
        ])
        expected = [[{
            'html': 'District Test 2'
        }, {
            'style': '',
            'html': '0.00%'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'html': 'pas de donn\xe9es'
        }, {
            'style': '',
            'html': '0.00%'
        }],
                    [{
                        'html': 'F1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': 'color: red',
                        'html': '16.67%'
                    }],
                    [{
                        'html': 'F2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'G1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '66.67%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '33.33%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }],
                    [{
                        'html': 'Ngor'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'P1'
                    }, {
                        'style': 'color: red',
                        'html': '33.33%'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '37.50%'
                    }],
                    [{
                        'html': 'P2'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '46.15%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '46.15%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'PPS 2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 3'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 3'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'PPS 3'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }],
                    [{
                        'html': 'PPS Alexis'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'Pps test 2 bbb'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'SL1'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'SL2'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': 'color: red',
                        'html': '50.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '12.50%'
                    }],
                    [{
                        'html': 'Virage 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': 'color: red',
                        'html': '20.00%'
                    }, {
                        'style': 'color: red',
                        'html': '20.00%'
                    }],
                    [{
                        'html': 'Virage 1'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'Virage 2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }],
                    [{
                        'html': 'Virage 2'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }],
                    [{
                        'html': 'test pps 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'style': '',
                        'html': '0.00%'
                    }]]
        self.assertEqual(len(rows), len(expected))
        for row in expected:
            self.assertIn(row, rows)
        self.assertEqual(total_row, [{
            'html': 'Taux par Pays'
        }, {
            'style': 'color: red',
            'html': '8.33%'
        }, {
            'style': 'color: red',
            'html': '35.71%'
        }, {
            'style': '',
            'html': '0.00%'
        }, {
            'style': 'color: red',
            'html': '5.00%'
        }, {
            'style': 'color: red',
            'html': '21.43%'
        }, {
            'style': 'color: red',
            'html': '4.17%'
        }, {
            'style': 'color: red',
            'html': '11.35%'
        }])
示例#45
0
    def test_availability_report_with_chosen_program(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': 'a99fe8331e3dbcc127917e41af45ad81',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard1_report = Dashboard1Report(request=mock, domain='test-pna')

        availability_report = dashboard1_report.report_context['reports'][0]['report_table']
        headers = availability_report['headers'].as_export_table[0]
        rows = availability_report['rows']
        total_row = availability_report['total_row']

        self.assertEqual(
            headers,
            ['Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017', 'Janvier 2018',
             'Février 2018', 'Mars 2018', 'Taux moyen de disponibilité']
        )
        self.assertEqual(
            rows,
            sorted([
                [
                    {'html': 'Region 1'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': 'color: red', 'html': '50.00%'},
                    {'style': 'color: red', 'html': '50.00%'}
                ],
                [
                    {'html': 'Region Test'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'}
                ],
                [
                    {'html': 'Thies'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': 'pas de donn\xe9es'},
                    {'style': '', 'html': '100.00%'},
                    {'style': '', 'html': '100.00%'}
                ]
            ], key=lambda x: x[0])
        )
        self.assertEqual(
            total_row,
            [
                {'html': 'Disponibilit\xe9 (%)'},
                {'style': '', 'html': '100.00%'},
                {'html': 'pas de donn\xe9es'},
                {'style': '', 'html': '100.00%'},
                {'style': '', 'html': '100.00%'},
                {'style': '', 'html': '100.00%'},
                {'style': 'color: red', 'html': '66.67%'},
                {'style': 'color: red', 'html': '91.67%'}
            ]
        )
示例#46
0
    def test_recovery_rate_by_pps_report_country_level(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_pps_report = dashboard2_report.report_context[
            'reports'][3]['report_table']
        headers = recovery_rate_by_pps_report['headers'].as_export_table[0]
        rows = recovery_rate_by_pps_report['rows']
        total_row = recovery_rate_by_pps_report['total_row']
        self.assertEqual(headers, [
            'Région', 'Octobre 2017', 'Novembre 2017', 'Décembre 2017',
            'Janvier 2018', 'Février 2018', 'Mars 2018', 'Taux moyen'
        ])
        self.assertEqual(
            rows,
            sorted([[{
                'html': 'Dakar'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': 'pas de donn\xe9es'
            }, {
                'html': '0.00%'
            }, {
                'html': '0.00%'
            }],
                    [{
                        'html': 'Fatick'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '90.47%'
                    }, {
                        'html': '2.75%'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': '29.88%'
                    }],
                    [{
                        'html': 'Region 1'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '92.31%'
                    }, {
                        'html': '92.31%'
                    }],
                    [{
                        'html': 'Region Test'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '64.98%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '64.98%'
                    }],
                    [{
                        'html': 'Saint-Louis'
                    }, {
                        'html': '78.36%'
                    }, {
                        'html': '87.68%'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '0.00%'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '65.73%'
                    }],
                    [{
                        'html': 'Thies'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': 'pas de donn\xe9es'
                    }, {
                        'html': '100.00%'
                    }, {
                        'html': '100.00%'
                    }]],
                   key=lambda x: x[0]['html']))
        self.assertEqual(total_row, [{
            'html': 'Taux par Pays'
        }, {
            'html': '78.36%'
        }, {
            'html': '88.53%'
        }, {
            'html': '1.59%'
        }, {
            'html': '0.00%'
        }, {
            'html': '15.90%'
        }, {
            'html': '22.13%'
        }, {
            'html': '54.80%'
        }])
示例#47
0
    def test_recovery_rate_by_district_report(self):
        mock = MagicMock()
        mock.couch_user = self.user
        mock.GET = {
            'location_id': '',
            'program': '',
            'month_start': '10',
            'year_start': '2017',
            'month_end': '3',
            'year_end': '2018',
        }

        dashboard2_report = Dashboard2Report(request=mock, domain='test-pna')

        recovery_rate_by_district_report = dashboard2_report.report_context['reports'][2]['report_table']
        headers = recovery_rate_by_district_report['headers'].as_export_table[0]
        rows = recovery_rate_by_district_report['rows']
        total_row = recovery_rate_by_district_report['total_row']
        self.assertEqual(
            headers,
            ['R\xe9gion', 'Octobre 2017', 'Novembre 2017', 'D\xe9cembre 2017', 'Janvier 2018',
             'F\xe9vrier 2018', 'Mars 2018', 'Taux moyen']
        )
        self.assertEqual(
            rows,
            sorted([
                [{'html': 'District Sud'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Khombole'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Joal Fadiouth'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Test 2'}, {'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '0.00%'}],
                [{'html': 'Thies'}, {'html': '100.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '100.00%'}],
                [{'html': 'District Mbao'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Tivaoune'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Pikine'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District Gu\xe9diawaye'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'District M\xe9kh\xe9'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'DISTRICT PNA'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': '100.00%'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'Dakar'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '0.00%'}, {'html': '0.00%'}],
                [{'html': 'District Thiadiaye'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '100.00%'}, {'html': '100.00%'}],
                [{'html': 'New York'}, {'html': '19.15%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '19.15%'}],
                [{'html': 'Dakar'}, {'html': '0.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '0.00%'}],
                [{'html': 'District Centre'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'}, {'html': 'pas de donn\xe9es'},
                 {'html': '0.00%'}, {'html': '0.00%'}],
                [{'html': 'District Test'}, {'html': '100.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '100.00%'}, {'html': 'pas de donn\xe9es'},
                 {'html': 'pas de donn\xe9es'}, {'html': '100.00%'}]
            ], key=lambda x: x[0]['html'])
        )
        self.assertEqual(
            total_row,
            [{'html': 'Taux par Pays'}, {'html': '44.46%'}, {'html': 'pas de donn\xe9es'},
             {'html': 'pas de donn\xe9es'}, {'html': '100.00%'}, {'html': '100.00%'}, {'html': '75.86%'},
             {'html': '80.43%'}]
        )