"""Vuews pour la gestion des fournisseurs.""" from django.shortcuts import render, redirect from gestion_produit.models import Fournisseur, Categorie, Commander from django.http import JsonResponse from django.contrib.auth.decorators import login_required from .forms import FournisseurForm @login_required(login_url="login") def index(request): """Gérez la vue index de la gestion des fournisseurs. Gère l'affichage de la liste des fournisseurs dans un tableau à l'aide de tabulatorjs et l'enregistrement d'un nouveau fournisseur. Parameters ---------- request : HttpRequest La requête HTTP entrante. Returns ------- HttpResponse La réponse HTTP avec le formulaire de fournisseur. """ if request.method == "POST": form = FournisseurForm(request.POST, request.FILES) if form.is_valid(): form.save() form = FournisseurForm() return render( request, "gestion_fournisseur/index.html", {"form": form, "listeCategorie": Categorie.objects.all()}, ) @login_required(login_url="login") def liste_fournisseurs(request): """Renvoyez la liste des fournisseurs au format JSON. Parameters ---------- request : HttpRequest La requête HTTP entrante. Returns ------- JsonResponse La réponse JSON contenant la liste des fournisseurs. """ fournisseurs = Fournisseur.objects.all().order_by("-id") data = [ { "id": f.id, "nom_entreprise": f.nom_entreprise, "representant": f.nom_prenom_representant, "fonction": f.fonction, "telephone": f.telephone, "email": f.email, "note": f.note, } for f in fournisseurs ] return JsonResponse(data, safe=False) @login_required(login_url="login") def liste_fournisseur_categorie(request): """Renvoyez la liste des fournisseurs par catégorie de produit fourni au format JSON. Parameters ---------- request : HttpRequest La requête HTTP entrante. c : int L'identifiant de la catégorie de produit. Returns ------- JsonResponse La réponse JSON contenant la liste des fournisseurs filtrés par catégorie. """ categorie = Categorie.objects.get(id=request.GET["c"]) fournisseur_categorie = Fournisseur.objects.filter(categorie=categorie) data = [ { "id": f.id, "nom_entreprise": f.nom_entreprise, "representant": f.nom_prenom_representant, "fonction": f.fonction, "telephone": f.telephone, "email": f.email, "note": f.note, } for f in fournisseur_categorie ] return JsonResponse(data, safe=False) @login_required(login_url="login") def details_fournisseur(request, id_fournisseur): """Affichez les détails d'un fournisseur spécifique. Parameters ---------- request : HttpRequest La requête HTTP entrante. id_fournisseur : int L'identifiant du fournisseur. Returns ------- HttpResponse La réponse HTTP avec les détails du fournisseur. """ fournisseur = Fournisseur.objects.get(id=id_fournisseur) fournisseur_form = FournisseurForm(instance=fournisseur) return render( request, "gestion_fournisseur/details_fournisseur.html", { "fournisseur": fournisseur, "fournisseurForm": fournisseur_form, "id_fournisseur": id_fournisseur, }, ) @login_required(login_url="login") def mise_a_jour_fournisseur(request, id_fournisseur): """Mettez à jour les informations d'un fournisseur spécifique. Parameters ---------- request : HttpRequest La requête HTTP entrante. id_fournisseur : int L'identifiant du fournisseur. Returns ------- HttpResponse La réponse HTTP redirigeant vers les détails du fournisseur. """ fournisseur = Fournisseur.objects.get(id=id_fournisseur) if request.method == "POST": form = FournisseurForm( request.POST, request.FILES, instance=fournisseur ) if form.is_valid(): form.save() messages.success(request, "Fournisseur mis à jour avec succès.") else: messages.error(request, "Erreur lors de la mise à jour du fournisseur.") return redirect( "gestion_fournisseur:details_fournisseur", id_fournisseur=id_fournisseur ) def liste_livraison_fournisseur(request, id_fournisseur): # noqa: ARG001 """Renvoyez la liste des livraisons d'un fournisseur au format JSON. Parameters ---------- request : HttpRequest La requête HTTP entrante. id_fournisseur : int L'identifiant du fournisseur. Returns ------- JsonResponse La réponse JSON contenant la liste des livraisons du fournisseur. """ commande_fournisseur = [ { "date": c.date_livraison, "produit": c.produit.libelle, "prix_achat": c.prix_achat, "quantite": c.quantite_commander, "montant_total": c.quantite_commander * c.prix_achat, "date_livraison": c.date_livraison, "statut": c.livrer, } for c in Commander.objects.filter(fournisseur__id=id_fournisseur) ] return JsonResponse(commande_fournisseur, safe=False)