adding filter in stock display

This commit is contained in:
Mylloon 2021-11-26 13:18:12 +01:00
parent 8e1fcad80c
commit 04d886e54f

49
main.py
View file

@ -203,13 +203,49 @@ class GesMag:
stock = LabelFrame(self.f, text="Stock")
stock.grid(column=0, row=1, sticky='n', padx=5)
def __affichageTableau(stockListe: list, parent: Frame, page: int = 1):
"""Fonction qui va actualiser le tableau avec une page donnée."""
# Variables pour les filtres du tableau
stockDisponibleVerif = IntVar(stock) # controle si on affiche que les éléments en stocks ou non
# Cache un certain type de produit
fruitsLegumesVerif = IntVar(stock)
boulangerieVerif = IntVar(stock)
boucheriePoissonnerieVerif = IntVar(stock)
entretienVerif = IntVar(stock)
def __affichageTableau(parent: Frame, page: int = 1):
"""Fonction qui va actualiser le tableau avec une page donnée (par défaut affiche la première page)."""
# On supprime et refais la frame qui va stocker notre tableau
parent.destroy()
parent = Frame(stock)
parent.grid(column=0, row=1, columnspan=6)
# Filtre pour le tableau
filtres = Frame(stock) # Morceau qui va contenir nos checkbutton
ecartFiltre = 10 # écart entre les champs des filtres
Label(filtres, text="Filtre", font=self.font).grid(column=0, row=0) # titre
Checkbutton(filtres, text="Stock disponible\nuniquement", variable=stockDisponibleVerif, command=lambda: __affichageTableau(parent)).grid(sticky='w', pady=ecartFiltre)
Checkbutton(filtres, text="Cacher les\nfruits & légumes", variable=fruitsLegumesVerif, command=lambda: __affichageTableau(parent)).grid(sticky='w', pady=ecartFiltre)
Checkbutton(filtres, text="Cacher les produits de\nla boulangerie", variable=boulangerieVerif, command=lambda: __affichageTableau(parent)).grid(sticky='w', pady=ecartFiltre)
Checkbutton(filtres, text="Cacher les produits de\nla boucherie\net poissonnerie", variable=boucheriePoissonnerieVerif, command=lambda: __affichageTableau(parent)).grid(sticky='w')
Checkbutton(filtres, text="Cacher les produits\nd'entretien", variable=entretienVerif, command=lambda: __affichageTableau(parent)).grid(sticky='w', pady=ecartFiltre)
filtres.grid(column=7, row=1, sticky='w')
stockListe = Stock().listeStocks() # stock récupéré de la base de données
for i in range(0, len(stockListe)): # on retire les éléments plus présent dans la liste
if stockDisponibleVerif.get() == 1 and stockListe[i]["quantite"] < 1:
stockListe[i] = None
elif fruitsLegumesVerif.get() == 1 and stockListe[i]["type"] == "fruits legumes":
stockListe[i] = None
elif boulangerieVerif.get() == 1 and stockListe[i]["type"] == "boulangerie":
stockListe[i] = None
elif boucheriePoissonnerieVerif.get() == 1 and stockListe[i]["type"] == "boucherie poissonnerie":
stockListe[i] = None
elif entretienVerif.get() == 1 and stockListe[i]["type"] == "entretien":
stockListe[i] = None
# Supprime toutes les valeurs `None` de la liste
stockListe = list(filter(None, stockListe))
ecart = 10 # écart entre les champs
elementsParPage = 10 # on définit combien d'élément une page peut afficher au maximum
@ -257,20 +293,19 @@ class GesMag:
Label(parent, text=f"Page {page}/{pageMax}").grid(column=2, row=i, columnspan=2)
# Boutons
precedent = Button(parent, text="Page précédente", command=lambda: __affichageTableau(stockListe, parent, page - 1))
precedent = Button(parent, text="Page précédente", command=lambda: __affichageTableau(parent, page - 1))
precedent.grid(column=0, row=i, columnspan=2, sticky='w')
suivant = Button(parent, text="Page suivante", command=lambda: __affichageTableau(stockListe, parent, page + 1))
suivant = Button(parent, text="Page suivante", command=lambda: __affichageTableau(parent, page + 1))
suivant.grid(column=4, row=i, columnspan=2, sticky='e')
if page == 1: # si on est a la première page on désactive le boutton précédent
precedent.config(state="disabled")
if page == pageMax: # si on est a la dernière page on désactive le boutton suivant
suivant.config(state="disabled")
else:
Label(parent, text="Il n'y a rien en stock").grid(column=0, row=0, columnspan=6)
Label(parent, text="Il n'y a rien en stock\nEssayez de réduire les critères dans le filtre.").grid(column=0, row=0, columnspan=6)
elementsEnStock = Stock().listeStocks() # stock récupéré de la base de données
tableau = Frame(stock)
__affichageTableau(elementsEnStock, tableau)
__affichageTableau(tableau) # affichage du tableau
# Partie affichage du ticket de caisse
ticket = LabelFrame(self.f, text="Ticket de caisse")