예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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
예제 #8
0
 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')
                     ])
                 ]))
     ]
예제 #9
0
    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')])]))
        ]
예제 #10
0
 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
예제 #11
0
 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
예제 #12
0
 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
예제 #13
0
 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')])
         )
     ]
예제 #14
0
 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
예제 #15
0
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'))
        ])
    ]
예제 #16
0
 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
예제 #17
0
 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'))
     ]
예제 #18
0
    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
예제 #19
0
 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
        )
예제 #21
0
 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')]))
     ]
예제 #22
0
 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
예제 #23
0
 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
예제 #24
0
 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
예제 #25
0
 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
예제 #26
0
 def filters(self):
     filter = super(ChildrenDeathDetails, self).filters
     filter.extend([
         EQ('reason_for_child_closure', 'death'),
         NOTEQ('cause_of_death_child', 'empty')
     ])
     return filter
예제 #27
0
    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
예제 #28
0
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
예제 #29
0
파일: tests.py 프로젝트: kkrampa/sql-agg
    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,
            },
        )
예제 #30
0
    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