def test_sorts_and_filter_in_category_edit(rf, admin_user): get_default_shop() cache.clear() activate("en") with override_provides("front_extend_product_list_form", DEFAULT_FORM_MODIFIERS): category = get_default_category() view = CategoryEditView.as_view() assert get_configuration(category=category) == settings.SHUUP_FRONT_DEFAULT_SORT_CONFIGURATION data = { "base-name__en": category.name, "base-status": category.status.value, "base-visibility": category.visibility.value, "base-ordering": category.ordering, "product_list_facets-sort_products_by_name": True, "product_list_facets-sort_products_by_name_ordering": 6, "product_list_facets-sort_products_by_price": False, "product_list_facets-sort_products_by_price_ordering": 32, "product_list_facets-filter_products_by_manufacturer": True, "product_list_facets-filter_products_by_manufacturer_ordering": 1 } request = apply_request_middleware(rf.post("/", data=data), user=admin_user) response = view(request, pk=category.pk) if hasattr(response, "render"): response.render() assert response.status_code in [200, 302] expected_configurations = { "sort_products_by_name": True, "sort_products_by_name_ordering": 6, "sort_products_by_price": False, "sort_products_by_price_ordering": 32, "filter_products_by_manufacturer": True, "filter_products_by_manufacturer_ordering": 1 } assert get_configuration(category=category) == expected_configurations
def test_sorts_and_filter_in_shop_edit(rf, admin_user): cache.clear() activate("en") with override_provides("front_extend_product_list_form", DEFAULT_FORM_MODIFIERS): shop = get_default_shop() view = ShopEditView.as_view() assert get_configuration(shop=shop) == settings.SHUUP_FRONT_DEFAULT_SORT_CONFIGURATION data = { "base-name__en": shop.name, "base-public_name__en": shop.public_name, "base-status": shop.status.value, "base-currency": shop.currency, "base-prices_include_tax": shop.prices_include_tax, "base-languages": "en", "product_list_facets-sort_products_by_name": True, "product_list_facets-sort_products_by_name_ordering": 11, "product_list_facets-sort_products_by_price": False, "product_list_facets-sort_products_by_price_ordering": 32, "product_list_facets-filter_products_by_manufacturer": False, "product_list_facets-filter_products_by_manufacturer_ordering": 1 } request = apply_request_middleware(rf.post("/", data=data), user=admin_user) response = view(request, pk=shop.pk) if hasattr(response, "render"): response.render() assert response.status_code in [200, 302] expected_configurations = { "sort_products_by_name": True, "sort_products_by_name_ordering": 11, "sort_products_by_price": False, "sort_products_by_price_ordering": 32, "filter_products_by_manufacturer": False, "filter_products_by_manufacturer_ordering": 1 } assert get_configuration(shop=shop) == expected_configurations
def get_form_defs(self): if not self.object.pk: return yield TemplatedFormDef( name=self.name, form_class=self.form, template_name="shuup/front/admin/sorts_and_filters.jinja", required=False, kwargs={"initial": get_configuration(category=self.object)})
def get_fields(self, request, category=None): if not category: return configuration = get_configuration(request.shop, category) min_price = configuration.get(self.range_min_key) max_price = configuration.get(self.range_max_key) range_size = configuration.get(self.range_size_key) if not (min_price and max_price and range_size): return choices = [(None, "-------")] + get_price_ranges( request.shop, min_price, max_price, range_size) return [ ("price_range", forms.ChoiceField(required=False, choices=choices, label=_("Price"))), ]
def get_fields(self, request, category=None): if not category: return # TODO: Add cache configuration = get_configuration(request.shop, category) min_price = configuration.get(self.range_min_key) max_price = configuration.get(self.range_max_key) range_size = configuration.get(self.range_size_key) if not (min_price and max_price and range_size): return choices = [(None, "-------")] + get_price_ranges( request.shop, min_price, max_price, range_size) return [ ("price_range", forms.ChoiceField(required=False, choices=choices, label=get_form_field_label( "price_range", _("Price")))), ]
def get_fields(self, request, category=None): shop_products_qs = ShopProduct.objects.filter(shop=request.shop).exclude( visibility=ShopProductVisibility.NOT_VISIBLE ) if category: shop_products_qs = shop_products_qs.filter(Q(primary_category=category) | Q(categories=category)) queryset = Supplier.objects.enabled(shop=request.shop).filter(shop_products__in=shop_products_qs).distinct() if not queryset.exists(): return configuration = get_configuration(request.shop, category) multiselect_enabled = configuration.get(self.enable_multiselect_key) if multiselect_enabled: return [ ( "suppliers", CommaSeparatedListField( required=False, label=get_form_field_label("supplier", _("Suppliers")), widget=FilterWidget(choices=[(supplier.pk, supplier.name) for supplier in queryset]), ), ), ] return [ ( "supplier", forms.ModelChoiceField( queryset=queryset, empty_label=None, required=False, label=get_form_field_label("supplier", _("Suppliers")), widget=OneChoiceFilterWidget(), ), ), ]