def shared_pagination_GET_params(self):
        user_data = DCTLToFIDAFilter.get_user_data(self.request_params,
                                                   domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']
        params = super(CaseReport, self).shared_pagination_GET_params

        slugs = [
            AllocatedToFilter.slug, 'hsph_region', 'hsph_district',
            'hsph_site', 'startdate', 'enddate'
        ]

        for slug in slugs:
            params.append({
                'name': slug,
                'value': self.request_params.get(slug, '')
            })

        return params
Пример #2
0
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(
                self.request_params, domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        db = get_db()
        site_map = self.selected_site_map or self.site_map
       
        # hack
        facilities = IHForCHFField.get_selected_facilities(
                site_map, domain=self.domain)
        facilities = facilities['ihf'] + facilities['chf']

        rows = []

        for user in self.users:
            for site_id in facilities:
                key = [self.domain, user.get('user_id'), site_id]
                data = db.view('hsph/facility_registrations',
                    startkey=key + [self.datespan.startdate_param_utc],
                    endkey=key + [self.datespan.enddate_param_utc],
                    reduce=True,
                    wrapper=lambda r: r['value']
                ).first()
                
                if data:
                    dctl = user_data['user_parent_map'][user['user_id']]
                    rows.append([
                        self.facility_name_map[site_id],
                        self.table_cell(
                            user.get('raw_username'),
                            user.get('username_in_report')),
                        self.table_cell(
                            dctl.raw_username,
                            dctl.username_in_report),
                        numeric_cell(data.get('facilityVisits', 0)),
                        numeric_cell(data.get('birthRegistrations', 0)),
                        numeric_cell(data.get('noPhoneDetails', 0)),
                        numeric_cell(data.get('noAddress', 0)),
                        numeric_cell(data.get('noContactInfo', 0)),
                    ])

        return rows
Пример #3
0
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(
                self.request_params, domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        db = get_db()
        site_map = self.selected_site_map or self.site_map
       
        # hack
        facilities = IHForCHFField.get_selected_facilities(
                site_map, domain=self.domain)
        facilities = facilities['ihf'] + facilities['chf']

        rows = []

        for user in self.users:
            for site_id in facilities:
                key = [self.domain, user.get('user_id'), site_id]
                data = db.view('hsph/facility_registrations',
                    startkey=key + [self.datespan.startdate_param_utc],
                    endkey=key + [self.datespan.enddate_param_utc],
                    reduce=True,
                    wrapper=lambda r: r['value']
                ).first()
                
                if data:
                    dctl = user_data['user_parent_map'][user['user_id']]
                    rows.append([
                        self.facility_name_map[site_id],
                        self.table_cell(
                            user.get('raw_username'),
                            user.get('username_in_report')),
                        self.table_cell(
                            dctl.raw_username,
                            dctl.username_in_report),
                        numeric_cell(data.get('facilityVisits', 0)),
                        numeric_cell(data.get('birthRegistrations', 0)),
                        numeric_cell(data.get('noPhoneDetails', 0)),
                        numeric_cell(data.get('noAddress', 0)),
                        numeric_cell(data.get('noContactInfo', 0)),
                    ])

        return rows
Пример #4
0
    def shared_pagination_GET_params(self):
        user_data = DCTLToFIDAFilter.get_user_data(
                self.request_params, domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']
        params = super(CaseReport, self).shared_pagination_GET_params

        slugs = [
            AllocatedToFilter.slug,
            'hsph_region',
            'hsph_district',
            'hsph_site',
            'startdate',
            'enddate'
        ]

        for slug in slugs:
            params.append({
                'name': slug,
                'value': self.request_params.get(slug, '')
            })

        return params
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(self.request_params,
                                                   domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        user_site_map = get_user_site_map(self.domain)

        # ordered keys with default values
        keys = SortedDict([('fidaName', None), ('teamLeaderName', None),
                           ('facilitiesCovered', 0), ('facilityVisits', 0),
                           ('facilitiesVisitedLessThanTwicePerWeek', None),
                           ('avgBirthRegistrationTime', None),
                           ('birthRegistrationsPerVisit', None),
                           ('noPhoneDetails', 0), ('noAddress', 0),
                           ('noContactInfo', 0), ('homeVisitsAssigned', 0),
                           ('homeVisitsCompleted', 0),
                           ('homeVisitsCompletedPerDay', 0),
                           ('homeVisitsOpenAt30Days', 0)])

        rows = []
        db = get_db()

        startdate = self.datespan.startdate_param_utc[:10]
        enddate = self.datespan.enddate_param_utc[:10]

        to_date = lambda string: datetime.datetime.strptime(
            string, "%Y-%m-%d").date()
        weeks = (to_date(enddate) - to_date(startdate)).days // 7

        for user in self.users:
            user_id = user.user_id

            row = db.view('hsph/fida_performance',
                          startkey=["all", self.domain, user_id, startdate],
                          endkey=["all", self.domain, user_id, enddate],
                          reduce=True,
                          wrapper=lambda r: r['value']).first() or {}

            workingDays = db.view(
                'hsph/fida_performance',
                startkey=["workingDays", self.domain, user_id, startdate],
                endkey=["workingDays", self.domain, user_id, enddate],
                reduce=False,
                wrapper=lambda r: r['value']['workingDay']).all()
            workingDays = set(workingDays)

            row['fidaName'] = self.table_cell(user.raw_username,
                                              user.username_in_report)

            dctl = user_data['user_parent_map'][user['user_id']]
            row['teamLeaderName'] = self.table_cell(dctl.raw_username,
                                                    dctl.username_in_report)
            row['facilitiesCovered'] = len(user_site_map[user_id])
            row['facilitiesVisitedLessThanTwicePerWeek'] = len(
                filter(lambda count: count < weeks * 2, [
                    row.get(site_id + 'Visits', 0)
                    for site_id in user_site_map[user_id]
                ]))
            if row.get('avgBirthRegistrationTime'):
                row['avgBirthRegistrationTime'] = time.strftime(
                    '%M:%S', time.gmtime(row['avgBirthRegistrationTime']))
            else:
                row['avgBirthRegistrationTime'] = None

            if workingDays:
                row['homeVisitsCompletedPerDay'] = round(
                    row.get('homeVisitsCompleted', 0) /
                    float(len(workingDays)), 1)
            else:
                row['homeVisitsCompletedPerDay'] = 0.0

            # These queries can fail if startdate is less than N days before
            # enddate.  We just catch and supply a default value.
            try:
                row['homeVisitsAssigned'] = db.view(
                    'hsph/fida_performance',
                    startkey=['assigned', self.domain, user_id, startdate],
                    endkey=[
                        'assigned', self.domain, user_id,
                        datestring_minus_days(enddate, 21)
                    ],
                    reduce=True,
                    wrapper=lambda r: r['value']['homeVisitsAssigned']).first(
                    )
            except restkit.errors.RequestFailed:
                row['homeVisitsAssigned'] = 0

            try:
                row['homeVisitsOpenAt30Days'] = db.view(
                    'hsph/fida_performance',
                    startkey=['open30Days', self.domain, user_id, startdate],
                    endkey=[
                        'open30Days', self.domain, user_id,
                        datestring_minus_days(enddate, 29)
                    ],
                    reduce=True,
                    wrapper=lambda r: r['value']['homeVisitsOpenAt30Days'
                                                 ]).first()
            except restkit.errors.RequestFailed:
                row['homeVisitsOpenAt30Days'] = 0

            list_row = []
            for k, v in keys.items():
                val = row.get(k, v)
                if val is None:
                    val = '---'
                list_row.append(numeric_cell(val))

            rows.append(list_row)

        return rows
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(self.request_params,
                                                   domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        startdate = self.datespan.startdate_param_utc[:10]
        enddate = self.datespan.enddate_param_utc[:10]

        all_keys = get_db().view('hsph/facility_wise_follow_up',
                                 reduce=True,
                                 group=True,
                                 group_level=5)

        rpt_keys = []
        key_start = []
        if not self.selected_site_map:
            self._selected_site_map = self.site_map

        facility_map = get_facility_map(self.domain)

        # make sure key elements are strings
        report_sites = [[str(item) for item in rk]
                        for rk in self.generate_keys()]

        for entry in all_keys:
            if entry['key'][0:3] in report_sites:
                if self.individual:
                    if entry['key'][-1] == self.individual:
                        rpt_keys.append(entry)
                elif self.user_ids:
                    if entry['key'][-1] in self.user_ids:
                        rpt_keys.append(entry)
                else:
                    rpt_keys = all_keys

        def get_view_results(case_type, start_dte, end_dte):
            my_start_key = key_start + [case_type] + [start_dte]
            if not start_dte:
                my_start_key = key_start + [case_type]
            data = get_db().view('hsph/facility_wise_follow_up',
                                 reduce=True,
                                 startkey=my_start_key,
                                 endkey=key_start + [case_type] + [end_dte])

            return sum([item['value'] for item in data])

        rows = []
        today = date.today()
        for item in rpt_keys:
            key_start = item['key']
            region_id, district_id, site_number, site_id, user_id = item['key']
            region_name = self.get_region_name(region_id)
            district_name = self.get_district_name(region_id, district_id)
            site_name = facility_map.get(site_id, site_id)
            fida = self.usernames.get(user_id, "")
            births = get_view_results('births', startdate, enddate)
            open_cases = get_view_results('open_cases', startdate, enddate)

            # Not closed and If today < date_admission + 8
            start = today - timedelta(days=7)
            not_yet_open_for_follow_up = get_view_results(
                'needing_follow_up', start.strftime('%Y-%m-%d'),
                today.strftime('%Y-%m-%d'))

            # Not closed and if (date_admission + 8) <= today <= (date_admission + 21)
            start = today - timedelta(days=21)
            end = today - timedelta(days=8)
            open_for_cati_follow_up = get_view_results(
                'needing_follow_up', start.strftime('%Y-%m-%d'),
                end.strftime('%Y-%m-%d'))

            # Not closed and today > date_admission+21
            end = today - timedelta(days=22)
            open_for_fada_follow_up = get_view_results(
                'needing_follow_up', "", end.strftime('%Y-%m-%d'))

            closed_cases = get_view_results('closed_cases', startdate, enddate)

            lost_to_follow_up = get_view_results('lost_to_follow_up',
                                                 startdate, enddate)

            followed_up_by_call_center = get_view_results(
                'followed_up_by_call_center', startdate, enddate)
            followed_up_by_field = get_view_results('followed_up_by_field',
                                                    startdate, enddate)

            rows.append([
                region_name, district_name, site_name, fida, births,
                open_cases, not_yet_open_for_follow_up,
                open_for_cati_follow_up, open_for_fada_follow_up, closed_cases,
                followed_up_by_call_center, followed_up_by_field,
                lost_to_follow_up
            ])

        return rows
Пример #7
0
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(
                self.request_params, domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        user_site_map = get_user_site_map(self.domain)

        # ordered keys with default values
        keys = SortedDict([
            ('fidaName', None),
            ('teamLeaderName', None),
            ('facilitiesCovered', 0),
            ('facilityVisits', 0),
            ('facilitiesVisitedLessThanTwicePerWeek', None),
            ('avgBirthRegistrationTime', None),
            ('birthRegistrationsPerVisit', None),
            ('noPhoneDetails', 0),
            ('noAddress', 0),
            ('noContactInfo', 0),
            ('homeVisitsAssigned', 0),
            ('homeVisitsCompleted', 0),
            ('homeVisitsCompletedPerDay', 0),
            ('homeVisitsOpenAt30Days', 0)
        ])

        rows = []
        db = get_db()

        startdate = self.datespan.startdate_param_utc[:10]
        enddate = self.datespan.enddate_param_utc[:10]
        
        to_date = lambda string: datetime.datetime.strptime(
                        string, "%Y-%m-%d").date()
        weeks = (to_date(enddate) - to_date(startdate)).days // 7

        for user in self.users:
            user_id = user.get('user_id')

            row = db.view('hsph/fida_performance',
                startkey=["all", self.domain, user_id, startdate],
                endkey=["all", self.domain, user_id, enddate],
                reduce=True,
                wrapper=lambda r: r['value']
            ).first() or {}

            workingDays = db.view('hsph/fida_performance',
                startkey=["workingDays", self.domain, user_id, startdate],
                endkey=["workingDays", self.domain, user_id, enddate],
                reduce=False,
                wrapper=lambda r: r['value']['workingDay']).all()
            workingDays = set(workingDays)

            row['fidaName'] = self.table_cell(
                    user.get('raw_username'), user.get('username_in_report'))

            dctl = user_data['user_parent_map'][user['user_id']]
            row['teamLeaderName'] = self.table_cell(
                    dctl.raw_username,
                    dctl.username_in_report)
            row['facilitiesCovered'] = len(user_site_map[user_id])
            row['facilitiesVisitedLessThanTwicePerWeek'] = len(
                filter(
                    lambda count: count < weeks * 2, 
                    [row.get(site_id + 'Visits', 0) 
                     for site_id in user_site_map[user_id]]
                )
            )
            if row.get('avgBirthRegistrationTime'):
                row['avgBirthRegistrationTime'] = time.strftime(
                        '%M:%S', time.gmtime(row['avgBirthRegistrationTime']))
            else:
                row['avgBirthRegistrationTime'] = None

            if workingDays:
                row['homeVisitsCompletedPerDay'] = round(
                        row.get('homeVisitsCompleted', 0) / float(len(workingDays)), 1)
            else:
                row['homeVisitsCompletedPerDay'] = 0.0

            # These queries can fail if startdate is less than N days before
            # enddate.  We just catch and supply a default value.
            try:
                row['homeVisitsAssigned'] = db.view('hsph/fida_performance',
                    startkey=['assigned', self.domain, user_id, startdate],
                    endkey=['assigned', self.domain, user_id,
                        datestring_minus_days(enddate, 21)],
                    reduce=True,
                    wrapper=lambda r: r['value']['homeVisitsAssigned']
                ).first()
            except restkit.errors.RequestFailed:
                row['homeVisitsAssigned'] = 0

            try:
                row['homeVisitsOpenAt30Days'] = db.view('hsph/fida_performance',
                    startkey=['open30Days', self.domain, user_id, startdate],
                    endkey=['open30Days', self.domain, user_id,
                        datestring_minus_days(enddate, 29)],
                    reduce=True,
                    wrapper=lambda r: r['value']['homeVisitsOpenAt30Days']
                ).first()
            except restkit.errors.RequestFailed:
                row['homeVisitsOpenAt30Days'] = 0

            list_row = []
            for k, v in keys.items():
                val = row.get(k, v)
                if val is None:
                    val = '---'
                list_row.append(numeric_cell(val))

            rows.append(list_row)

        return rows
Пример #8
0
    def rows(self):
        user_data = DCTLToFIDAFilter.get_user_data(
                self.request_params, domain=self.domain)
        self.override_user_ids = user_data['leaf_user_ids']

        startdate = self.datespan.startdate_param_utc[:10]
        enddate = self.datespan.enddate_param_utc[:10]

        all_keys = get_db().view('hsph/facility_wise_follow_up',
                    reduce=True,
                    group=True, group_level=5)

        rpt_keys = []
        key_start = []
        if not self.selected_site_map:
            self._selected_site_map = self.site_map

        facility_map = get_facility_map(self.domain)

        # make sure key elements are strings
        report_sites =  [[str(item) for item in rk] for rk in self.generate_keys()]

        for entry in all_keys:
            if entry['key'][0:3] in report_sites:
                if self.individual:
                    if entry['key'][-1] == self.individual:
                        rpt_keys.append(entry)
                elif self.user_ids:
                    if entry['key'][-1] in self.user_ids:
                        rpt_keys.append(entry)
                else:
                    rpt_keys = all_keys

        def get_view_results(case_type, start_dte, end_dte):
            my_start_key=key_start + [case_type] + [start_dte]
            if not start_dte:
                my_start_key = key_start + [case_type]
            data = get_db().view('hsph/facility_wise_follow_up',
                                 reduce=True,
                                 startkey=my_start_key,
                                 endkey=key_start + [case_type] + [end_dte]
            )

            return sum([ item['value'] for item in data])

        rows = []
        today = date.today()
        for item in rpt_keys:
            key_start = item['key']
            region_id, district_id, site_number, site_id, user_id = item['key']
            region_name = self.get_region_name(region_id)
            district_name = self.get_district_name(region_id, district_id)
            site_name = facility_map.get(site_id, site_id)
            fida = self.usernames.get(user_id, "")
            births = get_view_results('births', startdate, enddate)
            open_cases = get_view_results('open_cases', startdate, enddate)

            # Not closed and If today < date_admission + 8
            start = today - timedelta(days=7)
            not_yet_open_for_follow_up = get_view_results('needing_follow_up',
                start.strftime('%Y-%m-%d'), today.strftime('%Y-%m-%d'))

            # Not closed and if (date_admission + 8) <= today <= (date_admission + 21)
            start = today - timedelta(days=21)
            end = today - timedelta(days=8)
            open_for_cati_follow_up = get_view_results('needing_follow_up',
                start.strftime('%Y-%m-%d'), end.strftime('%Y-%m-%d'))

            # Not closed and today > date_admission+21
            end = today - timedelta(days = 22)
            open_for_fada_follow_up = get_view_results('needing_follow_up',
                "", end.strftime('%Y-%m-%d'))

            closed_cases = get_view_results('closed_cases', startdate, enddate)

            lost_to_follow_up = get_view_results('lost_to_follow_up', startdate, enddate)

            followed_up_by_call_center = get_view_results(
                'followed_up_by_call_center', startdate, enddate)
            followed_up_by_field = get_view_results('followed_up_by_field',
                startdate, enddate)

            rows.append([region_name, district_name, site_name, fida, births,
                open_cases, not_yet_open_for_follow_up, open_for_cati_follow_up,
                open_for_fada_follow_up, closed_cases, followed_up_by_call_center,
                followed_up_by_field, lost_to_follow_up])

        return rows