def post(self, request):
        form = SearchForm(request.POST)

        if form.is_valid():
            product_name = form.cleaned_data['product_name']
            searched_product = Product.objects.filter(name__icontains=product_name).first()
            saved_product = []

            if searched_product:
                substitutes_products = Product.objects.filter(categories=searched_product.categories.first()).exclude(id=searched_product.id).order_by('nutri_score')[:12]
                
                if request.user.is_authenticated:
                    if ProductUsers.objects.filter(product=searched_product, user=request.user).exists():
                        saved_product.append(searched_product)

                    for product in substitutes_products:
                        if ProductUsers.objects.filter(product=product, user=request.user).exists():
                            saved_product.append(product)
            else:
                substitutes_products = None    

            self.context['title'] = 'produit trouvé pour la recherche : "' + product_name + '"'
            self.context['searched_product'] = searched_product
            self.context['products'] = substitutes_products
            self.context['saved_product'] = saved_product

            return render(request, self.template_name, self.context)
        else:
            self.context['errors'] = form.errors.items()
            return render(request, 'products/homepage.html', self.context)
Example #2
0
def products(request):
    cart = view_cart(request)
    products = Product.objects.all().order_by("-id")
    form = ProductsForm()
    search_form = SearchForm()
    if request.method == "GET":
        search_form = SearchForm(request.GET)
        if search_form.is_valid():
            classification = search_form.cleaned_data['classification']
            keyword = search_form.cleaned_data['keyword']
            price = search_form.cleaned_data['price']
            if not classification:
                classification = 'all'
            if not price:
                price = 'dont care'
            kwargs = {}
            if keyword:
                kwargs['title__icontains'] = keyword
            if classification != 'all':
                kwargs['classification'] = classification
            if price != 'dont care':
                if price == '<500':
                    kwargs['price__lte'] = 500
                elif price == '500-2000':
                    kwargs['price__gte'] = 500
                    kwargs['price__lte'] = 2000
                elif price == '>2000':
                    kwargs['price__gte'] = 2000
            products = Product.objects.filter(**kwargs)

    if request.method == "POST":
        form = ProductsForm(request.POST)
        if form.is_valid():
            quantity = form.cleaned_data["quantity"]
            product_id = request.POST.get("product_id")
            add_item_to_cart(request, product_id=product_id, quantity=quantity)
            return HttpResponseRedirect(reverse("home"))

    paginator = Paginator(products, 5)
    page = request.GET.get('page', 1)
    last_page = paginator.num_pages
    paginator_gen_list = gen_page_list(int(page), paginator.num_pages)
    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator.num_pages)

    return render(
        request, "home.html", {
            "products": products,
            "cart": cart,
            "form": form,
            "last_page": last_page,
            "paginator_gen_list": paginator_gen_list,
            "search_form": search_form
        })
Example #3
0
def product_search(request):
    context=dict()
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            context['category']=Category.objects.all()
            search_query=form.cleaned_data['search_query']
            context['products']=Product.objects.filter(title__icontains=search_query)
            return render(request, 'products/products_search.html', context)

    return HttpResponseRedirect('/')
Example #4
0
def product_search_view(request):
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            categories = Category.objects.all()
            search_query = form.cleaned_data['search_query']
            products = Product.objects.filter(name__icontains=search_query)
            context = {
                'categories': categories,
                'products': products,
            }
            template = "products/products_search.html"
            return render(request, template, context)
Example #5
0
def search_result(request):
    form = SearchForm(request.POST)

    if form.is_valid():
        #trae el formulario sin guardarlo
        resultSearch = form.save(commit=False)
        queryResult = resultSearch.title
        products = Product.objects.filter(title__icontains=queryResult)
        return render(request, "products/search.html", {
            'products': products,
            'queryResult': queryResult
        })
    else:
        return HttpResponseNotFound("<h1>Your search is incorrect</h1>")
Example #6
0
def home_page(request):
    sliders = Slider.objects.filter(active=1)
    top_level_cats = Category.objects.filter(parent__isnull=True, active=1).select_related('parent')
    search_form = SearchForm()
    try:
        area_rug = Category.objects.get(slug__contains="area-rugs")
        area_rugs = Category.objects.filter(parent_id=area_rug.id, active=1).select_related('parent')
    except:
        area_rugs = []
    
    try:
        bed_sheet = Category.objects.get(slug__contains="bed-sheets")
        bed_sheets = Product.objects.filter(category_id=bed_sheet.id)[:10].select_related('category')
    except:
        bed_sheets = []

    try:
        towel = Category.objects.get(slug__contains="towel")
        towels = Product.objects.filter(category_id=towel.id)[0:10].select_related('category')
    except:
        towels= []
    
    cart_product_form = CartAddProductForm()
    context ={
        'area_rugs': area_rugs,
        'bed_sheets': bed_sheets,
        'towels':towels,
        'top_level_cats': top_level_cats,
        'cart_product_form':cart_product_form,
        'search_form':search_form,
        'sliders':sliders,
    }
    
    return render(request, "home_page.html", context)
Example #7
0
class ProductDetails(View):
    context = {"search_form": SearchForm()}

    def get(self, request, product_id):
        """Return the product-details template if product exists. 
        Return 404 otherwise"""
        searched_product = get_object_or_404(Product, id=product_id)
        product_nutriments = searched_product.nutriments.all()
        clean_nutriments = []

        for nutriment in product_nutriments:
            clean_nutriments.append({
                "name":
                settings.NUTRIMENTS[nutriment.name]["name"],
                "unit":
                nutriment.unit,
                "quantity":
                ProductNutriments.objects.filter(
                    product=searched_product,
                    nutriment=nutriment).first().quantity,
            })

        self.context["title"] = searched_product.name
        self.context["searched_product"] = searched_product
        self.context["product_nutriments"] = clean_nutriments

        return render(request, "products/product-details.html", self.context)
Example #8
0
class UserSaveProduct(View):
    context = {"search_form": SearchForm()}

    def get(self, request, product_id):
        """Create/Delete a relation user-product to save/unsave a product 
        for authenticated user and return appropriate JSON response"""
        product_to_save = Product.objects.get(id=product_id)

        if not ProductUsers.objects.filter(product=product_to_save,
                                           user=request.user).exists():
            product_user_relation = ProductUsers(product=product_to_save,
                                                 user=request.user)
            product_user_relation.save()
            data = {
                "saved": True,
                "product_name": product_to_save.name,
                "response": "ajouté à vos favoris",
            }
        else:
            ProductUsers.objects.filter(product=product_to_save,
                                        user=request.user).delete()
            data = {
                "saved": False,
                "product_name": product_to_save.name,
                "response": "retiré de vos favoris",
            }

        return JsonResponse(data)
Example #9
0
class LegalNotice(View):
    template_name = "products/legal-notice.html"
    context = {"search_form": SearchForm(), "title": "Mentions légales"}

    def get(self, request):
        """Return the homepage template"""
        return render(request, self.template_name, self.context)
Example #10
0
class UserCreate(View):
    template_name = 'products/user-create.html'
    context = {
        'title': 'Création utilisateur',
        'search_form': SearchForm()
    }

    def get(self, request):
        """Return the signup template"""
        form = UserCreateForm()
        self.context['form'] = form
        return render(request, self.template_name, self.context)

    def post(self, request):
        """Process the UserCreate form, redirect and log the user if it is
        valid, return the signup template otherwise"""
        form = UserCreateForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
        else :
            self.context['form'] = form
            self.context['errors'] = form.errors.items()
            return render(request, self.template_name, self.context)
Example #11
0
class UserLogin(LoginView):
    template_name = 'products/user-login.html'
    authentication_form = LoginForm
    extra_context = {
        'title': 'Connexion utilisateur',
        'search_form': SearchForm()
    }
Example #12
0
class HomeView(View):
    template_name = "products/homepage.html"
    context = {"search_form": SearchForm()}

    def get(self, request):
        """Return the homepage template"""
        return render(request, self.template_name, self.context)
Example #13
0
class UserSaveProduct(View):
    context = {
        'search_form': SearchForm()
    }
    
    def get(self, request, product_id):
        product_to_save = Product.objects.get(id=product_id)

        if not ProductUsers.objects.filter(product=product_to_save, user=request.user).exists():
            product_user_relation = ProductUsers(product=product_to_save, user=request.user)
            product_user_relation.save()
            data = {
                'saved': True,
                'product_name': product_to_save.name,
                'response': "ajouté à vos favoris"
            }
        else:
            ProductUsers.objects.filter(product=product_to_save, user=request.user).delete()
            data = {
                'saved': False,
                'product_name': product_to_save.name,
                'response': "retiré de vos favoris"
            }

        return JsonResponse(data)
        
Example #14
0
class UserLogin(LoginView):
    template_name = "products/user-login.html"
    authentication_form = LoginForm
    extra_context = {
        "title": "Connexion utilisateur",
        "search_form": SearchForm()
    }
Example #15
0
class UserCreate(View):
    template_name = "products/user-create.html"
    context = {"title": "Création utilisateur", "search_form": SearchForm()}

    def get(self, request):
        """Return the signup template"""
        form = UserCreateForm()
        self.context["form"] = form
        return render(request, self.template_name, self.context)

    def post(self, request):
        """Process the UserCreate form, redirect and log the user if it is
        valid, return the signup template otherwise"""
        form = UserCreateForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get("username")
            raw_password = form.cleaned_data.get("password1")
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect("home")
        else:
            self.context["form"] = form
            self.context["errors"] = form.errors.items()
            return render(request, self.template_name, self.context)
Example #16
0
class HomeView(View):
    template_name = 'products/homepage.html'
    context = {
        'search_form': SearchForm()
    }

    def get(self, request):
        return render(request, self.template_name, self.context)
Example #17
0
    def post(self, request, **kwargs):
        """Search product in database from HTML POST"""

        search_form = SearchForm(
            request.POST,
            auto_id=False
        )

        if search_form.is_valid():
            search = search_form.cleaned_data['product_search']
            check_product = CheckProduct(search)
            if check_product.product is not None:
                return redirect(f'/products/product/{search}/')
            else:
                return redirect(f'/products/search/{search}/')
        else:
            return redirect('/')
Example #18
0
 def get_context_data(self, *args, **kwargs):
     search_form = SearchForm()
     products = Product.objects.all()
     category = ProduCategory.objects.all()
     return {
         'products': products,
         'search_form': search_form,
         'categories': category
     }
Example #19
0
class UserView(View):
    template_name = "products/user-details.html"
    context = {"search_form": SearchForm()}

    def get(self, request):
        """Return the user-details template"""
        self.context["title"] = "Salut " + request.user.first_name + " !"
        self.context["user"] = request.user
        return render(request, self.template_name, self.context)
Example #20
0
    def get_context_data(self, **kwargs):

        context = super().get_context_data(**kwargs)
        search = kwargs['search']
        context['search_form'] = SearchForm(
            initial={'product_search': search},
            auto_id=False
        )
        return context
Example #21
0
class UserView(View):
    template_name = 'products/user-details.html'
    context = {
        'search_form': SearchForm()
    }

    def get(self, request):
        self.context['title'] = 'Salut ' + request.user.first_name + ' !'
        self.context['user'] = request.user
        return render(request, self.template_name, self.context)
Example #22
0
def sub_list(request):
    """Display the list of substitute for one selected product."""
    if request.method == "POST":
        form = SearchForm(request.POST)
        if form.is_valid():
            (
                substitute,
                selected_product,
            ) = ProductManager.search_from_user_input(form.cleaned_data)
            return render(
                request,
                "products/sub_list.html",
                {"product": substitute, "searched": selected_product},
            )
        else:
            print("form is not valid !")
            raise Http404
    else:
        form = SearchForm()
    return render(request, "products/sub_list.html", {"form": form})
Example #23
0
    def post(self, request):
        """Process the SearchForm form, return the result-search template 
        if form is valid, render homepage template with errors context otherwise"""
        form = SearchForm(request.POST)

        if form.is_valid():
            product_name = form.cleaned_data["product_name"]
            searched_product = Product.objects.filter(
                name__icontains=product_name).first()
            saved_product = []

            if searched_product:
                substitutes_products = (Product.objects.filter(
                    categories=searched_product.categories.first()).exclude(
                        id=searched_product.id).order_by("nutri_score")[:12])

                if request.user.is_authenticated:
                    if ProductUsers.objects.filter(product=searched_product,
                                                   user=request.user).exists():
                        saved_product.append(searched_product)

                    for product in substitutes_products:
                        if ProductUsers.objects.filter(
                                product=product, user=request.user).exists():
                            saved_product.append(product)
            else:
                substitutes_products = None

            self.context["title"] = ('produit trouvé pour la recherche : "' +
                                     product_name + '"')
            self.context["searched_product"] = searched_product
            self.context["products"] = substitutes_products
            self.context["saved_product"] = saved_product

            return render(request, self.template_name, self.context)
        else:
            self.context["errors"] = form.errors.items()
            return render(request, "products/homepage.html", self.context)
Example #24
0
class UserResults(View):
    template_name = "products/result-user.html"
    context = {"search_form": SearchForm()}

    def get(self, request):
        """Return the result-user template"""
        product_users_list = ProductUsers.objects.filter(user=request.user)
        product_list = []

        for queryset in product_users_list:
            product_list.append(queryset.product)

        self.context["title"] = "Salut " + request.user.first_name + " !"
        self.context["products"] = product_list
        return render(request, self.template_name, self.context)
Example #25
0
class UserResults(View):
    template_name = 'products/result-user.html'
    context = {
        'search_form': SearchForm()
    }

    def get(self, request):
        product_users_list = ProductUsers.objects.filter(user=request.user)
        product_list = []

        for queryset in product_users_list:
            product_list.append(queryset.product)

        self.context['title'] = 'Salut ' + request.user.first_name + ' !'
        self.context['products'] = product_list
        return render(request, self.template_name, self.context)
Example #26
0
class ProductDetails(View):
    context = {
        'search_form': SearchForm()
    }

    def get(self, request, product_id):
        searched_product = get_object_or_404(Product, id=product_id)
        product_nutriments = searched_product.nutriments.all()
        clean_nutriments = []

        for nutriment in product_nutriments:
            clean_nutriments.append({
                "name": settings.NUTRIMENTS[nutriment.name]['name'],
                "unit": nutriment.unit,
                "quantity": ProductNutriments.objects.filter(product=searched_product, nutriment=nutriment).first().quantity
            }) 

        self.context['title'] = searched_product.name
        self.context['searched_product'] = searched_product
        self.context['product_nutriments'] = clean_nutriments

        return render(request, 'products/product-details.html', self.context)
Example #27
0
    def get_context_data(self, **kwargs):


        context = super().get_context_data(**kwargs)
        product_code = kwargs['search']
        context['search_form'] = SearchForm(
            initial={'product_search': product_code},
            auto_id=False
        )

        check_product = CheckProduct(product_code)
        if check_product.product is not None:
            context['product'] = check_product.product
            context['brand'], context['brands'] = check_product.get_brands()
            context['stores'] = check_product.get_stores()
            context['categories'] = check_product.get_categories()
            context['alternatives'] = check_product.get_alternatives()

        if self.request.user.is_authenticated:
            user_products = UserProducts(self.request.user)
            context['user_products'] = user_products.get_user_products()

        return context
Example #28
0
def index(request):
    """Display the site index."""
    return render(request, "main/index.html", {"form": SearchForm()})
Example #29
0
 def test_max_length(self):
     form = SearchForm()
     self.assertEquals(form.fields["product"].max_length, 100)
Example #30
0
 def test_random_data(self):
     user_input = "jambon"
     form = SearchForm(data={"product": user_input})
     self.assertTrue(form.is_valid())