From abd2b9b8188d05bb3078e4ebc72976c68d341508 Mon Sep 17 00:00:00 2001 From: Alejandro Mantecon Rodriguez Date: Mon, 17 Nov 2025 19:01:24 +0100 Subject: [PATCH 1/3] feat: buscador nuevas direcciones y buscador funcional --- essenza/essenza/urls.py | 4 ++-- essenza/product/urls.py | 1 + essenza/product/views.py | 26 ++++++++++++++++++++++++++ essenza/templates/base.html | 6 ++++-- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/essenza/essenza/urls.py b/essenza/essenza/urls.py index 2390f45..4f381fc 100644 --- a/essenza/essenza/urls.py +++ b/essenza/essenza/urls.py @@ -12,8 +12,8 @@ path("admin/", admin.site.urls), path("product/", include("product.urls")), path("", DashboardView.as_view(), name="dashboard"), - path("catalogo/", CatalogView.as_view(), name="catalog"), - path("catalogo//", CatalogDetailView.as_view(), name="catalog_detail"), + path("catalog/", CatalogView.as_view(), name="catalog"), + path("catalog//", CatalogDetailView.as_view(), name="catalog_detail"), ] if settings.DEBUG: diff --git a/essenza/product/urls.py b/essenza/product/urls.py index 83d25b7..7d75e6e 100644 --- a/essenza/product/urls.py +++ b/essenza/product/urls.py @@ -6,6 +6,7 @@ urlpatterns = [ path("stock/", views.StockView.as_view(), name="stock"), + path('search/', views.SearchView.as_view(), name='product_search'), path('', views.ProductListView.as_view(), name='product_list'), path('create/', views.ProductCreateView.as_view(), name='product_create'), path('/', views.ProductDetailView.as_view(), name='product_detail'), diff --git a/essenza/product/views.py b/essenza/product/views.py index 28474ab..4c89635 100644 --- a/essenza/product/views.py +++ b/essenza/product/views.py @@ -187,3 +187,29 @@ class CatalogDetailView(View): def get(self, request, pk): product = get_object_or_404(Product, pk=pk, is_active=True) return render(request, self.template_name, {"product": product}) + + +class SearchView(View): + """Search products by name. Uses GET parameter `q`. + + - For anonymous or regular users, only searches active products. + - For staff/admin, searches all products. + Renders `product/catalog.html` with `products` and `query` in context. + """ + template_name = "product/catalog.html" + + def get(self, request): + q = request.GET.get("q", "").strip() + if request.user.is_authenticated and ( + request.user.is_staff or request.user.role == "admin" + ): + qs = Product.objects.all() + else: + qs = Product.objects.filter(is_active=True) + + if q: + products = qs.filter(name__icontains=q) + else: + products = qs + + return render(request, self.template_name, {"products": products, "query": q}) diff --git a/essenza/templates/base.html b/essenza/templates/base.html index 81e3c78..7fda1f6 100644 --- a/essenza/templates/base.html +++ b/essenza/templates/base.html @@ -240,7 +240,7 @@