diff --git a/main.py b/main.py index 390bd14..90a82f1 100644 --- a/main.py +++ b/main.py @@ -30,8 +30,10 @@ class GesMag: if len(motDPasse) < 8: # si le mot de passe est plus petit que 8 caractères return (False, "Un mot de passe doit faire 8 caractères minimum.") """ - Pour le regex, je réfléchie comme dans la fonction `self.connexion`. - J'utilises pas `match` parce que je suis plus à l'aise avec `sub`. + - Pour le regex, la fonction `sub` élimine tout ce qui est donné en fonction + du pattern renseigné, alors si la fonction `sub` renvoie pas exactement + la même chaîne de charactère alors c'est qu'il y avait un charactère interdit. + - J'utilises pas `match` parce que je suis plus à l'aise avec `sub`. """ if not sub(r"[A-Z]", '', motDPasse) != motDPasse: return (False, "Un mot de passe doit au moins contenir une lettre majuscule.") @@ -42,20 +44,27 @@ class GesMag: return (True,) # si aucun des tests précédents n'est valide, alors le mot de passe est valide + def utilisateurCorrect(self, utilisateur: str) -> tuple: + """Détermine si un nom d'utilisateur suit la politique du programme ou non.""" + """ + Pour le nom d'utilisateur on vérifie si le champs n'est pas vide + et si il y a bien que des lettres et des chiffres. + """ + if len(utilisateur) == 0: + return (False, "Utilisateur incorrect.") + if sub(r" *?[^\w\s]+", '', utilisateur) != utilisateur: + return (False, "Un nom d'utilisateur ne doit pas contenir de caractère spécial.") + return (True,) + def connexion(self, utilisateur: str, motDePasse: str): """Gère la connexion aux différentes interfaces de l'application.""" """ Vérification nom d'utilisateur / mot de passe correctement entré - -> Pour le nom d'utilisateur on vérifie si le champs n'est pas vide - et si il y a bien que des lettres et des chiffres (le regex élimine tout - ce qui n'est pas ça, alors si la fonction `sub` renvoie pas exactement - la même chaîne de charactère alors c'est qu'il y avait un charactère - interdit dans le nom d'utilisateur). - -> Pour le mot de passe on demande à la fonction `motDePasseCorrect` pour - éviter de faire tout les tests ici. + avec leurs fonctions respectives. """ - if len(utilisateur) == 0 or sub(r" *?[^\w\s]+", '', utilisateur) != utilisateur: - messagebox.showerror("Erreur", "Utilisateur incorrect.") + pseudoOk = self.utilisateurCorrect(utilisateur) + if not pseudoOk[0]: + messagebox.showerror("Erreur", pseudoOk[1]) return mdpOk = self.motDePasseCorrect(motDePasse) if not mdpOk[0]: @@ -166,13 +175,77 @@ class GesMag: def __ajouterUtilisateur(metier: int): """Permet de créer un nouvel utilisateur, manager (`metier = 0`) et caissier (`metier = 1`).""" - print(f"ajout d'un utilisateur (métier = {metier})") - # ouvrir un toplevel? + """ + L'enfant (`TopLevel`) dépend de la `Frame` et non du parent (`Tk`) + pour éviter de resté ouverte meme lorsque le manager se déconnecte. + """ + enfant = Toplevel(self.f) + enfant.title(f"Ajouter un {'manager' if metier == 0 else 'caissier'}") + self.dimensionsFenetre(enfant, 330, 220) + + def ___verification(): + """Vérifie si les champs renseignées sont valides.""" + # vérification pour le nom d'utilisateur + pass + # vérification pour le mot de passe + pass + # vérification pour le métier + pass + # vérification pour le nom + pass + # vérification pour le prénom + pass + # vérification pour la date de naissance + pass + # vérification pour l'adresse + pass + # vérification pour le code postal + pass + + # Champs + Label(enfant, text="Nom d'utilisateur :").grid(column=0, row=0, sticky='e') + pseudo = Entry(enfant) + pseudo.grid(column=1, row=0, sticky='w') + Label(enfant, text="Mot de passe :").grid(column=0, row=1, sticky='e') + passe = Entry(enfant) + passe.grid(column=1, row=1, sticky='w') + Label(enfant, text="Métier :").grid(column=0, row=2, sticky='e') + metier = Entry(enfant) + metier.grid(column=1, row=2, sticky='w') + Label(enfant, text="Nom :").grid(column=0, row=3, sticky='e') + nom = Entry(enfant) + nom.grid(column=1, row=3, sticky='w') + Label(enfant, text="Prénom :").grid(column=0, row=4, sticky='e') + prenom = Entry(enfant) + prenom.grid(column=1, row=4, sticky='w') + Label(enfant, text="Date de naissance :").grid(column=0, row=5, sticky='e') + naissance = Entry(enfant) + naissance.grid(column=1, row=5, sticky='w') + Label(enfant, text="Adresse").grid(column=0, row=6, sticky='e') + adresse = Entry(enfant) + adresse.grid(column=1, row=6, sticky='w') + Label(enfant, text="Code postal :").grid(column=0, row=7, sticky='e') + postal = Entry(enfant) + postal.grid(column=1, row=7, sticky='w') + + def ___viderChamps(): + """Vide tout les champs de leur contenu""" + # On récupère toutes les `Entry` de la fenêtre et on change leur contenu + for champ in [widget for type, widget in enfant.children.items() if "entry" in type]: + champ.delete(0, "end") + champ.update() + + # Boutons + Button(enfant, text="Valider", command=___verification).grid(column=0, row=8, columnspan=3, sticky='w') + Button(enfant, text="Vider les champs", command=___viderChamps).grid(column=0, row=8, columnspan=3) + Button(enfant, text="Quitter", command=enfant.destroy).grid(column=0, row=8, columnspan=3, sticky='e') def __retirerUtilisateur(metier: int): """Permet de supprimer un utilisateur existant, manager (`metier = 0`) et caissier (`metier = 1`).""" - print(f"retirer un utilisateur (métier = {metier})") - # ouvrir un toplevel? + 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') def __afficherInformationsUtilisateur(_): """Permet d'afficher les informations d'un utilisateur""" @@ -186,7 +259,7 @@ class GesMag: charactère avec [:-1] car c'est un espace. """ utilisateur = Utilisateurs().recuperationUtilisateur(pseudo=listeUtilisateurs.get(element[0]).split('(')[0][:-1]) - enfant = Toplevel(self.parent) + enfant = Toplevel(self.f) # cf. l'explication dans `__ajouterUtilisateur` enfant.title(f"{utilisateur['nom']} {utilisateur['prenom']}") self.dimensionsFenetre(enfant, 300, 180) utilisateur["metier"] = "Manager" if utilisateur["metier"] == 0 else "Caissier"