예제 #1
0
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")
예제 #2
0
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)
예제 #3
0
 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)
예제 #4
0
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)
예제 #5
0
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")
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
 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} ")
예제 #9
0
 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()
예제 #10
0
 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}"
         )