Exemplo n.º 1
0
    def get_context_data(self, **kwargs):
        context = super(CategoryView, self).get_context_data(**kwargs)
        category = self.object
        data = self.request.GET
        context["form"] = form = ProductListForm(request=self.request,
                                                 shop=self.request.shop,
                                                 category=category,
                                                 data=data)
        form.full_clean()
        data = form.cleaned_data
        if "sort" in form.fields and not data.get("sort"):
            # Use first choice by default
            data["sort"] = form.fields["sort"].widget.choices[0][0]

        # TODO: Check if context cache can be utilized here
        products = Product.objects.listed(
            customer=self.request.customer, shop=self.request.shop).filter(
                **self.get_product_filters()).filter(
                    get_query_filters(self.request, category, data=data))

        products = get_product_queryset(products, self.request, category,
                                        data).distinct()
        products = post_filter_products(self.request, category, products, data)
        products = cache_product_things(self.request, products)
        products = sort_products(self.request, category, products, data)
        context["page_size"] = data.get("limit", 12)
        context["products"] = products

        if "supplier" in data:
            context["supplier"] = data.get("supplier")

        return context
Exemplo n.º 2
0
def get_context_data(context, request, category, product_filters):
    data = request.GET
    context["form"] = form = ProductListForm(
        request=request, shop=request.shop, category=category, data=data)
    form.full_clean()
    data = form.cleaned_data
    if "sort" in form.fields and not data.get("sort"):
        # Use first choice by default
        data["sort"] = form.fields["sort"].widget.choices[0][0]

    # TODO: Check if context cache can be utilized here
    products = Product.objects.listed(
        customer=request.customer,
        shop=request.shop
    ).filter(
        **product_filters
    ).filter(get_query_filters(request, category, data=data))

    products = get_product_queryset(products, request, category, data).distinct()
    products = post_filter_products(request, category, products, data)
    products = cache_product_things(request, products)
    products = sort_products(request, category, products, data)
    context["page_size"] = data.get("limit", 12)
    context["products"] = products

    if "supplier" in data:
        context["supplier"] = data.get("supplier")

    return context
Exemplo n.º 3
0
def get_context_data(context, request, category, product_filters):
    data = request.GET
    context["form"] = form = ProductListForm(request=request,
                                             shop=request.shop,
                                             category=category,
                                             data=data)
    form.full_clean()
    data = form.cleaned_data
    if "sort" in form.fields and not data.get("sort"):
        # Use first choice by default
        data["sort"] = form.fields["sort"].widget.choices[0][0]

    # TODO: Check if context cache can be utilized here
    products = (Product.objects.listed(
        customer=request.customer,
        shop=request.shop).filter(**product_filters).filter(
            get_query_filters(request, category, data=data)).prefetch_related(
                "sales_unit", "sales_unit__translations"))

    products = get_product_queryset(products, request, category,
                                    data).distinct()
    products = post_filter_products(request, category, products, data)
    products = cache_product_things(request, products)
    products = sort_products(request, category, products, data)
    context["page_size"] = data.get("limit", 12)
    context["products"] = products

    if "supplier" in data:
        context["supplier"] = data.get("supplier")

    return context
Exemplo n.º 4
0
    def get_context_data(self, **kwargs):
        context = super(CategoryView, self).get_context_data(**kwargs)
        category = self.object
        data = self.request.GET
        context["form"] = form = ProductListForm(
            request=self.request, shop=self.request.shop, category=category, data=data)
        form.full_clean()
        data = form.cleaned_data
        if "sort" in form.fields and not data.get("sort"):
            # Use first choice by default
            data["sort"] = form.fields["sort"].widget.choices[0][0]

        # TODO: Check if context cache can be utilized here
        products = Product.objects.listed(
            customer=self.request.customer,
            shop=self.request.shop
        ).filter(
            shop_products__shop=self.request.shop,
            variation_parent__isnull=True,
            shop_products__categories=category
        ).filter(get_query_filters(self.request, category, data=data))
        products = get_product_queryset(products, self.request, category, data).distinct()

        products = post_filter_products(self.request, category, products, data)
        products = cache_product_things(self.request, products)
        products = sort_products(self.request, category, products, data)
        context["page_size"] = data.get("limit", 12)
        context["products"] = products
        return context
Exemplo n.º 5
0
    def get_context_data(self, **kwargs):
        context = super(CategoryView, self).get_context_data(**kwargs)
        category = self.object
        data = self.request.GET
        context["form"] = form = ProductListForm(request=self.request,
                                                 shop=self.request.shop,
                                                 category=category,
                                                 data=data)
        form.full_clean()
        data = form.cleaned_data
        if "sort" in form.fields and not data.get("sort"):
            # Use first choice by default
            data["sort"] = form.fields["sort"].widget.choices[0][0]

        products = Product.objects.listed(
            customer=self.request.customer, shop=self.request.shop).filter(
                shop_products__shop=self.request.shop,
                variation_parent__isnull=True,
                shop_products__categories=category).filter(
                    get_query_filters(self.request, category, data=data))
        products = get_product_queryset(products, self.request, category,
                                        data).distinct()

        products = post_filter_products(self.request, category, products, data)
        products = cache_product_things(self.request, products)
        products = sort_products(self.request, category, products, data)
        context["page_size"] = data.get("limit", 12)
        context["products"] = products
        return context
Exemplo n.º 6
0
 def get_queryset(self):
     if not self.form.is_valid():
         return Product.objects.none()
     data = self.form.cleaned_data
     if not (data and data.get("q")):  # pragma: no cover
         return Product.objects.none()
     products = Product.objects.filter(get_query_filters(self.request, None, data=data))
     return get_product_queryset(products, self.request, None, data)
Exemplo n.º 7
0
 def get_queryset(self):
     if not self.form.is_valid():
         return Product.objects.none()
     data = self.form.cleaned_data
     if not (data and data.get("q")):  # pragma: no cover
         return Product.objects.none()
     filters = get_query_filters(self.request, None, data=data)
     products = Product.objects.filter(filters).select_related(
         'manufacturer', 'primary_image', 'tax_class', 'type'
     ).prefetch_related(
         'translations', 'shop_products'
     )
     return get_product_queryset(products, self.request, None, data)
Exemplo n.º 8
0
def test_get_sorts_and_filters(rf):
    context = get_jinja_context()

    supplier = get_default_supplier()
    shop = get_default_shop()
    product1 = create_product("product1", shop, supplier, 10)
    product2 = create_product("product2", shop, supplier, 20)

    request = apply_request_middleware(rf.get("/"))
    queryset = Product.objects.all()

    cache.clear()
    for time in range(2):
        products = list(get_product_queryset(queryset, request, None, {}))
        assert len(products) == 2
        assert product1 in products
        assert product2 in products
Exemplo n.º 9
0
def test_get_sorts_and_filters(rf):
    context = get_jinja_context()

    supplier = get_default_supplier()
    shop = get_default_shop()
    product1 = create_product("product1", shop, supplier, 10)
    product2 = create_product("product2", shop, supplier, 20)

    request = apply_request_middleware(rf.get("/"))
    queryset = Product.objects.all()

    cache.clear()
    for time in range(2):
        products = list(get_product_queryset(queryset, request, None, {}))
        assert len(products) == 2
        assert product1 in products
        assert product2 in products
Exemplo n.º 10
0
    def get_queryset(self):
        if not self.form.is_valid():
            return Product.objects.none()
        data = self.form.cleaned_data
        if not (data and data.get("q")):  # pragma: no cover
            return Product.objects.none()

        catalog = ProductCatalog(
            ProductCatalogContext(
                shop=self.request.shop,
                user=self.request.user,
                contact=getattr(self.request, "customer", None),
                purchasable_only=True,
                visibility=ShopProductVisibility.SEARCHABLE,
            ))
        products = catalog.get_products_queryset().filter(
            Q(mode__in=ProductMode.get_parent_modes()),
            Q(get_query_filters(self.request, None, data=data)))
        products = get_product_queryset(products, self.request, None, data)
        products = sort_products(self.request, None, products, data)
        return products.distinct()
Exemplo n.º 11
0
def get_context_data(context, request, category, product_filters):
    data = request.GET
    context["form"] = form = ProductListForm(request=request,
                                             shop=request.shop,
                                             category=category,
                                             data=data)
    form.full_clean()
    data = form.cleaned_data
    if "sort" in form.fields and not data.get("sort"):
        # Use first choice by default
        data["sort"] = form.fields["sort"].widget.choices[0][0]

    catalog = ProductCatalog(
        ProductCatalogContext(
            shop=request.shop,
            user=getattr(request, "user", None),
            contact=getattr(request, "customer", None),
            purchasable_only=True,
            supplier=data.get("supplier") or None,
            visibility=ShopProductVisibility.LISTED,
        ))
    products = (catalog.get_products_queryset().filter(
        **product_filters).filter(
            get_query_filters(request, category, data=data)).select_related(
                "primary_image", "sales_unit",
                "tax_class").prefetch_related("translations",
                                              "sales_unit__translations"))
    products = get_product_queryset(products, request, category, data)
    products = sort_products(request, category, products, data).distinct()
    context["page_size"] = data.get("limit", 12)
    context["products"] = products

    if "supplier" in data:
        context["supplier"] = data.get("supplier")

    return context