From 2c8189d651b8472eb77f76d0f11c3e20f7e4036a Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 21 Nov 2021 11:52:35 +0100 Subject: [PATCH] adding user removal option --- main.py | 73 +++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index e3bb19d..6c2d17c 100644 --- a/main.py +++ b/main.py @@ -287,7 +287,7 @@ class GesMag: adresse.get(), int(postal.get()), # pas besoin de gérer d'erreur lors du cast car on a vérifié avant que c'était bien une suite de chiffre ) - __ajouterUtilisateursListe() # met à jour la liste + __ajouterUtilisateursListe(listeUtilisateurs) # met à jour la liste # Champs de saisie # Nom d'utilisateurs @@ -341,8 +341,37 @@ class GesMag: """Permet de supprimer un utilisateur existant, manager (`metier = 0`) et caissier (`metier = 1`).""" enfant = Toplevel(self.f) # cf. l'explication dans `__ajouterUtilisateur` enfant.title(f"Retirer un {'manager' if metier == 0 else 'caissier'}") - self.dimensionsFenetre(enfant, 300, 180) - Button(enfant, text="Quitter", command=enfant.destroy).grid(sticky='w') + + # 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.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 + # On ajoute nos utilisateurs à notre liste + __ajouterUtilisateursListe(listeUtilisateurs_retirer, metier) + listeUtilisateurs_retirer.grid(column=0, row=1) + # On affiche l'utilisateur quand on double-clique dessus + + def ___suppressionUtilisateur(): + """Supprime l'utilisateur actuellement sélectionné dans la liste""" + element = listeUtilisateurs_retirer.curselection() + if len(element) == 0: # si aucun élément n'est selectionné + messagebox.showwarning("Attention", "Aucun utilisateur n'a été selectionné.") + else: + utilisateur = listeUtilisateurs_retirer.get(listeUtilisateurs_retirer.curselection()[0]).split('(')[0][:-1] + reponse = messagebox.askyesno("Confirmation", f"Voulez vous supprimer {utilisateur} ?") + if reponse == True: + Utilisateurs().suppressionUtilisateurs(utilisateur) + __ajouterUtilisateursListe(listeUtilisateurs_retirer) # met à jour la liste dans la fenêtre de suppression + __ajouterUtilisateursListe(listeUtilisateurs) # met à jour la liste dans l'interface principale + messagebox.showinfo("Information", f"Utilisateur {utilisateur} supprimé.") + + # Boutons + Button(enfant, text="Supprimer", command=___suppressionUtilisateur).grid(column=0, row=8, columnspan=3, sticky='w') + Button(enfant, text="Quitter", command=enfant.destroy).grid(column=0, row=8, columnspan=3, sticky='e') def __afficherInformationsUtilisateur(_): """Permet d'afficher les informations d'un utilisateur""" @@ -376,35 +405,39 @@ class GesMag: caissierVerif.set(1) # par défaut on affiche que les caissiers - def __ajouterUtilisateursListe(): + def __ajouterUtilisateursListe(liste: Listbox, force: int = None): """ Ajoute des utilisateurs à la liste du Manager. -> metier = 0 : manager uniquement -> metier = 1 : caissier uniquement -> metier = 2 : manager et caissier """ - listeUtilisateurs.delete(0, "end") # vidé la liste des utilisateurs - if managerVerif.get() == 1: - if caissierVerif.get() == 1: - metier = None # on affiche les 2 + liste.delete(0, "end") # vidé la liste des utilisateurs + if force: # si `force` n'est pas `None`, alors on force l'utilisation d'un métier + metier = force + else: # sinon on fait une vérification normale en fonction des filtres de l'interface manager + if managerVerif.get() == 1: + if caissierVerif.get() == 1: + metier = None # on affiche les 2 + else: + metier = 0 # on affiche seulement les managers else: - metier = 0 # on affiche seulement les managers - else: - metier = 1 # on affiche les caissiers - if caissierVerif.get() == 0: # rien est coché, on revient à la configuration par défaut (caissiers uniquement) - metier = 1 - caissierVerif.set(1) + metier = 1 # on affiche les caissiers + if caissierVerif.get() == 0: # rien est coché, on revient à la configuration par défaut (caissiers uniquement) + metier = 1 + caissierVerif.set(1) + if metier == None: # on ajoute tous les utilisateurs for idx, utilisateur in enumerate(Utilisateurs().listUtilisateurs()): - listeUtilisateurs.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") + liste.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") elif metier == 0: # on ajoute que les managers for idx, utilisateur in enumerate(Utilisateurs().listUtilisateurs()): if utilisateur[1] == metier: - listeUtilisateurs.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") + liste.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") elif metier == 1: # on ajoute que les caissiers for idx, utilisateur in enumerate(Utilisateurs().listUtilisateurs()): if utilisateur[1] == metier: - listeUtilisateurs.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") + liste.insert(idx, f"{utilisateur[0]} ({'manager' if utilisateur[1] == 0 else 'caissier'})") else: # ce cas est là au cas où mais n'est pas sensé être appellé raise NameError("Métier inconnu.") @@ -416,7 +449,7 @@ class GesMag: listeUtilisateurs = Listbox(self.f, width=25, height=4, yscrollcommand=scroll.set) scroll["command"] = listeUtilisateurs.yview # scroll à la verticale dans notre liste # On ajoute nos utilisateurs à notre liste - __ajouterUtilisateursListe() + __ajouterUtilisateursListe(listeUtilisateurs) listeUtilisateurs.grid(column=0, row=5) listeUtilisateurs.bind('', __afficherInformationsUtilisateur) # on affiche l'utilisateur quand on double-clique dessus @@ -424,8 +457,8 @@ class GesMag: Label(self.f, text="Filtre", font=self.font).grid(column=1, row=4, sticky='w', padx=10) # titre filtres = Frame(self.f) # Morceau qui va contenir nos checkbutton filtres.grid(column=1, row=4, rowspan=2, sticky='w') - Checkbutton(filtres, text="Manager", variable=managerVerif, command=__ajouterUtilisateursListe).grid(sticky='w') - Checkbutton(filtres, text="Caissier", variable=caissierVerif, command=__ajouterUtilisateursListe).grid(sticky='w') + Checkbutton(filtres, text="Manager", variable=managerVerif, command=lambda: __ajouterUtilisateursListe(listeUtilisateurs)).grid(sticky='w') + Checkbutton(filtres, text="Caissier", variable=caissierVerif, command=lambda: __ajouterUtilisateursListe(listeUtilisateurs)).grid(sticky='w') if __name__ == "__main__": """Application "GesMag" pour le module de Programmation d'interfaces (2021-2022)"""