From a278b6bada992a8cc11c65f4741b395ee8e5cf36 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Wed, 24 Nov 2021 17:53:17 +0100 Subject: [PATCH] Adding stock table in the db --- main.py | 4 +- stock.py | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 stock.py diff --git a/main.py b/main.py index 9461e7a..aa3936e 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ from tkinter import IntVar, Checkbutton, LabelFrame, Scrollbar, Listbox, Entry, from re import sub from users import Utilisateurs # import de mon fichier pour gérer la base de donnée +from stock import Stock class GesMag: """Programme de Gestion d'une caise de magasin.""" @@ -16,7 +17,8 @@ class GesMag: def demarrer(self) -> None: """Lance le programme GesMag.""" self.font = ("Comfortaa", 14) # police par défaut - Utilisateurs().creationTable() # on créer la base de donnée si elle n'existe pas déjà + Utilisateurs().creationTable() # on créer la table utilisateurs si elle n'existe pas déjà + Stock().creationTable() # on créer la table du stock si elle n'existe pas déjà self._interfaceConnexion() # on créer la variable `self.f` qui est la frame a affiché self.f.grid() # on affiche la frame diff --git a/stock.py b/stock.py new file mode 100644 index 0000000..51164d9 --- /dev/null +++ b/stock.py @@ -0,0 +1,141 @@ +from random import randint, uniform + +from db import BaseDeDonnees + +class Stock(BaseDeDonnees): + """Gère une table "stock" pour une base de donnée donné.""" + def __init__(self): + super().__init__(r"db.sqlite3") + + def creationTable(self) -> None: + """Créer la table qui stocker les stocks.""" + requete = """ + CREATE TABLE IF NOT EXISTS stocks ( + id INTEGER PRIMARY KEY, + type TEXT, + nom TEXT, + quantite INTEGER, + prix REAL, + image_url TEXT + ); + """ + self.requete(requete) + # Ajout d'un stock par défaut si aucun stock n'existe dans la base de donnée + if len(self.listStocks()) == 0: + defaut = { + "fruits legumes": [ + "banane", + "orange", + "betterave", + "carottes", + "tomates", + "citron", + "kiwi", + "clementine", + "pomme", + "avocat" + ], + "boulangerie": [ + "brownie", + "baguette", + "pain au chocolat", + "croissant", + "macaron", + "millefeuille", + "paris-brest", + "opera", + "fraisier", + "eclair" + ], + "boucherie poissnerie": [ + "saucisson", + "côte de boeuf", + "langue de boeuf", + "collier de boeuf", + "entrecote", + "cabillaud", + "saumon", + "colin", + "bar", + "dorade" + ], + "entretien": [ + "nettoyant air comprimé", + "nettoyage anti-bactérien", + "nettoyant pour écran", + "nettoyant pour lunettes", + "pioche", + "pelle", + "lampe torche", + "gants", + "éponge", + "essuie-tout" + ] + } + for type in defaut: + for element in defaut[type]: + self.ajoutStock(type, element, randint(0, 10), round(uniform(2., 30.), 2), "noimage") + + def ajoutStock(self, type: str, nom: str, quantite: int, prix: float, imageURL: str) -> list: + """Ajoute un élément dans le stock et retourne l'ID de ce dernier.""" + requete = """ + INSERT INTO stocks ( + type, nom, quantite, prix, image_url + ) VALUES ( + ?, ?, ?, ?, ? + ); + """ + self.requete(requete, [type.lower(), nom.lower(), quantite, prix, imageURL]) + return self.affichageResultat(self.requete("SELECT last_insert_rowid();")) + + def suppressionStocks(self, id: int) -> None: + """Supprime un stock.""" + requete = """ + DELETE FROM stocks + WHERE id = ? + """ + self.requete(requete, id) + + def listStocks(self) -> list: + """Retourne la liste des éléments en stock.""" + requete = """ + SELECT id, type, nom, quantite, prix, image_url FROM stocks + """ + return self.affichageResultat(self.requete(requete)) + + def recuperationStock(self, id: int = None, nom: str = None) -> dict: + """Retourne les informations d'un stock grâce à son ID ou son nom (ID en priorité).""" + recuperation = [ + "id", + "type", + "nom", + "quantite", + "prix", + "image_url" + ] + if not id: # si la variable `id` n'est pas définie + if not nom: # si la variable `nom` n'est pas définie + raise ValueError # Aucun élément renseigné + else: # si seul un nom est renseigné, c'est ce qu'on va utilisé + requete = f""" + SELECT {", ".join(recuperation)} FROM stocks + WHERE pseudo = ? + """ + stock = nom + else: # si un id est renseigné, c'est ce qu'on va utilisé + requete = f""" + SELECT {", ".join(recuperation)} FROM stocks + WHERE id = ? + """ + stock = id + return self.affichageResultatDictionnaire(recuperation, self.requete(requete, stock)) + + def stockExistant(self, stock: str) -> bool: + """Vérifie si l"stock donnée existe déjà dans la base de donnée.""" + requete = """ + SELECT EXISTS ( + SELECT 1 FROM stocks + WHERE name = ? + ) + """ + return True if self.affichageResultat(self.requete(requete, stock.lower()))[0][0] == 1 else False