This repository has been archived on 2022-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
GesMag/stock.py

125 lines
5.4 KiB
Python

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.listeStocks()) == 0:
# Créer un dictionnaire d'éléments pour mieux voir ce que l'on ajoute à la base de donnée
defaut = {
"fruits legumes": [
("banane", "img/banane.gif"),
("orange", "img/orange.gif"),
("betterave", "img/betterave.gif"),
("carottes", "img/carottes.gif"),
("tomates", "img/tomates.gif"),
("citron", "img/citron.gif"),
("kiwi", "img/kiwi.gif"),
("clementine", "img/clementine.gif"),
("pomme", "img/pomme.gif"),
("avocat", "img/avocat.gif")
],
"boulangerie": [
("brownie", "img/brownie.gif"),
("baguette", "img/baguette.gif"),
("pain au chocolat", "img/pain_au_chocolat.gif"),
("croissant", "img/croissant.gif"),
("macaron", "img/macaron.gif"),
("millefeuille", "img/millefeuille.gif"),
("paris-brest", "img/paris-brest.gif"),
("opera", "img/opera.gif"),
("fraisier", "img/fraisier.gif"),
("eclair", "img/eclair.gif")
],
"boucherie poissnerie": [
("saucisson", "img/saucisson.gif"),
("côte de boeuf", "img/cote_de_boeuf.gif"),
("langue de boeuf", "img/langue_de_boeuf.gif"),
("collier de boeuf", "img/collier_de_boeuf.gif"),
("entrecote", "img/entrecote.gif"),
("cabillaud", "img/cabillaud.gif"),
("saumon", "img/saumon.gif"),
("colin", "img/colin.gif"),
("bar", "img/bar.gif"),
("dorade", "img/dorade.gif")
],
"entretien": [
("nettoyant air comprimé", "img/nettoyant_air_comprimé.gif"),
("nettoyage anti-bactérien", "img/nettoyage_anti-bactérien.gif"),
("nettoyant pour écran", "img/nettoyant_pour_ecran.gif"),
("nettoyant pour lunettes", "img/nettoyant_pour_lunettes.gif"),
("pioche", "img/pioche.gif"),
("pelle", "img/pelle.gif"),
("lampe torche", "img/lampe_torche.gif"),
("gants", "img/gants.gif"),
("éponge", "img/eponge.gif"),
("essuie-tout", "img/essuie-tout.gif")
]
}
# Ajoute le dictionnaire précédemment créer à la base de donnée avec un prix et une quantité aléatoire
for type in defaut:
for element in defaut[type]:
self.ajoutStock(type, element[0], randint(0, 10), round(uniform(2., 30.), 2), element[1])
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 listeStocks(self) -> list:
"""Retourne la liste des éléments en stock sous forme de dictionnaire."""
recuperation = [
"id",
"type",
"nom",
"quantite",
"prix",
"image_url"
]
requete = f"""
SELECT {", ".join(recuperation)} FROM stocks
"""
return [dict(zip(recuperation, element)) for element in self.affichageResultat(self.requete(requete))]
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