def filters(self): filters = [EQ('xmlns', 'xmlns')] if ('posttest_date_start' in self.config and self.config['posttest_date_start'] and 'posttest_date_end' in self.config and self.config['posttest_date_end']): filters.append( BETWEEN('posttest_date', 'posttest_date_start', 'posttest_date_end')) if ('hiv_test_date_start' in self.config and self.config['hiv_test_date_start'] and 'hiv_test_date_end' in self.config and self.config['hiv_test_date_end']): filters.append( BETWEEN('hiv_test_date', 'hiv_test_date_start', 'hiv_test_date_end')) if 'age_range' in self.config and self.config['age_range']: filters.append(EQ('age_range', 'age_range')) if 'district' in self.config and self.config['district']: filters.append(EQ('district', 'district')) if 'client_type' in self.config and self.config['client_type']: filters.append(EQ('client_type', 'client_type')) if 'user_id' in self.config and self.config['user_id']: filters.append( IN('user_id', get_INFilter_bindparams('user_id', self.config['user_id']))) if 'organization' in self.config and self.config['organization']: filters.append(EQ('organization', 'organization')) return filters
def filters(self): filters = [ EQ("domain", "domain"), EQ("ppt_year", "ppt_year"), AND([ NOTEQ("case_status", "duplicate"), NOTEQ("case_status", "test") ]) ] for k, v in self.geography_config.items(): if k in self.config and self.config[k]: filters.append( IN(k, get_INFilter_bindparams(k, self.config[k]))) if 'value_chain' in self.config and self.config['value_chain']: filters.append(EQ("value_chain", "value_chain")) if 'group_leadership' in self.config and self.config[ 'group_leadership']: filters.append(EQ('group_leadership', 'group_leadership')) if 'cbt_name' in self.config and self.config['cbt_name']: filters.append( IN( 'owner_id', get_INFilter_bindparams('cbt_name', self.config['cbt_name']))) if 'real_or_test' in self.config and self.config['real_or_test']: filters.append(IEQ('real_or_test', 'real_or_test')) for column_name in ['domains', 'practices', 'schedule']: if column_name in self.config and self.config[ column_name] and self.config[column_name] != ('0', ): filters.append( IN( column_name, get_INFilter_bindparams(column_name, self.config[column_name]))) return filters
def filters(self): filters = [BETWEEN('date', 'startdate', 'enddate'), NOTEQ('hf', 'empty')] if 'district' in self.config and self.config['district']: filters.append(EQ('district', 'district')) elif 'hf' in self.config and self.config['hf']: filters.append(EQ('hf', 'hf')) return filters
def filters(self): filters = [EQ('aggregation_level', 'aggregation_level')] keys = ['state_id', 'district_id', 'block_id', 'supervisor_id'] for key in keys: if key in self.config: filters.append(EQ(key, key)) return filters
def filters(self): filters = [BETWEEN("date", "startdate", "enddate")] if 'region_id' in self.config: filters.append(EQ("region_id", "region_id")) elif 'district_id' in self.config: filters.append(EQ("district_id", "district_id")) return filters
def filters(self): filters = [EQ('xmlns', 'xmlns')] if 'age' in self.config and self.config['age']: if len(self.config['age']) == 1: filters.append(BETWEEN('age', 'age_start_0', 'age_end_0')) else: between_filters = [] for idx, age in enumerate(self.config['age']): between_filters.append(BETWEEN('age', 'age_start_{}'.format(idx), 'age_end_{}'.format(idx))) filters.append(OR(between_filters)) if 'district' in self.config and self.config['district']: filters.append(IN('district', get_INFilter_bindparams('district', self.config['district']))) if ( 'visit_date_start' in self.config and self.config['visit_date_start'] and 'visit_date_end' in self.config and self.config['visit_date_end'] ): filters.append(BETWEEN('visit_date', 'visit_date_start', 'visit_date_end')) if 'type_visit' in self.config and self.config['type_visit']: filters.append(EQ('type_visit', 'type_visit')) if 'activity_type' in self.config and self.config['activity_type']: filters.append(EQ('activity_type', 'activity_type')) if 'client_type' in self.config and self.config['client_type']: filters.append(IN('client_type', get_INFilter_bindparams('client_type', self.config['client_type']))) if 'user_id' in self.config and self.config['user_id']: filters.append(IN('user_id', get_INFilter_bindparams('user_id', self.config['user_id']))) if 'organization' in self.config and self.config['organization']: filters.append(EQ('organization', 'organization')) if 'want_hiv_test' in self.config and self.config['want_hiv_test']: filters.append(EQ('want_hiv_test', 'want_hiv_test')) return filters
def columns(self): columns = super(DeliveryPlaceDetailsExtended, self).columns additional_columns = [ DatabaseColumn( "Home deliveries", CountUniqueColumn('doc_id', alias="home_deliveries", filters=self.filters + [ OR([ EQ('place_of_birth', 'home'), EQ('place_of_birth', 'on_route') ]) ])), DatabaseColumn( "Other places", CountUniqueColumn('doc_id', alias="other_places", filters=self.filters + [ OR([ EQ('place_of_birth', 'empty'), EQ('place_of_birth', 'other') ]) ])) ] columns.extend(additional_columns) return columns
def columns(self): return [ DatabaseColumn( "Total Deliveries (with/without outcome)", CountUniqueColumn('doc_id', alias="total_delivery", filters=self.filters), ), DatabaseColumn( "Normal deliveries", CountUniqueColumn( 'doc_id', alias="normal_deliveries", filters=self.filters + [EQ('type_of_delivery', 'normal_delivery')])), DatabaseColumn( "Caesarean deliveries", CountUniqueColumn( 'doc_id', alias="caesarean_deliveries", filters=self.filters + [EQ('type_of_delivery', 'cesarean_delivery')])), DatabaseColumn( "Delivery type unknown", CountUniqueColumn( 'doc_id', alias="unknown", filters=self.filters + [ OR([ EQ('type_of_delivery', 'empty'), EQ('type_of_delivery', 'unknown_delivery') ]) ])) ]
def columns(self): return [ DatabaseColumn("Early initiation of breastfeeding", CountUniqueColumn('doc_id', alias="colostrum_feeding", filters=self.filters + [EQ('breastfeed_1_hour', 'yes')])), DatabaseColumn("Early initiation of breastfeeding Total Eligible", CountUniqueColumn('doc_id', alias="colostrum_feeding_total_eligible", filters=self.filters + [NOTEQ('breastfeed_1_hour', 'empty')])), DatabaseColumn("Exclusive breastfeeding", CountUniqueColumn('doc_id', alias="exclusive_breastfeeding", filters=self.filters + [AND([EQ('exclusive_breastfeeding', "yes"), GTE('dob', "today_minus_183")])])), DatabaseColumn("Exclusive Breastfeeding (EBF) Total Eligible", CountUniqueColumn('doc_id', alias="exclusive_breastfeeding_total_eligible", filters=self.filters + [GTE('dob', 'today_minus_183')])), DatabaseColumn("Supplementary feeding", CountUniqueColumn('doc_id', alias="supplementary_feeding", filters=self.filters + [AND([EQ('supplementary_feeding_baby', 'yes'), GTE('dob', 'today_minus_182')])])), DatabaseColumn("Supplementary feeding Total Eligible", CountUniqueColumn('doc_id', alias="supplementary_feeding_total_eligible", filters=self.filters + [GTE('dob', 'today_minus_182')])), DatabaseColumn("Complementary feeding", CountUniqueColumn('doc_id', alias="complementary_feeding", filters=self.filters + [AND([EQ('comp_breastfeeding', 'yes'), LTE('dob', 'today_minus_183'), GTE('dob', 'today_minus_730')])])), DatabaseColumn("Complementary feeding Total Eligible", CountUniqueColumn('doc_id', alias="complementary_feeding_total_eligible", filters=self.filters + [AND([LTE('dob', 'today_minus_183'), GTE('dob', 'today_minus_730')])])) ]
def filters(self): filters = [ EQ('aggregation_level', 'aggregation_level'), EQ('month', 'previous_month') ] if not self.show_test: filters.append(NOT(IN('state_id', get_INFilter_bindparams('excluded_states', self.excluded_states)))) return filters
def filters(self): filters = [ EQ('week', 'week'), EQ('year', 'year'), IN('owner_id', get_INFilter_bindparams('owner_id', self.config['users'])) ] location_filter(self.request, filters=filters) return filters
def filters(self): filters = [EQ('domain', 'domain')] if 'is_active' in self.config and self.config['is_active']: filters.append(EQ('is_active', 'is_active')) if 'care_site' in self.config and self.config['care_site']: filters.append(EQ('care_site', 'care_site')) if 'owner_id' in self.config and self.config['owner_id']: filters.append(IN('owner_id', get_INFilter_bindparams('owner_id', self.config['owner_id']))) return filters
def columns(self): return [ DatabaseColumn("Live birth (Male)", CountUniqueColumn('doc_id', alias='girls', filters=self.filters + [EQ('gender', 'female')]) ), DatabaseColumn("Live birth (Female)", CountUniqueColumn('doc_id', alias='boys', filters=self.filters + [EQ('gender', 'male')]) ) ]
def columns(self): columns = [ DatabaseColumn("Total child registered ever", CountUniqueColumn('doc_id', alias="total")) ] if 'startdate' not in self.config and 'enddate' not in self.config or 'startdate' not in self.config \ and 'enddate' in self.config: columns.extend([ DatabaseColumn( "Total open children cases", CountUniqueColumn( 'doc_id', alias="no_date_opened", filters=self.filters + [EQ('closed_on', 'empty')] ) ), DatabaseColumn( "Total closed children cases", CountUniqueColumn( 'doc_id', alias="no_date_closed", filters=self.filters + [NOTEQ('closed_on', 'empty')] ) ), DatabaseColumn( "New registrations during last 30 days", CountUniqueColumn( 'doc_id', alias="no_date_new_registrations", filters=self.filters + [AND([GTE('opened_on', "last_month"), LTE('opened_on', "today")])] ) ) ]) else: columns.extend([ DatabaseColumn( "Children cases open at end period", CountUniqueColumn( 'doc_id', alias="opened", filters=self.filters + [AND([LTE('opened_on', "stred"), OR([EQ('closed_on', 'empty'), GT('closed_on', "stred")])])] ) ), DatabaseColumn( "Children cases closed during period", CountUniqueColumn( 'doc_id', alias="closed", filters=self.filters + [AND([GTE('closed_on', "strsd"), LTE('closed_on', "stred")])] ) ), DatabaseColumn( "Total children followed during period", CountUniqueColumn( 'doc_id', alias="followed", filters=self.filters + [AND([LTE('opened_on', "stred"), OR([EQ('closed_on', 'empty'), GTE('closed_on', "strsd")])])] ) ), DatabaseColumn( "New registrations during period", CountUniqueColumn( 'doc_id', alias="new_registrations", filters=self.filters + [AND([LTE('opened_on', "stred"), GTE('opened_on', "strsd")])] ) ) ]) return columns
def get_age_filters(beta): if beta: return [NOT(EQ('age_tranche', 'age_72'))] return [ AND([ NOT(EQ('age_tranche', 'age_0')), NOT(EQ('age_tranche', 'age_6')), NOT(EQ('age_tranche', 'age_72')) ]) ]
def filters(self): filters = [ GTE('recalled_date', 'startdate'), LTE('recalled_date', 'enddate') ] if self.config['case_owners']: filters.append(EQ('owner_name', 'case_owners')) if self.config['recall_status']: filters.append(EQ('recall_status', 'recall_status')) return filters
def columns(self): self.config['mother_ids'] = tuple( DeliveryMothersIds(config=self.config).data.keys()) + ('', ) return [ DatabaseColumn( "Total births", CountUniqueColumn( 'doc_id', filters=[ AND([ IN( 'mother_id', get_INFilter_bindparams( 'mother_ids', self.config['mother_ids'])), OR([EQ('gender', 'female'), EQ('gender', 'male')]) ]) ], alias='total_births')), DatabaseColumn( "Newborn deaths (< 1 m)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'newborn_death') ]) ], alias='newborn_death')), DatabaseColumn( "Infant deaths (< 1 y)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'infant_death') ]) ], alias='infant_death')), DatabaseColumn( "Child deaths (2-5y)", CountUniqueColumn( 'doc_id', filters=self.filters + [ AND([ EQ('reason_for_child_closure', 'death'), EQ('type_of_child_death', 'child_death') ]) ], alias='child_death')), DatabaseColumn( "Total deaths", CountUniqueColumn('doc_id', filters=self.filters + [EQ('reason_for_child_closure', 'death')], alias='total_deaths')) ]
def columns(self): self.config['mother_ids'] = tuple( DeliveryMothersIds(config=self.config).data.keys()) + ('', ) columns = [ DatabaseColumn( "Total children with with birthweight known", CountUniqueColumn('doc_id', alias="total_birthweight_known", filters=self.filters + [NOTEQ('weight_birth', 'empty')])), DatabaseColumn( "Total births", CountUniqueColumn( 'doc_id', filters=[ AND([ IN( 'mother_id', get_INFilter_bindparams( 'mother_ids', self.config['mother_ids'])), OR([EQ('gender', 'female'), EQ('gender', 'male')]) ]) ], alias='total_births')) ] columns.extend([ DatabaseColumn( "Birthweight < 2.5 kg", CountUniqueColumn( 'doc_id', alias="total_birthweight_lt_25", filters=self.filters + [ AND([ LT('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty') ]) ])), DatabaseColumn( "Birthweight >= 2.5 kg", CountUniqueColumn( 'doc_id', alias="total_birthweight_gte_25", filters=self.filters + [ AND([ GTE('weight_birth', 'weight_birth_25'), NOTEQ('weight_birth', 'empty') ]) ])) ]) return columns
def filters(self): filters = [ LTE('age_in_months', '5_years'), EQ('valid_in_month', 'true') ] for key, value in self.config.items(): if key in ['domain', '5_years', 'true']: continue elif key == 'filters': filters.append(self._build_additional_filters(value)) continue filters.append(EQ(key, key)) return filters
def test_filter(self): slug = "hierarchy_filter_slug" filter_spec = { "type": "enikshay_location_hierarchy", "display": "location hierarchy", "datatype": "string", "slug": slug, "field": "does_not_matter", } data_source_config = DataSourceConfiguration( domain=self.domain, referenced_doc_type="", table_id="123", ) with patch( "corehq.apps.userreports.reports.data_source.get_datasource_config", MagicMock(return_value=(data_source_config, None)) ): report_config = ReportConfiguration( config_id="123", filters=[filter_spec] ) report = ReportFactory().from_spec(report_config) filter_values = get_filter_values( report_config.ui_filters, {slug: self.cto.location_id}, user=MagicMock(), ) report.set_filter_values(filter_values) expected_filter_vals = { '{}_sto'.format(slug): self.sto.location_id, '{}_cto'.format(slug): self.cto.location_id, '{}_below_cto'.format(slug): self.cto.location_id, } expected_filter = OR([ EQ("sto", "{}_sto".format(slug)), EQ("cto", "{}_cto".format(slug)), EQ("below_cto", "{}_below_cto".format(slug)) ]) self.assertEqual(len(report.data_source.filters), 1) self.assertFiltersEqual( report.data_source.filters[0], expected_filter ) self.assertEqual( report.data_source.filter_values, expected_filter_vals )
def columns(self): return [ DatabaseColumn( "VitA1", CountUniqueColumn('doc_id', alias="vita1", filters=self.filters + [EQ('vita1', 'yes')])), DatabaseColumn( "VitA2", CountUniqueColumn('doc_id', alias="vita2", filters=self.filters + [EQ('vita2', 'yes')])), DatabaseColumn( "DPT-OPT Booster", CountUniqueColumn('doc_id', alias="dpt_opv_booster", filters=self.filters + [EQ('dpt_opv_booster', 'yes')])), DatabaseColumn( "VitA3", CountUniqueColumn('doc_id', alias="vita3", filters=self.filters + [EQ('vita3', 'yes')])), DatabaseColumn( "VitA1 Total Eligible", CountUniqueColumn('doc_id', alias="vita1_eligible", filters=self.filters + [LTE('dob', 'days_273')])), DatabaseColumn( "VitA2 Total Eligible", CountUniqueColumn('doc_id', alias="vita2_eligible", filters=self.filters + [LTE('dob', 'days_547')])), DatabaseColumn( "DPT-OPT Booster Total Eligible", CountUniqueColumn('doc_id', alias="dpt_opv_booster_eligible", filters=self.filters + [LTE('dob', 'days_548')])), DatabaseColumn( "VitA3 Total Eligible", CountUniqueColumn('doc_id', alias="vita3_eligible", filters=self.filters + [LTE('dob', 'days_700')])) ]
def filters(self): filters = [ EQ('xmlns', 'xmlns'), NOT(EQ('date_last_vl_test', 'empty_date_last_vl_test')) ] if 'hiv_status' in self.config and self.config['hiv_status']: filters.append(EQ('hiv_status', 'hiv_status')) if 'client_type' in self.config and self.config['client_type']: filters.append(EQ('client_type', 'client_type')) if 'age_range' in self.config and self.config['age_range']: filters.append(EQ('age_range', 'age_range')) if 'district' in self.config and self.config['district']: filters.append(EQ('district', 'district')) if ('date_last_vl_test_start' in self.config and self.config['date_last_vl_test_start'] and 'date_last_vl_test_end' in self.config and self.config['date_last_vl_test_end']): filters.append( BETWEEN('date_last_vl_test', 'date_last_vl_test_start', 'date_last_vl_test_end')) if 'undetect_vl' in self.config and self.config['undetect_vl']: filters.append(EQ('undetect_vl', 'undetect_vl')) if 'user_id' in self.config and self.config['user_id']: filters.append( IN('user_id', get_INFilter_bindparams('user_id', self.config['user_id']))) if 'organization' in self.config and self.config['organization']: filters.append(EQ('organization', 'organization')) return filters
def filters(self): filters = [] if 'district' in self.config and self.config['district']: filters.append(IN('district', get_INFilter_bindparams('district', self.config['district']))) if 'cbo' in self.config and self.config['cbo']: filters.append(IN('cbo', get_INFilter_bindparams('cbo', self.config['cbo']))) if 'clienttype' in self.config and self.config['clienttype']: filters.append(IN('clienttype', get_INFilter_bindparams('clienttype', self.config['clienttype']))) if 'userpl' in self.config and self.config['userpl']: filters.append(IN('userpl', get_INFilter_bindparams('userpl', self.config['userpl']))) if 'fiscal_year' in self.config and self.config['fiscal_year']: filters.append(EQ('fiscal_year', 'fiscal_year')) if 'organization' in self.config and self.config['organization']: filters.append(EQ('organization', 'organization')) return filters
def filters(self): filters = [] if self.config['task_responsible']: filters.append(EQ('task_responsible', 'task_responsible')) if self.config['referenced_id']: filters.append(EQ('referenced_id', 'referenced_id')) if self.config['closed']: filters.append(EQ('closed', 'closed')) or_filter = [] if self.config['owner_ids']: or_filter.append(IN('owner_id', 'owner_ids')) if or_filter: or_filter.append(EQ('user_id', 'user_id')) filters.append(OR(filters=or_filter)) return filters
def filters(self): filters = [] filter_fields = [ 'country', 'level_1', 'level_2', 'level_3', 'level_4', ] for filter_field in filter_fields: if filter_field in self.config and self.config[filter_field]: filters.append(EQ(filter_field, filter_field)) if 'user_id' in self.config and self.config['user_id']: filters.append(EQ('doc_id', 'user_id')) return filters
def filters(self): filter = super(ChildrenDeathDetails, self).filters filter.extend([ EQ('reason_for_child_closure', 'death'), NOTEQ('cause_of_death_child', 'empty') ]) return filter
def filters(self): filters = [GTE('recall_date', 'startdate'), LTE('recall_date', 'enddate')] for slug in ['food_code', 'food_type', 'recall_status']: if self.config[slug]: filters.append(EQ(slug, slug)) return filters
def location_filter(request, params=None, filters=None, location_filter_selected=False): zone_id = request.GET.get('id_zone', '') region_id = request.GET.get('id_region', '') district_id = request.GET.get('id_district', '') site_id = request.GET.get('id_site', '') key = None value = None if zone_id: if region_id: if district_id: if site_id: key = 'site_id' value = site_id else: key = 'district_id' value = district_id else: key = 'region_id' value = region_id else: key = 'zone_id' value = zone_id if key and value: if params: params.update({key: value}) elif filters: filters.append(EQ(key, key)) if location_filter_selected: return value
def test_totals_with_filter(self): vc = QueryContext( "user_table", filters=[EQ('user', 'username')], group_by=["user"], ) for column_name in [ 'indicator_a', 'indicator_b', 'indicator_c', ]: vc.append_column(SumColumn(column_name)) self.assertEqual( vc.totals( self.session.connection(), [ 'indicator_a', 'indicator_b', 'indicator_c', ], {'username': '******'}, ), { 'indicator_a': 4, 'indicator_b': 1, 'indicator_c': 1, }, )
def filters(self): filters = None if 'enddate' not in self.config: self.config['enddate'] = self.config['today'] self.config['stred'] = self.config['today'] if 'startdate' in self.config: filters = [ AND([ LTE("date", "enddate"), OR([ GTE('closed_on', "startdate"), EQ('closed_on', 'empty') ]) ]) ] else: self.config['strsd'] = '0001-01-01' filters = [LTE("date", "enddate")] for k, v in six.iteritems(LOCATION_HIERARCHY): if v['prop'] in self.config and self.config[v['prop']]: filters.append( IN(k, get_INFilter_bindparams(k, self.config[v['prop']]))) return filters