Adding stock display

This commit is contained in:
Mylloon 2021-11-25 18:01:05 +01:00
parent 78c91d1b7e
commit 5482c0d761
3 changed files with 93 additions and 8 deletions

BIN
img/defaut.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

88
main.py
View file

@ -1,6 +1,6 @@
import tkinter.messagebox as messagebox
from tkinter import IntVar, Checkbutton, LabelFrame, Scrollbar, Listbox, Entry, Button, Label, Frame, Tk, Toplevel
from tkinter import IntVar, Checkbutton, LabelFrame, PhotoImage, Scrollbar, Listbox, Entry, Button, Label, Frame, Tk, Toplevel
from re import sub
from users import Utilisateurs # import de mon fichier pour gérer la base de donnée
@ -198,11 +198,83 @@ class GesMag:
Label(self.f, text="Interface Caissier", font=(self.font[0], 20)).grid(column=0, row=0) # titre de l'interface
stock = LabelFrame(self.f, text="Stock") # partie affichage du stock
# Partie affichage du Stock
stock = LabelFrame(self.f, text="Stock")
stock.grid(column=0, row=1)
Label(stock, text="TODO").grid()
ticket = LabelFrame(self.f, text="Ticket de caisse") # partie affichage du ticket de caisse
def __affichageTableau(stockListe: list, parent: Frame, page: int = 1):
"""Fonction qui va actualiser le tableau avec une page donnée."""
# On supprime et refais la frame qui va stocker notre tableau
parent.destroy()
parent = Frame(stock)
parent.grid(column=0, row=1, columnspan=6)
ecart = 10 # écart entre les champs
elementsParPage = 10 # on définit combien d'élément une page peut afficher au maximum
pageMax = -(-len(stockListe) // elementsParPage) # on définit combien de page il y au maximum
if pageMax <= 1:
page = 1 # on force la page à être à 1 si il n'y a qu'une page, peut importe l'argument donnée à la fonction
limiteIndex = elementsParPage * page # on définit une limite pour ne pas afficher plus d'éléments qu'il n'en faut par page
if len(stockListe) > 0: # si stock non vide
# Définition des colonnes
Label(parent, text="ID").grid(column=0, row=0, padx=ecart)
Label(parent, text="Image").grid(column=1, row=0, padx=ecart)
Label(parent, text="Type").grid(column=2, row=0, padx=ecart)
Label(parent, text="Nom").grid(column=3, row=0, padx=ecart)
Label(parent, text="Quantité").grid(column=4, row=0, padx=ecart)
Label(parent, text="Prix unité (€)").grid(column=5, row=0, padx=ecart)
curseur = limiteIndex - elementsParPage # on commence à partir du curseur
i = 1 # on commence à 1 car il y a déjà le nom des colonnes en position 0
images = [] # liste qui va stocker nos images
for element in stockListe[curseur:limiteIndex]: # on ignore les éléments avant le curseur et après la limite
Label(parent, text=element["id"]).grid(column=0, row=i)
"""
L'idée est que on a une liste `images` qui permet de stocker toutes nos images
(c'est une limitation de tkinter que de garder nos images en mémoire)
Une fois ajouté à la liste, on l'affiche dans notre Label
"""
try: # on essaie d'ouvrir l'image
open(element["image_url"], "r")
images.append(PhotoImage(file = element["image_url"]))
except FileNotFoundError: # si l'image n'existe pas
images.append(PhotoImage(file = "img/defaut.gif"))
print(images[i - 1].name)
Label(parent, image=images[i - 1]).grid(column=1, row=i)
Label(parent, text=element["type"]).grid(column=2, row=i)
Label(parent, text=element["nom"]).grid(column=3, row=i)
Label(parent, text=element["quantite"]).grid(column=4, row=i)
Label(parent, text=element["prix"]).grid(column=5, row=i)
# Label(parent, text=element['type']).grid(column=0, row=i+2)
curseur += 1
i += 1
# Information sur la page actuelle
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.grid(column=0, row=i, columnspan=2)
suivant = Button(parent, text="Page suivante", command=lambda: __affichageTableau(stockListe, parent, page + 1))
suivant.grid(column=4, row=i, columnspan=2)
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)
elementsEnStock = Stock().listeStocks() # stock récupéré de la base de données
tableau = Frame(stock)
__affichageTableau(elementsEnStock, tableau)
# Partie affichage du ticket de caisse
ticket = LabelFrame(self.f, text="Ticket de caisse")
ticket.grid(column=1, row=1)
Label(ticket, text="TODO").grid()
@ -367,11 +439,11 @@ class GesMag:
# Liste des utilisateurs
Label(enfant, text=f"Liste des {'manager' if metier == 0 else 'caissier'}", font=self.font).grid(column=0, row=0) # titre
# On définit une barre pour pouvoir scroller dans la liste
scroll_retirer = Scrollbar(enfant, orient="vertical")
scroll_retirer = Scrollbar(enfant)
scroll_retirer.grid(column=1, row=1, sticky="nse")
# On définit notre liste et on la lie à notre `Scrollbar`
listeUtilisateurs_retirer = Listbox(enfant, width=25, height=4, yscrollcommand=scroll_retirer.set)
scroll_retirer["command"] = listeUtilisateurs_retirer.yview # scroll à la verticale dans notre liste
scroll_retirer.config(command=listeUtilisateurs_retirer.yview) # scroll à la verticale dans notre liste
# On ajoute nos utilisateurs à notre liste
__ajouterUtilisateursListe(listeUtilisateurs_retirer, metier)
listeUtilisateurs_retirer.grid(column=0, row=1)
@ -483,11 +555,11 @@ class GesMag:
Label(self.f, text="Liste des utilisateurs", font=self.font).grid(column=0, row=4) # titre
# On définit une barre pour pouvoir scroller dans la liste
scroll = Scrollbar(self.f, orient="vertical")
scroll = Scrollbar(self.f)
scroll.grid(column=0, row=5, sticky="nse")
# On définit notre liste et on la lie à notre `Scrollbar`
listeUtilisateurs = Listbox(self.f, width=25, height=4, yscrollcommand=scroll.set)
scroll["command"] = listeUtilisateurs.yview # scroll à la verticale dans notre liste
scroll.config(command=listeUtilisateurs.yview) # scroll à la verticale dans notre liste
# On ajoute nos utilisateurs à notre liste
__ajouterUtilisateursListe(listeUtilisateurs)
listeUtilisateurs.grid(column=0, row=5)

13
test.py Normal file
View file

@ -0,0 +1,13 @@
from tkinter import *
ws = Tk()
frame = Frame(ws)
x = Frame(frame)
imgs = []
for i in range(0, 10):
imgs.append(PhotoImage(file='img/defaut.gif'))
Label(x, image=imgs[i]).grid()
x.grid()
frame.grid()
ws.mainloop()