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', )
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 = []
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
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 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 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 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 = []
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)
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
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']
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
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 = []
def get_queryset(self): return create_category_filter()(self.request)
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
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', ]
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')
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 = []