Example #1
0
class CategoryColumnFilterSet(rest_framework.FilterSet):
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter(),
        name='field__category',
        label='Categories')
    purposes = rest_framework.ModelMultipleChoiceFilter(
        queryset=CategoryColumnPurpose.objects.all(),
        name='purpose',
        label='Purposes')

    @property
    def qs(self):
        qs = super(CategoryColumnFilterSet, self).qs

        qs = qs.prefetch_related(
            'field__category',
            'country',
            'purpose',
        )

        if self.request:
            categories_with_permission = create_category_filter()(self.request)
            qs = qs.filter(field__category__in=categories_with_permission, )

        return qs

    class Meta:
        model = CategoryColumn
        fields = ('purpose', )
Example #2
0
class VisitFilterSet(rest_framework.FilterSet):
    timestamp = IsoDateTimeFromToRangeFilter(
        name='timestamp'
    )
    products = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_product_filter(),
        name='product',
        label='Products'
    )
    websites = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_website_filter('view_website_visits'),
        name='website',
        label='Websites'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter('view_category_visits'),
        name='product__instance_model__model__category',
        label='Categories'
    )

    @property
    def qs(self):
        qs = super(VisitFilterSet, self).qs.select_related(
            'product__instance_model__model__category',
            'user'
        )
        if self.request:
            qs = qs.filter_by_user_perms(self.request.user, 'view_visit')
        return qs

    class Meta:
        model = Visit
        fields = []
Example #3
0
    def qs(self):
        qs = super(CategorySpecsFormLayoutFilterset, self).qs

        qs = qs.prefetch_related('fieldsets__filters__filter', 'orders__order')

        if self.request:
            categories_with_permission = create_category_filter()(self.request)
            qs = qs.filter(category__in=categories_with_permission, )

        return qs
Example #4
0
    def qs(self):
        qs = super(EntityFilterSet, self).qs.select_related(
            'active_registry',
            'product__instance_model',
            'cell_plan'
        )
        categories_with_permission = create_category_filter()(self.request)
        stores_with_permission = create_store_filter()(self.request)

        return qs.filter(
            Q(category__in=categories_with_permission) &
            Q(store__in=stores_with_permission))
Example #5
0
    def qs(self):
        qs = super(WtbEntityFilterSet, self).qs.select_related(
            'brand',
            'category',
            'product'
        )

        brands_with_permission = create_wtb_brand_filter()(self.request)
        categories_with_permission = create_category_filter()(self.request)

        return qs.filter(
            Q(brand__in=brands_with_permission) &
            Q(category__in=categories_with_permission))
Example #6
0
    def qs(self):
        qs = super(CategoryColumnFilterSet, self).qs

        qs = qs.prefetch_related(
            'field__category',
            'country',
            'purpose',
        )

        if self.request:
            categories_with_permission = create_category_filter()(self.request)
            qs = qs.filter(field__category__in=categories_with_permission, )

        return qs
Example #7
0
class LeadFilterSet(rest_framework.FilterSet):
    timestamp = IsoDateTimeFromToRangeFilter(
        name='timestamp'
    )
    stores = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_store_filter('view_store_leads'),
        name='entity_history__entity__store',
        label='Stores'
    )
    products = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_product_filter(),
        name='entity_history__entity__product',
        label='Products'
    )
    websites = rest_framework.ModelMultipleChoiceFilter(
        queryset=Website.objects.all(),
        name='website',
        label='Websites'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter('view_category_leads'),
        name='entity_history__entity__category',
        label='Categories'
    )
    countries = rest_framework.ModelMultipleChoiceFilter(
        queryset=Country.objects.all(),
        name='entity_history__entity__store__country',
        label='Countries'
    )
    entities = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_entity_filter(),
        name='entity_history__entity',
        label='Entities'
    )

    @property
    def qs(self):
        qs = super(LeadFilterSet, self).qs.select_related(
            'entity_history__entity__product__instance_model__model__category',
            'user'
        )
        if self.request:
            qs = qs.filter_by_user_perms(self.request.user, 'view_lead')
        return qs

    class Meta:
        model = Lead
        fields = []
Example #8
0
    def scraper(self, request, pk):
        store = self.get_object()
        try:
            store.scraper
        except AttributeError:
            raise Http404
        serializer = StoreScraperSerializer(store,
                                            context={'request': request})
        available_categories = create_category_filter(
            'update_category_pricing', store.scraper_categories())(request)

        result = serializer.data
        result['categories'] = [
            reverse('category-detail',
                    kwargs={'pk': category.pk},
                    request=request) for category in available_categories
        ]

        return Response(result)
Example #9
0
class WtbEntityStaffFilterSet(rest_framework.FilterSet):
    brands = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_wtb_brand_filter('is_wtb_brand_staff'),
        name='brand',
        label='Brands'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter('is_category_staff'),
        name='category',
        label='Categories'
    )

    @property
    def qs(self):
        qs = super(WtbEntityStaffFilterSet, self).qs.select_related(
            'product__instance_model',
        )
        if self.request:
            qs = qs.filter_by_user_perms(
                self.request.user, 'is_wtb_entity_staff')
        return qs
Example #10
0
class WtbEntityFilterSet(rest_framework.FilterSet):
    brands = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_wtb_brand_filter(),
        name='brand',
        label='Brands'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter(),
        name='category',
        label='Categories'
    )
    keys = rest_framework.CharFilter(
        name='key',
        label='Key'
    )

    is_associated = rest_framework.BooleanFilter(
        name='is_associated', method='_is_associated', label='Is associated?')

    @property
    def qs(self):
        qs = super(WtbEntityFilterSet, self).qs.select_related(
            'brand',
            'category',
            'product'
        )

        brands_with_permission = create_wtb_brand_filter()(self.request)
        categories_with_permission = create_category_filter()(self.request)

        return qs.filter(
            Q(brand__in=brands_with_permission) &
            Q(category__in=categories_with_permission))

    def _is_associated(self, queryset, name, value):
        return queryset.filter(product__isnull=not value)

    class Meta:
        model = WtbEntity
        fields = ['is_active', 'is_visible', 'product']
Example #11
0
class EntityStaffFilterSet(rest_framework.FilterSet):
    stores = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_store_filter('is_store_staff'),
        name='store',
        label='Stores'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter('is_category_staff'),
        name='category',
        label='Categories'
    )

    @property
    def qs(self):
        qs = super(EntityStaffFilterSet, self).qs.select_related(
            'active_registry',
            'product__instance_model',
            'cell_plan'
        )
        if self.request:
            qs = qs.filter_by_user_perms(
                self.request.user, 'is_entity_staff')
        return qs
Example #12
0
class ProductFilterSet(rest_framework.FilterSet):
    ids = rest_framework.ModelMultipleChoiceFilter(
        queryset=Product.objects.all(),
        method='_ids',
        label='Products'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter(),
        name='instance_model__model__category',
        label='Categories'
    )
    availability_countries = rest_framework.ModelMultipleChoiceFilter(
        queryset=Country.objects.all(),
        label='Available in countries',
        method='_availability_countries'
    )
    availability_stores = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_store_filter(),
        label='Available in stores',
        method='_availability_stores'
    )
    last_updated = IsoDateTimeFromToRangeFilter(
        name='last_updated'
    )
    creation_date = IsoDateTimeFromToRangeFilter(
        name='creation_date'
    )
    search = rest_framework.CharFilter(
        label='Search',
        method='_search'
    )

    @property
    def qs(self):
        qs = super(ProductFilterSet, self).qs.select_related(
            'instance_model')
        categories_with_permission = create_category_filter()(self.request)
        qs = qs.filter_by_category(categories_with_permission)
        return qs.select_related('instance_model__model__category')

    def _ids(self, queryset, name, value):
        if value:
            return queryset.filter(pk__in=[x.pk for x in value])
        return queryset

    def _availability_countries(self, queryset, name, value):
        if value:
            return queryset.filter_by_availability_in_countries(value)
        return queryset

    def _availability_stores(self, queryset, name, value):
        if value:
            return queryset.filter_by_availability_in_stores(value)
        return queryset

    def _search(self, queryset, name, value):
        if value:
            return queryset.filter_by_search_string(value)
        return queryset

    class Meta:
        model = Product
        fields = []
Example #13
0
 def get_queryset(self):
     return create_category_filter()(self.request)
Example #14
0
 def qs(self):
     qs = super(CategoryTemplateFilterSet, self).qs
     categories_with_permission = create_category_filter()(self.request)
     qs = qs.filter(category__in=categories_with_permission)
     return qs
Example #15
0
class EntityFilterSet(rest_framework.FilterSet):
    ids = rest_framework.ModelMultipleChoiceFilter(
        queryset=Entity.objects.all(),
        method='_ids',
        label='Entities'
    )
    stores = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_store_filter(),
        name='store',
        label='Stores'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter(),
        name='category',
        label='Categories'
    )

    is_available = rest_framework.BooleanFilter(
        name='is_available', method='_is_available', label='Is available?')
    is_active = rest_framework.BooleanFilter(
        name='is_active', method='_is_active', label='Is active?')
    is_associated = rest_framework.BooleanFilter(
        name='is_associated', method='_is_associated', label='Is associated?')

    @property
    def qs(self):
        qs = super(EntityFilterSet, self).qs.select_related(
            'active_registry',
            'product__instance_model',
            'cell_plan'
        )
        categories_with_permission = create_category_filter()(self.request)
        stores_with_permission = create_store_filter()(self.request)

        return qs.filter(
            Q(category__in=categories_with_permission) &
            Q(store__in=stores_with_permission))

    def _ids(self, queryset, name, value):
        if value:
            return queryset.filter(pk__in=[x.pk for x in value])
        return queryset

    def _is_available(self, queryset, name, value):
        if value:
            return queryset.get_available()
        else:
            return queryset.get_unavailable()

    def _is_active(self, queryset, name, value):
        if value:
            return queryset.get_active()
        else:
            return queryset.get_inactive()

    def _is_associated(self, queryset, name, value):
        return queryset.filter(product__isnull=not value)

    class Meta:
        model = Entity
        fields = ['is_visible', ]
Example #16
0
 def qs(self):
     qs = super(ProductFilterSet, self).qs.select_related(
         'instance_model')
     categories_with_permission = create_category_filter()(self.request)
     qs = qs.filter_by_category(categories_with_permission)
     return qs.select_related('instance_model__model__category')
Example #17
0
class ProductsBrowseEntityFilterSet(rest_framework.FilterSet):
    products = rest_framework.ModelMultipleChoiceFilter(
        queryset=Product.objects.all(),
        name='product',
        label='Products'
    )
    categories = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_category_filter(),
        name='category',
        label='Categories'
    )
    stores = rest_framework.ModelMultipleChoiceFilter(
        queryset=create_store_filter(),
        name='store',
        label='Stores'
    )
    countries = rest_framework.ModelMultipleChoiceFilter(
        queryset=Country.objects.all(),
        name='store__country',
        label='Countries'
    )
    currencies = rest_framework.ModelMultipleChoiceFilter(
        queryset=Currency.objects.all(),
        name='currency',
        label='Currencies'
    )
    store_types = rest_framework.ModelMultipleChoiceFilter(
        queryset=StoreType.objects.all(),
        name='store__type',
        label='Store types'
    )
    normal_price = rest_framework.RangeFilter(
        label='Normal price',
        name='active_registry__normal_price'
    )
    offer_price = rest_framework.RangeFilter(
        label='Offer price',
        name='active_registry__offer_price'
    )
    normal_price_usd = rest_framework.RangeFilter(
        label='Normal price (USD)',
        name='normal_price_usd'
    )
    offer_price_usd = rest_framework.RangeFilter(
        label='Offer price (USD)',
        name='offer_price_usd'
    )

    @classmethod
    def create(cls, request):
        entities = Entity.objects.annotate(
            offer_price_usd=F('active_registry__offer_price') /
            F('currency__exchange_rate'),
            normal_price_usd=F('active_registry__normal_price') /
            F('currency__exchange_rate')
        )
        return cls(
            data=request.query_params, queryset=entities, request=request)

    @property
    def qs(self):
        qs = super(ProductsBrowseEntityFilterSet, self).qs.get_available() \
            .filter(active_registry__cell_monthly_payment__isnull=True) \
            .filter(product__isnull=False) \
            .select_related(
            'active_registry',
            'product__instance_model__model__category',
        )
        stores_with_permission = create_store_filter()(self.request)

        return qs.filter(store__in=stores_with_permission)

    class Meta:
        model = Entity
        fields = []