Fix: Integration de la pagination dans le filtre de produit

This commit is contained in:
2026-09-18 12:54:44 +00:00
parent 165894c92b
commit 5813909eff
9 changed files with 169 additions and 116 deletions

View File

@@ -2,7 +2,7 @@
from django.shortcuts import render, redirect
from django.core.paginator import Paginator
from django.db.models import Sum
from django.db.models import Sum, Q
from authentification.models import Profile
from django.contrib.auth.decorators import login_required
@@ -90,9 +90,25 @@ def index(request):
La réponse HTTP contenant la page rendue.
"""
liste_produit = Produit.objects.all().order_by("-id")
product_name = request.GET.get("search", "")
categorie_name = request.GET.get("filterCategorie", "")
liste_categorie = Categorie.objects.all().order_by("categorie")
if product_name == "" and categorie_name == "":
liste_produit = Produit.objects.all().order_by("-id")
elif product_name != "" and categorie_name == "":
liste_produit = Produit.objects.filter(
Q(libelle__icontains=product_name)
).order_by("-id")
elif product_name == "" and categorie_name != "":
liste_produit = Produit.objects.filter(
Q(categorie=categorie_name)
).order_by("-id")
else:
liste_produit = Produit.objects.filter(
Q(categorie=categorie_name) & Q(libelle__icontains=product_name)
).order_by("-id")
liste_produit_finale = [
calcul_stock_produit(produit) for produit in liste_produit
]
@@ -172,7 +188,7 @@ def enregistrer_produit(request):
return redirect("gestion_produit:index")
@login_required
def detail_produit(request, id_produit):
def detail_produit(_request, id_produit):
"""Renvoyez les détails d'un produit spécifique au format JSON.
Parameters
@@ -422,6 +438,102 @@ def enregistrer_categorie(request):
return JsonResponse({"success": False})
return None
def filtrer_produit_par_categorie(request, id_categorie):
"""Filtrez les produits par catégorie et renvoyez-les au format JSON.
Parameters
----------
request : HttpRequest
La requête HTTP entrante.
id_categorie : int
L'ID de la catégorie pour laquelle filtrer les produits.
Returns
-------
JsonResponse
Réponse JSON contenant la liste des produits filtrés par catégorie.
"""
produits = Produit.objects.filter(categorie_id=id_categorie)
produits_filtres = [
{
"id": produit.id,
"libelle": produit.libelle,
"conditionnement": produit.conditionnement,
"quantite_stock": produit.quantite_stock,
"seuil_pre_rupture": produit.seuil_pre_rupture,
"image": produit.image.url if produit.image else "",
"appartient_logistique": request.user.groups.filter(name="Logistique").exists(),
}
for produit in produits
]
return JsonResponse(produits_filtres, safe=False)
def filtre_par_nom_produit(request):
"""Filtrez les produits par nom et renvoyez-les au format JSON.
Parameters
----------
request : HttpRequest
La requête HTTP entrante.
nom_produit : str
Le nom du produit pour lequel filtrer les produits.
Returns
-------
JsonResponse
Réponse JSON contenant la liste des produits filtrés par nom.
"""
nom_produit = request.GET.get("nom", "")
if nom_produit == "":
liste_produit = Produit.objects.all().order_by("-id")
else:
liste_produit = Produit.objects.filter(libelle__icontains=nom_produit).order_by("-id")
# -----------------------------------------------------------
liste_categorie = Categorie.objects.all().order_by("categorie")
liste_produit_finale = [
calcul_stock_produit(produit) for produit in liste_produit
]
pagination = Paginator(liste_produit_finale, 1)
page_number = request.GET.get("page")
page_obj = pagination.get_page(page_number)
return render(
request,
"gestion_produit/index.html",
{
"formulaireEnregistrementCategorie": EnregistrementCategorie,
"formulaireEnregistrementProduit": EnregistrementProduit,
"formulaireCommanderProduit": CommanderProduit,
"formulaireDemanderProduit": DemanderProduit,
"mes_demandes": gestion_affichage_demande(
request, option_validation_chef=None
),
"page_obj": page_obj,
"liste_categorie": liste_categorie,
},
)
# -----------------------------------------------------------
# produits_filtres = [
# {
# "id": produit.id,
# "libelle": produit.libelle,
# "conditionnement": produit.conditionnement,
# "quantite_stock": produit.quantite_stock,
# "seuil_pre_rupture": produit.seuil_pre_rupture,
# "image": produit.image.url if produit.image else "",
# "appartient_logistique": request.user.groups.filter(name="Logistique").exists(),
# }
# for produit in produits
# ]
# return JsonResponse(produits_filtres, safe=False)
@login_required
def recuperer_fournisseur_par_categorie(_request, id_produit):
"""Récupèrez les fournisseurs associés à la catégorie d'un produit donné.