Ejemplo n.º 1
0
class SearchView(ListView):
    form_class = ProductListForm
    template_name = "shuup/simple_search/search.jinja"
    model = Product
    context_object_name = "products"

    def dispatch(self, request, *args, **kwargs):
        self.form = ProductListForm(
            request=self.request, shop=self.request.shop, category=None, data=self.request.GET)
        return super(SearchView, self).dispatch(request, *args, **kwargs)

    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)

    def get_context_data(self, **kwargs):
        context = super(SearchView, self).get_context_data(**kwargs)
        context["form"] = self.form
        products = context["products"]
        if products:
            data = self.form.cleaned_data
            products = post_filter_products(self.request, None, products, data)
            products = cache_product_things(self.request, products)
            products = sort_products(self.request, None, products, data)
            products = [p for p in products if is_visible({"request": self.request}, p)]
            context["products"] = products
        context["no_results"] = (self.form.is_valid() and not products)
        return context
Ejemplo n.º 2
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
Ejemplo 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
Ejemplo 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]

        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
Ejemplo n.º 5
0
class SearchView(ListView):
    form_class = ProductListForm
    template_name = "shuup/simple_search/search.jinja"
    model = Product
    context_object_name = "products"

    def dispatch(self, request, *args, **kwargs):
        self.form = ProductListForm(request=self.request,
                                    shop=self.request.shop,
                                    category=None,
                                    data=self.request.GET)
        return super(SearchView, self).dispatch(request, *args, **kwargs)

    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()

    def get_context_data(self, **kwargs):
        context = super(SearchView, self).get_context_data(**kwargs)
        context["form"] = self.form
        products = context["products"]
        context["no_results"] = self.form.is_valid() and not products.exists()
        return context
Ejemplo n.º 6
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
Ejemplo n.º 7
0
 def dispatch(self, request, *args, **kwargs):
     self.form = ProductListForm(request=self.request,
                                 shop=self.request.shop,
                                 category=None,
                                 data=self.request.GET)
     return super(SearchView, self).dispatch(request, *args, **kwargs)
Ejemplo n.º 8
0
 def dispatch(self, request, *args, **kwargs):
     self.form = ProductListForm(
         request=self.request, shop=self.request.shop, category=None, data=self.request.GET)
     return super(SearchView, self).dispatch(request, *args, **kwargs)