def filter_by_types(data_): filtered_types = set(MessageTypeFilter.get_value(self.request, self.domain)) if not filtered_types: return data_ relevant_workflows = ( WORKFLOW_REMINDER, WORKFLOW_KEYWORD, WORKFLOW_BROADCAST, WORKFLOW_CALLBACK, WORKFLOW_DEFAULT, WORKFLOW_PERFORMANCE, ) incl_survey = MessageTypeFilter.OPTION_SURVEY in filtered_types incl_other = MessageTypeFilter.OPTION_OTHER in filtered_types is_workflow_relevant = Q(workflow__in=relevant_workflows) workflow_filter = Q(is_workflow_relevant & Q(workflow__in=filtered_types)) survey_filter = Q(xforms_session_couch_id__isnull=False) other_filter = ~Q(is_workflow_relevant | survey_filter) # We can chain ANDs together, but not ORs, so we have to do all the ORs at the same time. if incl_survey and incl_other: filters = (workflow_filter | survey_filter | other_filter) elif incl_survey: filters = (workflow_filter | survey_filter) elif incl_other: filters = (workflow_filter | other_filter) else: filters = workflow_filter return data_.filter(filters)
def get_message_type_filter(self): filtered_types = MessageTypeFilter.get_value(self.request, self.domain) if filtered_types: filtered_types = set([mt.lower() for mt in filtered_types]) return lambda message_types: len( filtered_types.intersection(message_types)) > 0 return lambda message_types: True
def shared_pagination_GET_params(self): start_date = self.datespan.startdate.strftime('%Y-%m-%d') end_date = self.datespan.enddate.strftime('%Y-%m-%d') return [ {'name': 'startdate', 'value': start_date}, {'name': 'enddate', 'value': end_date}, {'name': 'log_type', 'value': MessageTypeFilter.get_value(self.request, self.domain)}, {'name': 'location_id', 'value': self.location_id}, ]
def filter_by_types(data_): filtered_types = set(MessageTypeFilter.get_value(self.request, self.domain)) if not filtered_types: return data_ incl_survey = MessageTypeFilter.OPTION_SURVEY in filtered_types incl_other = MessageTypeFilter.OPTION_OTHER in filtered_types is_workflow_relevant = Q(workflow__in=WORKFLOWS_FOR_REPORTS) workflow_filter = Q(is_workflow_relevant & Q(workflow__in=filtered_types)) survey_filter = Q(xforms_session_couch_id__isnull=False) other_filter = ~Q(is_workflow_relevant | survey_filter) # We can chain ANDs together, but not ORs, so we have to do all the ORs at the same time. if incl_survey and incl_other: filters = (workflow_filter | survey_filter | other_filter) elif incl_survey: filters = (workflow_filter | survey_filter) elif incl_other: filters = (workflow_filter | other_filter) else: filters = workflow_filter return data_.filter(filters)