def suppress(obj_a_supp): valid = messagebox.askyesno(title="Supprimer", message="Êtes-vous sur de vouloir supprimer ?") if valid: ok_client, C_obj = controls_entry.verif_name(obj_a_supp, clients.lst_client) ok_medoc, M_obj = controls_entry.verif_name(obj_a_supp, medicaments.lst_medic) if ok_client: var_text.set(f"Le client {C_obj.name} à été supprimé") controls_entry.log( (f"SUPPRESSION OK : Le client {C_obj.name} a été supprimé ")) ind = lst_client_name.index(C_obj.name) lst_client_name.pop(ind) ind_Obj = clients.lst_client.index(C_obj) clients.lst_client.pop(ind_Obj) controls_entry.save(*file_clients) win_edit_client() elif ok_medoc: var_text.set(f"Le medicament {M_obj.name} à été supprimé") controls_entry.log( f"SUPPRESSION OK : Le medicament {M_obj.name} a été supprimé") ind = lst_medoc_name.index(M_obj.name) lst_medoc_name.pop(ind) indObj = medicaments.lst_medic.index(M_obj) medicaments.lst_medic.pop(indObj) controls_entry.save(*file_medicaments) win_edit_medoc() else: messagebox.showerror(title="ERREUR", message="La sélection est vide")
def nouveau_medoc(): """ Fonction de création d'un nouveau medicament : - Recupère les Entry "new_medoc_name_entry", "new_medoc_quantity_entry" & "new_medoc_price_entry" - Lance un block try pour vérification avec des raise pour la vérification de la bonne valeur du prix et stock - Envoi le nom en controle pour vérification de la non existence du medicament - Ajout le medicament a la liste - Renseigne les logs du traitement Ok ou Erreur - Lance la fonction de sauvegarde dans le fichier medicaments.data en byte - Fini en vidant les champs """ nom = new_medoc_name_entry.get() price = new_medoc_price_entry.get() stock = new_medoc_quantity_entry.get() try: price = float(price) stock = int(stock) nom = nom.lower() if stock < 0: raise ValueError if price < 0: raise TypeError ok, ko = controls_entry.verif_name(nom, medicaments.lst_medic) assert ok == False medoc = medicaments.Medicaments(nom, price, stock) medicaments.lst_medic.append(medoc) lst_medoc_name.append(medoc.name) controls_entry.log( f"ENREGISTREMENT OK : {medoc.name} : prix - {medoc.price} / stock - {medoc.stock}" ) controls_entry.save(*file_medicaments) var_text.set( f"Le medicament \"{medoc.name}\" a bien été créé. Son stock est de {medoc.stock} au prix unitaire de {medoc.price}" ) except ValueError: messagebox.showerror( title="Erreur", message="La valeur du stock ne peut être négative") controls_entry.log( f"ERREUR : {stock} - La valeur ne peut pas être négative") except TypeError: messagebox.showwarning(title="Alerte", message="Le prix ne peut être a négatif") controls_entry.log( f"ERREUR : {price} - La valeur ne peut pas être négative") except AssertionError: messagebox.showwarning(title="Alerte", message="Le medicament existe deja !") controls_entry.log(f"ERREUR : {nom} existe deja") finally: new_medoc_name_entry.delete(0, tkinter.END) new_medoc_price_entry.delete(0, tkinter.END) new_medoc_quantity_entry.delete(0, tkinter.END)
def achat(self, medoc, quantite): ok = 0 for med in medicaments.lst_medic: if med.name == medoc: if med.stock == 0: controls_entry.log( "ERREUR : Il n'y a plus de medicament en stock") ok = 2 return ok elif med.stock < quantite: controls_entry.log( "ERREUR : La quantité demandé n'est pas disponible") ok = 1 return ok else: price = int(med._price) self._credits -= price * quantite med._stock -= quantite controls_entry.save("clients", lst_client) controls_entry.save("medicaments", medicaments.lst_medic)
def add_stock(): """" Fonction d'approvisionnement du stock d'un medicament Selectionner le medicaments a approvisionner Choisir la quantité a ajouté Utilise le setter de la prop stock de la classe Medicament """ medoc_name = win_add_stock_medoc_cbbox.get() stock_add = int(win_add_stock_nb_spbox.get()) ok, medoc = controls_entry.verif_name(medoc_name, medicaments.lst_medic) medoc.stock = stock_add controls_entry.save(*file_medicaments) var_text.set(f"Le stock de {medoc.name} est de {medoc.stock}") controls_entry.log( f"OK : Ajout de {stock_add} boite(s) de {medoc.name}. Nouveau stock : {medoc.stock}" ) win_add_stock_medoc_cbbox.delete(0, tkinter.END) win_add_stock_nb_spbox.delete(0, tkinter.END)
def inv_client(): """ Fonction inventoriant le(s) client(s) et renvoyant l'information dans la console - Si le champ est vide : Tous les clients et leurs crédits sont renvoyés dans la console ainsi que tout les medicaments leurs stocks et leurs prix a l'unité - Si le champ est remplit : - Vérifie que le client ou le medicaments existe - Renvoi dans la console le client ou le medicament mentionné uniquement """ entry_search = inv_entry.get() if entry_search != "": ok_client, client = controls_entry.verif_name(entry_search, clients.lst_client) ok_medoc, medoc = controls_entry.verif_name(entry_search, medicaments.lst_medic) if ok_client: var_text.set( f"Le client {client.name} possède un crédit de {client.credits}" ) controls_entry.log( f"OK : Le client {client.name} possède un crédit de {client.credits}" ) elif ok_medoc: var_text.set( f"{medoc.name} : le stock est de {medoc.stock} au prix unitaire de {medoc.price}" ) controls_entry.log( f"OK : {medoc.name} : le stock est de {medoc.stock} au prix unitaire de {medoc.price}" ) else: var_text.set( f"le client ou le medicaments \"{entry_search}\" n'existe pas") controls_entry.log( f"ERREUR : le client ou le medicaments \"{entry_search}\" n'existe pas" ) else: var_transit = "" var_transit += f"\n------------------------ Clients -----------------------\n\n" for client in clients.lst_client: var_transit += f"Le client {client.name} possède un crédit de {client.credits}\n" var_transit += f"\n---------------------- Medicaments ---------------------\n\n" for medoc in medicaments.lst_medic: var_transit += f"{medoc.name} : le stock est de {medoc.stock} au prix unitaire de {medoc.price}\n" var_text.set(var_transit) controls_entry.log("OK : Inventaire OK")
def buy_medoc(): """Fonction d'activation d'achat Recupère les valeurs "Combobox" & "entry" du formulaire Controle avec block try la valeur "Quantity" log des evenements et retour console utilisateur Execute la fonction vérif name avec retour de l'obj client si trouvé Execute la méthode "achat" de la classe Clients. """ #TODO : Historique d'achat medoc_name = win_buy_name_medoc_cbbox.get() client_name = win_buy_name_client_cbbox.get() medoc_quantity = win_buy_quantity_medoc_entry.get() try: medoc_quantity = int(medoc_quantity) assert medoc_quantity > 0 ok, client = controls_entry.verif_name(client_name, clients.lst_client) old_credit = client.credits ok = client.achat(medoc_name, medoc_quantity) if ok == 2: var_text.set("ERREUR : Il n'y a plus de medicament en stock") elif ok == 1: var_text.set("ERREUR : La quantité demandé n'est pas disponible") else: var_text.set( f"Achat effectué : {client.name} a acheté {medoc_quantity} boîte(s) de {medoc_name}. \nLe nouveau solde client est de {client.credits}" ) controls_entry.log( f"OK : {client.name} a acheté {medoc_quantity} de {medoc_name}\n Ancien solde : {old_credit}€\n Nouveau solde : {client.credits}" ) except ValueError: messagebox.showerror(title="Erreur", message="Valeur quantité invalide") controls_entry.log(f"ERREUR : Valeur invalide") except AssertionError: messagebox.showerror(title="Valeur invalide", message="La quantité doit être supérieur a 0") controls_entry.log( f"ERREUR : \"{medoc_quantity}\" doit être supérieur a 0") finally: win_buy_name_medoc_cbbox.delete(0, tkinter.END) win_buy_name_client_cbbox.delete(0, tkinter.END) win_buy_quantity_medoc_entry.delete(0, tkinter.END)
def nouveau_client(): """ Fonction de création d'un nouveau client : - Recupère les Entry "new_client_name_entry" & "new_client_credit_entry" - Lance un block try pour vérification - Envoi le nom en controle pour vérification de la non existence du client - Ajout le client a la liste - Renseigne les logs du traitement Ok ou Erreur - Lance la fonction de sauvegarde dans le fichier clients.data en byte - Fini en vidant les champs """ nom = new_client_name_entry.get() credit = new_client_credit_entry.get() try: credit = float(credit) nom = nom.lower() ok, ko = controls_entry.verif_name(nom, clients.lst_client) assert ok == False client = clients.Clients(nom, credit) clients.lst_client.append(client) lst_client_name.append(client.name) controls_entry.log( f"ENREGISTREMENT OK : {client.name} : {client.credits}") controls_entry.save(*file_clients) var_text.set( f"Le client {client.name} a bien été créé. Son crédit est de {client.credits}" ) except ValueError: messagebox.showerror(title="Erreur", message="Valeur invalide") controls_entry.log( f"ERREUR : {credit} la valeur entré n'est pas valide") except AssertionError: messagebox.showwarning(title="Alerte", message="Le client existe deja !") controls_entry.log(f"ERREUR : {nom} existe deja") finally: new_client_name_entry.delete(0, tkinter.END) new_client_credit_entry.delete(0, tkinter.END)
def _setPrice(self, new_price): self._price = new_price controls_entry.log(f"INFO : le nouveau montant unitaire du medicament {self._name} est de {self._price} ")
def _setName(self, new_name): controls_entry.log(f"INFO : Le nouveau nom du medicament {self._name} est {new_name}") self._name = new_name.lower()
def _setCredits(self, add_credits): if add_credits > 0: self._credits += add_credits controls_entry.log( f"INFO : Le nouveau crédit du client {self._name} est de {self._credits}" )