Esempio n. 1
0
class QuestionFilterSet(FilterSet):
    main_slug = filters.ModelChoiceFilter(
        queryset=Category.objects.filter(parent__isnull=True).all(),
        to_field_name='slug',
        field_name='category__slug',
        label='Hoofd categorie',
    )
    sub_slug = filters.ModelChoiceFilter(
        queryset=Category.objects.filter(parent__isnull=False).all(),
        to_field_name='slug',
        field_name='category__parent__slug',
        label='Sub categorie',
    )

    def filter_queryset(self, queryset):
        main_cat = self.form.cleaned_data.get('main_slug', None)
        main_slug = main_cat.slug if main_cat else None
        sub_cat = self.form.cleaned_data.get('sub_slug', None)
        sub_slug = sub_cat.slug if sub_cat else None

        # sort on main category first, then question ordering
        qs = queryset.filter(category__is_active=True).order_by(
            '-categoryquestion__category__parent', 'categoryquestion__order')

        if main_slug:
            if sub_slug:
                childq = Q(category__parent__slug=main_slug) & Q(
                    category__slug=sub_slug)
                parentq = Q(category__parent__isnull=True) & Q(
                    category__slug=main_slug)
                qs = qs.filter(childq | parentq)
            else:
                qs = qs.filter(category__parent__isnull=True,
                               category__slug=main_slug)
        return qs
Esempio n. 2
0
class FreightsFilterSet(FilterSet):
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='货运渠道')
    trans_company = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='货运公司')
    freight_status = filters.ChoiceFilter(choices=settings.FREIGHT_STATUS_CHOICE, help_text='货运状态')
    pack_time_start = filters.DateTimeFilter(field_name='pack_time', lookup_expr='gte', help_text='查询运单(起始打包时间)')
    pack_time_end = filters.DateTimeFilter(field_name='pack_time', lookup_expr='lte', help_text='查询运单(结束打包时间)')

    class Meta:
        model = FreightsInfo
        fields = []
Esempio n. 3
0
class FreightQueryFilterSet(FreightStatementFilterSet):
    freight_code = filters.CharFilter(field_name='trans_code', lookup_expr='iexact', help_text='运单号', label='运单号')
    trans_company = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='货运公司', label='货运公司')
    mid_company = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='中港公司', label='中港公司')
    freight_status = filters.ChoiceFilter(choices=settings.ORDER_STATUS_CHOICE, help_text='运单状态', label='运单状态')
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='货运渠道', label='货运渠道')

    class Meta:
        model = FreightsInfo
        fields = []
Esempio n. 4
0
class UserFilterSet(FilterSet):
    status = filters.ChoiceFilter(choices=settings.STATUS_USE_CHOICE,
                                  help_text='状态是否启动')
    bran = filters.ModelChoiceFilter(queryset=BranchesInfo.objects.all(),
                                     help_text='分部id')
    roles = filters.ModelChoiceFilter(queryset=RolesInfo.objects.all(),
                                      label='角色ID')

    class Meta:
        model = UsersInfo
        fields = []
Esempio n. 5
0
class OrdersFilterSet(FilterSet):
    customer__salesman = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='业务员')
    customer__service = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='客服专员')
    operators = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='操作员')
    order_status = filters.ChoiceFilter(choices=settings.ORDER_STATUS_CHOICE, help_text='订单状态')
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='服务渠道')
    order_time_start = filters.DateTimeFilter(field_name='order_time', lookup_expr='order_time__gte', help_text='订单时间')
    order_time_end = filters.DateTimeFilter(field_name='order_time', lookup_expr='order_time_lte', help_text='订单时间')

    class Meta:
        model = OrdersInfo
        fields = []
Esempio n. 6
0
class OrderQueryFilterSet(OrderStatementFilterSet):
    trans_code = filters.CharFilter(field_name='trans_code', lookup_expr='iexact', help_text='转单号', label='转单号')
    customer = filters.ModelChoiceFilter(queryset=CustomersInfo.objects.all(), help_text='客户', label='客户')
    order_status = filters.ChoiceFilter(choices=settings.ORDER_STATUS_CHOICE, help_text='订单状态', label='订单状态')
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(), help_text='服务渠道', label='服务渠道')
    customer__salesman = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='业务员')
    customer__service = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='客服专员')
    operators = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(), help_text='操作员', label='操作员')

    class Meta:
        model = OrdersInfo
        fields = []
Esempio n. 7
0
class EmployeesAnimalFilter(rest_framework.FilterSet):
    careperiods__employee = filters.ModelChoiceFilter(
        label=('Закреплённый сотрудник'), queryset=Employee.objects.all())

    class Meta:
        model = Animal
        fields = ['careperiods__employee']
Esempio n. 8
0
class OrdFundsFilterSet(FilterSet):
    fund_status = filters.ChoiceFilter(choices=settings.FUND_STATUS_CHOICE,
                                       help_text='款项状态')
    order_status = filters.ChoiceFilter(choices=settings.ORDER_STATUS_CHOICE,
                                        help_text='订单状态')
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(),
                                        help_text='服务渠道')
    pay_type = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(),
                                         help_text='付款类型')
    order_time_start = filters.DateTimeFilter(field_name='order_time',
                                              lookup_expr='gte',
                                              help_text='订单(查询起始时间)')
    order_time_end = filters.DateTimeFilter(field_name='order_time',
                                            lookup_expr='lte',
                                            help_text='订单(查询结束时间)')

    class Meta:
        model = OrdFundsInfo
        fields = []
Esempio n. 9
0
class CitiesFilterSet(FilterSet):
    county = filters.ModelChoiceFilter(queryset=Countries.objects.all(),
                                       required=True,
                                       help_text='国家')
    status = filters.ChoiceFilter(choices=settings.STATUS_USE_CHOICE,
                                  label='状态是否启动')

    class Meta:
        model = Cities
        fields = []
Esempio n. 10
0
class DictValuesFilterSet(FilterSet):
    type = filters.ModelChoiceFilter(queryset=DataDictType.objects.all(),
                                     required=True,
                                     help_text='字典类型代码')
    status = filters.ChoiceFilter(choices=settings.STATUS_USE_CHOICE,
                                  label='状态是否启动')

    class Meta:
        model = DataDictsValue
        fields = []
Esempio n. 11
0
class CityFilter(FilterSet):
    pk = filters.NumberFilter(help_text='业务id')
    code = filters.CharFilter(help_text='代码')
    name = filters.CharFilter(help_text='名称')
    county = filters.ModelChoiceFilter(queryset=Countries.objects.all(),
                                       required=True,
                                       help_text='国家')

    class Meta:
        model = Cities
        fields = []
Esempio n. 12
0
class CheckValueFilter(FilterSet):
    pk = filters.NumberFilter(help_text='业务id')
    code = filters.CharFilter(help_text='代码')
    name = filters.CharFilter(help_text='名称')
    type = filters.ModelChoiceFilter(queryset=DataDictType.objects.all(),
                                     required=True,
                                     help_text='类型')

    class Meta:
        model = DataDictsValue
        fields = []
Esempio n. 13
0
class OthersFundsFilterSet(FilterSet):
    fund_type = filters.ChoiceFilter(choices=settings.OTHER_FUND_TYPE_CHOICE,
                                     help_text='款项类型')
    fund_status = filters.ChoiceFilter(choices=settings.FUND_STATUS_CHOICE,
                                       help_text='款项状态')
    order = filters.ModelChoiceFilter(queryset=OrdFundsInfo.objects.all(),
                                      help_text='订单')
    freight = filters.ModelChoiceFilter(queryset=FreFundsInfo.objects.all(),
                                        help_text='运单')
    service = filters.ModelChoiceFilter(queryset=UsersInfo.objects.all(),
                                        help_text='款项专员')
    recpay_time_start = filters.DateTimeFilter(field_name='recpay_time',
                                               lookup_expr='gte',
                                               help_text='订单(查询起始时间)')
    recpay_time_end = filters.DateTimeFilter(field_name='recpay_time',
                                             lookup_expr='lte',
                                             help_text='订单(查询结束时间)')

    class Meta:
        model = OtherFundsInfo
        fields = []
Esempio n. 14
0
class CustomsFundsFilterSet(FilterSet):
    fund_status = filters.ChoiceFilter(choices=settings.FUND_STATUS_CHOICE,
                                       help_text='款项状态')
    channel = filters.ModelChoiceFilter(queryset=DataDictsValue.objects.all(),
                                        help_text='货运渠道')
    pack_time_start = filters.DateTimeFilter(field_name='pack_time',
                                             lookup_expr='gte',
                                             help_text='订单(查询起始时间)')
    pack_time_end = filters.DateTimeFilter(field_name='pack_time',
                                           lookup_expr='lte',
                                           help_text='订单(查询结束时间)')

    class Meta:
        model = CustomsFundsInfo
        fields = []
Esempio n. 15
0
class OrganizationFilter(filterset.FilterSet):
    """
    ## Filters

    To filter for exact value matches:

        ?<fieldname>=<value>

    For advanced filtering use lookups:

        ?<fieldname>__<lookup>=<value>

    Possible lookups:

      - `name`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`
      - `short`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `isnull`, `regex`, `iregex`
      - `address`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `isnull`, `regex`, `iregex`
      - `email`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `isnull`, `regex`, `iregex`
      - `phone`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `isnull`, `regex`, `iregex`
      - `url`: `iexact`, `contains`, `icontains`, `startswith`, `istartswith`, `endswith`, `iendswith`, `isnull`, `regex`, `iregex`
    """

    category = filters.ChoiceFilter(
        label=_("Category"), choices=models.Organization.CATEGORY_CHOICES)
    parent = filters.ModelChoiceFilter(
        label=_("Parent"), queryset=models.Organization.objects.all())

    class Meta:
        model = models.Organization
        fields = {
            "name": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "regex",
                "iregex",
            ),
            "short": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "isnull",
                "regex",
                "iregex",
            ),
            "address": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "isnull",
                "regex",
                "iregex",
            ),
            "email": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "isnull",
                "regex",
                "iregex",
            ),
            "phone": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "isnull",
                "regex",
                "iregex",
            ),
            "url": (
                "exact",
                "iexact",
                "contains",
                "icontains",
                "startswith",
                "istartswith",
                "endswith",
                "iendswith",
                "isnull",
                "regex",
                "iregex",
            ),
        }
Esempio n. 16
0
class AlertFilter(FilterSet):
    """
    Filters Alerts.
    """
    def __init__(self, *args, **kwargs):
        super(AlertFilter, self).__init__(*args, **kwargs)

        # add a blank choice to ChoiceFilter options
        for (dummy_name, field) in self.filters.items():
            if isinstance(field, django_filters.ChoiceFilter):
                field.extra['choices'] = tuple([('', '---------'), ] + \
                    list(field.extra['choices']))

    collection = django_filters.ModelMultipleChoiceFilter(
        name='distillery',
        label='Collections',
        queryset=Distillery.objects.have_alerts())
    warehouse = django_filters.ModelMultipleChoiceFilter(
        name='distillery__collection__warehouse',
        label='Warehouses',
        queryset=Warehouse.objects.all())
    after = django_filters.DateTimeFilter(name='created_date',
                                          lookup_expr='gt')
    before = django_filters.DateTimeFilter(name='created_date',
                                           lookup_expr='lte')
    level = django_filters.MultipleChoiceFilter(choices=ALERT_LEVEL_CHOICES)
    status = django_filters.MultipleChoiceFilter(choices=ALERT_STATUS_CHOICES)
    assigned_user = django_filters.ModelChoiceFilter(
        name='assigned_user', queryset=AppUser.objects.all())
    content = django_filters.CharFilter(name='data',
                                        label='Content',
                                        method='filter_by_content')
    categories = django_filters.ModelMultipleChoiceFilter(
        name='distillery__categories',
        label='Collection categories',
        queryset=Category.objects.all())
    tags = django_filters.ModelMultipleChoiceFilter(name='tags',
                                                    queryset=Tag.objects.all())

    class Meta:
        model = Alert

        # List content field last so it will have fewer Alerts to
        # filter. The content filter requires a query to the Distillery
        # associated with the Alert. It's best to filter out as many
        # records as possible before constructing that query.
        fields = [
            'collection', 'after', 'before', 'level', 'status',
            'assigned_user', 'content'
        ]

    @staticmethod
    def _get_data_query(distillery, value):
        """

        """
        text_fields = distillery.get_text_fields()
        field_names = [field.field_name for field in text_fields]
        field_keys = [name.replace('.', '__') for name in field_names]
        queries = []

        for key in field_keys:
            query_exp = 'data__%s' % key
            kwarg = {query_exp: value}
            queries.append(Q(**kwarg))

        field_query = join_query(queries, 'OR')
        return Q(distillery=distillery) & field_query

    @staticmethod
    def _get_title_query(value):
        """

        """
        return Q(title__icontains=value)

    def _filter_by_value(self, queryset, value):
        """

        """
        distilleries = Distillery.objects.filter(
            alerts__in=queryset).distinct()

        if distilleries:
            queries = [self._get_data_query(distillery, value) \
                       for distillery in distilleries]
            data_query = join_query(queries, 'OR')
            title_query = self._get_title_query(value)
            return queryset.filter(title_query | data_query)
        else:
            return queryset.none()

    # @timeit
    def filter_by_content(self, queryset, name, value):
        """
        Takes a QuerySet of Alerts and a string value. Returns a filtered
        QuerySet of Alerts whose data includes the given value.
        """
        if not value:
            return queryset

        try:
            return self._filter_by_value(queryset, value)

        except ValueError:
            LOGGER.error('An error occurred while filtering Alerts')
            return queryset