Exemplo n.º 1
0
        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)
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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},
     ]
Exemplo n.º 4
0
        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)